📄 login.pas
字号:
{ **************************************************************}
{ login unit }
{ 实现系统数据库的动成连接,实现系统的登录,三次错误后就自动退出}
{ **************************************************************}
unit login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Buttons,inifiles,ADODB,ComObj,adoconed,
ExtCtrls, WinSkinData;
type
TFom_login = class(TForm)
GroupBox2: TGroupBox;
Label2: TLabel;
Bbt_cancle: TBitBtn;
Edt_pas: TEdit;
Dcb_name: TDBComboBox;
Label1: TLabel;
bbt_check: TBitBtn;
BitBtn1: TBitBtn;
Image1: TImage;
BitBtn2: TBitBtn;
ADOCommand: TADOCommand;
procedure FormCreate(Sender: TObject);
procedure bbt_checkClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Bbt_cancleClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
{ Private declarations }
public
{ Public declarations }
end;
var
Fom_login: TFom_login;
Logintimes:integer=0;
implementation
uses data, main, share;
{$R *.dfm}
procedure TFom_login.FormCreate(Sender: TObject);
begin
end;
//实现系统登录
procedure TFom_login.bbt_checkClick(Sender: TObject);
var
Password:String;
begin
DLYH_Q:=TADOQuery.Create(nil);
DLYH_Q.Connection:=dm.Connection;
DLYH_Q.SQL.Clear;
DLYH_Q.SQL.Add('select psw,username from login');
DLYH_Q.SQL.Add('where username='+#39+Trim(Dcb_name.Text)+#39);
DLYH_Q.Open;
if DLYH_Q.RecordCount > 0 then
begin
Password:=DLYH_Q.FieldValues['psw'];
if Edt_pas.Text=trim(Password) then
begin
fom_login.Visible:=false;
fom_main.ShowModal;
end
else
begin
Logintimes:=Logintimes+1;
if Logintimes < 3 then
begin
MessageBox(handle,pchar('密码第'+IntToStr(Logintimes)+'次错误,请重新输入!'),'密码错误',MB_OK OR MB_ICONERROR);
Edt_pas.Text:='';
Edt_pas.SetFocus;
end
else
begin
MessageBox(handle,'密码三次错误请关闭!','密码错误', MB_ICONERROR);
application.Terminate;
end;
end;
end;
DLYH_Q.Close;
FreeAndNil(DLYH_Q);
end;
procedure TFom_login.FormActivate(Sender: TObject);
var
i:integer;
begin
//*****************************************************
// 动态连接数据库
//****************************************************
filename:=ExtractFilePath(paramstr(0))+'dbconf.ini';
myinifile:=Tinifile.Create(filename);
dm.connection.Close;
dm.connection.ConnectionString:=myinifile.ReadString('dbconf','connectstring','');
try
dm.connection.Open;
dm.connection.Connected:=true;
dm.ADQ_worker.Active:=true;
dm.ADQ_departAchiv.Active:=true;
dm.ADQ_login.Active:=true;
dm.ADQ_personAchiv.Active:=true;
dm.ADQ_VpersonAchiv.Active:=true;
dm.ADQ_VdepartAchiv.Active:=true;
dm.ADQ_job.Active:=true;
dm.ADQ_department.Active:=true;
dm.ADQ_dinzhi.Active:=true;
except
showmessage('连接错误,请重新连接')
end;
myinifile.Free;
//********初始化控件****************
Edt_pas.SetFocus;
dm.ADQ_login.Last;
for i:=1 to dm.ADQ_login.RecordCount do
begin
Dcb_name.Items.Add(dm.ADQ_login.fieldbyname('userName').AsString);
dm.ADQ_login.Prior;
end;
end;
procedure TFom_login.Bbt_cancleClick(Sender: TObject);
begin
application.Terminate;
end;
procedure TFom_login.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType <> SC_CLOSE then // 屏蔽 ALT+F4
inherited;
end;
//*************************************************************
// 把连接字符串写入ini文件
//*************************************************************
procedure TFom_login.BitBtn1Click(Sender: TObject);
var
i:integer;
begin
filename:=ExtractFilePath(paramstr(0))+'dbconf.ini';
myinifile:=Tinifile.Create(filename);
dm.connection.Close;
EditConnectionString(dm.connection);
myinifile.WriteString('dbconf','connectstring',dm.connection.ConnectionString);
try
dm.connection.Open;
dm.connection.Connected:=true;
showmessage('连接重建成功');
except
showmessage('连接失败,请再次连接');
end;
dm.connection.Connected:=true;
dm.ADQ_worker.Active:=true;
dm.ADQ_departAchiv.Active:=true;
dm.ADQ_login.Active:=true;
dm.ADQ_personAchiv.Active:=true;
dm.ADQ_VpersonAchiv.Active:=true;
dm.ADQ_VdepartAchiv.Active:=true;
dm.ADQ_job.Active:=true;
dm.ADQ_department.Active:=true;
dm.ADQ_dinzhi.Active:=true;
myinifile.Free;
//********初始化控件****************
Edt_pas.SetFocus;
dm.ADQ_login.Last;
for i:=1 to dm.ADQ_login.RecordCount do
begin
Dcb_name.Items.Add(dm.ADQ_login.fieldbyname('userName').AsString);
dm.ADQ_login.Prior;
end;
end;
procedure TFom_login.BitBtn2Click(Sender: TObject);
var
s:string;
begin
s:='EXEC sp_attach_db @dbname = N'+char(39)+'yjgl1'+char(39)+','+
'@filename1 = N'+char(39)+ExtractFilePath(paramstr(0))+'data\yjgl1_Data.MDF'+char(39)+
','+'@filename2 = N'+char(39)+ExtractFilePath(paramstr(0))+'data\yjgl1_Log.LDF'+char(39);
ADOCommand.CommandText := s;
ADOCommand.Execute();
Messagebox(handle,'数据库安装成功!','提醒',MB_OK+MB_ICONINFORMATION);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -