AnyDAC - 编辑前刷新记录

时间:2018-02-28 12:33:43

标签: delphi refresh editing bde anydac

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

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

  1. 记录已刷新,其他实例可以看到更改。该记录将在方法TBDEDataSet.InternalEdit。
  2. 中刷新
  3. 数据集设置为编辑模式(DataSet.State = dsEdit)
  4. 使用适当的AnyDAC组件(TADTable),记录不会反映其他实例所做的更改。 没有对TADConnection和TADTable进行特殊更改。

    任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

我不能代表BDE,因为我不想再与它联系,但你所描述的我可以读到:

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

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

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

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

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

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

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

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