我的程序是Delphi+ADO+Access 2000,我用一个AdoQuery对ACCESS中建的一个UserType进行数据更新:
   代码如下:
            close;
            sql.Clear ;
            sql.Clear ;
            sql.Text:='insert usertype (id,name,memo)'
                      +'values ("'+uppercase(E_ID.Text)
                      +'","'+E_Type.Text
                      +'","'+E_memo.Text +'")';
            try
               execsql;
            except
               close;
               self.Close ;
            end;另一个是Update的也是对同一个表的内容进行更新.           但执行时,总提示Insert Into 语法错误.Update也一样,
           但如使用Delete就没有问题.表中的字段都是文本型的.

解决方案 »

  1.   

    //如果ID是字符型
                close;
                sql.Clear ;
                sql.Clear ;
                sql.Text:='insert usertype (id,name,memo)'
                          +'values ('''+uppercase(E_ID.Text)
                          +''','''+E_Type.Text
                          +''','''+E_memo.Text +''')';
                try
                   execsql;
                except
                   close;
                   self.Close ;
                end;
    //如果ID是整型
                close;
                sql.Clear ;
                sql.Clear ;
                sql.Text:='insert usertype (id,name,memo)'
                          +'values ('+uppercase(E_ID.Text)
                          +','''+E_Type.Text
                          +''','''+E_memo.Text +''')';
                try
                   execsql;
                except
                   close;
                   self.Close ;
                end;
      

  2.   

    Access中使用的语法与SQL Server是有出入的,你可以找一个帮助
    看看,详细介绍在Access的语法是如何的,(不好意思,我忘记了
    那个帮助文件的名称)
    你将上面的写成Insert Into看行不行,好像Access中只能使用Insert Into
    而不能使用Insert示例,看对你有没有帮助
    commandText := 'Update S_System Set 显示= 0 where CtrlName=''Sa006''';CommandText :=
          'Insert into Sb06_DCheck(序号,部门代码,年月日,年月日1,请假时间,单号) '+
          '  values('+ADS_Master.FieldByName('序号').Asstring+
          ',"'+ADS_Master.FieldByName('部门代码').Asstring+'"'+
          ',#'+FormatDateTime('yyyy-mm-dd',ADS_Master.FieldByName('开始时间').ASDateTime)+'#'+
          ',#'+FormatDateTime('yyyy-mm-dd',ADS_Master.FieldByName('结束时间').ASDateTime)+'#'+
          ','+ADS_Master.FieldByName('请假时数').Asstring+'*60'+
          ',"'+ADS_Master.FieldByName('请假单号').Asstring+'")';
      

  3.   

    sql.Text:='insert usertype (id,name,memo)'
                                            ^^^这里是不是缺少空格   
                          +'values ("'+uppercase(E_ID.Text)
                          +'","'+E_Type.Text
                          +'","'+E_memo.Text +'")';还有,使用一个Showmessage就可以看得出来生成后的SQL语句是否正确
    这是基本的调试手段
      

  4.   

    因为,我这个语句是在BDE+Prodox中的,运行好好的,因需要才改成Ado+access的后就不行了.
      

  5.   

    如果只是插入单条记录,可以用ADOTable
    ADOTable.Append(E_ID.Text,E_Type.Text,E_memo.Text);
      

  6.   

    建议不要将变量和SQL语句写在一块,很容易被单引号搞
    close;
    sql.clear;
    sql.add(' insert usertype (id,name,memo) values(:id,:name,:memo) ');
    Parameters.ParamByName('id').value:=E_ID.Text;
    Parameters.ParamByName('name').value:=E_Type.Text;
    Parameters.ParamByName('memo').value:=E_memo.Text;
    try 
      ExecSQL;
    except
      Application.MessageBox('插入数据异常','提示',64);
    end;
      

  7.   

    因为你的 name  和 id至少有一个  是Access的 关键字           sql.Clear ;
                sql.Clear ;
                sql.Text:='insert usertype ([id],[name],memo)'
                          +'values ("'+uppercase(E_ID.Text)
                          +'","'+E_Type.Text
                          +'","'+E_memo.Text +'")';
                try
                   execsql;
                except
                   close;
                   self.Close ;
                end;
    改成这样 试试看看我是这样就可以搞定了
      

  8.   

    我解决了问题,可能是MEMO是ACCESS的关键字,把这个改了就可以啦.谢谢,以上各位大侠.