如何读取所有数据库条目?

时间:2015-12-13 23:55:58

标签: sql database sqlite delphi-xe8

这是我目前的代码:

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; 

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

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

1 个答案:

答案 0 :(得分:0)

为什么不在数据集上调用.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%。