procedure TLoginForm.BitBtn1Click(Sender: TObject);
var
tmp_pass:string;
begin
if Combobox1.Text='' then exit;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from user where username=:t1');
adoquery1.Parameters[0].Value:=trim(Combobox1.Text);
ADOQuery1.Open;
tmp_pass:=adoquery1.fieldbyname('userpass').AsString;//调用库中与用户名相关联的密码
if trim(Edit1.Text)<>tmp_pass then
begin
application.MessageBox('密码输入错误','注意',mb_iconquestion+mb_ok);
end
else
begin
username:=trim(Combobox1.Text);
loginForm.Hide;
MainForm.Show;
end;
end;运行时报错为[Error] login.pas(58): Incompatible types: 'TLabel' and 'String'
var
tmp_pass:string;
begin
if Combobox1.Text='' then exit;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from user where username=:t1');
adoquery1.Parameters[0].Value:=trim(Combobox1.Text);
ADOQuery1.Open;
tmp_pass:=adoquery1.fieldbyname('userpass').AsString;//调用库中与用户名相关联的密码
if trim(Edit1.Text)<>tmp_pass then
begin
application.MessageBox('密码输入错误','注意',mb_iconquestion+mb_ok);
end
else
begin
username:=trim(Combobox1.Text);
loginForm.Hide;
MainForm.Show;
end;
end;运行时报错为[Error] login.pas(58): Incompatible types: 'TLabel' and 'String'
改成,
ADOQuery1.SQL.Add('select * from user where username='':t1''');
字符串需要''
用一个combobox显示用户,edit输入密码。密码正确后进入mainform.否则关闭。
begin
LoginCount := 1;
T_Login_zt.TableName := 'hsdw';
T_login_zt.Open;
while not T_Login_zt.Eof do
begin
Login_zt.Items.Add(T_Login_zt.fieldbyname('dwdm').asstring+'['+T_Login_zt.fieldbyname('dwmc').asstring+']');
T_Login_zt.Next;
end;end;procedure TLogin_Win.Login_ztChange(Sender: TObject);
begin
T_Login_zt.First;
while (not T_Login_zt.Eof) and (trimright(T_Login_zt.fieldbyname('dwdm').asstring)<> trimright(copy(Login_zt.text,0,4))) do
T_Login_zt.Next;
ztdb := trimright(T_Login_zt.fieldbyname('dbname').asstring);
with d_M.A_Conn2 do
begin
Close;
ConnectionString :='Provider=SQLOLEDB.1;Persist Security Info=True;Data Source='+D_M.server+';User ID='+D_M.loginid+';Password='+D_M.loginpass;
DefaultDatabase := ztdb;
Open;
end;
with T_Login_czy do
begin
Close;
Connection := D_M.A_Conn2;
TableName := 'czy';
Open;
First;
end;
Login_Czy.Items.Clear;
while not T_Login_Czy.Eof do
begin
Login_czy.Items.Add(trimright(T_Login_Czy.fieldbyname('czyxm').asstring));
T_Login_Czy.next;
end;end;procedure TLogin_Win.Login_czyChange(Sender: TObject);
begin
T_Login_Czy.Open;
T_Login_Czy.first;
while not T_Login_Czy.eof and (trimright(T_Login_Czy.FieldByName('czyxm').asstring)<>trimright(Login_czy.Text)) do
T_Login_Czy.Next;
pass := trimright(T_Login_Czy.fieldbyname('czymm').asstring);
end;
procedure TLogin_Win.Login_OKClick(Sender: TObject);
begin
T_Login_Czy.Open;
if pass <> trimright(E_pass.text) then
begin
showmessage('ERROR Password!');
E_Pass.clear;
E_Pass.setfocus;
LoginCount := LoginCount + 1;
if LoginCount = 4 then
begin
Showmessage('登录失败,程序退出...');
Login_Win.Close;
Main_Win.Close;
end;
end
else
begin
with Main_Win do
begin
Programstatus := true;
czyid := Login_win.T_Login_czy.fieldbyname('czyid').asinteger;
czyxm := Login_Win.T_Login_Czy.fieldbyname('czyxm').asstring;
Main_StatBar.Panels[0].Text := formatdatetime('yyyy-mm-dd',date);
Main_StatBar.Panels[1].Text := Login_win.T_login_zt.fieldbyname('dwdm').asstring + Login_win.T_login_zt.fieldbyname('dwmc').asstring;
Main_StatBar.Panels[2].Text := Main_Win.czyxm;
enabled := true;
setfocus;
end;
self.close;
end;
end;这段程序绝对没有问题。原版拷贝
看他定位在那一段代码上!!!!!!!!!!!!!1
username是什么呀,变量还是Tlabel控件的name呀,
如果是后者username.caption:=trim(Combobox1.Text);
大概应改成:
username.Caption:= trim(Combobox1.Text);
begin
application.MessageBox('密码输入错误','注意',mb_iconquestion+mb_ok);
end
else
begin
username:=trim(Combobox1.Text); ///username?????????????????是什么??
loginForm.Hide;
MainForm.Show;
end;
end;
EDIT用户名
begin
while not adoquery1.eof do
begin
username.items.add(adoquery1.fields[0].asstring);
adoquery1.Next;
end;
end;procedure TLoginForm.Button1Click(Sender: TObject);begin
adoquery1.close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from user_table where username="'+username.SelText+'"') ;
adoquery1.open;
if pswedit.text=adoquery1.fields[1].AsString then
begin
mainform.Show;
loginform.Hide;
end
else
close;
end ;请指教
if pswedit.text=adoquery1.fields[1].AsString then
begin
mainform.Show;
loginform.Hide;
end
else
close;
1。第一个问题:
当adoquery1打开时,定位到第一条记录,然后判断pswedit的值是否和adoquery1的第一个字段的值相等;如果相等,则主窗口显示,登陆窗口隐藏
-----接着注意了:
如果不相等,则自己关闭。------然后呢?登陆窗口是主窗口吗?如果不是的话自己关闭后,对主窗口没有任何影响。所以在这一段应该加上关闭主窗口的代码。2。第二个错误:
每次点击button1的时候重新读数据库,生成数据集,这给服务器增加了很大的压力,如果只有一个人登录还好,如果有很多人同时登录呢?
我觉得对于选择操作员和输入认证密码可以只读一次就够了。你可以看看我的例子:T_login_czy指数据库中的操作员库,也可以用query实现。
一次读取,第一次放到操作员选择的列表,第二次判断密码。完全可以在本地完成。