首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnyDAC -编辑前刷新记录

AnyDAC -编辑前刷新记录
EN

Stack Overflow用户
提问于 2018-02-28 12:33:42
回答 1查看 194关注 0票数 0

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

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

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

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

任何帮助都很感激。

EN

回答 1

Stack Overflow用户

发布于 2018-03-01 02:47:27

我不能代表BDE说话,因为我不想再和它联系了,但是您所描述的我可以读到:

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

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

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

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

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

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

代码语言:javascript
复制
procedure TForm1.ADTable1BeforeEdit(DataSet: TDataSet);
begin
  TADTable(DataSet).RefreshRecord;
end;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49029720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档