📄 un_systemlogin.pas
字号:
unit Un_SystemLogin;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
MydbManager, Un_DAO, LoginFrm;
type
TLoginUser=class
Id: Integer;
UserId: string;
UserName: string;
Password: string;
IsSA: Boolean;
end;
TLoginUserObject=class
private
FDAO: TDAO;
FLoginUser: TLoginUser;
public
constructor Create;
destructor Destroy; override;
function GetLoginUser(UserId: string): TLoginUser;
end;
TSystemEntrance = class(TDataModule)
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
{ Private declarations }
FUserId: string;
FPassword: string;
FContinued: Boolean;
FDbLinkParams: TDbLinkParams;
FDbLinkRegister: TDbLinkRegister;
FDatabaseManager: TDatabaseManager;
function GetDbLinkParams: Boolean;
function GetUserLoginData(LoginForm: TLoginForm): Boolean;
procedure DoConnect;
procedure DBLinkSetupButtonClick(Sender: TObject);
function SetDbLinkParams(ShowMSG: string): Boolean;
function GetConnected: Boolean;
procedure RecordUserInfo(LoginUser: TLoginUser);
function CheckValidityUser: Boolean;
procedure LoginSystem;
public
{ Public declarations }
property Continued: Boolean read FContinued;
procedure LoadPlugins;
end;
var
SystemEntrance: TSystemEntrance;
implementation
uses
DbLinkSetupFrm, Show, Un_Dialogs, Publics, Un_System,
Un_PluginManager, Un_SysIni;
{$R *.DFM}
procedure TSystemEntrance.DoConnect;
var
ShowForm: TShowForm;
begin
ShowForm:= TShowForm.Create(nil);
ShowForm.Label1.Caption:= '正在连接数据库服务器...';
ShowForm.Show;
ShowForm.Update;
try
try
FDatabaseManager.ConnectDB(FDbLinkParams);
MyAppDatabase:= FDatabaseManager.Database;
except
on E:Exception do begin
ShowForm.Close;
ZWMessageDlg('系统服务器连接不成功,确认设置是否正确!',
mtZWError,[mbZWOK],0,'系统提示');
end;
end;
finally
ShowForm.Free;
end;
end;
procedure TSystemEntrance.DBLinkSetupButtonClick(Sender: TObject);
begin
if SetDbLinkParams('请确认你的数据库连接') then
FDbLinkRegister.WriteRegInfo(FDbLinkParams);
end;
function TSystemEntrance.GetUserLoginData(LoginForm: TLoginForm): Boolean;
begin
Result:= False;
with LoginForm do begin
DbLinkSetupButton.OnClick:= DBLinkSetupButtonClick;
if ShowModal=mrOk then begin
FUserId:= UserNameEdit.Text;
FPassword:= PasswordEdit.Text;
Result:= True;
end;
end;
end;
procedure TSystemEntrance.DataModuleCreate(Sender: TObject);
begin
FDbLinkRegister:= TDbLinkRegister.Create;
FDatabaseManager:= TDatabaseManager.Create;
FContinued:= False;
if not GetDbLinkParams then
Application.Terminate;
LoginSystem;
end;
procedure TSystemEntrance.DataModuleDestroy(Sender: TObject);
begin
FDbLinkRegister.Free;
FDatabaseManager.Free;
end;
function TSystemEntrance.GetDbLinkParams: Boolean;
begin
Result:= True;
if not FDbLinkRegister.ReadRegInfo(FDbLinkParams) then begin
if SetDbLinkParams('这是你第一次使用该系统,'+#13#10+'请确认你的数据库连接') then
FDbLinkRegister.WriteRegInfo(FDbLinkParams)
else
Result:= False;
end;
end;
function TSystemEntrance.SetDbLinkParams(ShowMSG: string): Boolean;
begin
with TDbLinkSetupForm.Create(nil) do begin
ShowMSGLabel.Caption:= ShowMSG;
with FDbLinkParams do begin
ServerNameEdit.Text := ServerName;
DBNameEdit.Text := DatabaseName;
DBUserNameEdit.Text := DBUserName;
DBPasswordEdit.Text := DBPassword;
end;
try
if ShowModal=mrOK then begin
with FDbLinkParams do begin
ServerName := ServerNameEdit.Text;
DatabaseName := DBNameEdit.Text;
DBUserName := DBUserNameEdit.Text;
DBPassword := DBPasswordEdit.Text;
end;
Result:= true;
end
else
Result:= false;
finally
Free;
end;
end;
end;
function TSystemEntrance.GetConnected: Boolean;
begin
Result:= FDatabaseManager.Connected;
end;
procedure TSystemEntrance.LoadPlugins;
begin
try
TPluginFactory.Instance.LoadPlugins;
except
on E: Exception do
raise Exception.Create('插件时调入发生错误,系统将关闭!'
+#13#10+'错误原因:'+E.Message);
end;
end;
function TSystemEntrance.CheckValidityUser: Boolean;
var
LoginUser: TLoginUser;
LoginUserObject: TLoginUserObject;
begin
LoginUserObject:= TLoginUserObject.Create;
try
LoginUser:= LoginUserObject.GetLoginUser(FUserId);
if LoginUser=nil then
result:= false
else begin
if LoginUser.Password=FPassword then begin
Result:= True;
RecordUserInfo(LoginUser);
end
else
Result:= False;
end;
finally
LoginUserObject.Free;
end;
end;
{ TLoginUserObject }
constructor TLoginUserObject.Create;
begin
FDAO:= TDAO.Create;
FLoginUser:= TLoginUser.Create;
end;
destructor TLoginUserObject.Destroy;
begin
FDAO.Free;
FLoginUser.Free;
inherited;
end;
function TLoginUserObject.GetLoginUser(UserId: string): TLoginUser;
begin
FDAO.SQL:= 'Select Id,UserId,UserName,Password,IsSA '
+'From MyUsers where UserId="'+UserId+'" and Useable=1';
FDAO.ExecuteQuery;
if FDAO.ResultSet.Bof and FDAO.ResultSet.Eof then
Result:= nil
else begin
FLoginUser.Id:= FDAO.ResultSet.fieldByName('Id').AsInteger;
FLoginUser.UserId:= FDAO.ResultSet.fieldByName('UserId').AsString;
FLoginUser.IsSA:= FDAO.ResultSet.fieldByName('IsSA').AsInteger=1;
FLoginUser.UserName:= FDAO.ResultSet.fieldByName('UserName').AsString;
FLoginUser.Password:= Decrypt(FDAO.ResultSet.fieldByName('Password').AsString);
Result:= FLoginUser;
end;
end;
procedure TSystemEntrance.LoginSystem;
var
LoginCount: Integer;
LoginForm: TLoginForm;
SystemRegister: TSystemRegister;
begin
LoginCount:= 0;
SystemRegister:= TSystemRegister.Create;
LoginForm:= TLoginForm.Create(nil);
LoginForm.UserNameEdit.Text:= SystemRegister.GetLastLoginUser;
LoginForm.LoginShowInfo.Caption:= '';
try
repeat
if (LoginCount=4)or(not GetUserLoginData(LoginForm)) then begin
Application.Terminate;
Break;
end;
DoConnect;
if GetConnected then begin
if CheckValidityUser then begin
FContinued:= True;
SystemRegister.RegisteLastLoginUser(FUserId);
Break;
end
else begin
Inc(LoginCount);
LoginForm.LoginShowInfo.Caption:= '第'+IntToStr(LoginCount)+'次用户或者密码输入错误';
FDatabaseManager.DisConnect;
end;
end;
until False;
finally
SystemRegister.Free;
LoginForm.Free;
end;
end;
procedure TSystemEntrance.RecordUserInfo(LoginUser: TLoginUser);
begin
with TAppSystemInfo.Instance do begin
UId:= LoginUser.Id;
UserId:= LoginUser.UserId;
UserName:= LoginUser.UserName;
IsSA:= LoginUser.IsSA;
end;
end;
initialization
Application.CreateForm(TSystemEntrance, SystemEntrance);
//finalization
// FreeAndNil(SystemEntrance);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -