1

我是 FireDac 的新手,并试图了解这些组件。我之前使用过 ClientDataSets,我想我期待类似的功能。我在 DataModule 中有一个 FDQuery,并希望在运行时创建此数据的视图。我以前这样做的方法是使用 ClientDataSets 和 CloneCursor 函数。这意味着我可以处理“独立”数据集,但仍可以保存对源的更改。

但是,使用 FireDac 我似乎无法做到这一点。我尝试在另一个 FDQuery 组件上使用 CloneCursor,但出现连接错误(因为它没有克隆这些属性)。我部分让它与 FDMemTable 一起工作,我可以在其中克隆和发布对数据集的更改,但为了保存到数据库,我必须在源 FDQuery 上调用“ApplyUpdates”。

我是否遗漏了一些阻止我将数据从 FDMemTable 直接保存到数据库的东西,就像 ClientDataSet 一样。我在 FDMemTable 上尝试过 applyupdates 但没有任何乐趣。

感谢您的时间

4

1 回答 1

0

我一直在研究这个问题,我发现从 FDQuery 克隆的 FDMemTable 的更改只有在 1)被克隆的 FDQuery 处于缓存更新模式时才会写回底层数据库,并且 2)您在原始 FDQuery 上调用 ApplyUpdates。这与您对自己的问题发表的评论一致。

如果 FDQuery 不是缓存更新模式,调用 FDMemTable 的 CloneCursor 方法,克隆 FDQuery,FDQuery 和 FDMemTable 之间会同步内存中的数据,但只会将原始 FDQuery 所做的更改写入底层数据库。FDMemTable 执行的编辑对 FDQuery 可见,但 FDQuery 不会将它们写入基础表。

如果您确实希望将发布的任何数据立即写入底层数据库,您可以将 AfterPost、AfterDelete 和 AfterInsert 事件处理程序添加到每个参与的数据集,并从这些事件处理程序对原始 FDQuery 调用 ApplyUpdates(当然,您可以只创建一个事件处理程序并将其用于每个数据集的 AfterPost、AfterDelete 和 AfterInsert 事件)。

于 2017-01-03T18:58:02.137 回答