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

Вниз

Подстановка параметров в TQuery   Найти похожие ветки 

 
Быстрый Шу   (2006-06-06 10:11) [0]

Добрый день!
вообщем задача такова:
Query1.SQL.Text:="SELECT * FROM HOUSES WHERE ID_HOUSE = :Id_House";
Query1.ParamByName("HOUSES").AsInteger:=2595;

получается в итоге запрос вида:
SELECT * FROM HOUSES WHERE ID_HOUSE = 2595
это работает....
===
а вот если я хочу получить запрос вида:
SELECT * FROM HOUSES WHERE ID_HOUSE IN (2595, 2596, 2597)
Что мне для этого нужно подставить в параметр :ID_HOUSE?


 
Быстрый Шу   (2006-06-06 10:12) [1]

соответственно, что бы текст квери был примерно таков, как я понимаю:
Query1.SQL.Text:="SELECT * FROM HOUSES WHERE ID_HOUSE IN (:Id_House)";
Query1.ParamByName("HOUSES").As??????:=???????;


 
Быстрый Шу   (2006-06-06 10:14) [2]

упс, обшибся,
здесь
Query1.ParamByName("HOUSES").AsInteger:=2595;
вместо HOUSES, естественно Id_House...


 
Ega23 ©   (2006-06-06 10:14) [3]


> Что мне для этого нужно подставить в параметр :ID_HOUSE?


Для этого тебе надо ввесьт текст запроса
SELECT * FROM HOUSES WHERE :HOUSE_PARAM
определить параметр как string, поставить его равным по-умолчанию "0=0",
а потом заполнять Query1.ParamByName("HOUSES").AsString:="ID_HOUSE IN (2595, 2596, 2597)";


 
Быстрый Шу   (2006-06-06 10:15) [4]

вообщем извините за сумбурность, очень спешу, да и голова уже объята пламенем....)))


 
Ega23 ©   (2006-06-06 10:17) [5]


> а потом заполнять Query1.ParamByName("HOUSES").AsString:
> ="ID_HOUSE IN (2595, 2596, 2597)";
>

uery1.ParamByName("HOUSE_PARAM").AsString:="ID_HOUSE IN (2595, 2596, 2597)";

Я тоже опечатался...


 
Быстрый Шу   (2006-06-06 10:17) [6]

хм...а можно так?:

SELECT * FROM HOUSES WHERE ID_HOUSE IN (:HOUSE_PARAM)
а в :HOUSE_PARAM уже как строку передавать "2595, 2596, 2597"


 
Ega23 ©   (2006-06-06 10:19) [7]


> а в :HOUSE_PARAM уже как строку передавать "2595, 2596,
> 2597"


Можно и так. Ну тогда по-умолчанию "-1" параметр поставь.


 
Быстрый Шу   (2006-06-06 10:21) [8]

хм...у меня текст квери создаётся в процессе...и не мной, мне отдаётся на изменение только параметр...я могу только заранее "попросить" в каком виде запрос сделать..к чему я это говорю - обязательно значение по умолчанию ставить?


 
Ega23 ©   (2006-06-06 10:24) [9]

"Select ObjID from ObjectClasses where objid in ()"
Если так напишешь, то получишь ошибку Incorrect syntax near ")".
А если так
"Select ObjID from ObjectClasses where objid in (-1)"
то получишь пустую выборку.

Чуешь разницу?  :о)


 
Быстрый Шу   (2006-06-06 10:27) [10]

дак я ему QUERY1.OPEN делаю ТОЛЬКО после присвоения параметров...он что, квери типа препарсинга что-ли делаеть??? 8-()


 
Ega23 ©   (2006-06-06 10:29) [11]


> дак я ему QUERY1.OPEN делаю ТОЛЬКО после присвоения параметров.
> ..он что, квери типа препарсинга что-ли делаеть??? 8-()


Нет, ты не понял. Если у тебя ВСЕГДА ГАРАНТИРОВАННО есть какие-то числа - то тогда, конечно, -1 нафиг не нужна. Но если есть хоть малейший шанс, что чисел не будет (ну не выбрал пользователь ничего, например), то тогда при открытии запроса на exception нарвёшься.


 
Быстрый Шу   (2006-06-06 10:31) [12]

нда...сделал так:
Query1.sql.text:="Select * From HOUSES Where ID_House in (:Houses)";
затем,
Query.ParamByName("HOUSES").AsString:="2595, 2596, 2597";
затем делаю
Query1.Open;
и он мне вываливает ексепшин типа
Error converting data to a data type Integer......
что-то где-то я туплю......


 
Быстрый Шу   (2006-06-06 10:34) [13]

нет, всегда будет число...ввод пользователя я предварительно обрабатываю...если, что хоть что-нить, но я туда запишу...так что я так понял значение по умолчанию отпадает.....
а вот что он конвертировать собирается........см. выше....


 
Ega23 ©   (2006-06-06 10:34) [14]


> Error converting data to a data type Integer......


тип у параметра сменил с ftInteger на ftString?


 
Быстрый Шу   (2006-06-06 10:40) [15]

у меня в коде(если опустить лишнее, не относящееся к делу)
вот такие строчки:

Query1.sql.text:="Select * From HOUSES Where ID_House in (:Houses)";
Query1.ParamByName("HOUSES").AsString:="2595, 2596, 2597";
Query1.Open;

я вроде нигде и не ставлю параметру тип ftInteger....он что, по умолчанию его ставит??
если он ставит по умолчанию, ок, как мне меж этих строк поменять тип параметра?


 
Sergey13 ©   (2006-06-06 10:41) [16]

2[14] Ega23 ©   (06.06.06 10:34)
Сомнительно мне, что такая конструкция вообще будет работать, ибо это макроподстановка, а не параметризация. Туда же и select можно впрудить.


 
sniknik ©   (2006-06-06 10:43) [17]

не получится, нет операций "IN переменная", есть только "IN перечисление" а переменной такого типа нет...

только
st:= "2595, 2596, 2597";
Query1.sql.text:="Select * From HOUSES Where ID_House in ("+st+")";


 
ЮЮ ©   (2006-06-06 10:45) [18]

Успокойся. Не может быть конструкция в  IN (xxx) быть параметром. Только динамическое создание SQL.

На худой конец
SQL := ReplaceStr(SQL,  "(:Id_House)", "(2595, 2596, 2597)")


 
Быстрый Шу   (2006-06-06 10:48) [19]

to {sniknik ©   (06.06.06 10:43) [17] }
вот-вот!
только проблема в том, что мне уже передают кверю с готовым текстом СКЛ, а я могу только через параметр свои данные в текст загнать
и вот такого Where ID_House in ("+st+")";, соответственно, делать не могу((((((
только через параметры компоненты квери...поэтому у меня и была мысль про перечисляемый тип...а его, значит нет...вот, мля, как же тогда быть?


 
Быстрый Шу   (2006-06-06 10:49) [20]

Йоптиль!!!!!!!
"ЮЮ" !!!!!!!!
Дай ка, свою мужественную руку пожать!!!!!!!!!!!
)))))))))))
СПАСИБО!
чё та я изначально протупил этот вариант........((((((


 
Быстрый Шу   (2006-06-06 10:50) [21]

упс)))
твою руку пожать))))))))
даже в этом ступил)))))щас опробирую!


 
saxon   (2006-06-06 10:50) [22]


> Быстрый Шу   (06.06.06 10:48) [19]

SP + параметер.


 
Ega23 ©   (2006-06-06 11:05) [23]

Не понял: я разве не могу строковый IN-параметр в запрос всобачить???


 
ЮЮ ©   (2006-06-06 11:07) [24]

>Ega23 ©   (06.06.06 11:05) [23]

Увы. Даже тебе это не дано :(


 
Ega23 ©   (2006-06-06 11:11) [25]


> Увы. Даже тебе это не дано :(
>


Во, блин... Не знал... Правда, я текст всегда динамически генерил...


 
Быстрый Шу   (2006-06-06 11:18) [26]

)))))))мне смешно до жути))))))
а где взять ReplaceStr ? 0:-))


 
Быстрый Шу   (2006-06-06 11:21) [27]

всё, вопрос отпал, нашёл)))


 
Sergey13 ©   (2006-06-06 11:22) [28]

2[23] Ega23 ©   (06.06.06 11:05)
Параметры подставляются после разбора запроса сервером. А в IN можно вставить все что угодно, включая вызов процедур. Отсюда и ограничения.


 
Desdechado ©   (2006-06-06 20:46) [29]

Ega23 ©   (06.06.06 11:05) [23]
Ошибку в [12] видел? А все из-за того, что после подстановки
Query1.sql.text:="Select * From HOUSES Where ID_House in (:Houses)";
Query.ParamByName("HOUSES").AsString:="2595, 2596, 2597";

получаем SQL вида
Select * From HOUSES Where ID_House in ("2595, 2596, 2597")
что, как сам понимаешь, совсем не то, что ожидалось



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

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

Наверх





Память: 0.51 MB
Время: 0.041 c
3-1149584128
Хой
2006-06-06 12:55
2006.08.13
Компонент TDataSetProvaider.


15-1152912172
Servelat
2006-07-15 01:22
2006.08.13
Вопрос про си (компилятор MVC дот нет он же визуал студио 2005)


8-1139581351
Eraser
2006-02-10 17:22
2006.08.13
MIXERLINE.dwComponentType и запись со стереомикшера


2-1153569490
Ivolg
2006-07-22 15:58
2006.08.13
Размер изображния


1-1151730788
SDF
2006-07-01 09:13
2006.08.13
Работа с растровыми изображениями





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский