strSql := 'insert into MachineList'
          + '(S,MachId,Ip,MachineType,SystemVersion,Port,Username,Password,ScriptUpPath) '
          + 'values(0,'''+num+''','''','''','''',23,'''','''','''')';  self.qryData.Active := false;
  self.qryData.SQL.Clear;
  self.qryData.SQL.Add(i_sql);
  self.qryData.ExecSQL;
 
我用以上语句向access数据库插入数据,总是报 'insert into 的语句的语法错误。' ,但是我调试时把sql语句取出来如下insert into MachineList(S,MachId,Ip,MachineType,SystemVersion,Port,Username,Password,ScriptUpPath) values(0,'I2','','','',23,'','','')我把它放到access中运行却没有问题,请问各位大侠这是为什么?怎样才能用sql语句正确的向access中插入数据啊?

解决方案 »

  1.   

    应该是用到了保留字,解决方法:
    password 用 [password] 替代
      

  2.   

    Access数据库数据表设计主键了吗
      

  3.   

    我忘了说,num是个字符串变量,值为'I2'
      

  4.   

    MachId为主键,但num我是这样获取的strSql := 'select *from MachineList where MachineType = '''+i_MachType+'''';
      frmdb.OpenSql(strSql,frmdb.qryMach);
      rCount := frmdb.qryMach.RecordCount;
      num := copy(i_MachType,1,1)+inttostr(rCount+1);所以不会出现主键不唯一,
      

  5.   

    哦,太感谢ysai 了,试了下果然是用到了保留字,password用[password]替代就可以了,随便再问一下,还有哪些是保留字啊?
      

  6.   

    在MS Jet SQL参考里面有保留字和关键字列表
    好象是在一个叫JETSQL40.CHM的帮助文件里