Форум: "Базы";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
Вниз
Почему не правильно работает такой запрос? Найти похожие ветки
← →
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 и существующим значением 1Query1.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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.056 c