我需要我的程序从数据库中登录用户。这需要一个潜水员号码(如用户名)和一个已经在数据库中的密码。不幸的是,我现在还不懂 SQL,我宁愿使用一种类似于我在这里所做的技术。我在运行时收到一条错误消息:adotblDiversInfo:无法对已关闭的数据集执行此操作。非常感谢您的提前帮助(: 这是我的代码:
procedure TfrmHomeScreen.btnLogInClick(Sender: TObject);
var
iDiverNumber : Integer;
sPassword, sKnownPassword : String;
bFlagDiverNumber, bFlagPassword, Result : Boolean;
begin
iDiverNumber := StrToInt(ledDiverNumber.Text);
sPassword := ledPassword.Text;
with frmDM do
adotblDiversInfo.Filtered := False;
frmDM.adotblDiversInfo.Filter := 'Diver Number' + IntToStr(iDiverNumber);
frmDM.adotblDiversInfo.Filtered := True;
if frmDM.adotblDiversInfo.RecordCount = 0 then
ShowMessage(IntToStr(iDiverNumber) + ' cannot be found')
else
begin
sKnownPassword := frmDM.adotblDiversInfo['Password'];
if sKnownPassword = sPassword then
ShowMessage('Login successful')
else
ShowMessage('Incorrect password. Please try again');
end;
end;
最佳答案
您遇到的错误是因为您在尝试访问数据集之前忘记打开它。使用 frmDM.adoTblDiversInfo.Open;
或 frmDM.adoTblDiversInfo.Active := True;
在尝试使用该表之前执行此操作。
如果您稍作更改,您的代码可能会更简单(也更快)。无需过滤整个数据集,只需查看是否可以找到
正确的记录即可。
procedure TfrmHomeScreen.btnLogInClick(Sender: TObject);
var
iDiverNumber : Integer;
begin
if not frmDM.adoTblDiversInfo.Active then
frmDM.adoTblDiversInfo.Open;
iDiverNumber := StrToInt(ledDiverNumber.Text);
sPassword := ledPassword.Text;
if frmDM.adoTblDiversInfo.Locate('Diver Number', iDiverNumber, []) the
begin
if frmDM.adoTblDiversInfo['Password'] = ledPassword.Text then
ShowMessage('Login successful')
else
ShowMessage('Invalid password. Please try again.');
end
else
ShowMessage(ledDiverNumber.Text);
end;
关于database - 登录显示错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739650/