procedure TForm3.Button1Click(Sender: TObject);
var opwd,npwd,userid,pwd:string;
begin
opwd:=edit1.Text;
npwd:=edit3.Text;
userid:=staff_id;
pwd:=opwd;
if edit2.text<>edit3.Text then begin
showmessage('新密码两次输入不匹配,请验证后重新输入');
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit1.SetFocus;
                                end
else
begin
with adoquery1 do begin
close;
sql.Clear;
sql.Add('select * from staff where userid=:userid and pwd=:pwd');
parameters.ParamByName('userid').Value:=userid;
parameters.ParamByName('pwd').Value:=pwd;
active:=true;
execsql;
open;
if recordcount>0 then  begin
close;try
sql.Clear;
sql.Add('update staff set pwd=:npwd where userid=:userid');//此处为疑问点
parameters.ParamByName('userid').Value:=userid;
execsql;
edit4.Text:=npwd;
showmessage('密码更改成功');
except
showmessage('网络错误,密码更改失败,请检查网络');
end;
end
else
showmessage('密码错误');
form3.Close;                  end;
end;
end;运行后提示‘密码更改成功’,但查询数据库PWD的值却是NULL,请高手指教。

解决方案 »

  1.   

    sql.Add('update staff set pwd=:npwd where userid=:userid');//此处为疑问点
    parameters.ParamByName('userid').Value:=userid;还要加上一个
    parameters.ParamByName('npwd').Value := yourpassword;
      

  2.   

    你的代码第1很难看,第2漏洞百出、第3不够严谨

    active:=true;
    execsql;
    open;
    这几句就看出来你对TADOQuery的操作还停留在表层
      

  3.   

    try
    SQL.Close;      //加上这句试试
    sql.Clear;
    sql.Add('update staff set pwd=:npwd where userid=:userid');//此处为疑问点
    parameters.ParamByName('userid').Value:=userid;
    execsql;另外,对SELECT语句,你只有Open就行了,不要再发什么ExecSQL命令
      

  4.   

    多谢诸位指教!我确实是放下很久了,等于重学。一个人摸索的滋味真的很难受
    往往一个简单的问题要困扰很久,只好上网来求助。
    多谢 zeroxing(胸无半点墨,腰有万贯财;此般理想高,怎奈做不到!)的指点和诸位的热心回复,问题已经解决。
      

  5.   

    执行插入,更新用exesql
        查询,用open;