上次贴过,回答都不正确,请给我一个正确的答案,谢谢!
连的是access数据库,提示update语法错误!!(我看不出哪儿错,把,改成and居然不报错,不过username的值不是0就是-1,我就奇了怪了,update语句里没有and的语法,应该是逗号分开,用and怎么会不报错,却给我一个值,妈的,什么破东西!!)
procedure TForm1.Button1Click(Sender: TObject);
begin
    with ADOQuery1 do
     begin
      adoquery1.close;
      adoquery1.sql.clear;
      adoquery1.sql.add('select * from logmember where username=');
      adoquery1.sql.add(''''+edit1.Text+''''+' and password=');
      adoquery1.sql.add(''''+edit2.Text+'''');
      adoquery1.open;
        if recordcount>=1 then
          begin
           if (edit3.Text<>'') and (edit4.Text <> '') then
              begin
               adoquery1.sql.clear;
               adoquery1.sql.add('update logmember set username=');
               adoquery1.sql.add(''''+trim(edit3.Text)+''''+',');
               adoquery1.sql.add('password='+''''+trim(edit4.Text)+'''');
               ADOQuery1.ExecSQL;
              end;
           end;
      end;
   end;
end.

解决方案 »

  1.   

    息怒先,看看这个http://chinaunix.net/forum/viewtopic.php?t=77214
    我看看题先
      

  2.   

    if (edit3.Text<>'') and (edit4.Text <> '') then
                  begin
                   adoquery1.sql.clear;
                   adoquery1.sql.add('update logmember set username=');
                   adoquery1.sql.add(' '''+trim(edit3.Text)+''' , ' );
                   adoquery1.sql.add(' password = '''+trim(edit4.Text)+''' ');
                   ADOQuery1.ExecSQL;
                  end;弟弟试试这样。就把我的copy上去
      

  3.   

    var str:string;
    str:='update logmember set username='''+trim(edit3.text)+''','+'password='''+trim(edit4.text)+'''';
    adocommand1.commandtext:=str
    adocommand1.execute;
      

  4.   

    1.检查字段名
    2.使用最最普通的update语句执行更新操作.
    3.输出SQL语句,直接执行,看看出不出错.
    4.替换编辑框的所有的单引号为两个单引号.
      

  5.   

    'update logmember set username = '''+trim(edit3.text)+''','+'password = '''+trim(edit4.text)+'''';
      

  6.   

    没where条件?更新所有记录啊?
      

  7.   

    我原来写的access程序,用ODBC就正确,用ADO就出错,后来发现是字段名字的问题,
    ADO的保留字很多,username, password, id,name 这类的名字最好别用,或者加上 [username]这么用。
    我现在的习惯是 f_username 都加上前缀
      

  8.   

    if (edit3.Text<>'') and (edit4.Text <> '') then
                  begin
                   adoquery1.sql.clear;
                   adoquery1.sql.add('update logmember set username = '
                                     + ''''+ trim(edit3.Text)+ ''','
                                     + ' password = '''+ trim(edit4.Text) + '''');
                   ADOQuery1.ExecSQL;
                  end;
      

  9.   

    问题多多,
    1).安全问题,你的Select 就存在安全隐患,这个大家以前讨论过了,你的方法不可取。
    2).更新语句没有Where条件,难道你要把所有的用户跟密码都更新?
    单从语句上来讲,你的Update语句没什么问题,主要就是看你的字段类型之类的问题了。
      

  10.   

    楼上说的没错。我想字段应该没问题,问题出在where条件上
      

  11.   

    pazee(耙子) ( )  完全同意耙子的观点 
      

  12.   

    问题找到了,pazee(耙子) 说对了!该死的ado,果然是淘汰货,差!!!
    谢谢大家!!
      

  13.   

    可惜我来晚了,我在3天前也犯了和楼主一样的毛病,居然在UPDATE语句中用了NAME字段名,只有ADO不承认,ODBC和DELPHI自带的SQL EXPLORE都没问题。为这,折腾了我一天!!!第二天有个朋友问我DELPHI如何入门的问题,我在胡诌中想到了答案,ACCESS和MDAC同是比尔的东西,ACCESS建库时也不提个醒。哼哼!!
      

  14.   

    @_@,我在asp中的ADO用这些字段都不会出现错误,怀疑是delphi的ado问题在delphi中,我习惯是在字段前加个F。我好象也碰到过这种问题,一时想不起来,实在不好意思。
      

  15.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
        with ADOQuery1 do
         begin
          adoquery1.close;
          adoquery1.sql.clear;
          adoquery1.sql.add(format('select * from logmember where username=[$S] and   password=[$S]',[edit1.Text,edit2.Text]));
          adoquery1.open;
            if recordcount>=1 then
              begin
               if (edit3.Text<>'') and (edit4.Text <> '') then
                  begin
                   adoquery1.sql.clear;
                   adoquery1.sql.add(format('update logmember set username=[$S] , password=[$S]',[trim(edit3.Text),trim(edit4.Text)]));
                   ADOQuery1.ExecSQL;
                  end;
               end;
          end;
       end;
    end.
      

  16.   

    上面的错了,下面的直接用:
    procedure TForm1.Button1Click(Sender: TObject);
    var sqltext: string;
    begin
      if (edit3.Text <> '') and (edit4.Text <> '') then
      begin
        adoquery1.sql.clear;
        sqltext := format('update temp set username=''%S'',password=''%S'' WHERE (((username)=''%S'') AND ((password)=''%S''));', [trim(edit3.Text), trim(edit4.Text), edit1.Text, edit2.Text]);
        adoquery1.sql.add(sqltext);
        ADOQuery1.ExecSQL;
      end;
    end;
      

  17.   

    在VB--ADO中,用name作字段名是没有问题的。可能是Delphi封装的问题,不过在VB中也有一些命名是没法用的。
      

  18.   

    改为:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        with ADOQuery1 do
         begin
          adoquery1.close;
          adoquery1.sql.clear;
          adoquery1.sql.add('select * from logmember where username=');
          adoquery1.sql.add(#39+edit1.Text+#39+' and password=');
          adoquery1.sql.add(#39+edit2.Text+#39);
          adoquery1.open;
            if recordcount>=1 then
              begin
               if (edit3.Text<>'') and (edit4.Text <> '') then
                  begin
                   adoquery1.sql.clear;
                   adoquery1.sql.add('update logmember set username=');
                   adoquery1.sql.add(#39+trim(edit3.Text)+#39+',');
                   adoquery1.sql.add('password='+#39+trim(edit4.Text)+#39);
                   ADOQuery1.ExecSQL;
                  end;
               end;
          end;
       end;
    end.哈哈,分给我吧!
      

  19.   

    username是access的关键字
    把这个字段名改了吧,
    access的关键字很多经常和字段名重,于是就出莫名其妙的错误
      

  20.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
        with ADOQuery1 do
         begin
          adoquery1.close;
          adoquery1.sql.clear;
          adoquery1.sql.add('select * from logmember where [username]=');
          adoquery1.sql.add(''''+edit1.Text+''' and password='''+edit2.Text+'''');
          adoquery1.open;
            if recordcount>=1 then
              begin
               if (edit3.Text<>'') and (edit4.Text <> '') then
                  begin
                   adoquery1.sql.clear;
                   adoquery1.sql.add('update logmember set [username]=');
                   adoquery1.sql.add(''''+trim(edit3.Text)+''',password='''+trim(edit4.Text)+'''');
                   ADOQuery1.ExecSQL;
                  end;
               end;
          end;
       end;
    end.
      

  21.   

    用quotedstr()procedure TForm1.Button1Click(Sender: TObject);
    begin
        with ADOQuery1 do
         begin
          adoquery1.close;
          adoquery1.sql.clear;
          adoquery1.sql.add('select * from logmember where username=');
          adoquery1.sql.add(''''+quotedstr(edit1.Text)+''''+' and password=');
          adoquery1.sql.add(''''+quotedstr(edit2.Text)+'''');
          adoquery1.open;
            if recordcount>=1 then
              begin
               if (edit3.Text<>'') and (edit4.Text <> '') then
                  begin
                   adoquery1.sql.clear;
                   adoquery1.sql.add('update logmember set username=');
                   adoquery1.sql.add(''''+quotedstr(edit3.Text)+''''+',');
                   adoquery1.sql.add('password='+''''+quotedstr(edit4.Text)+'''');
                   ADOQuery1.ExecSQL;
                  end;
               end;
          end;
       end;
    end.