这是我目前的代码:
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;
现在代码,因为它不读取所有数据库条目,只允许第一个数据库条目作为正确答案。
我需要能够从数据库中输入用户名和密码的任何正确组合并打开表单。
答案 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%。