2012-07-13 96 views
2

我想在Delphi中创建一种登录窗口。不幸的是,我无法让它匹配用户名和密码。Delphi中的数据库用户名和密码?

我有一个基本的.mdb数据库,用户表。在这张表中,有一个用户名和密码。我希望Delphi检查数据库中的用户名和密码,如果它与编辑框中的用户名和密码匹配,它会转到下一个表单或显示一条消息,否则它不会执行任何操作。当我输入数据库的第一行,用户名和密码值时,我获得成功,但第二行没有。我觉得我需要一种方法让它移动到第二行的值并检查那些等等。目前在数据库中也没有关系。

这是我的数据访问的布局:的ADOConnection - > ADOTable - 提前>数据源

谢谢!

+0

您可以包括结构的表和你用来验证用户和密码的代码? – RRUZ 2012-07-13 23:46:54

+0

你最好不要在数据库中存储一个简单的密码,但使用一些含盐的散列(例如用户名)... – 2012-07-14 07:54:37

+0

我得到的想法是,OP可能认为你的Hash with Some Salt实际上是一些早餐食品,涉及土豆。 – 2012-07-16 20:57:13

回答

1

根据您的猜测,一种解决方案可以通过记录移动记录来检查每个记录。例如:

function MatchPass(Table: TADOTable; const Name, Pass: string): Boolean; 
begin 
    Result := False; 
    Table.First; 
    while not Table.Eof do begin 
    if Table.FieldByName('Username').AsString = Name then begin 
     Result := Table.FieldByName('Password').AsString = Pass; 
     Exit; 
    end; 
    Table.Next; 
    end; 
end; 

可以这样调用:

if MatchPass(ADOTable1, Edit1.Text, Edit2.Text) then 
    .. 


另一种解决方案可以让一个相应的记录ADOTable搜索:

function MatchPass(Table: TADOTable; const Name, Pass: string): Boolean; 
begin 
    Result := Table.Locate('Username;Password', VarArrayOf([Name, Pass]), []); 
end; 
+0

是不是更好只是使用一个SQL语句? – RRUZ 2012-07-13 23:50:24

+0

@RRUZ - 我不确定其中哪一个会有很大的优势。但是我们已经在问题中给出了ADOTable。 – 2012-07-13 23:53:13

+0

谢谢Sertac!我没有理由使用ADOTable,而不是ADOQuery。所以出于好奇,SQL语句会是什么样子? – coder123 2012-07-14 07:18:40

相关问题