密码修改窗口有三个edit ,一个输入原密码,一个新密码,另一个确实新密码
procedure TSepfrm.BitBtn1Click(Sender: TObject);
var m,n,k:string;
begin
  ADoquery1.Close ;
  ADoquery1.SQL.Clear ;
  m:='select   *   from  管理员   where   username = '''+login.edit1.Text+'''';
  ADoquery1.SQL.Add(m);
  ADoquery1.Open;
  k:=ADOQuery1.FieldByName('password').AsString;
  if   adoquery1.RecordCount<>0   then
  begin
      if   k=edit1.Text   then
        begin
         if  edit2.Text=edit3.Text  then
           begin
           n:='update   管理员  set   password=:field1 where username='+Quotedstr(login.edit1.text);
           Adoquery2.Close;
           Adoquery2.SQL.Clear;
           Adoquery2 .SQL.Add(n);
           ADOQuery1.Parameters.ParamByName('Field1').Value :=edit2.Text;
           Adoquery2.ExecSQL;
           showmessage('更改密码成功');
           end
         else
           showmessage('请重新确认密码');
       end
     else
       showmessage('旧密码错误,请重输');
  end;
end;

解决方案 »

  1.   


    procedure TSepfrm.BitBtn1Click(Sender: TObject); 
    var m,n,k:string; 
    begin 
      ADoquery1.Close ; 
      ADoquery1.SQL.Clear ; 
      m:='select  *  from  管理员  where  username = '''+login.edit1.Text+''''; 
      ADoquery1.SQL.Add(m); 
      ADoquery1.Open; 
      if  adoquery1.RecordCount <>0  then 
      begin
          k:=ADOQuery1.FieldByName('password').AsString;  //这句放到这里试试
          if  k=edit1.Text  then 
            begin 
            if  edit2.Text=edit3.Text  then 
              begin 
              n:='update  管理员  set  password=:field1 where username='+Quotedstr(login.edit1.text); 
              Adoquery2.Close; 
              Adoquery2.SQL.Clear; 
              Adoquery2 .SQL.Add(n); 
              ADOQuery1.Parameters.ParamByName('Field1').Value :=edit2.Text; 
              Adoquery2.ExecSQL; 
              showmessage('更改密码成功'); 
              end 
            else 
              showmessage('请重新确认密码'); 
          end 
        else 
          showmessage('旧密码错误,请重输'); 
      end; 
    end;
      

  2.   

        n:='update  管理员  set  password=:field1 where username='+Quotedstr(login.edit1.text); 没记错的话, edit1.text是password吧
      

  3.   

      n:='update  管理员  set  password=:field1 where username='+Quotedstr(login.edit1.text); 
    edit1.text是username
      

  4.   

    好像错了,呵呵~~ 最不喜欢用Parameters直写SQL吧
      

  5.   

    procedure TSepfrm.BitBtn1Click(Sender: TObject); 
    var n,k:string; 
    begin 
      ADoquery1.active:= false; 
      ADoquery1.SQL.Clear; 
      ADoquery1.SQL.text:='select  *  from  管理员  where  username = '''+trim(login.edit1.Text)+''''; 
      ADoquery1.active:= true;
      if adoquery1.recordcount = 0 then exit;
      k:= ADOQuery1.FieldByName('password').AsString;       if  k=edit1.Text  then 
            begin 
            if  edit2.Text=edit3.Text  then 
              begin 
              adoquery2.active:= false;
              Adoquery2.SQL.Clear; 
              adoquery2.sql.text:='update 管理员 set password='''+edit2.text+
                                   ''' where username= '''+login.edit1.text+''''; 
              Adoquery2.ExecSQL; 
              showmessage('更改密码成功'); 
              end 
            else 
              showmessage('请重新确认密码'); 
          end 
        else 
          showmessage('旧密码错误,请重输'); 
    end;
      

  6.   

    有可能是ADoquery1把表锁死了procedure TSepfrm.BitBtn1Click(Sender: TObject); 
    var n,k:string; 
    begin 
      ADoquery1.active:= false; 
      ADoquery1.SQL.Clear; 
      ADoquery1.SQL.text:='select  *  from  管理员  where  username = '''+trim(login.edit1.Text)+''''; 
      ADoquery1.active:= true; 
      if adoquery1.recordcount = 0 then exit; 
      k:= ADOQuery1.FieldByName('password').AsString; 
      adouery1.active:= false;                           // 加这个
          if  k=edit1.Text  then 
            begin 
            if  edit2.Text=edit3.Text  then 
              begin 
              adoquery2.active:= false; 
              Adoquery2.SQL.Clear; 
              adoquery2.sql.text:='update 管理员 set password='''+edit2.text+ 
                                  ''' where username= '''+login.edit1.text+''''; 
              Adoquery2.ExecSQL; 
              showmessage('更改密码成功'); 
              end 
            else 
              showmessage('请重新确认密码'); 
          end 
        else 
          showmessage('旧密码错误,请重输'); 
    end;
      

  7.   

    运行结果还是一样
    我的login是主窗体运行动态创建的,
      

  8.   

    重新给你一个方法吧,不用你原来的!首先,你的TSepfrm有引用login单元,或者,你的主窗引用login里,把用户和密码,分别赋值给,un和pw这两个string变量
    当然要用这个变量, TSepfrm和Tlogin肯定要引用主窗口,再一开始登入成功时,就给un和pw赋值到你的TSepfrm时候,就不用那么多ado控件了修改密码的button事件里:
    procedure TChangePWFrm.cxButton1Click(Sender: TObject);
    begin
      if (cxMaskEdit1.Text <> MainFrm.PW) then               //这里是主窗的pw变量
        begin
          Application.MessageBox('原密码错误!','错误信息',64);
          cxMaskEdit1.SelectAll;
          cxMaskEdit1.SetFocus;
          exit;
        end;
      if (trim(cxMaskEdit2.Text) = '') or (trim(cxMaskEdit3.Text) = '') then
        begin
          Application.MessageBox('不允许空密码!','错误信息',64);
          cxMaskEdit2.Clear;
          cxMaskEdit3.Clear;
          cxMaskEdit2.SetFocus;
          exit;
        end;
      if (cxMaskEdit2.Text <> cxMaskEdit3.Text) then
        begin
          Application.MessageBox('新密码无法确认!','错误信息',64);
          cxMaskEdit2.Clear;
          cxMaskEdit3.Clear;
          cxMaskEdit2.SetFocus;
          exit;
        end;
      try
        adoquery2.active:= false; 
        Adoquery2.SQL.Clear; 
        adoquery2.sql.text:='update 管理员 set password='''+cxMaskEdit2.Tex+ 
                            ''' where username= '''+un+''''; 
        Adoquery2.ExecSQL;
        showmessage('完成修改');
      except
        showmessage('有错误');
      end;
    end;
      

  9.   

    楼主是不是用的Access数据库?Access数据库中,以Password作为字段名会有问题的,把这个字段名改一下就可以了。