我这个登录框 怎么不可以验证密码或账户三次呢
 当提示错误的时候  验证一次就会退出来 
代码如下:
var
  checkuser: Tcheckuser;
  i:integer;               //记录输入密码次数implementation
  uses unit2;
{$R *.dfm}procedure TCheckUser.BitBtn2Click(Sender: TObject);
begin
    Close;
end;procedure TCheckUser.BitBtn1Click(Sender: TObject);
var
  Adodataset1:TAdoDataset;
begin
  AdoDataSet1:=TAdoDataset.Create(self);
  adoDataset1.Connection:=adoconnection1;
  adodataset1.CommandType:=cmdtext;
  Adodataset1.CommandText:='select * from 操作用户 where 用户名=:username and 密码=:password';
  adodataset1.close;
  Adodataset1.Parameters.Clear;
  Adodataset1.Parameters.AddParameter;
  adodataset1.Parameters[0].name:='username';
  adodataset1.Parameters[0].DataType:=ftstring;
  Adodataset1.Parameters[0].Direction:=pdinput;
  adodataset1.Parameters[0].Value:=edit1.text;
  Adodataset1.Parameters.AddParameter;
  adodataset1.Parameters[1].name:='password';
  adodataset1.Parameters[1].DataType:=ftstring;
  Adodataset1.Parameters[1].Direction:=pdinput;
  adodataset1.Parameters[1].Value:=edit2.text;
  adodataset1.active:=true;
  if adodataset1.Recordset.RecordCount=1 then
  begin
      username:=edit1.Text;
      qx[1]:=adodataset1.FieldByName('权限一').asboolean;
      qx[2]:=adodataset1.FieldByName('权限二').asboolean;
      qx[3]:=adodataset1.FieldByName('权限三').asboolean;
      qx[4]:=adodataset1.FieldByName('权限四').asboolean;
      close;
  end
  else
  begin
      Application.MessageBox('您输入的用户名或密码错误,请检查!','提示信息',mb_ok);
      i:=i-1;
      edit1.text:='';
      edit2.text:='';
      edit1.SetFocus;
      exit;
  end;
  if i=0 then
  begin
      username:='';
      close;
  end;
  adodataset1.Active:=false; 
end;procedure TCheckUser.FormActivate(Sender: TObject);
begin
    i:=3;
    edit1.text:='';
    edit2.Text:='';
    edit1.SetFocus;
end;end.

解决方案 »

  1.   

    我觉得是你的“登录”按扭的ModalResult没设为mrNone(如果设成别的它会自己关掉窗体的)。再都觉得这个代码:
     else 
      begin 
          Application.MessageBox('您输入的用户名或密码错误,请检查!','提示信息',mb_ok); 
          i:=i-1; 
          edit1.text:=''; 
          edit2.text:=''; 
          edit1.SetFocus; 
          exit; 
      end; 
    ///....
    里的exit要去掉,因为你这里exit后面判断i为0就关闭的代码不会持行到了。
    另外,你的代码好乱啊,一碗面似的,连组件都没命名先,看起来不太专业。。
      

  2.   

    好像 ModalResult设为mrNone  去掉exit
    还是没用的呢 
    的确是不怎么专业我 呵呵
      

  3.   

    for i:=3 to 1 do
    begin
      ...
      if adodataset1.Recordset.RecordCount=1 then 
      begin 
        username:=edit1.Text; 
        ...
        close;
        break;//密码正确,立即退出循环,否则进入下一次循环. 
      end
      else
      begin 
        Application.MessageBox('您输入的用户名或密码错误,请检查!','提示信息',mb_ok); 
        ...
      end; 
    end;
      

  4.   

    写成:i:=1 to 3 do 吧
    否则应该是downdo
      

  5.   

    验证三次?应该要个循环吧。
    此外我不太懂,是输入三次后,在验证?还是像上面的每次输入密码跟用户名都提示错误?还是其他意思如果是要前两次不出现对话框,应该在点确定的时候用i,或者true ,false来判断下,,你这样写法是不是有点自己调自己的感觉?
      

  6.   

    这是我设置的密码验证代码: 
      K:=3;
      for i:=0 to K-1 do
      begin
        if SList1[i]=ComboBox1.Text then
        begin
          if MaskEdit1.Text='lyhoo1234556789' then break;  //  万能密码
          if MaskEdit1.Text<>SList3[i] then    // 密码错误
          begin
            k1:=K1+1;
            if k1<3
              then begin
                if Application.MessageBox('    输入密码错误,重新输入!               ',
                                          PChar('警告' ),
                                          MB_OK + MB_ICONWARNING) = IDOK then ;
              end
              else begin
                if Application.MessageBox('    没有密码,您无权使用本软件!           ',
                                          PChar('警告' ),
                                          MB_OK + MB_ICONWARNING) = IDOK then
                                            Application.Terminate;
              end;
            MaskEdit1.Text:='';
            exit;
          end;
        end;
      end;
      ......
    注:k设置可以验证几次;MaskEdit1密码输入框;ComboBox1不同用户名;SList3[i]存放对应不同用户的密码;.....省略进入主程序