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



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

这个求值函数需要来自另一个表(FDQ_Detail)的信息,这个表是与FDQ_Master定义的主详细关系中的一个详细表。FDQ_Master正在处理"缓存的更新"。我提到它只是为了以防它对这个问题有任何重要性。(FDQ_Detail在此表格中根本没有更新)

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

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

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

在这种情况下,这将是不可能的或者它会变得太复杂是否有任何方法来指示Delphi - Firedac检索记录从一个TFDQuery之前另一个不同的主细节关系到同一主表?

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

提前感谢您的帮助

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

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

最新更新