与Delphi有奇怪的ADO数据库问题

时间:2015-10-28 13:41:07

标签: delphi delphi-7 ado

我非常感谢我为一个学校项目提供的帮助。你们认为可能出错了什么? 我和一位朋友说过,我必须确保在任何给定时间我只有1个表的活动属性设置为true。我试过这个,但它似乎没有什么区别。也许我做得不好?

这是我程序的代码:

procedure TForm1.btnChangePassUserClick(Sender: TObject);
var
  sNewPass,sOldPass:string;
begin
  sOldPass:= InputBox('Password verification','Please enter your current password','');

  if sOldPass = sPassword then
  begin
      sNewPass := inputBox('Password change','Please enter a new Password with at least 1 number and letter','');
      if isPasswordValid(sNewPass) then
        begin
           tblUsers.Active := True;
            tblUsers.Edit;
            tblUsers.Filtered := True;

            tblUsers.Filter := 'UserID = ' +QuotedStr(sPassword);
            tblUsers.First;
            tblUsers['Password'] := sNewPass;

            tblUsers.Post;
            tblUsers.Filtered := False;
            tblUsers.Filter := '';


          if bRememberMe then
            begin
              ShowMessage('Password changed, please log in again for security purposes');
              imgLogoutClick(Sender);
            end;

          sPassword := sNewPass;
        end
      else ShowMessage('Please ensure your password contains at least 1 letter and 1 number');
  end
  else ShowMessage('Incorrect Password');
end;

我得到的错误:

  

tblUsers:数据集未处于编辑或插入模式

2 个答案:

答案 0 :(得分:5)

您对str = '000001234567' str.match /0{5}\K\d{,5}/ #=> #<MatchData "12345"> EditFilter的使用均不正确。只有在实际编辑行时才需要Filtered;光标(记录指针)位置的任何更改都将取消或发布更改,使表格退出编辑模式(从而导致错误)。

您也不应使用Edit来搜索要编辑的数据。请改用Filter。这样的东西应该对你有用(虽然它可能不是我在我自己的代码中使用的):

Locate

答案 1 :(得分:0)

tblUsers.First可能会导致滚动。我猜数据集已发布在该卷轴上。

在通过tblUsers.Edit分配新密码之前尝试拨打tblUsers['Password'] := sNewPass;

正如MartynA所说,还有另一个问题会阻止您的代码正常工作,即使修复了上述问题。 tblUsers.Filter := 'UserID = ' +QuotedStr(sPassword);很可能不是您想要做的。可能应该传递包含UserID的变量而不是sPassword

如果我没记错的话,应该有一个名为Locate的函数。它也应该比过滤器更快。