Конференция "Базы" » Запрос с указанием нужного( или любого )значения [D7]
 
  • Цукор5 (08.05.13 14:21) [0]
    Есть следующий запрос:

    SELECT A.*, B.* FROM NEWLENTA  A, NEWLENTAITEM B WHERE B.IDNEWLENTA=A.ID  AND (A.CASHID=:CASHID)



    прекрасно выполняется в IbExpert и в моем приложении (Delphi7).

    Меняю, для удобства так:

    SELECT A.*, B.* FROM NEWLENTA  A, NEWLENTAITEM B WHERE B.IDNEWLENTA=A.ID AND ((A.CASHID=:CASHID) OR (:CASHID=0))



    выполняется в IbExpert, а в моем приложении ну никак.
    В чем может быть дело?

    Код:

    IBQuery1.Close;
    IBQuery1.SQL.Clear;
    IbQuery1.SQL.Add( 'SELECT A.*, B.* FROM NEWLENTA  A, NEWLENTAITEM B WHERE B.IDNEWLENTA=A.ID ' );
    IbQuery1.SQL.Add(' AND ((A.CASHID=:CASHID) OR (:CASHID=0))');
    IBQuery1.ParamByName('CASHID').AsInteger:=0;
    IBQuery1.Open;

  • O'ShinW © (08.05.13 14:40) [1]
    если так?
    IbQuery1.SQL.Add(' AND ((A.CASHID=:CASHID1) OR (:CASHID2=0))');
    IBQuery1.ParamByName('CASHID1').AsInteger:=0;
    IBQuery1.ParamByName('CASHID2').AsInteger:=0
  • Ega23 © (08.05.13 14:50) [2]

    > В чем может быть дело?


    2 параметра с одинаковым именем.
  • sniknik © (08.05.13 14:58) [3]
    IbQuery1.SQL.Add(' AND ((A.CASHID=:CASHID) OR (:CASHID=0))');
    IBQuery1.Params.Items[0].AsInteger:=0;
    IBQuery1.Params.Items[1].AsInteger:=0;

  • Цукор5 (08.05.13 15:02) [4]

    IBQuery1.Close;
     IBQuery1.SQL.Clear;
     IbQuery1.SQL.Add( 'SELECT *  FROM NEWLENTA   WHERE ((CASHID=:CASHID1) OR (:CASHID2=0))  ' );
     IBQuery1.ParamByName('CASHID1').AsInteger:=0;
     IBQuery1.ParamByName('CASHID2').AsInteger:=0;
     IBQuery1.Open;



    Получаю: Parameter 'CASHID2' not fount
    Хотя, опять таки, IbExpert прекрасно отрабатывает.
  • Цукор5 (08.05.13 15:07) [5]
    2 sniknik ©   (08.05.13 14:58) [3]
    Да, так работает.

    Одно но, у меня несколько форм, в которых код
    AND ((A.CASHID=:CASHID) OR (:CASHID=0))

    прекрасно отрабатывает (название таблиц другие). Что случилось с этой формой ума не приложу...
  • Цукор5 (08.05.13 15:45) [6]
    Разобрался. Посмотрел имена параметров. Так вот, выяснилось, что имена у них:
    -CASHID
    -CASHID=0

    Поставил пробел в запросе.
    IbQuery1.SQL.Add(' AND ((A.CASHID=:CASHID) OR (:CASHID = 0))');

    Имена стали одинаковые. Все заработало. Всем спасибо!
  • Inovet © (08.05.13 16:23) [7]
    > [6] Цукор5   (08.05.13 15:45)
    > Поставил пробел в запросе

    Это где такое поведение?
  • Цукор5 (08.05.13 16:49) [8]
    Delphi7
  • O'ShinW © (08.05.13 17:36) [9]
    верю(проверять лень)..

    тоже сталкивался, были проблемы с записью вида
    > IbQuery1.SQL.Add(' AND ((A.CASHID=:CASHID) OR (:CASHID = 0
    решилось при переписании на аля
    > IbQuery1.SQL.Add(' AND ((A.CASHID=:CASHID) OR (0 = :CASHID
  • Inovet © (08.05.13 18:27) [10]
    > [8] Цукор5   (08.05.13 16:49)
    > Delphi7

    IBX обновлённые?
  • Anatoly Podgoretsky © (11.05.13 16:09) [11]
    Что бы любое значение, просто не указывай WHERE
 
Конференция "Базы" » Запрос с указанием нужного( или любого )значения [D7]
Есть новые Нет новых   [119662   +92][b:0][p:0.001]