我的一个小ms使用tadoquery,以及access2003,连接采用oledb jet4.0   然后在sql添加语句执行数据库操作。
现在我对某个表操作,执行查询操作都正常,但是执行插入语句,提示‘insert into’附近有语法错误。但是我使用断点跟踪,把那个要插入的语句抓出来,放到access中表查询,直接执行却是可以成功插入表中的。我的语句如下:     // 构造szSql语句. 这个szSql语句放入到access中查询,已经是正确的。 
      ADOQueryForReportEdit.Active := false;
      ADOQueryForReportEdit.SQL.Clear;
      ADOQueryForReportEdit.SQL.Add(szSql);
      ADOQueryForReportEdit.ExecSQL; //这句执行错误,提示:insert into附近语法错误
我实在找不出错在哪里。  

解决方案 »

  1.   

    说了跟不说一样,把你的szSql贴出来看看。。很大的可能是参数问题。
      

  2.   

    szSql没有逻辑错误的前提下看看是不是你在szSql中用了access中的保留字?
      

  3.   

    这是我的sql语句
    Insert into RepairInfoTable(RegeditTime, Device, Count, SoldDate, Client, SoldPresent, RepairForWhat, Others) values( '2006-7-15','双飞燕101' ,1 ,'2006-7-8' ,'边锋电子' ,'TCP56555555' ,'按键不灵活' ,'' ); 数据表中除了这些字段之外,还有一个Idx字段,是自增型的!
      

  4.   

    怎么用参数来做? 我不明白。 
    这个sql语句就是我从各个edit里面获取道德参数然后形成的语句。
      

  5.   

    有没有msn ,请加我。 [email protected]
      

  6.   

    好的,期待中。     别的表的插入都好好的。 就是这个表,插入语句抓到access中query是正常的,而adoquery.execsql却总提示语法出错。
      

  7.   

    以添加 RegeditTime, Device为例
      with ADOQueryForReportEdit do
       begin
         Close;
         SQL.Clear;
         sql.Add('Insert into RepairInfoTable(RegeditTime, Device)') ;
         sql.Add('values(:#rt,:#device)');
         Parameters.ParamByName('#rt').Value := '2006-7-15';
         Parameters.ParamByName('#device').Value := '双飞燕101';
         ExecSQL;
       end;
      

  8.   

    多谢, 我换成这种方式看看。   但是原先的insert into照样不晓得why!
      

  9.   

    不行,这种方法解决不了,还是老样子的错误: Insert into附近有语法错误。是不是我表中用到了access关键字。
      

  10.   

    我不知道表中的哪个字段 Idx,RegeditTime, Device, Count, SoldDate, Client, SoldPresent, RepairForWhat, Others 用到了access或者delphi的关键字 ,现在我每个字段都变成1为后缀(Idx -〉Idx1,RegeditTime -〉RegeditTime1),问题解决了!  .郁闷死。 谢谢上面的各位热情。