Null'ы и параметры в запросах

RhinoFCRhinoFC Новосибирск
отредактировано 01:52 Раздел: FastReport 4.0
Проблема такая, использую в отчёте датасет, содержащий запрос вида:
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 датасета можно назначать параметры только в том случае, если уверен, что они не будут пустыми, так что-ли? Или я всё-таки чего-то не так делаю?


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

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