我写了一个登陆界面,想实现不同的人员进入不同的界面
代码如下:
procedure TFrmlogin.SpeedButton1Click(Sender: TObject);begin
    UserName:=Edit1.Text;
    UserType:=CBduty.SelText;
    code:=Edit2.Text;
    LogTimes:=0;
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from employee where employee_name='''+Edit1.Text+''' and password='''+Edit2.text+''' and employee_duty='''+Cbduty.text+'''');
    ADOQuery1.Open;
    if ADOQuery1.Eof then
    begin
      LogTimes := LogTimes+1;
      showmessage('错误的用户名或密码');
    end
    else
      if LogTimes>=3 then
      begin
         showmessage('超过3次错误,将关闭登陆界面');
         close;
      end
      else
        begin
        code := ADOQuery1.FieldByName('password').AsString;
        UserName := ADOQuery1.FieldByName('employee_name').AsString;
        if UserType ='仓管员' then
           begin
              LogTimes := 0;
              ADOQuery1.Free;
              Frmlogin.Hide;
              kucunguanliForm.ShowModal;
              Frmlogin.Show;
           end
        else
          if UserType ='销售员' then
             begin
                LogTimes := 0;
                ADOQuery1.Free;
                Frmlogin.Hide;
                Frmxs.ShowModal;
                Frmlogin.Show;
             end
        else
          if UserType ='系统管理' then
            begin
                LogTimes := 0;
                ADOQuery1.Free;
                Frmlogin.Hide;
                Form1.ShowModal;
                Frmlogin.Show;
            end
        else
          if UserType ='售后服务' then
             begin
                LogTimes := 0;
                ADOQuery1.Free;
                Frmlogin.Hide;
                frmUntrade.Show;
                Frmlogin.Show;
             end
        endend;procedure TFrmlogin.SpeedButton2Click(Sender: TObject);
begin
   close;
end;end.
发现登陆的时候有2个问题
1:不能重复登陆
2:必须先写用户名和密码,再选部门,不然无法正常登陆
请教下高手怎么解决这个问题啊,急死我了
帮忙解决下,谢谢了

解决方案 »

  1.   

    1.ADOQuery1.Free;  去掉试试.!
    2.在窗口显示中加一条 UserType:=CBduty.SelText; 试试.!
      

  2.   

    你的登陆完一次以后数据库指针在那里知道吗
    试试在读数据库的之前ADOQuery1.first
      

  3.   

    // code := ADOQuery1.FieldByName('password').AsString;
           // UserName := ADOQuery1.FieldByName('employee_name').AsString;
    没看明白保存code,UserName有什么用。发现LZ太喜欢else,其实很多时候可以不用的。
    试试我的代码procedure TFrmlogin.SpeedButton1Click(Sender: TObject);
    begin
        UserName:=Edit1.Text;
        UserType:=CBduty.SelText;
        code:=Edit2.Text;
        LogTimes:=0;
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('select * from employee where employee_name='''+UserName+''' and password='''+code+''' and employee_duty='''+UserType+'''');//这句也可以这样写
        ADOQuery1.SQL.Add('select * from employee where employee_name='+QuotedStr   (UserName)+' and password='+QuotedStr(code)+' and employee_duty='+QuotedStr(UserType));
        ADOQuery1.Open;
        if LogTimes>=3 then
          begin
             showmessage('超过3次错误,将关闭登陆界面');
             close;
          end;
        if ADOQuery1.RecordCount < 1 then  
        begin
          LogTimes := LogTimes+1;
          showmessage('错误的用户名或密码');
        end else
          begin
            if UserType ='仓管员' then
               begin
                  LogTimes := 0;
                  ADOQuery1.Free;
                  Frmlogin.Hide;
                  kucunguanliForm.ShowModal;
                  Frmlogin.Show;
               end;
              if UserType ='销售员' then
                 begin
                    LogTimes := 0;
                    ADOQuery1.Free;
                    Frmlogin.Hide;
                    Frmxs.ShowModal;
                    Frmlogin.Show;
                 end;
              if UserType ='系统管理' then
                begin
                    LogTimes := 0;
                    ADOQuery1.Free;
                    Frmlogin.Hide;
                    Form1.ShowModal;
                    Frmlogin.Show;
                end;
             if UserType ='售后服务' then
                 begin
                    LogTimes := 0;
                    ADOQuery1.Free;
                    Frmlogin.Hide;
                    frmUntrade.Show;
                    Frmlogin.Show;
                 end;
            end;end;
      

  4.   

    加了ADOQuery1.first后去掉Free可以重复登陆,但是第一个问题没解决.
      

  5.   

    实际上还是很简单的
    建立一个字段大于多少的是什么用户,小于多少的是什么用户
    比如说,如果用户验证正确,取出ID,
    if id>2 then
    //普通用户权限
    else
    //超级管理员权限
    也可以再加其他的设置权限