Null'ы и параметры в запросах
RhinoFC
Новосибирск
Проблема такая, использую в отчёте датасет, содержащий запрос вида:
<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->
Имя; Тип; Значение
center; unknown; <frx_FIBDataSet_PlanFact."CP_CENTER">
period; unknown; <frx_FIBDataSet_PlanFact."REQ_PERIOD">
plan_state; unknown; <frx_FIBDataSet_PlanFact."REQ_STATE">
<!--fontc--></span><!--/fontc-->
Теперь собственно проблема! Невозможно (по крайней мере не получается) послать таким образом NULL в качестве значения параметра. Если свойство Report.EngineProperties.ConvertNulls установлено в True, то NULL'ы преобразуются в нули. Если установить значение этого свойства в False, получаю ошибку конвертации:
Выход нашёл такой.. Параметры оставляю пустыми и назначаю их в коде перед открытием датасета примерно таким образом:
Так вот вопрос. Это что, правильно? Т.е. через св-во Params датасета можно назначать параметры только в том случае, если уверен, что они не будут пустыми, так что-ли? Или я всё-таки чего-то не так делаю?
select *
from suf_plan_fact_by_items(:center, :period, :p_state, null)
Здесь есть три параметра, которые я назначаю через свойство Params датасета, связывая их с полями некоего датасета, находящегося внутри проги:<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->
Имя; Тип; Значение
center; unknown; <frx_FIBDataSet_PlanFact."CP_CENTER">
period; unknown; <frx_FIBDataSet_PlanFact."REQ_PERIOD">
plan_state; unknown; <frx_FIBDataSet_PlanFact."REQ_STATE">
<!--fontc--></span><!--/fontc-->
Теперь собственно проблема! Невозможно (по крайней мере не получается) послать таким образом NULL в качестве значения параметра. Если свойство Report.EngineProperties.ConvertNulls установлено в True, то NULL'ы преобразуются в нули. Если установить значение этого свойства в False, получаю ошибку конвертации:
SelectQuery:
Incompatible column/host variable data type.Dynamic SQL Error.
SQL error code = -303.
conversion error from string "".
Выход нашёл такой.. Параметры оставляю пустыми и назначаю их в коде перед открытием датасета примерно таким образом:
begin
if <frx_FIBDataSet_PlanFact."REQ_STATE"><>null then
qPlanFact.Params.Items[2].Value := <frx_FIBDataSet_PlanFact."REQ_STATE">;
end
Так вот вопрос. Это что, правильно? Т.е. через св-во Params датасета можно назначать параметры только в том случае, если уверен, что они не будут пустыми, так что-ли? Или я всё-таки чего-то не так делаю?