我使用TADOQuery来执行数据表的修改操作,下面是我的代码:var sql:string;
begin
   sql := 'UPDATE t_members SET MemberID=4, MemberName=''name1'', Birth=32215.3589314583, Relation=''其他'', Memo='''' WHERE MemberID=4';
   //...
   ADOQuery.Close;
   ADOQuery.SQL.Clear;
   ADOQuery.SQL.Add (sql);
   ADOQuery.Execsql;
   //...
end;但是编译以后在“ADOQuery.Execsql”处提示错误:UPDATE语句语法错误。(我把整个SQL语句复制到Access数据库中执行没有错误!)

解决方案 »

  1.   

    sql := 'UPDATE t_members SET MemberID=4, MemberName=''name1'', Birth=32215.3589314583, Relation=''其他'', Memo='''' WHERE MemberID=4';s_1:='name1';
    s_2:='其他';
    s_3:='';sql:='update t_members set momberid=4,memborname='+quotestr(s_1)+',birth=33333.33333,relation='+quotestr(s_2)+',memo='+quotestr(s_3)+' where memberid=4';
      

  2.   

    {...}
    ADOQuery.SQL.Text := sql;
    ADOQuery.Execsql;
      

  3.   

    sql := 'UPDATE t_members SET MemberID=4, MemberName='''+'name1'+''''+', Birth=32215.3589314583, Relation='''+'其他'+''''+', Memo='''+''''+' WHERE MemberID=4';
      

  4.   

    你先直接在数据库里执行sql语句,看是否成立?
      

  5.   

    不用execsql,直接用AdoQuery.open;
    是不是你的adoquery关联一些控件,使用execsql不会返回结果的
      

  6.   

    Birth 是不是个日期型的,把birth去掉试试,或一个一个字段那样试试,看看具体是那个字段的问题
      

  7.   

    to wywry(wyatt) 用execsql是没错了,如果用open的话可是要出异常的!update本来就不用返回结果集的
      

  8.   

    如果一下这些字段都是字符串类型的话,birth除外,可以这么写:
    sql := 'UPDATE t_members SET MemberID=''4'', MemberName=''name1'', Birth=32215.3589314583, Relation=''其他'', Memo='''' WHERE MemberID=''4''';
      

  9.   

    语法没错!
    是不是数据库结构不对?
    还有SET MemberID=4   WHERE MemberID=4
    是不是......
      

  10.   

    sql := 'UPDATE t_members SET MemberID=4, MemberName='+QuotedStr('name1')
    +', Birth=32215.3589314583, Relation='+Quotedstr('其他')
    +', Memo=QuotedStr('') +'WHERE MemberID=4';
      

  11.   

    sql := 'UPDATE t_members SET MemberID=4, MemberName=''name1'', Birth=32215.3589314583, Relation=''其他'', [Memo]='''' WHERE MemberID=4';memo为保留字,加中括号
      

  12.   

    呵呵.谢谢!
    lijinghe1说对了.问题解决了