我需要我的程序从数据库中记录用户。这需要潜水员号码(如用户名)和密码已经在数据库中。不幸的是,我现在不知道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;
答案 0 :(得分:1)
您获得的错误是因为您在尝试访问数据集之前忘记打开数据集。在尝试使用该表之前,请使用frmDM.adoTblDiversInfo.Open;
或frmDM.adoTblDiversInfo.Active := True;
。
如果你稍微改变它,你的代码可能会更简单(也更快)。不要过滤整个数据集,只需查看是否可以Locate
正确记录。
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;