AnyDAC - 编辑前刷新记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AnyDAC - 编辑前刷新记录相关的知识,希望对你有一定的参考价值。
目前我们正在将Delphi7应用程序的数据库组件从BDE组件迁移到AnyDAC Version 8.0.5组件。
在从另一个应用程序实例(会话)编辑记录之前,TTable(BDE)具有以下行为:
- 刷新记录并从其他实例中看到更改。该记录将在方法TBDEDataSet.InternalEdit中刷新。
- 数据集设置为编辑模式(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 之后打开事务