Question

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.

Was it helpful?

Solution

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).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top