登录显示错误消息

时间:2014-11-04 16:04:29

标签: database delphi login filter

我需要我的程序从数据库中记录用户。这需要潜水员号码(如用户名)和密码已经在数据库中。不幸的是,我现在不知道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;

1 个答案:

答案 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;