Разное поведение SUM()
В таблице есть поле, которое в выборке отчета заполнено _нулевыми_ значениями.
Если в 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
Если в 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
Комментарии
select sum(s.F_INT) from TEST s
у которой поле F_INT имеет значения 1, null, null
?
Почему агрегат в отчете должен вести себя по-другому?