一个用户名检测程序,我希望的是在密码输入错误的情况下可以连续输入三次,然后退出,可是实际上我只要输入一次错误,结果就连续出现三次错误提示信息,而无法重新输入,为什么呢?procedure TForm1.Button1Click(Sender: TObject);
var
  nameset,pass:string;
  right_operator,right_manage,right_select:boolean;
  i:integer;begin
  nameset:=Edit1.Text;
  Table1.Active:=True;
  Table1.DisableControls;
  i:=3;
  while i>0 do
  begin
   
    Table1.IndexFieldNames:='name';
    if Table1.FindKey([nameset]) then
      if Table1.FieldValues['password']=Edit2.Text then
      begin     //如果用户名和密码正确,检查用户权限并授予相应权限
        right_manage:=Table1.FieldByName('Right_manage').AsBoolean;
        right_operator:=Table1.FieldByName('Right_operator').AsBoolean;
        right_select:=Table1.FieldByName('Right_select').AsBoolean;
        //给用户授权
        if  right_operator then form2.Button1.Enabled:=false;
        if  right_select then
          begin
          form3.n6.enabled:=false;
          form3.N7.Enabled:=false;
          form3.N8.Enabled:=false;
          form2.Button2.Enabled:=false;
          form2.Button3.Enabled:=false;
          end;
        Form2.show;
        i:=-1;      end
     else application.MessageBox('用户名或密码错误','提示信息',MB_OK) ;   i:=i-1;
   edit1.Clear;
   edit2.clear;
   nameset:=Edit1.text;end;
  if i=0 then
  begin
  showmessage('用户名或密码错误,请退出!');
  close;
  end
end;

解决方案 »

  1.   

    晕~我的代码怎么没有了?procedure TForm1.Button1Click(Sender: TObject);
    var
      nameset,pass:string;
      right_operator,right_manage,right_select:boolean;
      i:integer;begin
      nameset:=Edit1.Text;
      Table1.Active:=True;
      Table1.DisableControls;
      i:=3;
      while i>0 do
      begin
       
        Table1.IndexFieldNames:='name';
        if Table1.FindKey([nameset]) then
          if Table1.FieldValues['password']=Edit2.Text then
          begin     //如果用户名和密码正确,检查用户权限并授予相应权限
            right_manage:=Table1.FieldByName('Right_manage').AsBoolean;
            right_operator:=Table1.FieldByName('Right_operator').AsBoolean;
            right_select:=Table1.FieldByName('Right_select').AsBoolean;
            //给用户授权
            if  right_operator then form2.Button1.Enabled:=false;
            if  right_select then
              begin
              form3.n6.enabled:=false;
              form3.N7.Enabled:=false;
              form3.N8.Enabled:=false;
              form2.Button2.Enabled:=false;
              form2.Button3.Enabled:=false;
              end;
            Form2.show;
            i:=-1;      end
         else application.MessageBox('用户名或密码错误','提示信息',MB_OK) ;   i:=i-1;
       edit1.Clear;
       edit2.clear;
       nameset:=Edit1.text;end;
      if i=0 then
      begin
      showmessage('用户名或密码错误,请退出!');
      close;
      end
    end;
      

  2.   

    我的代码:
    procedure TloginForm.BitBtn1Click(Sender: TObject);
    var
    str,zhiwu: string;
    begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select *  FROM  jmtv_user where (用户名='''+edit1.Text+''')');
    ADOQuery1.Open;
    if  ADOQuery1.RecordCount=0 then
    begin
      showmessage('不存在这个帐号');
      exit;
    end;
    ADOQuery1.First;
    str:=ADOQuery1.FieldByName('密码').Value;
    if edit2.Text=str then
      begin
       islogin:=true;
       close;
      end
    else if logincount<>3 then
        begin
          showmessage('密码错误');
          edit2.Text:='';
          edit2.SetFocus;
          logincount:=logincount+1;
        end;
    if logincount=3 then close;end;
      

  3.   

    else 
    begin
      application.MessageBox('用户名或密码错误','提示信息',MB_OK) ;
      break;
    end;
      

  4.   

    i:integer;//全局变量procedure TForm1.Button1Click(Sender: TObject);
    var
      nameset,pass:string;
      right_operator,right_manage,right_select:boolean;begin
      i:=i+1;
      nameset:=Edit1.Text;
      Table1.Active:=True;
      Table1.DisableControls; 
        Table1.IndexFieldNames:='name';
        if Table1.FindKey([nameset]) then
          if Table1.FieldValues['password']=Edit2.Text then
          begin     //如果用户名和密码正确,检查用户权限并授予相应权限
            right_manage:=Table1.FieldByName('Right_manage').AsBoolean;
            right_operator:=Table1.FieldByName('Right_operator').AsBoolean;
            right_select:=Table1.FieldByName('Right_select').AsBoolean;
            //给用户授权
            if  right_operator then form2.Button1.Enabled:=false;
            if  right_select then
              begin
              form3.n6.enabled:=false;
              form3.N7.Enabled:=false;
              form3.N8.Enabled:=false;
              form2.Button2.Enabled:=false;
              form2.Button3.Enabled:=false;
              end;
            Form2.show;
            i:=-1;      end
         else 
         begin
            if i=3 then
              begin
                 showmessage('用户名或密码错误,请与管理员联系!');
                 close;
              end;
           application.MessageBox('用户名或密码错误','提示信息',MB_OK) ; 
         end;  edit1.Clear;
       edit2.clear;
       nameset:=Edit1.text;end;
     end;
      

  5.   

    昨天最后回去还是问了老师才解决的,计数器应该设置成全局变量,而且不用while就好了
    谢谢大家了