为什么会提示用户名或密码错误?(50分)

  • 主题发起人 主题发起人 wapftgdss
  • 开始时间 开始时间
W

wapftgdss

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟写了一个用户登陆程序,可运行时无论我输入正确的用户名密码还是输入错误的用户名密码程序都会提示用户名或密码错误,请问这是为什么?
我是先建立了一个Access数据库‘db1.mdb’,在里面新建了一个表,用来存放用户名和密码。
然后通过ADOConnection与它连接,Tpassword对应表‘mima’,连接成功了,编译也通过了
程序代码如下:
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
if (dm.Tadopassword.FieldByName('name').Text<>edit1.Text) or
(dm.Tadopassword.FieldByName('key').Text<>edit2.Text) then
begin
n:=n-1;//n的值为3。。输入错一次减1;
Messagebox(handle,pchar('错误的用户名或密码,你还有'+inttostr(n)+'次机会!'),'警告!',MB_ICONWARNING);
if n=0 then application.terminate;
edit1.Clear;
edit2.Clear;
end
else
begin

form1.ShowModal;
form2.Visible:=false;
end

end;
 
if (Trim(dm.Tadopassword.FieldByName('name').Text)<>edit1.Text) or
(Trim(dm.Tadopassword.FieldByName('key').Text)<>edit2.Text) then
 
1.检查后台表中是否有数据存在,
2.用Trim()函数截去空格字符串可能产生的影响,
3.输入的大小写是否完全一致
 
如果dm.Tadopassword是ADOTable
with dm.Tadopassword do
try
if not Locate('name', VarArrayOf([edit1.Text]), []) then
begin
n:=n-1;
......
end
else if FieldByName('key')=edit2.text then
begin
form1.ShowModal;
form2.Visible:=false;
end;
except
on E:Exception do
ShowMessage(e.Message);
end;

如果dm.Tadopassword是ADOQuery
with dm.Tadopassword do
try
Close;
SQL.text:='select * from mima where name='''+edit1.text+'''';
Open;
if RecordCount=0 then
begin
n:=n-1;
......
end
else
begin
first;
if FieldByName('key')=edit2.text then
begin
form1.ShowModal;
form2.Visible:=false;
end;
end;
except
on E:Exception do
ShowMessage(e.Message);
end;
 
其实你可以见到跟踪一次就知道是什么问题了,
或者你调试的时候加上之间变量,你自己检查。
t1:=dm.Tadopassword.FieldByName('name').Text;
t2:=dm.Tadopassword.FieldByName('key').Text;
if (t1<>edit1.Text) or (t2<>edit2.Text) then
....
另外,可能真的是没有去除空格的原因。变成这个检查看看。
t1:=trim(dm.Tadopassword.FieldByName('name').Text);
t2:=trim(dm.Tadopassword.FieldByName('key').Text);
if (t1<>edit1.Text) or (t2<>edit2.Text) then
....
 
调试一下,看看数据库中取出的数据到底是什么就清除了
 
你的语句中根本就没有关于N的循环,当然要出错,还有就是没有密码和用户名的比较语句。
 
调试跟踪一下,看到底取出来的是什么!
 
都不知你的查询语句怎么写!
如果是select * from mima,表里面一个用户那没话说.如果说是多个用户
建议还是用adoquery:用语句这样校验SQL.text:='select * from mima where name='''+edit1.text+'''';
 
谢谢各位,是我太大意了,输入数据库的时候用了全角。
另外,我不会调试,请问如何调试?用专门的调试软件吗?哪里有调试的教程?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
589
import
I
后退
顶部