嗨我有一個德爾福7項目任務,我們需要包括一個登錄系統。我有一個註冊頁面,數據發送到Access中的表格。現在,當用戶需要登錄時,需要檢查他/她的信息是否存在,然後他將被授予進一步的權限,但不知道如何執行此操作。如何通過Delphi檢查MS Access(數據庫)中是否存在記錄?
回答
以來,它一直我升級到2005年的一段時間,所以我無法測試它的德爾福7,但在2005年德爾福和至少,你可以使用以下過程:
USES {$IFDEF UseParmsEvenThoughTheyAreNotNecessary } DB {$ELSE } StrUtils {$ENDIF } ,ADODB;
FUNCTION CanLogIn(CONST UserName,Password : STRING ; CONST AccessDatabaseFile,TableName,UserField,PasswordField : STRING) : BOOLEAN;
VAR
Connection : TADOConnection;
DataSet : TADODataSet;
FUNCTION AccessConnStr(CONST FileName : STRING) : STRING;
BEGIN
{$IFDEF CPUX64 }
Result:='Provider=Microsoft.ACE.OLEDB.12.0;Data source='+FileName
{$ELSE }
Result:='Provider=Microsoft.Jet.OLEDB.4.0.0;Data Source='+FileName
{$ENDIF }
END;
{$IFNDEF UseParmsEvenThoughTheyAreNotNecessary }
FUNCTION QuotedStr(CONST STR : STRING) : STRING;
BEGIN
Result:=''''+ReplaceStr(STR,'''','''''')+''''
END;
{$ENDIF }
BEGIN
Connection:=TADOConnection.Create(NIL);
TRY
Connection.ConnectionString:=AccessConnStr(AccessDatabaseFile);
TRY
Connection.Connected:=TRUE;
TRY
DataSet:=TADODataSet.Create(NIL);
TRY
DataSet.CommandType:=cmdText;
{$IFDEF UseParmsEvenThoughTheyAreNotNecessary }
DataSet.ParamCheck:=TRUE;
DataSet.Parameters.CreateParameter('UserName',ftString,pdInput,80,UserName);
DataSet.Parameters.CreateParameter('Password',ftString,pdInput,80,Password);
DataSet.CommandText:='SELECT * FROM ['+TableName+'] WHERE ['+UserField+']=:UserName AND ['+PasswordField+']=:Password';
{$ELSE }
DataSet.ParamCheck:=FALSE;
DataSet.CommandText:='SELECT * FROM ['+TableName+'] WHERE ['+UserField+']='+QuotedStr(UserName)+' AND ['+PasswordField+']='+QuotedStr(Password);
{$ENDIF }
TRY
DataSet.Open;
TRY
Result:=NOT DataSet.EOF
FINALLY
DataSet.Close
END
EXCEPT
Result:=FALSE
END
FINALLY
DataSet.Free
END
FINALLY
Connection.Close
END
EXCEPT
Result:=FALSE
END
FINALLY
Connection.Free
END
END;
參數:
UserName = Name of the user attempting to log in
Password = Password of the user
AccessDatabaseFile = The access database file
TableName = The name of the table containing the UserName/Password for allowed users
UserField = The name of the field in the above table that contains the user name
PasswordField = The name of the field in the above table that contains the password for the user
如果發生異常(找不到文件,錯誤的表名/字段名或你有什麼),該功能捕捉這些並返回FALSE。只有當整個函數成功並且用正確的密碼在表中找到用戶時,該函數是否返回TRUE。
即使這樣做,使用參數總是正確的做法。作爲額外的獎勵,你不必做QuotedStr混亂! (FYI QuotedStr是Delphi中的一個函數) – whosrdaddy
「Right」由誰的定義?當然不是我的。如果不僅「會是這樣」(從SQL注入安全) - 是IS。我之前對人們提出過挑戰,他們從來沒有能夠用這種類型的SQL語句構建來進行SQL注入。你可以嗎? :-) – HeartWare
請參閱http://www.sqlinjectionwiki.com/Categories.aspx?catId=6和http://www.securityfocus.com/archive/1/511061/30/8400/threaded,瞭解您的代碼爲什麼是失敗。 – Johan
- 1. 如何檢查在Access數據庫中是否存在記錄
- 2. 如何使用vb.net檢查ms access數據庫中是否存在記錄?
- 3. C#如何在將大量數據插入MS Access數據庫之前檢查記錄是否存在?
- 4. 檢查MS Access數據庫表是否存在創建它
- 5. 如何檢查MS Access數據庫中是否存在指定的列?
- 6. 如何使用Delphi通過LAN連接到MS Access數據庫?
- 7. 如何檢查數據庫記錄是否存在?
- 8. 通過n記錄查詢MS Access Group
- 9. 檢查記錄的存在,在Access數據庫中使用C#
- 10. [VB.NET] [ACCESS]如何檢查數據庫是否存在?
- 11. 檢查數據庫中是否存在該記錄
- 12. 檢查數據庫中是否存在記錄
- 13. 檢查數據庫中是否存在與Javascript的記錄
- 14. Android SQL:檢查數據庫中是否存在記錄
- 15. 檢查記錄是否已經存在於數據庫中
- 16. CollectionAssociation.include?檢查數據庫中是否存在記錄?
- 17. Rails檢查數據庫中是否存在記錄
- 18. 檢查數據庫中是否存在記錄
- 19. Doctorine檢查數據庫中是否存在記錄
- 20. 在刪除C#和MS Access中的記錄之前檢查ID是否存在
- 21. 通過C#向MS Access數據庫添加記錄
- 22. 檢查數據庫是否有記錄
- 23. 如何檢查是否存在數據湖表中的記錄
- 24. 如何檢查數據視圖中是否存在記錄? C#
- 25. 如何檢查數據庫中是否存在記錄或不在sqlite中?
- 26. 如何檢查是否有記錄存在與否在ms訪問數據庫中插入#
- 27. 如何檢查記錄是否存在
- 28. 檢查數據庫中是否存在IP(通過$ _SERVER發送)?
- 29. 檢查記錄是否已經存在於MySQL數據庫
- 30. 如何檢查數據庫中是否有記錄?
先試,然後問。一路上至少必須有*你已經想出的東西。 – Sumurai8
當然,你可以搜索如何使用Delphi和ADO與Access,並且至少拿出*某種*努力來自己做這件事。谷歌'delphi數據庫教程',至少。 –