取得用户名和密码,然后用adoquery查询数据库,sql语句如下 'select * from tablename where user='''+username+''' and password='''+password+'''; 如果返回结果不等于0,那么用户名和密码正确,正常登陆,否则,弹出“用户名或密码不正确”对话框
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.
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.
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.
我也来贴一段代码: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.
楼上的BEGIN END也太多了吧 if TimesID = 3 then begin Application.Terminate; end; 这样的就没必要加了吧,多了看得眼睛花
procedure TFlogin.Button_OKClick(Sender: TObject); begin Form2.Show(); Form1.Hide(); end;//是不是要这么简单的?
'select * from tablename where user='''+username+''' and password='''+password+''';
如果返回结果不等于0,那么用户名和密码正确,正常登陆,否则,弹出“用户名或密码不正确”对话框
就是简单了点
给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.
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.
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.
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.
if TimesID = 3 then
begin
Application.Terminate;
end;
这样的就没必要加了吧,多了看得眼睛花
begin
Form2.Show();
Form1.Hide();
end;//是不是要这么简单的?