怎样解决登陆界面的查询问题。。请进谢谢。 在设计用户登陆界面时,实行用户名可查询,在输入用户后加了一个查询按钮本人用SQL的数据库,可不知道怎么样来写这段代码,来实现查询并通过验证。 有哪为高高高手知道??谢谢急手中 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TLoginUserFrm.OkClick(Sender: TObject);var now_pass: String; i: integer;begin with LoginQry do begin now_pass:=ePassword.Text; if length(now_pass) mod 2 <> 0 then now_pass := now_pass + '1'; for i:=1 to length(now_pass) do now_pass[i]:=chr(ord(now_pass[i])+50); if Active then Close; Sql.Clear; Sql.Add('Select GH, XM, CZQX, KL, ZCRQ From CZYB'); Sql.Add(' Where GH = ''' + eWorkNo.Text + '''' + ' and KL = ''' + now_pass + ''''); try Open; sWorkNo := FieldByName('GH').AsString; sUserName := FieldByName('XM').AsString; sLimit := FieldByName('CZQX').AsString; Close; except Application.MessageBox('系统出错!!!', '失败信息', MB_OK); ModalResult := mrCancel; exit; end; // sWorkNo, suserName, slimit, sKey are global variable, define in Datamdl. end; if sWorkNo <> '' then begin with DM do begin ModalResult := mrOk; sPassword := now_pass; // MainFrm.StatusBar.Panels[1].Text := '操作员:' + sUserName; end; with LoginQry do begin Close; Sql.Clear; Sql.Add('Insert Into Log(DLSJ, DLGH, XM, DLZT)'); Sql.Add(' Values ( :a, :b, :c, :d)'); ParamByName('b').AsString := sWorkNo; ParamByName('c').AsString := sUserName; SP.Prepare; try SP.ExecProc; ParamByName('a').AsDateTime := SP.ParamByName('@RetDateTime').Value; //Get DateTime from Server dLoginTime := ParamByName('a').AsDateTime; ParamByName('d').AsString := '成功'; // Success ExecSql; except Application.MessageBox('系统出错!!!', '失败信息', MB_OK); ModalResult := mrCancel; exit; end; end; exit; end else begin iLoginNum := iLoginNum + 1; Application.MessageBox('登录失败!!!', '失败信息', MB_OK); with LoginQry do begin Close; Sql.Clear; Sql.Add('Insert Into Log(DLSJ, DLGH, XM, DLZT)'); Sql.Add(' Values ( :a, :b, :c, :d)'); ParamByName('b').AsString := eWorkNo.Text; ParamByName('c').AsString := eUserName.Text; SP.Prepare; try SP.ExecProc; ParamByName('a').AsDateTime := SP.ParamByName('@RetDateTime').Value; //Get DateTime from Server; ParamByName('d').AsString := '失败'; // Fail ExecSql; except Application.MessageBox('系统出错!!!', '失败信息', MB_OK); ModalResult := mrCancel; exit; end; end; if iLoginNum >= 3 then begin ModalResult := mrCancel; exit; end; eWorkNo.Text := ''; eUserName.Text := ''; ePassword.Text := ''; eWorkNo.SetFocus ; ModalResult := mrNone; end;end;自己改改吧 就是在你的用户名称的EDIT控件的OnChange事件中添加一句查询的代码,把存储用户信息的数据表的当前指针转移到该用户的位置上。================================当用户输入完毕密码后,敲“登陆”按钮时就检查当前位置的“密码”字段的值是否与有户输入的一致,就行了。 查询可以用: Table1.Locate();的方法。 lgqTiger(【老虎】)每次都看到有你的回答,是不是想升级到猩猩啊?^_^ 登陆界面上一般有2种,工号+PSW,选择登陆名+PSW,第一种EDIT录入参数后提交给DB去验证.第二种COMOBOX在FMCREAT中就将所有用户名拉出来填进去,EDIT输入密码,验证可以在本地,也可以在SERVER端.不知道你什么意思.难道是让用户输上1-2个字符,LIKE 选出库里的用户名? 如何在panel上绘图? delphi用什么皮肤比较好看? 0分帖赚分~~~ 招骋程序员 如何判断DBgrid左边的指针位置? 各位高手,请帮帮小弟!!多谢各位光临!! 请教各位朋友几各问题 DBGrid的小数问题 谁知道断点下载在DELPHI里如何实现? TApdComport控 和SPCOMM控件有什么区别 我的DELPHI7。0的安装后 怎么BDE管理器里只有 MQIS啊 dbgridEh的wordwrap功能问题!??
var now_pass: String;
i: integer;
begin
with LoginQry do
begin
now_pass:=ePassword.Text;
if length(now_pass) mod 2 <> 0 then
now_pass := now_pass + '1';
for i:=1 to length(now_pass) do
now_pass[i]:=chr(ord(now_pass[i])+50);
if Active then
Close;
Sql.Clear;
Sql.Add('Select GH, XM, CZQX, KL, ZCRQ From CZYB');
Sql.Add(' Where GH = ''' + eWorkNo.Text + '''' + ' and KL = ''' + now_pass + '''');
try
Open;
sWorkNo := FieldByName('GH').AsString;
sUserName := FieldByName('XM').AsString;
sLimit := FieldByName('CZQX').AsString;
Close;
except
Application.MessageBox('系统出错!!!', '失败信息', MB_OK);
ModalResult := mrCancel;
exit;
end;
// sWorkNo, suserName, slimit, sKey are global variable, define in Datamdl. end;
if sWorkNo <> '' then
begin
with DM do
begin
ModalResult := mrOk;
sPassword := now_pass;
// MainFrm.StatusBar.Panels[1].Text := '操作员:' + sUserName;
end;
with LoginQry do
begin
Close;
Sql.Clear;
Sql.Add('Insert Into Log(DLSJ, DLGH, XM, DLZT)');
Sql.Add(' Values ( :a, :b, :c, :d)');
ParamByName('b').AsString := sWorkNo;
ParamByName('c').AsString := sUserName;
SP.Prepare;
try
SP.ExecProc;
ParamByName('a').AsDateTime := SP.ParamByName('@RetDateTime').Value; //Get DateTime from Server
dLoginTime := ParamByName('a').AsDateTime;
ParamByName('d').AsString := '成功'; // Success
ExecSql;
except
Application.MessageBox('系统出错!!!', '失败信息', MB_OK);
ModalResult := mrCancel;
exit;
end;
end;
exit;
end
else
begin
iLoginNum := iLoginNum + 1;
Application.MessageBox('登录失败!!!', '失败信息', MB_OK);
with LoginQry do
begin
Close;
Sql.Clear;
Sql.Add('Insert Into Log(DLSJ, DLGH, XM, DLZT)');
Sql.Add(' Values ( :a, :b, :c, :d)');
ParamByName('b').AsString := eWorkNo.Text;
ParamByName('c').AsString := eUserName.Text;
SP.Prepare;
try
SP.ExecProc;
ParamByName('a').AsDateTime := SP.ParamByName('@RetDateTime').Value; //Get DateTime from Server;
ParamByName('d').AsString := '失败'; // Fail
ExecSql;
except
Application.MessageBox('系统出错!!!', '失败信息', MB_OK);
ModalResult := mrCancel;
exit;
end;
end;
if iLoginNum >= 3 then
begin
ModalResult := mrCancel;
exit;
end;
eWorkNo.Text := '';
eUserName.Text := '';
ePassword.Text := '';
eWorkNo.SetFocus ;
ModalResult := mrNone;
end;
end;
自己改改吧
的OnChange事件中添加一句查询的
代码,把存储用户信息的数据表
的当前指针转移到该用户的位置上。
================================
当用户输入完毕密码后,敲“登陆”
按钮时就检查当前位置的“密码”
字段的值是否与有户输入的一致,
就行了。
Table1.Locate();
的方法。
每次都看到有你的回答,是不是想升级到猩猩啊?^_^
第一种EDIT录入参数后提交给DB去验证.
第二种COMOBOX在FMCREAT中就将所有用户名拉出来填进去,EDIT输入密码,
验证可以在本地,也可以在SERVER端.
不知道你什么意思.
难道是让用户输上1-2个字符,LIKE 选出库里的用户名?