1.我写的程序其中一小段:
if edt_new_password.Text = edt_confirm_new_password.Text then
    begin
      ADOQ_modify_password.SQL.Text := 'UPDATE Administer ' +
                                       'SET password = ' + QuotedStr(edt_new_password.Text) +
                                       ' WHERE name = ' + QuotedStr(user_name);
      ADOQ_modify_password.ExecSQL;
      self.ModalResult := mrOK;
    end   
程序编译没有问题,运行时,会报错为:"UPDATE字句错误…",以前也遇到过是由于在分行书写SQL语句时忘了加语句间的空格,这次无论放在一行还是加空格都不行,错在哪里?
2,程序编译没有问题正确登陆后,进入某子界面时报错,然后进入,离开时也出现同样的情况,错误如下:Access violation at address 005191EB,in module '…',Read of address 0000024C.
请教这两个问题如何解决!

解决方案 »

  1.   

    1.
    if edt_new_password.Text = edt_confirm_new_password.Text then
        begin
          ADOQ_modify_password.SQL.Text := 'UPDATE Administer ' +
                                           'SET password = ' +'''+ QuotedStr(edt_new_password.Text) +'''+
                                           ' WHERE name = ' +'''+ QuotedStr(user_name)+'''';
          ADOQ_modify_password.ExecSQL;
          self.ModalResult := mrOK;
        end  
    2.是不是该窗体没有创建,你 就 SHOW了呢,把具体代码贴出来看看。
      

  2.   

    试一下这个:
    adomodify_password.sql.text:='update administer set password=:a where name=:b';
    parameters.parameterbyname('a').value:=edt_new_password.text;
    parameters.parameterbyname('b').value:=user_name;
      

  3.   

    在ADOQ_modify_password.ExecSQL前
    showmessage(ADOQ_modify_password.SQL.TEXT);
    看看SQL语句
      

  4.   

    sql中如果字段是varchar型的应该加“'”单引号的
      

  5.   

    1.  
     STr:=Format('UPDATE Administer SET password = ''%S''  WHERE name = ''%S''',
     [trim(edt_new_password.Text),user_name]);
      with ADOQ_modify_password do begin
        Close;
        Sql.clear;
        Sql.Add(STr);
        ExecSQL;
      end;2
      delphi有时有这样的问题.我也经常碰到的
       1)重新打开DELPHI,重打开工程编译一下行不行.
       2)如不行,关机,再开机,如上
       3)重装DELPHI,再如上
    你可以试试.
       
      

  6.   

    可能是ADOquery未初始化的缘故。
    试试这样:
    str:='update Adimister set password='+quotedstr(trim(edt_new_password.Text))+' where name='+quotedstr(user_name);
      ADOQ_modify_password.Active:=False;
      ADOQ_modify_password .SQL.Clear;
      ADOQ_modify_password.SQL.Add(str);
      ADOQ_modify_password.ExeSQL;
      

  7.   

    1.sql语句没错
    2.访问了空指针,看看是否还没有创建某个对象实例,在执行前Assert(Self=nil,'xxx');
      

  8.   

    系统启动一遍,数据地址已经出现混乱.
       修改update语句;
       ADOQ_modify_password.SQL.Text:='UPDATE Administer SET password="'+QuotedStr(edt_new_password.Text) +'"WHERE name = "' + QuotedStr(user_name)+'"';
       ADOQ_modify_password.ExecSQL;
      

  9.   

    where前要有空格...`
    ADOQ_modify_password.SQL.Text:='UPDATE Administer SET password="'+QuotedStr(edt_new_password.Text) +'" WHERE name = "' + QuotedStr(user_name)+'"';
       ADOQ_modify_password.ExecSQL;
      

  10.   

    1.用anbangs(大邦) 的方法查看SQL语句没有错误!JavaD(一竿残照) 也是这么说的!但是事实居然报错"UPDATE字句错误",有其他原因解释吗?
    2.我的窗体是动态创建的,其中用到了淡入淡出效果,所以我在本窗体用的是ONSHOW,而不是ONCREAT,因为我发现我如果用后者,淡入淡出效果就没了,即没有实现该功能,在主窗体中我写的是 F_Login_System := TF_Login_System.Create(self);
    F_Login_System.ShowModal;
    本窗体中是
    procedure TF_Modify_Password.FormShow(Sender: TObject);
    begin
      Windows.AnimateWindow(self.Handle, 1000, AW_CENTER + AW_BLEND);
    end;