2017-09-26 43 views
1

我使用Delphi 10与Firedac,我有两个表在主从详细配置,A(文档)和B(DocDetail)。在我的表单中,我有两个分别链接到每个数据源的DBgrid。我想要一个配置,如果可能的话,当我删除主DBGrid中的相应主记录时,删除表DocDetail中的所有记录项。表FDTable组件中是否存在执行此类操作的配置?或者还有其他的方法可以删除master - 删除Delphi端的详细信息? (我知道可以通过约束删除级联在数据库端进行)。谢谢你的帮助。德尔福10-如何删除主人时自动删除详细记录?

+2

为什么不在数据库端执行? – Sami

+0

嗯,是的,这是可能的。 – Sami

+1

等待......您对@MarkElder答复的评论说您正在使用Oracle。你为什么不在服务器上而是在代码中手动执行此操作?您应该与您的DBA交谈。 –

回答

3

你正在寻找的TFDQuery组件上的属性是FetchOptions.DetailCascade和/或FetchOptions.DetailServerCascade

从上DetailServerCascade

帮助当DetailServerCascade为False,那么FireDAC将客户端 级联的更改发布到数据库。 当DetailCascade为True时,执行客户端级联更改 。所以DetailServerCascade 应该和DetailCascade一起使用。

如果您使用CachedUpdates,您可能还需要一个TFDSchemaAdapter组件。此CentralizedCachedUpdates Sample page列出了使用缓存更新时需要设置组件的所有步骤。

我在一个窗体上使用这个效果很好。将所有设置正确都有点挑剔。基本上,更新中涉及的每个DataSet都需要指向一个通用的TFDSchemaAdapter组件。然后,任何主数据集都需要将其FetchOptions.DetailCascade设置为true,以确保将行从子数据集中正确删除。

+0

嗨,马克。我使用两个MD表格来构建带有Mastr-detail配置的Cahin更新的表单,我遵循[Caching Updates - Firedac]中描述的所有步骤(http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Caching_Updates_(FireDAC) ),但最后它没有工作!我试图删除主记录时出错:[FireDAC] [Phys] [Ora] ORA-0922:完整性约束(JRG.Depto_Emp_FK)违反 - 找到子记录。 Oracle数据库的任何特殊配置? – JRG

+0

不应该有任何特定的数据库,该设置只是控制生成哪些删除SQL语句以及FireDac执行它们的顺序,很难说哪些属性可能会导致错误看看他们,你可以从DFM中为涉及你的问题的四个主要组件添加文本(应该有两个数据集,一个数据源和一个模式适配器),并且确保你正在调用SchemaAdapter上的.ApplyUpdates - 不是个人查询。 –

+0

我发现了错过的步骤:Cacheupdates = true在这两个数据集中。现在它工作!非常感谢 ! – JRG