下面是我自己写的代码:procedure TForm1.Button2Click(Sender: TObject);
var
sqlstr:string;
begin
sqlstr:='select name from pswd where name = ''' + edit1.Text + '''';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.Open;
if adoquery1.RecordCount >0 then
begin
sqlstr:='select pass from pswd where pass = ''' + edit2.Text + '''';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.Open;
if adoquery1.RecordCount >0 then
begin
form2.Show;
form1.Hide;
edit1.Clear;
edit2.Clear;
end
else
showmessage('密码错误!');
end else
showmessage('用户名错误!');
end;环境:delphi7 Access2003才学没多久,只能想到这些,但这样写问题很多.
问题1: 如果里数据库表里面有多个用户名和密码,比如说AB两套用户名和密码,这样就会出现A的用户名用B的密码也能登陆.问题2: 输入用户名和密码后在后面如果再在后面加上空格,程序判断是正确的,照样能登陆.其他问题还没发现,希望高手帮忙指点一下,改怎么写,谢谢了!!!
var
sqlstr:string;
begin
sqlstr:='select name from pswd where name = ''' + edit1.Text + '''';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.Open;
if adoquery1.RecordCount >0 then
begin
sqlstr:='select pass from pswd where pass = ''' + edit2.Text + '''';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.Open;
if adoquery1.RecordCount >0 then
begin
form2.Show;
form1.Hide;
edit1.Clear;
edit2.Clear;
end
else
showmessage('密码错误!');
end else
showmessage('用户名错误!');
end;环境:delphi7 Access2003才学没多久,只能想到这些,但这样写问题很多.
问题1: 如果里数据库表里面有多个用户名和密码,比如说AB两套用户名和密码,这样就会出现A的用户名用B的密码也能登陆.问题2: 输入用户名和密码后在后面如果再在后面加上空格,程序判断是正确的,照样能登陆.其他问题还没发现,希望高手帮忙指点一下,改怎么写,谢谢了!!!
'select pass from pswd where name = ''' + edit1.Text + ''' pass = ''' + edit2.Text + ''''
不就好了?有空格理论上是不应该相同的啊,你是不是做了Trim之类的操作?
'select pass from pswd where name = ''' + edit1.Text + ''' and pass = ''' + edit2.Text + ''''
'select name from pswd where name = ''' + edit1.Text + ''' and pass = ''' + edit2.Text + '''';
啊?
干嘛要分开来写?
然后只要
if adoquery1.IsEmpty then //表示没记录
ShowMessage('用户名/密码错误!');
先查询存在该用户名的记录,然后再查询这些用户名中的该密码是不是输入的密码。
但是,你的ADOQuery事实上是执行了两次查询,它不会在你第一次查询的结果中执行第二次的查询。如一楼OK:
'select pass from pswd where name = ''' + edit1.Text + ''' pass = ''' + edit2.Text + ''''
'select name from pswd where name = ''' + trim(edit1.Text) + '''''select pass from pswd where name = ''' + trim(edit1.Text) + ''' and pass = ''' + trim(edit2.Text) + ''''
查询已经按照kernelj改过来了,避免了问题1的错误,想问问kernelj过滤掉空格改怎么做啊,谢谢了!!
过滤掉空格就可以了。两个查询分别改为。
'select name from pswd where name = ''' + trim(edit1.Text) + '''' 就应该这样查询呀,我也学会了谢谢
================================================================