怎样用Tquery组件编写登陆按钮的代码?
麻烦高手指点一下!
很感激!

解决方案 »

  1.   

    取得用户名和密码,然后用adoquery查询数据库,sql语句如下
    'select * from tablename where user='''+username+''' and password='''+password+''';
    如果返回结果不等于0,那么用户名和密码正确,正常登陆,否则,弹出“用户名或密码不正确”对话框
      

  2.   

    up 
    就是简单了点
    给LZ一点代码  在主窗体的FORMCREAT调  showLogin函数
    unit login;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, DB, ADODB;type
      TFrmLogin = class(TForm)
        Panel1: TPanel;
        EdtUserName: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        EdtPwd: TEdit;
        BtnOk: TButton;
        BtnCancel: TButton;
        ADOConnection1: TADOConnection;
        ADODataSet1: TADODataSet;
        procedure BtnOkClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure EdtPwdKeyPress(Sender: TObject; var Key: Char);
        procedure EdtUserNameKeyPress(Sender: TObject; var Key: Char);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      private
        { Private declarations }
        loginOk:boolean; //用户登录是否成功的私有变量
      public
        { Public declarations }
      end;  function showLogin():boolean;//显示登录对话框,返回值为登录是否成功implementationuses Main, ADOInt,PublicUnit;
    {$R *.dfm}procedure TFrmLogin.BtnOkClick(Sender: TObject);
    begin
      if (trim(edtUserName.Text) = '') then  //用户没有输入工号
      begin
        messageDlg('请输入工号!',mtInformation ,[mbOK],MB_OK); //显示提示信息
        loginOk := false;
        edtUserName.SetFocus ;
        exit;
      end;  //以下根据用户输入的工号从数据库中读取相应的记录并保存到ADODataSet1中
      ADODataSet1.Active := false;
      ADODataSet1.CommandText := 'select * from  职员信息 where 工号=''' + edtUserName.Text + '''';
      ADODataSet1.active := true;
      if ADODataSet1.IsEmpty  then //没有相应工号记录
      begin
        //以下显示提示信息之后,退出该过程
        messageDlg('此用户不存在!',mtInformation ,[mbOK],MB_OK);
        loginOk := false;
        EdtUserName.Text :='';//清空输入的工号
        edtUserName.SetFocus ;//设置工号框为焦点
        exit;
      end ;  ADODataSet1.Recordset.MoveFirst;//找到记录集的第一条记录
      if ADODataSet1.Recordset.Fields.Item ['登录密码'].Value <> edtPwd.Text  then //输入的密码与数据库中密码不一致
      begin
        //以下显示提示信息之后,退出该过程
        messageDlg('用户名与密码不符!',mtInformation ,[mbOK],MB_OK);
        loginOk := false;
        EdtPwd.Text :='';//清空输入的密码
        edtPwd.SetFocus ;//设置密码输入框为焦点
        exit;
      end;  //登录成功的处理:首先设置登录成功变量为True,然后读入登录用户的信息到定义的数据结构中
      LoginOk := true;//登录成功
      NowUser.Id := ADODataSet1.Recordset.Fields.Item['工号'].Value ;
      NowUser.Name := ADODataSet1.Recordset.Fields.Item['姓名'].Value ;
      NowUser.DepId := ADODataSet1.Recordset.Fields.Item['所属部门代码'].Value ;
      NowUser.Position := ADODataSet1.Recordset.Fields.Item['职务'].Value;
      NowUser.Power := ADODataSet1.Recordset.Fields.Item['权限'].Value;  
    end;procedure TFrmLogin.FormCreate(Sender: TObject);
    begin
      //设置窗体中数据库的连接以及先设置为登录不成功
      ADOConnection1.ConnectionString := getADOConnnectString();
      ADODataSet1.Connection := ADOConnection1;
      loginOk :=false;
    end;procedure TFrmLogin.EdtPwdKeyPress(Sender: TObject; var Key: Char);
    begin
      if key = #13 then //如果用户输入回车,则相当于单击确定按钮
        BtnOk.Click
      else if key= #27 then //如果用户输入Esc,则相当于单击取消按钮
        BtnCancel.Click ;
    end;procedure TFrmLogin.EdtUserNameKeyPress(Sender: TObject; var Key: Char);
    begin
      if key = #13 then //如果用户输入回车,则相当于单击确定按钮
        BtnOk.Click
      else if key= #27 then //如果用户输入Esc,则相当于单击取消按钮
        BtnCancel.Click ;
    end;function showLogin():boolean;//显示登录对话框,返回值为登录是否成功
    var
      frmLogin:TFrmLogin;
    begin
      frmLogin := nil; //设置初值
      try
        result := false;
        frmLogin := TFrmLogin.create(application);
        frmLogin.showModal;//显示登录的模式窗口
        result := frmlogin.loginOk ; //获得用户的选择结果
      finally //最后必须释放系统分配给frmLogin窗口的资源,避免内存泄漏
        if frmLogin <> nil then
          frmLogin.Free ;
      end;
    end;procedure TFrmLogin.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      if ModalResult = mrCancel  then //如果用户单击取消,则允许关闭登录窗口
        canClose := true
      else
      if loginOk =true then //用户单击确定,同时登录成功,允许关闭登录窗口
        canClose := true
      else //用户单击确定,但登录成功,不允许关闭登录窗口
        canClose :=false;
    end;end.
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TLoginDlg = class(TForm)
        edtAccount: TEdit;
        edtPassword: TEdit;
        lblAccount: TLabel;
        lblPassword: TLabel;
        btnOK: TButton;
        btnCancel: TButton;
        procedure btnOKClick(Sender: TObject);
      private
        { Private declarations }
      public
      class function Execute:Boolean;
       function VerifyAccount:Boolean; //在登陆窗体中,需要提供两个方法,一个是提供从外部
        { Public declarations } //调用登录窗体的Execute类方法,另一个是验证用户是否合法
      end;                       //的VerifyAccount方法var
      LoginDlg: TLoginDlg;implementation
    class function TLoginDlg.Execute:Boolean; //通过判断模块窗体ModalResult的值来决定
    begin                                     //返回值,ModalResult的赋值将在VerifyAccount
       with TLoginDlg.Create(nil) do          //中进行
       try
          Result:=ShowModal=mrOk;
          finally
             Free;
             end;
             end;
     function TLoginDlg.verifyAccount:Boolean;
      var
         TextFileVar:TextFile;
         sUserName,sPassword,sLine:string;
         begin
           Result:=False;
           AssignFile(TextFileVar,'user.txt');
           Reset(TextFileVar);
           while not Eof(TextFileVar) do
           begin
              ReadLn(TextFileVar,sLine);
              sUserName:=Copy(sLine,0,Pos('=',sLine)-1);
              sPassword:=Copy(sLine,Pos('=',sLine)+1,MaxInt);
              if SameText(sUserName,edtAccount.text)and(sPassword=edtPassword.Text) then
                 begin
                    ModalResult:=mrOk;
                    Break;
                    end;
                    end;
                    CloseFile(TextFileVar);
                    Result:=ModalResult=mrOk;
                    end;{$R *.dfm}procedure TLoginDlg.btnOKClick(Sender: TObject);
    begin
    if not VerifyAccount then
     ShowMessage('账号或密码错误,请重新输入!');
    end;end.
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      TLoginDlg = class(TForm)
        edtAccount: TEdit;
        edtPassword: TEdit;
        lblAccount: TLabel;
        lblPassword: TLabel;
        btnOK: TButton;
        btnCancel: TButton;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        procedure btnOKClick(Sender: TObject);
      private
        { Private declarations }
      public
      class function Execute:Boolean;
            function VerifyAccount:Boolean;
        { Public declarations }
      end;var
      LoginDlg: TLoginDlg;implementation
    class function TLoginDlg.Execute:Boolean;
       begin
          with TLoginDlg.Create(nil) do
          try
             Result:=ShowModal=mrOk;
          finally
             Free;
             end;
             end;
       function TLoginDlg.VerifyAccount:Boolean;
        begin
           Result:=False;
           with ADOQuery1 do
           begin
               Parameters.ParamByName('UserName').Value:=edtAccount.Text;
               Parameters.ParamByName('passwords').Value:=edtPassword.Text;
               if Active then close;
               Open;
               if RecordCount >0 then ModalResult:=mrOk;
               end;
               Result:=ModalResult=mrOk;
               end;
    {$R *.dfm}procedure TLoginDlg.btnOKClick(Sender: TObject);
    begin
    if not VerifyAccount then
    ShowMessage('登陆有误!');
    end;end.
      

  5.   

    我也来贴一段代码:unit login;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, ExtCtrls, jpeg, DB, ADODB;type
      TFlogin = class(TForm)
        Panel1: TPanel;
        Image1: TImage;
        Label2: TLabel;
        Label3: TLabel;
        E_pwd: TEdit;
        Btn_dl: TBitBtn;
        btn_qx: TBitBtn;
        Bevel1: TBevel;
        adotb: TADOTable;
        cb_name: TComboBox;
        adotbname: TStringField;
        adotbpwd: TStringField;
        CheckBox1: TCheckBox;
        procedure Btn_dlClick(Sender: TObject);
        procedure btn_qxClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure E_nameKeyPress(Sender: TObject; var Key: Char);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        TimesID: integer; //限制登录的次数(超过三次退出)
      end;var
      Flogin: TFlogin;
      loginname: string; //记录登录用户名字implementationuses DM, Main;{$R *.dfm}
    //-----登录-----
    procedure TFlogin.Btn_dlClick(Sender: TObject);
    begin
      if (Trim(cb_name.Text) <> '') and (Trim(E_pwd.Text) <> '') then
      begin
        adotb.Connection := Fdm.adodx;
        adotb.TableName := 'users';
        TimesID := TimesID + 1;
        if TimesID <= 3 then
        begin
          adotb.Close;
          adotb.Open;
          if adotb.Locate('name', Trim(cb_name.Text), [loCaseInsensitive]) then
          begin
            if adotbpwd.Value = Trim(E_pwd.Text) then
            begin
              loginname := Trim(cb_name.Text);
              if not Assigned(FMain) then ModalResult := mrok
              else
              begin
                Close;
                FMain.FormShow(Sender);
              end;
            end
            else
            begin
              if TimesID < 3 then
              begin
                Application.MessageBox(PChar('密码错误,您还有' + InttoStr(3 - TimesID) + '次机会!'), PChar('XiaTMS'), MB_OK + MB_ICONINFORMATION);
                E_pwd.SetFocus;
              end
              else
              begin
                if TimesID = 3 then
                begin
                  Application.Terminate;
                end;
              end;
            end;
          end
          else
          begin
            Application.MessageBox(PChar('用户不存在,请您输入正确的用户名!'), PChar('XiaTMS'), MB_OK + MB_ICONINFORMATION);
            cb_name.SetFocus;
          end;
        end;
      end
      else
      begin
        Application.MessageBox(PChar('用户名和密码不能为空!'), PChar('XiaTMS'), MB_OK + MB_ICONINFORMATION);
        cb_name.SetFocus;
      end;
    end;procedure TFlogin.btn_qxClick(Sender: TObject);
    begin
      //主窗体没有建立(第一次登录)则退出
      if not Assigned(FMain) then Application.Terminate
      else
      begin
        //如果是注销则关闭
        if FMain.ZXFlag then Close;
      end;
    end;procedure TFlogin.FormShow(Sender: TObject);
    begin;
      cb_name.ItemIndex := 0;
      E_pwd.Text := '123';
      Btn_dl.SetFocus;
    end;
    //焦点控制
    procedure TFlogin.E_nameKeyPress(Sender: TObject; var Key: Char);
    begin
      if (Sender = cb_name) and (Key = #13) then E_pwd.SetFocus;
      if (Sender = E_pwd) and (Key = #13) then CheckBox1.SetFocus;
      if (Sender = CheckBox1) and (Key = #13) then Btn_dl.SetFocus;
    end;procedure TFlogin.FormCreate(Sender: TObject);
    var
      adotmp: TADOQuery;
    begin
      //---------------------------------------------------------
      adotmp := TADOQuery.Create(nil);
      adotmp.Connection := Fdm.adodx;
      adotmp.Close;
      adotmp.SQL.Text := 'select name from users';
      adotmp.Open;
      while not adotmp.Eof do
      begin
        cb_name.Items.Add(adotmp.FieldByName('name').AsString); //添加用户
        adotmp.Next;
      end;
      //---------------------------------------------------------
    end;end.
      

  6.   

    楼上的BEGIN END也太多了吧
                if TimesID = 3 then
                begin
                  Application.Terminate;
                end;
    这样的就没必要加了吧,多了看得眼睛花 
      

  7.   

    procedure TFlogin.Button_OKClick(Sender: TObject);
    begin
       Form2.Show();
       Form1.Hide();
    end;//是不是要这么简单的?