Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi FireDac Memtable发布到数据库_Delphi_Cursor_Clone_Firedac - Fatal编程技术网

Delphi FireDac Memtable发布到数据库

Delphi FireDac Memtable发布到数据库,delphi,cursor,clone,firedac,Delphi,Cursor,Clone,Firedac,我是FireDac的新手,正在努力了解组件。我以前使用过ClientDataSet,所以我想我也期待类似的功能。我在DataModule中有一个FDQuery,希望在运行时创建此数据的视图。我以前的做法是使用clientdataset和CloneCursor函数。这意味着我可以处理“独立”数据集,但仍然可以保存对源的更改 然而,对于FireDac,我似乎无法做到这一点。我试图在另一个FDQuery组件上使用CloneCursor,但出现连接错误(因为它没有克隆这些属性)。我使用了一个FDMemT

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

然而,对于FireDac,我似乎无法做到这一点。我试图在另一个FDQuery组件上使用CloneCursor,但出现连接错误(因为它没有克隆这些属性)。我使用了一个FDMemTable,在这里我可以克隆并发布对数据集的更改,但为了保存到DB,我必须在源FDQuery上调用“ApplyUpdate”

我是否遗漏了阻止我将数据从FDMemTable直接保存到DB的东西,就像ClientDataSet一样。我试过在FDMemTable上应用更新,但没有乐趣


感谢您抽出时间

我一直在研究这个问题,我发现,如果1)正在克隆的FDQuery处于缓存更新模式,并且2)您对原始FDQuery调用ApplyUpdate,则从FDQuery克隆的FDMemTable的更改只会写回基础数据库。这与您在自己的问题上发表的评论一致

如果FDQuery未处于缓存更新模式,并且您调用FDMemTable的CloneCursor方法克隆FDQuery,则会在FDQuery和FDMemTable之间同步内存中的数据,但只有原始FDQuery所做的更改才会写入基础数据库。FDMemTable执行的编辑对FDQuery可见,但FDQuery不会将其写入基础表


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

我也被困在这里。ApplyUpdates根本不起作用。在我脑子里,我做了一些类似于FDmemtable.clonesource.ApplyUpdates(0)的事情。大约一周前才发现。希望它能级联。希望这能有所帮助。谢谢-我还没有测试,但似乎有道理:)