0

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

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

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

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

任何帮助表示赞赏。

4

1 回答 1

0

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

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

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

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

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

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

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

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

但是随后您的数据库编辑能力变成了一个移动的目标(嗯,也许它已经是)。

于 2018-03-01T02:47:27.300 回答