我是FireDac的新手并试图绕过组件。我之前使用过ClientDataSets,我想我期待类似的功能。我在DataModule中有一个FDQuery,并希望在运行时创建这些数据的视图。我以前这样做的方法是使用ClientDataSets和CloneCursor函数。这意味着我可以在一个独立的'数据集但仍然保存对源的更改。
然而,使用FireDac我似乎无法做到这一点。我试图在另一个FDQuery组件上使用CloneCursor但是出现连接错误(因为它没有克隆这些属性)。我部分地使用了FDMemTable,我能够克隆并发布对数据集的更改,但为了保存到数据库,我必须调用' ApplyUpdates'在源FDQuery上。
我错过了一些阻止我将数据从FDMemTable直接保存到DB的东西,就像ClientDataSet一样。我在FDMemTable上尝试过applyupdates但没有快乐。
感谢您的时间
答案 0 :(得分:0)
我一直在研究这个问题,我发现我发现从FDQuery克隆的FDMemTable的更改只会写回底层数据库,如果1)克隆的FDQuery处于缓存更新模式, 2)你在原始的FDQuery上调用ApplyUpdates。这与您发布到自己问题的评论一致。
如果FDQuery不处于缓存更新模式,并且您调用FDMemTable的CloneCursor方法,克隆FDQuery,则内存数据在FDQuery和FDMemTable之间同步,但只有由原始FDQuery被写入底层数据库。 FDync可以看到由FDMemTable执行的编辑,但FDQuery不会将它们写入基础表。
如果您确实希望发布的任何数据立即写入底层数据库,您可以为每个参与的数据集添加AfterPost,AfterDelete和AfterInsert事件处理程序,并从这些事件处理程序调用原始FDQuery上的ApplyUpdates(当然,您可以只创建一个事件处理程序,并将其用于每个数据集的AfterPost,AfterDelete和AfterInsert事件。)