Reputation: 33
I am using XE6 with FireDac. I have a FDMemTable with ItemVals as a ftfloat field. I would like to use the aggregates function of SUM(ItemVals) but I would like only ItemVals with a value >0 to be added in. ItemVals is a ftfloat but as far as I can find, I cannot assign a null value to a float. So I am using a value of -1 to indicate (to me) a null value. I tried SUM(ItemVals)>0 but it just returns a TRUE. Can anyone point me in the right direction? Thanks.
Upvotes: 3
Views: 2596
Reputation: 76693
You can use extended expression syntax
and write for your SUM
expression condition with IIF
and return the field value when it's greater than 0, and 0 when it's less or equals to 0. Like this way:
Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';
But back to the root of your question. You've said, that you cannot find a way to assign a NULL value to a field of ftFloat
data type. My guess is that you're assigning values this way:
FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;
Yes, that way you really cannot assign a NULL value, but you can do it through the Value
property of the field, e.g.:
FDMemTable.FieldByName('ItemVals').Value := NULL;
Assigning NULL value instead of -1 will much better describe the intention of no value, and simplify your aggregate expression back to SUM(ItemVals)
.
Upvotes: 3