DELPHI FIREDAC 主详细信息关系和计算字段之间的优先级

问题描述

我有一个 TFDQuery,我将其称为 FDQ_Master,其中包含一个文本公式。想法是向这个 FDQ_Master 添加一个计算(或内部计算到目前为止相同的结果)字段来评估这个公式。我有一个使用 TEvaluator 的函数(来自 Jedi Project 的 JclExprEval),它在通过单击按钮执行计算公式时工作得很好。

要评估的此函数需要来自其他表 (FDQ_Detail) 的信息,该表是与 FDQ_Master 定义的主从关系中的明细表。 FDQ_Master 正在研究“缓存更新”,我提到它以防万一它对这个问题有任何重要性。 (FDQ_Detail 在这种形式下根本没有更新)

我发现的问题是,当 FDQ_Master 中发生 OnCalcFields 事件时,FDQ_Detail 还没有导航(或者更好地说我猜是过滤)到与新主对应的记录,依此类推,计算发生在错误的详细记录集。

所以。我说,没问题,我在 FDQ_Master 的同一个表(FDQ_Master_BIS)中添加了一个新的 TFDQuery,并且我确实设置了从 FDQ_Master_BIS 到 FDQ_Master 的主从关系(关系将是 1 比 1),然后我尝试在那里进行计算,但我发现同样的问题。这使事情变得有点复杂,因为如果我对另一个细节 TFDQuery Detail from FDQ_Master 进行处理,它确实有效(将其作为解决问题的方法没有多大意义,对于这些细节TFDQueries 计算将执行与详细记录存在的次数一样多,我需要为每个 FDQ_Master 记录只执行一次)

这就是我的问题。对于第一种方法(向 FDQ_Master 添加一个计算字段)有没有什么办法可以阻止 FDQ_Master 中的字段计算,直到 FDQ_Detail 执行了主从关系?

如果这是不可能的或者它会变得太复杂有什么方法可以指示 Delphi - Firedac 从一个 TFDQuery 中检索记录,然后再从另一个 TFDQuery 中检索到相同的不同主细节关系中的记录主表?

当然,我可以制定一个“手动”解决方案来单独计算公式并找到一种方法将其放在屏幕上,代码看起来不太好,但我想该解决方案可以以某种方式实现。问题更多地与这些操作的优先级有关,以及是否有任何方法以编程方式影响此优先级。

预先感谢您的帮助

解决方法

最终,我实际实施的解决方案与我用这个 FDQ_Master_BIS 假装的解决方案相同,但反过来,意思是,我没有从 FDQ_Master 创建 FDQ_Master_BIS 作为详细记录,而是从 FDQ_Master 创建了 FDQ_Master_BIS 作为主控并更改了主控FDQ_Detail 中的详细关系到 FDQ_Master_BIS 而不是 FDQ_Master。我在 FDQ_Master 中进行计算,到目前为止,似乎工作得很好。

实际的技巧是在打开 FDQ_Detail 之前选择了 FDQ_Master_BIS,所以我确保打开 FDQ_Detail 时已经指向正确的记录。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...