【问题标题】:Using FireDac Aggregates使用 FireDac 聚合
【发布时间】:2014-07-28 20:15:51
【问题描述】:

我将 XE6 与 FireDac 一起使用。我有一个 FDMemTable,其中 ItemVals 作为 ftfloat 字段。我想使用 SUM(ItemVals) 的聚合函数,但我只想添加值 >0 的 ItemVals。ItemVals 是一个 ftfloat 但据我所知,我不能将空值分配给浮点数.所以我使用 -1 的值来指示(对我来说)一个空值。我试过 SUM(ItemVals)>0 但它只返回一个 TRUE。谁能指出我正确的方向?谢谢。

【问题讨论】:

    标签: delphi firedac aggregates


    【解决方案1】:

    您可以使用extended expression syntax 并将SUM 表达式条件写入IIF 并在大于0 时返回字段值,在小于或等于0 时返回0。像这样:

    Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';
    

    但回到你问题的根源。您说过,您找不到将 NULL 值分配给 ftFloat 数据类型的字段的方法。我的猜测是您正在以这种方式分配值:

    FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;
    

    是的,那样你真的不能分配一个 NULL 值,但你可以通过该字段的Value 属性来做到这一点,例如:

    FDMemTable.FieldByName('ItemVals').Value := NULL;
    

    分配 NULL 值而不是 -1 将更好地描述无值的意图,并将您的聚合表达式简化回 SUM(ItemVals)

    【讨论】:

    • 或者你可以通过调用FDMemTable.FieldByName('ItemVals').Clear;来设置NULL的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多