AnyDAC - 编辑前刷新记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AnyDAC - 编辑前刷新记录相关的知识,希望对你有一定的参考价值。

目前我们正在将Delphi7应用程序的数据库组件从BDE组件迁移到AnyDAC Version 8.0.5组件。

在从另一个应用程序实例(会话)编辑记录之前,TTable(BDE)具有以下行为:

  1. 刷新记录并从其他实例中看到更改。该记录将在方法TBDEDataSet.InternalEdit中刷新。
  2. 数据集设置为编辑模式(DataSet.State = dsEdit)

使用适当的AnyDAC组件(TADTable),记录不会反映其他实例所做的更改。没有对TADConnection和TADTable进行特殊更改。

任何帮助赞赏。

答案

我不能代表BDE,因为我不想再接触它了,但你所描述的我可以读到:

为什么AnyDAC在编辑开始之前不刷新元组?

如果是这样的话,如果我错了,请纠正我,那将是非常违反UX的。想象一下,您是自己应用程序的用户,并希望在数据网格视图中编辑某个元组。您可以单击某个编辑按钮进入编辑模式,整个行会突然在您眼前发生变化(或者编辑器将填充不同于您所见过的数据)。你想要这样吗?

如果是这样,那么我担心您需要使用AnyDAC(或FireDAC)手动执行此类刷新。这里的要点是引擎要么通过事务锁定元组,要么在处于编辑模式时跟踪内部存储中的更改。

在两种情况下都不会在编辑开始之前刷新元组(无论您使用哪种锁定选项)。我个人对这种行为很好,因为它可能导致我上面所描述的。

那么如何在编辑开始之前刷新活动元组呢?

要刷新数据集光标在数据集编辑开始之前指向的特定元组,您可以调用例如来自RefreshRecord事件的BeforeEdit,例如:

procedure TForm1.ADTable1BeforeEdit(DataSet: TDataSet);
begin
  TADTable(DataSet).RefreshRecord;
end;

但是,您的数据库编辑功能将成为一个移动目标(好吧,也许它已经是)。

以上是关于AnyDAC - 编辑前刷新记录的主要内容,如果未能解决你的问题,请参考以下文章

从 Anydac 移动到 Firedac 时 NULL 丢失

刷新片段不再起作用?

AnyDAC (FireDAC) - 在 TBlobField.GetAsString 之后打开事务

AnyDac - 如何断开与内存中的 sqlite db 的连接?

自动刷新android片段,直到满足条件

从 fragmentActivity 刷新片段 UI