📄 userlogin.~pas
字号:
unit UserLogin;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Variants, StdCtrls, Buttons, Mask, ExtCtrls ,Registry, Db, DBTables;
type
TFrmLogin = class(TForm)
Image1: TImage;
edUser: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
bbCancel: TBitBtn;
bbOK: TBitBtn;
edPwd: TEdit;
db1: TDatabase;
QryGn: TQuery;
QryUser: TQuery;
procedure FormCreate(Sender: TObject);
procedure bbOKClick(Sender: TObject);
procedure bbCancelClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
MyReg:TRegistry; //系统注册表
lastUser:String; //上次登录的用户名
validUser:String; //获取的有效用户名
valid:Boolean; //登录成功判断
fSuper:Boolean; //是否系统管理员
IsFirstTime:Boolean;
public
{ Public declarations }
end;
//得到用户信息的函数
function GetUser(var userName,MyPermission:String):Boolean;
implementation
uses mycommon;
{$R *.DFM}
procedure TFrmLogin.FormCreate(Sender: TObject);
begin
//变量初始化
lastUser:='';
validUser:='';
valid:=False;
fSuper:=False;
db1.LoginPrompt:=False;
db1.Params.Clear;
db1.Params.add('USER NAME='+pusername);
db1.Params.add('PASSWORD='+ppassword);
//访问注册表,取上次用户登录的工号
MyReg:=TRegistry.Create;
if MyReg.OpenKey('\Software\Gsmis\UserLog',True) then
begin
try
LastUser:=MyReg.ReadString('LastUser');
except
LastUser:='';
end;
MyReg.CloseKey ;
end;
edUser.Text :=LastUser; //给用户名赋值
end;
procedure TFrmLogin.bbOKClick(Sender: TObject);
var
QryTemp:TQuery;
begin
if IsFirstTime Then
begin
QryTemp:=TQuery.Create(Application);
QryTemp.DatabaseName:='LoginDb';
QryTemp.SQL.Add('insert into 操作用户信息 (用户工号,姓名,系统管理员,密码) Values (:pyhgh,:pxm,1,:pmm)');
QryTemp.parambyname('pyhgh').asstring:=edUser.text;
QryTemp.parambyname('pxm').asstring:='系统管理员';
QryTemp.parambyname('pmm').asstring:=Encrypt(edpwd.text);
QryTemp.ExecSQL;
Valid:=True;
ValidUser:=edUser.text;
fSuper:=True;
if (edUser.Text<>LastUser) then
if MyReg.OpenKey('\Software\Gsmis\UserLog',True) then
begin
MyReg.WriteString('LastUser',edUser.Text);
MyReg.CloseKey ;
end;
Close; //关闭窗口
end
else
begin
QryUser.close;
QryUser.parambyname('pyhgh').asstring:=edUser.text;
QryUser.parambyname('pmm').asstring:=Encrypt(edpwd.text);
QryUser.open;
if not QryUser.eof then
begin
Application.MessageBox('登录成功!','信息',mb_ok or mb_iconInformation);
Valid:=True;
ValidUser:=QryUser.fieldbyname('用户工号').asstring;
if QryUser.FieldByName('系统管理员').asboolean=True then fSuper:=True;
if (edUser.Text<>LastUser) then
if MyReg.OpenKey('\Software\Gsmis\UserLog',True) then
begin
MyReg.WriteString('LastUser',edUser.Text);
MyReg.CloseKey ;
end;
QryUser.close;
Close;
end;
if not valid then
begin
Application.MessageBox('用户名或密码错误,'+#13+'请重新输入!','错误',mb_ok or mb_iconError);
edUser.SetFocus;
end;
end;
end;
procedure TFrmLogin.bbCancelClick(Sender: TObject);
begin
close;
end;
procedure TFrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MyReg.Free;
if QryUser.Active =true then
QryUser.Close;
if QryGn.Active =true then
QryGn.Close;
if db1.Connected =true then
db1.Connected:=False;
end;
function GetUser(var userName,MyPermission:String):Boolean;
var
QryTemp:TQuery;
modCnt, i :word;
FrmLogIn: TFrmLogIn;
begin
userName:='';
MyPermission:='';
Result :=false;
FrmLogin:=TFrmLogIn.Create(Application);
with FrmLogin do
begin
try
QryTemp:=TQuery.Create(Application);
QryTemp.DatabaseName:='LoginDb';
with QryTemp do
begin
SQL.Clear;
SQL.Add('SELECT *');
SQL.Add('FROM 操作用户信息');
Open;
if eof then
begin
IsFirstTime:=True;
Caption:='第一次登录,设置管理员密码';
EdUser.Enabled:=False;
EdUser.Text:='Administrator';
end
else
begin
IsFirstTime:=False;
end;
end;
ShowModal;
if not valid then exit;
userName:=validUser;
QryGn.Active:=true;
modCnt:=QryGn.Fields[0].asInteger;
if fSuper then
begin
SetLength(MyPermission,modCnt);
for i:=1 to modCnt do MyPermission[i]:='Y';
end
else
begin
QryUser.close;
QryUser.parambyname('pyhgh').asstring:=edUser.text;
QryUser.parambyname('pmm').asstring:=Encrypt(edpwd.text);
QryUser.open;
MyPermission:=QryUser.FieldByName('权限').asString;
if Length(MyPermission)<modCnt then
begin
SetLength(MyPermission,modCnt);
for i:=Length(MyPermission) to modCnt do
MyPermission[i]:='N';
end;
end;
Result :=True;
finally
Free;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -