Вопрос

Я использую XE6 с FireDAC.У меня есть FDMemTable с ItemVals в качестве поля ftfloat.Я хотел бы использовать агрегатную функцию SUM (ItemVals), но я бы хотел, чтобы добавлялись только ItemVals со значением> 0.ItemVals - это ftfloat, но, насколько я могу судить, я не могу присвоить нулевое значение float.Поэтому я использую значение -1, чтобы указать (для меня) нулевое значение.Я попробовал SUM(ItemVals)>0, но он просто возвращает значение TRUE.Кто-нибудь может указать мне правильное направление?Спасибо.

Это было полезно?

Решение

Вы можете использовать extended expression syntax и писать для вашего SUM условие выражения с IIF и возвращайте значение поля, когда оно больше 0, и 0, когда оно меньше или равно 0.Вот так , например:

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

Но вернемся к сути вашего вопроса.Вы сказали, что вы не можете найти способ присвоить НУЛЕВОЕ значение полю ftFloat тип данных.Я предполагаю, что вы присваиваете значения таким образом:

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

Да, таким образом, вы действительно не можете присвоить НУЛЕВОЕ значение, но вы можете сделать это с помощью Value свойство поля, например:

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

Присвоение нулевого значения вместо -1 намного лучше опишет намерение не использовать значение и упростит ваше агрегированное выражение до SUM(ItemVals).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top