使用另一个表中的值对一个表中的字段进行计算

时间:2015-06-16 02:50:25

标签: delphi

我正在我的KLOG表中进行计算。 但是,我的PRICES表中包含了我在KLOG表中计算所需的数据。

示例: KLOG表有PRICE_ID字段(整数)。 PRICES表也是如此。

所以我试图做这样的事情(在KLOG表的oncalculatefields):

if KLOG.FieldByName('PRICE_ID') = 1 then begin
KLOG.FieldByName('calculated_field_value_1').Value := KLOG.FieldByName('calculated_field_value_2').Value +5;

这个(+5)是我的PRICES表中的字段值(BONUS),PRICE_ID = 1。

那么我怎样才能在我的KLOG表的计算事件中引用这个BONUS字段? 你能用SELECT吗?类似的东西:

KLOG.FieldByName('calculated_field_value_1').Value := KLOG.FieldByName('calculated_field_value_2').Value + (select BONUS from PRICES where PRICES.PRICE_ID = KLOG.PRICE_ID);

我不确定我是否写得正确。

1 个答案:

答案 0 :(得分:2)

您没有告诉我们您正在使用哪种数据访问组件。

建议的方法是使用查询组件(md5sumTSQLQueryTADOQuery,...),然后让该查询的SQL检索所有必要的信息。您要在TIBQuery中访问的所有字段都应该在该查询中。

这就像是

OnCalcFields()

将*替换为您实际需要的字段名称 如果您愿意,您甚至可以在查询中进行简单的计算,例如:

之类的东西
select * from KLOG, PRICES
where KLOG.PRICE_ID=PRICES.PRICE_ID

无论如何,使用查询组件而不是表组件是很好的做法; (与select [..], PRICES.PRICE*KLOG_QUANTITY as TotalPrice from KLOG, PRICES where KLOG.PRICE_ID=PRICES.PRICE_ID ...一起)它通常允许您检索比整个表更少量的数据。