queyr1.close; query1.sql.clear; query1.sql.add('select count(*) from 教师 where username='''username''' and password='''password''''); qeury1.open; if query1.fields[0].asinteger=0 then form1.showmodual else begin queyr1.close; query1.sql.clear; query1.sql.add('select count(*) from 考生 where username='''username''' and password='''password''''); qeury1.open; if query1.fields[0].asinteger=0 then form2.showmodual; end;
这是登录窗体源代码 unit u_frmLogin;interfaceuses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, Db, ADODB,Dialogs;type TfrmLogin = class(TForm) Label1: TLabel; txtPassword: TEdit; OKBtn: TButton; CancelBtn: TButton; Label2: TLabel; cmbUserName: TComboBox; ADOTable1: TADOTable; procedure CancelBtnClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure OKBtnClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } bolSuccess:Boolean; //默认为False,True表示登录成功! procedure ListUserName; //列出用户帐号到ComboBox public { Public declarations } end;var frmLogin: TfrmLogin;implementationuses u_frmMain;{$R *.DFM}procedure TfrmLogin.CancelBtnClick(Sender: TObject); begin Close; //退出登录 end;procedure TfrmLogin.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:=True; //允许关闭登录对话框。 if not bolSuccess then //退出登录,则关闭登录对话框,再结束程序! frmMain.Close; //关闭主窗口,也就是关闭程序。 end;procedure TfrmLogin.OKBtnClick(Sender: TObject); begin {IndexOf方法从ComboBox中查找指定的文本,如果找到则返回索引值,否则返回-1} if cmbUserName.Items.IndexOf(cmbUserName.Text)<0 then ShowMessage('请选择正确的用户帐号!') else begin {在数据表中将当前指针移到用户所选择的帐,至于怎么移,还有很复杂的算法, 一口气写下来,这么多,现在正在头痛,不写了,给你一个动脑的机会!^_^! } {这里要求用户编号必须是10位,否则分离出来的用户编号就不正确!} if not ADOTable1.Locate('No', Copy(cmbUserName.Text,1,10),[]) then begin ShowMessage('找不到该帐号,请确定输入或设置的帐号是否正确!'); exit; //退出该过程 end;
{比较用户输入的密码!} if txtPassword.Text=ADOTable1.FieldByName('Password').AsString then begin bolSuccess:=True; Close; end else begin ShowMessage('密码错误,请重新输入!'); {先将焦点移到别的地方,再将焦点移回密码输入框,就可以选中 密码输入框的文本,等待输入,这是一个秘技哦!不要说没什么,打击我!哼!} OKbtn.SetFocus; txtPassword.SetFocus; end; end; end;procedure TfrmLogin.ListUserName; var i:Integer; begin ADOTable1.Close; ADOTable1.Connection:=frmMain.ADOConnection1; ADOTable1.TableName:='Users'; //数据表名称! ADOTable1.Open; //打开数据库表 cmbUserName.Clear; //先清空ComboBox for i:=0 to ADOTable1.RecordCount-1 do begin cmbUserName.Items.Add(ADOTable1.FieldByName('No').AsString+':'+ ADOTable1.FieldByName('Name').AsString); ADOTable1.Next; end; end;procedure TfrmLogin.FormCreate(Sender: TObject); begin ListUserName; //列出用户帐号 end;end.
gardenyang(太阳雨) 的方法基本可行
query1.sql.clear; query1.sql.add('select * from 教师 where username='''+username+''''+' and password='''+password+''''); qeury1.open; if not eof then form1.showmodual else begin queyr1.close; query1.sql.clear; query1.sql.add('select * from 考生 where username='''+username''''+ ' and password='''+password+''''); qeury1.open; if not eof then form2.showmodual; end;
query1.sql.clear;
query1.sql.add('select count(*) from 教师 where username='''username''' and password='''password'''');
qeury1.open;
if query1.fields[0].asinteger=0 then
form1.showmodual
else
begin
queyr1.close;
query1.sql.clear;
query1.sql.add('select count(*) from 考生 where username='''username'''
and password='''password'''');
qeury1.open;
if query1.fields[0].asinteger=0 then
form2.showmodual;
end;
unit u_frmLogin;interfaceuses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, Db, ADODB,Dialogs;type
TfrmLogin = class(TForm)
Label1: TLabel;
txtPassword: TEdit;
OKBtn: TButton;
CancelBtn: TButton;
Label2: TLabel;
cmbUserName: TComboBox;
ADOTable1: TADOTable;
procedure CancelBtnClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure OKBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
bolSuccess:Boolean; //默认为False,True表示登录成功!
procedure ListUserName; //列出用户帐号到ComboBox
public
{ Public declarations }
end;var
frmLogin: TfrmLogin;implementationuses u_frmMain;{$R *.DFM}procedure TfrmLogin.CancelBtnClick(Sender: TObject);
begin
Close; //退出登录
end;procedure TfrmLogin.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=True; //允许关闭登录对话框。
if not bolSuccess then //退出登录,则关闭登录对话框,再结束程序!
frmMain.Close; //关闭主窗口,也就是关闭程序。
end;procedure TfrmLogin.OKBtnClick(Sender: TObject);
begin
{IndexOf方法从ComboBox中查找指定的文本,如果找到则返回索引值,否则返回-1}
if cmbUserName.Items.IndexOf(cmbUserName.Text)<0 then
ShowMessage('请选择正确的用户帐号!')
else
begin
{在数据表中将当前指针移到用户所选择的帐,至于怎么移,还有很复杂的算法,
一口气写下来,这么多,现在正在头痛,不写了,给你一个动脑的机会!^_^!
}
{这里要求用户编号必须是10位,否则分离出来的用户编号就不正确!}
if not ADOTable1.Locate('No',
Copy(cmbUserName.Text,1,10),[]) then
begin
ShowMessage('找不到该帐号,请确定输入或设置的帐号是否正确!');
exit; //退出该过程
end;
{比较用户输入的密码!}
if txtPassword.Text=ADOTable1.FieldByName('Password').AsString then
begin
bolSuccess:=True;
Close;
end
else
begin
ShowMessage('密码错误,请重新输入!');
{先将焦点移到别的地方,再将焦点移回密码输入框,就可以选中
密码输入框的文本,等待输入,这是一个秘技哦!不要说没什么,打击我!哼!}
OKbtn.SetFocus;
txtPassword.SetFocus;
end;
end;
end;procedure TfrmLogin.ListUserName;
var
i:Integer;
begin
ADOTable1.Close;
ADOTable1.Connection:=frmMain.ADOConnection1;
ADOTable1.TableName:='Users'; //数据表名称!
ADOTable1.Open; //打开数据库表
cmbUserName.Clear; //先清空ComboBox for i:=0 to ADOTable1.RecordCount-1 do
begin
cmbUserName.Items.Add(ADOTable1.FieldByName('No').AsString+':'+
ADOTable1.FieldByName('Name').AsString);
ADOTable1.Next;
end;
end;procedure TfrmLogin.FormCreate(Sender: TObject);
begin
ListUserName; //列出用户帐号
end;end.
query1.sql.add('select * from 教师 where username='''+username+''''+' and password='''+password+'''');
qeury1.open;
if not eof then
form1.showmodual
else
begin
queyr1.close;
query1.sql.clear;
query1.sql.add('select * from 考生 where username='''+username''''+
' and password='''+password+'''');
qeury1.open;
if not eof then
form2.showmodual;
end;