这段程序是用来更改密码的
出现问题是:数据无法添加到后台,说被Close了,
 else if dm.Qrynewpass.FieldByName('userid').Asstring=SysUserId  then和
 dm.Qrynewpass.FieldByName('password').Asstring<>EncryStrHex(trim(oldpw.text),jiang1) then这句话中的Userid和password说不知道该字段,
 请帮我写一段关于更改密码的程序,如果 分不够再加,unit Uupdatapw;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, bsSkinCtrls,DB,ADODB, StdCtrls, Mask, bsSkinBoxCtrls;
 const
jiang1='smxycsdjiang546019820523';
type
  Tfrmupdatapw = class(TForm)
    bsSkinStdLabel1: TbsSkinStdLabel;
    bsSkinStdLabel2: TbsSkinStdLabel;
    bsSkinStdLabel3: TbsSkinStdLabel;
    sureok: TbsSkinButton;
    nosure: TbsSkinButton;
    oldpw: TbsSkinPasswordEdit;
    surepw: TEdit;
    newpw: TEdit;
    procedure nosureClick(Sender: TObject);
    procedure sureokClick(Sender: TObject);
  private
  //abc:string;
    { Private declarations }
  public
    { Public declarations }
  end;var
  frmupdatapw: Tfrmupdatapw;implementation
  uses umain,udm,mycommon,jiang;
{$R *.dfm}procedure Tfrmupdatapw.nosureClick(Sender: TObject);
begin
close;
end;procedure Tfrmupdatapw.sureokClick(Sender: TObject);
begin
{ if uppercase(trim(newpw.text))<>uppercase(trim(surepw.text)) then
  begin
    messagebox(handle,'新密码和确认密码不同,请重新确认!','信息',mb_ok+mb_iconinformation);
    newpw.setfocus;
    exit;
    end
//else if dm.Qrynewpass.Locate('userid',SysUserId,[]) then
  else if dm.Qrynewpass.FieldByName('userid').Asstring=SysUserId  then
 begin
 if   dm.Qrynewpass.FieldByName('password').Asstring<>EncryStrHex(trim(oldpw.text),jiang1) then
  begin
 showmessage('原密码不对!请重新录入');
   oldpw.SetFocus;
   end
  else
   begin }
     with DM.Qrynewpass  do
   begin
           open;
           close;
          dm.Qrynewpass.sql.clear;
          dm.Qrynewpass.sql.Add('update usertable set password=:password where userid=:userid');
          (newpw.text),jiang1);
          Parameters.ParamValues['UserId']:=SysUserId;
          Parameters.ParamValues['password']:=EncryStrHex(trim(newpw.text),jiang1);
           execsql;
 { with DM.Qrynewpass  do
begin
           open;
          dm.Qrynewpass.sql.clear;
          dm.Qrynewpass.sql.Add('update usertable set password=:password where userid=:userid');
          //dm.Qrynewpw.ParamByName('UserId').asstring:=SysUserId;
          //Qrynewpw.parambyname('password').asstring:=EncryStrHex(trim(newpw.text),jiang1);
          Parameters.ParamValues['UserId']:=SysUserId;
     Parameters.ParamValues['password']:=EncryStrHex(trim(newpw.text),jiang1);
       execsql;
          Application.MessageBox('成功地改变密码!','信息',mb_ok or mb_iconInformation);
          Close; }
  {if dm.Qrynewpw.active=true then
    dm.Qrynewpw.close;
    dm.Qrynewpw.Parameters.ParamValues['UserId']:=SysUserId;
    dm.Qrynewpw.Parameters.ParamValues['password']:=EncryStrHex(trim(newpw.text),jiang1);
   dm.Qrynewpw.execsql;
  messagebox(handle,'密码已经成功修改!','提示',mb_ok+mb_iconinformation);
  close;
  end }
//end;end;
end; end;
end.

解决方案 »

  1.   

    with DM.Qrynewpass  do
       begin
               open;
               close;
    这里的open没有什么作用吧
    还有就是with数据集了 为什么还要dm.query.没有必要
      

  2.   

    dm.Qrynewpass.FieldByName('userid').Asstring;这句话之前如果你的dm.Qrynewpass没有打开过肯定会说close,如果你执行了某行代码,或者初始化时把它打开了,应该不会说close了。你试试在最开始加上if dm.Qrynewpass.active=false then
               begin 
                 dm.Qrynewpass.active=true;
                 dm.Qrynewpass.open;
               end;
      

  3.   

    好的,谢谢,再问一个问题的,以下代码我执行插入时,他报错:有重复键(重复数据),可是我把数据库清空,再来添加也是出问题的,说有重复???数据库SQL。
    implementation
      uses umain,mycommon,udm,ulogin;
    {$R *.dfm}procedure TFrmoperator.addabcClick(Sender: TObject);
    begin
       abc:=1;
       userid.Text:='';
       username.text:='';
       UserId.SetFocus;
       editabc.Enabled :=false;
       delabc.Enabled :=false;
       canno.Enabled :=false;
       suerabc.Enabled := true;end;procedure TFrmoperator.suerabcClick(Sender: TObject);
    var
      str:string;
    begin
    str:=userid.Text;
    if(userid.text='')then
    begin
    application.MessageBox('用户账号不能为空!','错误',mb_ok or mb_iconError);
    userid.SetFocus;
    exit
    end;
    if abc=1 then
    begin
    if dm.QryOperator.Locate('user_id',userid.Text,[loCaseInsensitive]) then
    begin
    application.MessageBox('此用户已存在!','错误',mb_ok or mb_iconError);
    userid.SetFocus;
    exit;
    end;
    if DM.ADO.InTransaction then Dm.ADO.RollbackTrans ;
         DM.ADO.BeginTrans;
      if abc=1 then
      begin
      with dm.QryOperator do
      begin
          close;
          sql.clear;
          sql.add('insert into usertable (User_Id,UserName,pass_word) '+
                  'values (:User_Id,:UserName,:pass_word)');
          Parameters.ParamValues['User_Id']:=Trim(UserId.text);
          Parameters.ParamValues['UserName']:=Trim(UserName.text);
          Parameters.ParamValues['pass_word']:=EncryStrHex('jiang5460',jiang1);
          execsql;
          close;
        dm.ADO.CommitTrans;
            showmessage('用户添加成功!');
          if Dm.QryOperator.Active then
               Dm.QryOperator.Close;
               Dm.QryOperator.Open ;
        end;
        userid.text:='';
      username.text:='';
      userid.SetFocus;
      end
     else if abc=2 then
      begin
      with dm.QryOperator do
      begin
          close;
          Parameters.ParamValues['User_id'] := trim(userid.text);
          Parameters.ParamValues['UserName'] := trim(UserName.text);
          Parameters.ParamValues['pass_word'] :=EncryStrHex('jiang5460',jiang1);
           execsql;
        end;
        canno.Enabled := false;
        suerabc.Enabled := false;
        addabc.Enabled := true;
        delabc.Enabled := true;
        editabc.Enabled := true;
        UserId.Text := '';
        UserName.Text := '';
        userid.SetFocus;
    end;
    end;
    end;
    procedure TFrmoperator.FormShow(Sender: TObject);
    begin
     with DM do
      begin
    if Qryoperator.Active=True then
         Qryoperator.Close;
        Qryoperator.Open;
      end;end;procedure TFrmoperator.delabcClick(Sender: TObject);
    begin
    with dm.QryOperator do
    begin
    if Dm.QryOperator.eof then exit; //MessageBox(0,'空记录不能删除!','提示',MB_OK+MB_ICONWARNING);
    if application.MessageBox('你确实要删除当前用户吗?','警告',MB_YESNO+MB_ICONWARNING)=IDYes then
         DM.Qryoperator.Delete;
     end;
    end;
    procedure TFrmoperator.exitabcClick(Sender: TObject);
    begin
    dm.QryOperator.close;
    close;
    end;procedure TFrmoperator.editabcClick(Sender: TObject);
    begin
    with dm.QryOperator do
    begin
      abc:=2;
     addabc.Enabled := false;
      delabc.Enabled := false;
      Editabc.Enabled := false;
      canno.Enabled := true;
      suerabc.Enabled := true;
      UserId.Text :=DM.QryOperator.Fieldbyname('user_id').AsString;
      UserName.Text :=DM.QryOperator.Fieldbyname('username').AsString ;
      // UserId.Enabled:=false;
      //UserName.SetFocus;
      UserId.setfocus;
         end;
    end;procedure TFrmoperator.FormCreate(Sender: TObject);
    begin
    addabc.Enabled:=true;
    editabc.Enabled:=true;
    delabc.Enabled:=true;
    canno.Enabled := true;
    end;procedure TFrmoperator.DBGrid1CellClick(Column: TColumn);
    begin
    editabc.Enabled:=true;
    end;procedure TFrmoperator.cannoClick(Sender: TObject);
    begin
      UserId.Text :='';
      UserName.Text :='';
      addabc.Enabled := true;
      delabc.Enabled := true;
      editabc.Enabled := true;
      canno.Enabled := false;
      suerabc.Enabled := false;
    end;end.
      

  4.   

    好的,谢谢,再问一个问题的,以下代码我执行插入时,他报错:有重复键(重复数据),可是我把数据库清空,再来添加也是出问题的,说有重复???数据库SQL。
    implementation
      uses umain,mycommon,udm,ulogin;
    {$R *.dfm}procedure TFrmoperator.addabcClick(Sender: TObject);
    begin
       abc:=1;
       userid.Text:='';
       username.text:='';
       UserId.SetFocus;
       editabc.Enabled :=false;
       delabc.Enabled :=false;
       canno.Enabled :=false;
       suerabc.Enabled := true;end;procedure TFrmoperator.suerabcClick(Sender: TObject);
    var
      str:string;
    begin
    str:=userid.Text;
    if(userid.text='')then
    begin
    application.MessageBox('用户账号不能为空!','错误',mb_ok or mb_iconError);
    userid.SetFocus;
    exit
    end;
    if abc=1 then
    begin
    if dm.QryOperator.Locate('user_id',userid.Text,[loCaseInsensitive]) then
    begin
    application.MessageBox('此用户已存在!','错误',mb_ok or mb_iconError);
    userid.SetFocus;
    exit;
    end;
    if DM.ADO.InTransaction then Dm.ADO.RollbackTrans ;
         DM.ADO.BeginTrans;
      if abc=1 then
      begin
      with dm.QryOperator do
      begin
          close;
          sql.clear;
          sql.add('insert into usertable (User_Id,UserName,pass_word) '+
                  'values (:User_Id,:UserName,:pass_word)');
          Parameters.ParamValues['User_Id']:=Trim(UserId.text);
          Parameters.ParamValues['UserName']:=Trim(UserName.text);
          Parameters.ParamValues['pass_word']:=EncryStrHex('jiang5460',jiang1);
          execsql;
          close;
        dm.ADO.CommitTrans;
            showmessage('用户添加成功!');
          if Dm.QryOperator.Active then
               Dm.QryOperator.Close;
               Dm.QryOperator.Open ;
        end;
        userid.text:='';
      username.text:='';
      userid.SetFocus;
      end
     else if abc=2 then
      begin
      with dm.QryOperator do
      begin
          close;
          Parameters.ParamValues['User_id'] := trim(userid.text);
          Parameters.ParamValues['UserName'] := trim(UserName.text);
          Parameters.ParamValues['pass_word'] :=EncryStrHex('jiang5460',jiang1);
           execsql;
        end;
        canno.Enabled := false;
        suerabc.Enabled := false;
        addabc.Enabled := true;
        delabc.Enabled := true;
        editabc.Enabled := true;
        UserId.Text := '';
        UserName.Text := '';
        userid.SetFocus;
    end;
    end;
    end;
    procedure TFrmoperator.FormShow(Sender: TObject);
    begin
     with DM do
      begin
    if Qryoperator.Active=True then
         Qryoperator.Close;
        Qryoperator.Open;
      end;end;procedure TFrmoperator.delabcClick(Sender: TObject);
    begin
    with dm.QryOperator do
    begin
    if Dm.QryOperator.eof then exit; //MessageBox(0,'空记录不能删除!','提示',MB_OK+MB_ICONWARNING);
    if application.MessageBox('你确实要删除当前用户吗?','警告',MB_YESNO+MB_ICONWARNING)=IDYes then
         DM.Qryoperator.Delete;
     end;
    end;
    procedure TFrmoperator.exitabcClick(Sender: TObject);
    begin
    dm.QryOperator.close;
    close;
    end;procedure TFrmoperator.editabcClick(Sender: TObject);
    begin
    with dm.QryOperator do
    begin
      abc:=2;
     addabc.Enabled := false;
      delabc.Enabled := false;
      Editabc.Enabled := false;
      canno.Enabled := true;
      suerabc.Enabled := true;
      UserId.Text :=DM.QryOperator.Fieldbyname('user_id').AsString;
      UserName.Text :=DM.QryOperator.Fieldbyname('username').AsString ;
      // UserId.Enabled:=false;
      //UserName.SetFocus;
      UserId.setfocus;
         end;
    end;procedure TFrmoperator.FormCreate(Sender: TObject);
    begin
    addabc.Enabled:=true;
    editabc.Enabled:=true;
    delabc.Enabled:=true;
    canno.Enabled := true;
    end;procedure TFrmoperator.DBGrid1CellClick(Column: TColumn);
    begin
    editabc.Enabled:=true;
    end;procedure TFrmoperator.cannoClick(Sender: TObject);
    begin
      UserId.Text :='';
      UserName.Text :='';
      addabc.Enabled := true;
      delabc.Enabled := true;
      editabc.Enabled := true;
      canno.Enabled := false;
      suerabc.Enabled := false;
    end;end.