过程:
procedure runsql(sqlstr:string);
begin
  msgbox(sqlstr,1);
  data.ADOCom1.CommandText:=sqlstr;
  try
    data.ADOCom1.Execute;
  except
    on e:Exception do
      msgbox('执行指令错误'+#13+'错误:'+e.Message,1);
  end;
end;procedure log_write(str:string);                       //记录日志文件
begin
 sqlstr:='Insert into log(id,rq,sj,yh,memo)values('''+''','''+formatdatetime('yyyy-mm-dd',date)+ ''','''+formatdatetime('hh:mm:ss',time)+''','''+user_name+''','''+str+''')';
end;
数据库表Log是一个很简单的表:
字段及类型如下:
字段名称   数据类型
id         自动编号
rq         文本
sj         文本
yh         文本
memo       文本错误提示是:INSERT INTO 语句的语法错误.

解决方案 »

  1.   

    log怀疑为关键字
    用如下方式试试
    Insert into [log](id,rq,sj,yh,memo)values
      

  2.   

    id是自动编号,你insert语句还操作它干什么
    Insert into log(id,rq,sj,yh,memo)values  //里面的id应该去掉,也不要插入值
      

  3.   

    你既然用了字段编号就不应该赋值,而且SQL脚本实在糟糕,说白了,SQL语句本身就是错误的
    这样sqlstr:='Insert into log(rq,sj,yh,memo) values('+QuotedStr(formatdatetime('yyyy-mm-dd',date))+','+QuotedStr(formatdatetime('hh:mm:ss',time))+','+QuotedStr(user_name)+','+QuotedStr(str)+')';
      

  4.   

    试过了,还是不行.
    数据库是ACCESS,请大家帮忙看看.
      

  5.   

    终于发现了问题,哎..原来那么简单.
    不知道memo是不是ACCESS中的保留关键字,所以之前的测试都是失败的,将memo这个字段
    用其它单词替代就可以了!谢谢楼上朋友的帮忙.谢谢
      

  6.   

    呵呵,我正要说呢,我在以前就出现过一次和你一样的问题,
     我把SQL语句拷贝到,SQL 2000 里,发现,MEMO是关键字.经显眼的颜色表示,
     才知道它是关键字的.
      

  7.   

    你写的SQL确实很乱,哈哈。第一个字段是自动分配的,就不用写了。
    还有这句话其实没有什么错误,只不过你的表字段有问题,MEMO是关键字,
    最好不要用做字段名,请更改这个字段名,如下:
    sqlstr:= 'Insert into log(rq,sj,yh,me) values('
                                +quotedStr(formatdatetime('yyyy-mm-dd',date))+','
                                +quotedStr(formatdatetime('hh:mm:ss',time))+','
                                +quotedStr(user_name)+','+quotedStr(str)+')';