Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.03;
Скачать: [xml.tar.bz2];

Вниз

Передача списка значений в параметре (Delphi + Oracle)   Найти похожие ветки 

 
Михаил Баринов   (2003-03-17 10:48) [0]

Наша фирма работает на базе Oracle в трехзвенной архитектуре.
Возникло желание избавляться от динамически формируемых запросов (типа " FIELD1 = " + IntToStr(Value1)) и переделать их на запросы с параметрами ("FIELD 1 = :PAR_FIELD1").
Все бы хорошо, если бы не одна проблема: как преобразовать такую конструкцию: "FIELD1 IN (1, 2, 3)"?
Может быть кто-то уже справилися с этим?
Заранее спасибо.


 
PONTIY   (2003-03-17 10:53) [1]

а количество параметров в предложении IN как я понимаю непостоянно?


 
Johnmen   (2003-03-17 10:55) [2]

В общем случае - нет.
Ничего не сказано о компонентах доступа...


 
Михаил Баринов   (2003-03-17 10:58) [3]

Ага. В этом и проблема.
Ну т.е. как вариант на форме что-то вроде TCheckListBox.
Или в гриде несколько строк выделяется...
Да даже если есть набор строк ("1, 2, 3", "1, 5"). Не очень понятно как это передать.


 
Михаил Баринов   (2003-03-17 11:02) [4]

В настоящий момент:
на сервере приложений BDE (TQuery, TStoredProc) + TDataSetProvider.
На клиенте: TSocketConnection, TClientDataSet.


 
Nikolay M.   (2003-03-17 13:16) [5]

Если все заточено под BDE, то в данном случае можно вместо TQuery сделать TRXQuery - там есть макроподстановки.


 
Val   (2003-03-17 13:50) [6]

хм. а как эта конструкция формируется сейчас?
может быть, попробовать вариантные массивы и .AsVariant?


 
Val   (2003-03-17 13:59) [7]

хотя, про .AsVariant я погорячился.


 
Geka   (2003-03-17 14:05) [8]

А может не стоит избавляться от всех динамических запросов?..


 
petr_v_a   (2003-03-17 14:27) [9]

В Direct Oracle Access есть ComplexVariable


 
Михаил Баринов   (2003-03-17 15:16) [10]

2 Nikolay M. ©
TRXQuery - гляну

2 Val ©
Да сейчас-то это дело формируется элементарно. Ну например по чекам в TCheckListBox формируется строка ID-шек.
Ну и потом
vSQLString := Format(" STATUS_ID IN (%s) ", StatusesList);

2 Geka ©
Выгода от параметров в том (извините если банально :), что запросы на орацле одинаковые будут. Т.е.
SELECT * FROM ... WHERE FIELD1 = 1 и
SELECT * FROM ... WHERE FIELD1 = 2 - разные запросы
а SELECT * FROM ... WHERE FIELD1 = :PAR_FIELD - один :)

Тут дело такое - сейчас колбашу компонент, которому можно указать список контролов (с условиями фильтра), поляны по каждому контролу и вид операции (типа > < like...).
А потом, чтобы автоматицки формировалась строка запроса/заполнялись параметры. Хочеться чтобы все единообразно было.
Все получается, затык только с операцией IN.

Видать пока придется IN без параметров оставить..


 
Val   (2003-03-17 15:20) [11]

Видать пока придется IN без параметров оставить..
угу, раз уж динамически количество меняется, даже без "пока"


 
Val   (2003-03-17 15:26) [12]

хотя, хотя...
кто мешает по известому ведь! количеству тех же id-шек, приклеивать к тексту запроса в квери кусочки типа ",:p<порядковый № параметра>" (ну а к последнему еще и скобочку) ?


 
Михаил Баринов   (2003-03-17 15:30) [13]

Val ©
Думаю всетаки "пока". Один вариант, который в будущем думаю обыграть - если перейдем на DOA (который упоминал petr_v_a), то там вид параметра есть Substitute. Вот если в него передам строчку, то гуд.

Спасибо большое всем!
Не ожидал такой быстрой реакции. :)


 
Михаил Баринов   (2003-03-17 15:38) [14]

2 Val ©
Запросы для орацла разные будут
SELECT * ... WHERE DOC_ID IN (:PAR1, :PAR2) и
SELECT * ... WHERE DOC_ID IN (:PAR1, :PAR2, :PAR3)
хотя конечно вариант - подготовить 100 параметров и забить их нереальными условиями (-1)
:)


 
id_privin   (2003-03-17 15:48) [15]

можно написать маленькую функцию, которая будет брать значение поля и строку, в которой через запятую перечислены параметры для IN. и тогда запрос будет выглядеть так

WHERE MYIN(COLUMN,:VAL_LIST)



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

Форум: "Базы";
Текущий архив: 2003.04.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
3-6388
s.ts
2003-03-13 17:49
2003.04.03
ODAC vs DOA


3-6344
Шоломицкий
2003-03-07 19:12
2003.04.03
Соеденение с БД MSACCESS


7-6815
Dudko Anton
2003-02-10 05:35
2003.04.03
Настройки в Bios


6-6646
glh
2003-02-11 19:38
2003.04.03
Interprocess communication - IPC


8-6616
Yanval
2002-12-30 17:54
2003.04.03
gif





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский