【问题标题】:How to read all database entries?如何读取所有数据库条目?
【发布时间】:2023-03-13 18:23:01
【问题描述】:

这是我目前得到的代码:

procedure TfrmLogin.performQuery;
begin
 query.SQL.Text := 'SELECT * FROM LoginDatabase';
 query.Open;
end;

procedure TfrmLogin.FormCreate(Sender: TObject);
begin
 con := TFDConnection.Create(nil);
 query := TFDQuery.Create(con);
 con.LoginPrompt := false;
 con.Open('DriverID=SQLite;Database=C:\Users\katiee\Documents\Embarcadero\' +
 'Studio\Projects\ProgramDatabase;');
 query.Connection := con;
 performQuery;

 username := query.FieldByName('Username').AsString;
 passcode := query.FieldByName('Passcode').AsString;
end;

procedure TfrmLogin.btnLoginClick(Sender: TObject);
begin
 if (edtUsername.Text = username) and (edtPasscode.Text = passcode) then
 frmPayInfo.show
 else
 if MessageDlg('The username or password entered is incorrect.', mtWarning,
 [mbOK, mbCancel], 0) = mrCancel then
 frmLogin.Close;
end; 

现在的代码,因为它不读取所有数据库条目,只允许第一个数据库条目作为正确答案。

我需要能够从数据库中输入用户名和密码的任何正确组合并打开表单。

【问题讨论】:

  • 您似乎正在尝试从表中读取所有数据,并使用程序代码查看用户名+密码是否在其中。更好的方法是将值作为参数提供给查询,并且只获取您需要的数据。获取数据库来完成这项工作。不要发送/接收您不需要的数据。当然,正确的建议是不要推出自己的安全性。这绝不是一个好主意。

标签: sql database sqlite delphi-xe8


【解决方案1】:

为什么不对数据集调用 .Locate 方法?这样您就不会像使用参数化查询那样打开和关闭数据集。

使用 .Locate 方法将允许您检查(基于一个或多个字段)是否可以找到某个记录。

如果找到记录,.Locate 将返回 true。

例如。

if query.Locate('username;passcode', VarArrayOf([query.FieldByName('Username').AsString, query.FieldByName('Passcode').AsString]), [loPartialKey]) then
begin
 frmPayInfo.show;
end
else
begin
 Showmessage('User not found, or password incorrect');
end;

我这台机器上没有 Delphi,所以语法可能不是 100%。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多