kbmMemTable.Undo方法存在的问题

这个方法调用不当,会产生AV错误。具体情况看下面的代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
  kbmMemTable1.EnableVersioning:=True;
  kbmMemTable1.Append;
  kbmMemTable1.FieldByName('f1').AsString:='1111';
  kbmMemTable1.FieldByName('f2').AsString:='1111';
//  kbmMemTable1.Post;

  kbmMemTable1.Undo; //An address error will occur on the android platform
  kbmMemTable1.CheckPoint;

end;

1.当kbmMemTable.EnableVersioning为True,并且

2.当前记录处在修改状态,如dsInsert,dsEdit,

3.在android下才会产生地址错误。给作者发了邮件,等官方解决。

暂时的解决方法,在Undo前加上这句:

  if kbmMemTable1.State in [dsEdit,dsInsert] then
    kbmMemTable1.Cancel;

环境:

Delphi 10.3.3

kbmMem:7.83.00 Professional Edition

原文地址:https://www.cnblogs.com/kinglandsoft/p/12736583.html