2012-07-13 94 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

相關問題