大家帮个忙,看下下面的数据库操作哪里有问题?当程序执行到ExecSQL时,报错说:insert into语句的语法错误。请大家帮看下,谢谢!
with DM.ADOQ2 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('insert into BOOK(BOOKNUM, BOOKNAME, BOOKWRITER, TIME, PLACE) Values(:a, :b, :c, :d, :e)');
        Parameters.ParamByName('a').Value := num + 1;
        Parameters.ParamByName('b').Value := Trim(Edit1.Text);
        Parameters.ParamByName('c').Value := Trim(Edit2.Text);
        Parameters.ParamByName('d').Value := DateTimePicker1.DateTime;
        Parameters.ParamByName('e').Value := Trim(Edit4.Text);
        ExecSQL;
      end;其中num := DM.ADOQ2.FieldByName('BOOKNUM').AsInteger;

解决方案 »

  1.   

    num   :=   DM.ADOQ2.FieldByName( "BOOKNUM ").AsInteger;你写在哪里了?
    如果是在dsInsert状态下的话,num应该是个空值
    空值+1肯定是要报错的.
      

  2.   

    我是先对表中的BOOKNUM做了降序排列,然后对num赋的值,后面跟着就是数据插入操作!
      

  3.   

    把你的插入语句在查询分析器里测试下,看语句是否有问题.
    insert into BOOK(BOOKNUM,BOOKNAME,BOOKWRITER,TIME,PLACE) Values(:a,:b,:c,:d,:e)
    然后再看其他...
      

  4.   

    num值应该没有问题,我单独试了下,num是有值的。我觉得是time的问题,不知道以下这种插入方式对不对?
    Parameters.ParamByName( "d ").Value   :=   DateTimePicker1.DateTime; 后来,我又用了以下方式,可以查询,但不能插入、修改。
    ADOQuery1.Parameters.ParamByName('d').Value := FormatDateTime('yyyy-mm-dd', DateTimePicker1.Date);
    请各位大虾指点!
      

  5.   

    最简单的排错方便是打开SQL的事件查看器,看客户端传过来的插入SQL语句是什么,然后拿到查询分析器下运行就知道什么错误了。
      

  6.   

    谢谢5楼,把TIME换后用以下语句可以实现插入。
    ADOQuery1.Parameters.ParamByName( "d ").Value   :=   FormatDateTime( "yyyy-mm-dd ",   DateTimePicker1.Date); 但是,在DBGrid中不能显示[TIME]中的内容又是什么原因呢?