Разное поведение SUM()

отредактировано 14:45 Раздел: FastReport 3.0
В таблице есть поле, которое в выборке отчета заполнено _нулевыми_ значениями.

Если в Memo напишем:
[SUM(<qFoot."OPER_SUM2">, Band2)]
результат верный (0) и в мемо будет напечатан 0

Если написать в скрипте:
procedure Page1OnBeforePrint(Sender: TfrxComponent);
var n: currency;
begin
n := <SUM(<qFoot."OPER_SUM2">, Band2)>;
ShowMessage(FloatToStr(n));
..............
Получим сообщение об ошибке
Could not convert variant of type (Null) into type (Double)
т.к. агрегат, суммируя _нулевые_ значения возвращает Null.
Поскольку результат надо использовать в других вычислениях -
приходится писать if VarToStr(n) = '' then n := 0;
Только ИМХО неверно это. Работа агрегата должна быть
1 - одинаковой что для скрипта, что для Мемо
2 - нельзя возвращать Null, если хоть одно поле в выборке не Null

Комментарии

  • отредактировано 14:45
    Alex_Gol написал:
    2 - нельзя возвращать Null, если хоть одно поле в выборке не Null
    что прямо противоположно определению операций с NULLами ;)
  • отредактировано 14:45
    Stranger написал:
    что прямо противоположно определению операций с NULLами ;)
    Что вернет запрос по таблице TEST
    select sum(s.F_INT) from TEST s
    у которой поле F_INT имеет значения 1, null, null
    ?
    Почему агрегат в отчете должен вести себя по-другому?
  • отредактировано 14:45
    Угу, неправильно, но однообразно. Но лучше все-таки правильно сделать ;)

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.