Конференция "Базы" » Как в параметр передать Null [D7, FireBird]
 
  • alexis (28.02.12 16:26) [0]
    Делаю обычный селект  с параметрами
    select *  from TASK where ID_OIV=:ID and ID_TAGET=:ID_TAGET  and ID_SUBTAG=:ID_SUBTAG  and ID_FOCUS=:ID_FOKUS

    Все работает. Но как только один из параметров имеет значение NULL, запрос ничего не возвращает, хотя записи в базе есть.
    Как только не пробовал передать параметр, ничего не выходит:

    TaskDS.ParamByName('ID_FOKUS').Value:=Null();
    TaskDS.ParamByName('ID_FOKUS').AsInteger:=Null;
  • Loginov Dmitry © (28.02.12 16:30) [1]
    IS NULL
  • alexis (28.02.12 16:34) [2]
    В самом запросе можно Is Null написать, а как в параметре передать?
  • alexis (28.02.12 17:16) [3]
    Забыл написать, компонент TIBDataSet используется.
  • Anatoly Podgoretsky © (28.02.12 17:59) [4]
    > alexis  (28.02.2012 16:26:00)  [0]

    Сравнивать с Null нельзя, поскольку смысла не имеет
  • alexis (28.02.12 18:05) [5]
    select *  from TASK where ID_OIV=:ID and ID_TAGET=:ID_TAGET  and ID_SUBTAG=:ID_SUBTAG  and (ID_FOCUS=:ID_FOKUS or :ID_FOKUS=0)

    Пришлось вот такую фигню написать, оно конечно работает, но как то это не правильно
  • Inovet © (28.02.12 19:39) [6]
    > [5] alexis   (28.02.12 18:05)
    > оно конечно работает, но как то это не правильно

    Сказали же IS NULL
  • alexis (29.02.12 11:36) [7]

    > Сказали же IS NULL

    И как это передать в параметре?
  • Плохиш © (29.02.12 12:30) [8]
    TaskDS.ParamByName('ID_FOKUS').Clear;
  • Ega23 © (29.02.12 12:34) [9]

    > как это передать в параметре?


    Param.Value := Null;



    Ну и вдогонку


    > Сравнивать с Null нельзя, поскольку смысла не имеет


    where (:param1 is null) or (column=:param2)
  • alexis (29.02.12 12:45) [10]

    > Плохиш ©   (29.02.12 12:30) [8]
    > TaskDS.ParamByName('ID_FOKUS').Clear;

    Не работает.
  • Ega23 © (29.02.12 12:49) [11]

    > Не работает.


    Если правильно делать - работает.
  • Anatoly Podgoretsky © (29.02.12 13:25) [12]
    > Ega23  (29.02.2012 12:34:09)  [9]

    Где здесь сравнение с Null?
    is null не сравнение с Null
  • Ega23 © (29.02.12 13:36) [13]

    > Anatoly Podgoretsky ©   (29.02.12 13:25) [12]


    Я не тебе, а ТС писал. Как это можно обойти, с параметрами.
  • andpr99 (27.04.15 15:13) [14]

    > where (:param1 is null) or (column=:param2)


    у меня такая схема не работает.
    пишет: unknown SQL data type (32766)
  • andpr99 (27.04.15 15:30) [15]
    Выкручиваюсь так:

       if VarIsNull(cxLookupComboBox2.EditValue) then
         AddCondition('c6','PLASMA.OUT_DEST_DET IS NULL', true)
       else
         AddCondition('c6','PLASMA.OUT_DEST_DET = '+cxLookupComboBox2.EditValue, true)

  • кгшзх © (27.04.15 18:18) [16]
    and ID_FOCUS=IsNull(:ID_FOKUS,ID_FOCUS)
  • andpr99 (27.04.15 19:19) [17]

    > and ID_FOCUS=IsNull(:ID_FOKUS,ID_FOCUS)

    IsNull - Это COALESCE?

    Это решает проблему пустого параметра, но задача чуть шире.
    Нужна такая конструкция:
    ((:ID_FOCUS is NULL) and (ID_FOCUS is NULL)) or
    ID_FOCUS=:ID_FOKUS
    Значение или равны или оба пустые.
    А первое выражение вызывает описанную выше ошибку.
  • junglecat © (27.04.15 19:42) [18]
    там проблема в том, что он 2-й :ID_FOKUS не подхватывает в запросе?
  • кгшзх © (27.04.15 19:57) [19]
    Это решает проблему пустого параметра, но задача чуть шире.

    шире чем лоб?
    в чем трудность-то?
    передать в параметр пустую строку и сделать isnull и к полю и к параметру?
 
Конференция "Базы" » Как в параметр передать Null [D7, FireBird]
Есть новые Нет новых   [118686   +15][b:0][p:0.001]