Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.28;
Скачать: CL | DM;

Вниз

Почему не правильно работает такой запрос?   Найти похожие ветки 

 
Tornado ©   (2008-03-28 14:30) [0]

with DM.mdQueryP do begin
      Close;
      SQL.Clear;
      SQL.Add("SELECT * FROM vtg_sr WHERE PR=:PR UNION ALL     SELECT * FROM Arz_sr WHERE PR=:PR");
      Parameters.ParamByName("PR").Value := "РУКОВОДСТВО";
      Active := True;
 end;

Делаю выборку из двух тоблиц с объединением, выбират почему то только из первой таблицы (vtg_sr)? а из таблицы Arz_sr  - не выбирает...в чем может быть дело?


 
Tornado ©   (2008-03-28 14:31) [1]

И там и там в таблицах есть значение "РУКОВОДСТВО" в столбце PR


 
Sergey13 ©   (2008-03-28 14:52) [2]

А просто из второй таблицы (типа выбросить первую часть запроса) выбирает?


 
Tornado ©   (2008-03-28 14:54) [3]

>> Sergey13 ©   (28.03.08 14:52) [2]

Без проблем выбирает если так написать: (без UNION ALL)

SQL.Add("SELECT * FROM Arz_LPUMG_sr WHERE PR=:PR");


 
Tornado ©   (2008-03-28 14:55) [4]

Таблицы одинаковые абсолютно по структуре


 
Tornado ©   (2008-03-28 14:59) [5]

Кстати попробовал написать так:

SELECT * FROm Vtg_sr WHERE PR=""РУКОВОДСТВО"" UNION ALL SELECT * FROM Arz_sr WHERE PR=""РУКОВОДСТВО""

Так работает нормально, как надо ... Хм, странно. Но мне надо с параметрами...


 
Павел Калугин ©   (2008-03-28 15:00) [6]

SQL.Add("SELECT * FROM vtg_sr WHERE PR=:PR1 UNION ALL     SELECT * FROM Arz_sr WHERE PR=:PR2");
     Parameters.ParamByName("PR1").Value := "РУКОВОДСТВО";
     Parameters.ParamByName("PR2").Value := "РУКОВОДСТВО";


 
Sergey13 ©   (2008-03-28 15:01) [7]

> [5] Tornado ©   (28.03.08 14:59)

Попробуй с двумя параметрами.
"SELECT * FROM vtg_sr WHERE PR=:PR1 UNION ALL     SELECT * FROM Arz_sr WHERE PR=:PR2"

Инога встречаются такие проблемы


 
Павел Калугин ©   (2008-03-28 15:02) [8]

а вначале запрос после подстановки выглядит как
SELECT * FROM vtg_sr WHERE PR="РУКОВОДСТВО" UNION ALL     SELECT * FROM Arz_sr WHERE PR=NULL
ибо в нем 2 параметра. Странно что сообщения об ошибке не было


 
Tornado ©   (2008-03-28 15:07) [9]

Павел Калугин ©   (28.03.08 15:00) [6]

Да, так работает, всем спасибо!


 
Правильный_Вася   (2008-03-28 15:22) [10]


>  Странно что сообщения об ошибке не было

чего странного?
NULL - вполне легальное значение


 
Sergey13 ©   (2008-03-28 15:25) [11]

> [4] Tornado ©   (28.03.08 14:55)
> Таблицы одинаковые абсолютно по структуре

Значит таблица должна быть одна. 8-)


 
Tornado ©   (2008-03-28 15:40) [12]

Sergey13 ©   (28.03.08 15:25) [11]

Все правильно говоришь, но так нужно чтобы эти данные физически содержались в разных таблицах :)


 
sniknik ©   (2008-03-28 16:33) [13]

> нужно чтобы эти данные физически содержались в разных таблицах :)
все обман... (вернее само...) данные "физически" в разных таблицах, находятся в одном файле базы... т.е. деление на таблицы чисто логикой движка обеспечивается... (т.е. сделал структуру такую чтобы тебе их предоставляли как две, чтобы было понеудобнее запросы выполнять... мазохизм какойто)


 
Павел Калугин ©   (2008-03-28 17:44) [14]


> Правильный_Вася   (28.03.08 15:22) [10]

но 2 параметра с одним именем уже не совсем легально:)


 
sniknik ©   (2008-03-28 17:55) [15]

> но 2 параметра с одним именем уже не совсем легально:)
зависит от способа доступа, вот был бы у него BDE... (насколько помню там позволялись одноименные)

в принципе и тут можно если не по имени а по индексу значения присваивать.


 
Правильный_Вася   (2008-03-28 18:08) [16]


>  вот был бы у него BDE... (насколько помню там позволялись
> одноименные)

ЕМНИП, там тоже обращение было только к первому из одноименных, остальные игнорировались
хотя могу врать, давно уже не делаю одноименных


 
Павел Калугин ©   (2008-03-28 18:10) [17]


> sniknik ©   (28.03.08 17:55) [15]

Так и  мне кажется что там индекс первичен а byName вторично.


 
sniknik ©   (2008-03-28 20:20) [18]

> там тоже обращение было только к первому из одноименных, остальные игнорировались
там может и были обращения только к первому но сам движок тогда разбирал остальные (поддержка любителей одноименных параметров?)

простая проверка BDE
код для чтения из таблици с ID и существующим значением 1  
Query1.SQL.Text:= "SELECT ID, :ID AS ID2 FROM Table1 WHERE ID=:ID";
Query1.ParamByName("ID").AsInteger:= 1;
Query1.Open;

результат из 2х еденичек
ID ID2
1   1
видно что разовое присваивание инициировало оба параметра. как, на каом этапе неважно.
если бы инициировался только первый, условие бы не сработало.



Страницы: 1 вся ветка

Текущий архив: 2008.09.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
2-1218925736
demon
2008-08-17 02:28
2008.09.28
Восстановить свернутое окно?


15-1218121214
Yanis
2008-08-07 19:00
2008.09.28
Бывает же…


2-1218638551
webpauk
2008-08-13 18:42
2008.09.28
Исключить одинаковые поля


2-1219244224
Сергей Кокоулин
2008-08-20 18:57
2008.09.28
Тестирование прокси соединения?


2-1219162979
yaric
2008-08-19 20:22
2008.09.28
Отрисовка TRichEdit