2,497
社区成员
发帖
与我相关
我的任务
分享
Application.Initialize;
Application.Title := '管理系统';
Application.CreateForm(TDM, DM);
if DM.Login = 1 then
Application.CreateForm(TfrmMain, frmMain)
else
Application.Terminate;
Application.Run;
function TDM.Login: Integer;
var
sUser, sPwd: string;
begin
sUser := '';
sPwd := '';
Result := UserLogin(sUser, sPwd, True, True); //因User为'', 后面两个参数忽略
end;
function UserLogin(var aUser, aPwd: string; aCheck, aShowMsg: Boolean): Integer;
begin
Result := 0;
if aUser = '' then
begin
with TfrmLogin.Create(Application) do
begin
lcbUser.Text := DM.RegIniFile.ReadString('Config', 'UserCode', '');
if ShowModal <> mrOK then
Application.Terminate
else
Result := 1;
end;
end
else
Result := CheckUser(aUser, aPwd, aCheck, aShowMsg);
end;
function CheckUser(var aUser, aPwd: string; aCheck, aShowMsg: Boolean): Integer;
var
s1, s2: string;
begin
Result := 0;
aPwd := Trim(aPwd);
if Length(Trim(aUser)) > 0 then
s2 := Trim(aUser)
else
begin
aUser := Trim(aUser);
if aShowMsg then
begin
Result := -1;
MessageBox(Application.Handle, '请输入正确的登录名', '提示信息', MB_OK or MB_ICONWARNING);
end;
Exit;
end;
with TADOQuery.Create(frmLogin) do
try
Connection := DM.conn;
SQL.Text := 'Select * from userinfo where usercode = ''' + s2 + '''';
Open;
First;
if not Eof then
begin
s1 := FieldByName('userpwd').AsString;
if aCheck then
begin
if UpperCase(s1) = UpperCase(aPwd) then
begin
aUser := FieldByName('username').AsString;
aPwd := FieldByName('sec_word').AsString;
Result := 1;
Exit;
end
else
begin
if aShowMsg then
begin
Result := -2;
MessageBox(Application.Handle,
'密码无法通过验证,请重新输入', '提示信息', MB_OK or MB_ICONWARNING);
end;
Exit;
end; //if UpperCase(s1) = UpperCase(aPwd) then
end
else
begin
aUser := FieldByName('username').AsString;
aPwd := FieldByName('sec_word').AsString;
Result := 1;
Exit;
end; //if aCheck then
end; //if not Eof then
finally
Close;
Free;
end; //try
{ Now, found nothing. Because no the User }
if aShowMsg then
begin
Result := -3;
MessageBox(Application.Handle, '非法用户,请检查输入是否正确', '提示信息', MB_OK or MB_ICONWARNING);
end;
end;
procedure TfrmLogin.RzBitBtn1Click(Sender: TObject);
var
u, p, t: string;
n: integer;
begin
u := Trim(lcbUser.Text);
p := Trim(edPwd.Text);
t := u; //检测密码函数不返回登录名,必须预先取得
n := CheckUser(u, p, True, True); //检测密码时,用户名称和权限分别从u和p中返回
Case n of
1: begin
GVar.GUserCode := t;
GVar.GUserName := u;
GVar.GSecWord := p;
DM.RegIniFile.WriteString('Config', 'UserCode', t);
Dm.Log('登录进入系统');
RzBitBtn4.Click;
Exit;
end;
-1, -3: lcbUser.SetFocus;
-2: edPwd.SetFocus;
Else //0
//Nothing
end;
FTry := FTry + 1;
if FTry >= 3 then
begin
if not FLog then Dm.Log('试图进入本系统,错误已经达到三次以上', t, u);
FLog := True;
MessageBox(Handle, '试图登录进入本系统的次数已经达到三次,'
+ '这一情况已经被记录到系统日志中!', '提示信息', MB_OK or MB_ICONSTOP);
end;
end;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from users where id=:strid and pwd=:strpwd');
ADOQuery1.Parameters.ParamByName('strid').Value:=Edit1.Text;
ADOQuery1.Parameters.ParamByName('strpwd').Value:=Edit2.Text;
open;
end;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from users where id=:strid and pwd=:strpwd');
Parameters.ParamByName('strid').Value:=Edit1.Text;
Parameters.ParamByName('strpwd').Value:=Edit2.Text;
Open;
end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Terminate;;
end;