【问题标题】:AnyDAC - Refresh record before editingAnyDAC - 编辑前刷新记录
【发布时间】:2018-02-28 12:33:42
【问题描述】:

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

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

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

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

任何帮助表示赞赏。

【问题讨论】:

  • AnyDAC 的出版商对此有何看法?
  • @MartynA,DA-SOFT 不见了,但也许他们还活着。 AnyDAC 变成了 FireDAC。
  • 谢谢@Victoria。我忘记了各种 *DAC 库中的哪一个变成了 FireDAC。

标签: delphi refresh editing bde anydac


【解决方案1】:

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

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

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

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

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

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

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

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

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

【讨论】:

  • 感谢您的详细解释...不幸的是,我们的用户已经习惯了 BDE 的行为。所以我们不得不考虑如何解决这个“问题”......
  • 我已经完成了整个编辑过程,并且没有实施重新获取。因此,您的选择范围缩小到RefreshRecord 之类的方法。好吧,我会说提议的BeforeEdit 活动是适合它的地方。好吧,也许吧,但这太可怕了,您可以尝试破坏存储中的元组并让引擎再次从源中获取它。但是太丑了,我没有研究过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多