![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно передать параметру в запросе строку ...? [D5, IB6.x]
ZSergey © (2004-03-31 20:36:00)Уважаемые знатоки. Расталкуйте, почему не работает
динамичный запрос с диапазоном значений
хотя вроде бы все правильно:
S: string
s:='1200'+''' , '''+'1404';
или
s:='"'+'1200'+'"'+','+'"'+'1404'+'"';
Myquery.sql.add('select ... ');
Myquery.sql.add('from ... ') ;
Myquery.sql.add('where a.tip in (:S)'); // хотя .. in ('1200','1404') работает
MyQuety.open;
запрос возвражает NULL! Как правильно
передать переменной S данную строку, чтобы работал запрос?
Может со скобками заморочки? Заранее благодарю!
sniknik (2004-04-01 11:12:00) [1]Nikolay M. © (01.04.04 09:42) [7]
> А ты сам ftArray у параметра пробовал выставить?
почитай выше там прямо сказано что нет. и если пробовать то не прямо в визуальном компоненте его выставлять, а задать параметр через "грейтепараметр" у обьекта, обходя борландовские методы (возможно нереализованные для этого типа).
но сам то тип есть и не исключено что ктото его поддерживает, так что утверждать однозначно что такого не бывает я бы не стал.
Nikolay M. (2004-04-01 10:03:00) [2]
> 'select anykey from anytable'
А на фига для этого параметр? :)
Sergey_Masloff (2004-04-01 10:01:00) [3]кстати тогда уж чего бы выполнить запрос с таким параметром:
s = 'select anykey from anytable';
Query.SQL.Text := 'select x,y,z from mytable where key in(:par)';
Query.Params[0].AsString := s;
Query.Open();
с точки зрения сервера такой же недопустимый вариант как первоначальный
Nikolay M. (2004-04-01 09:55:00) [4]
> почекму? Что OLE DB для IB нет уже? с каких пор?
Да никуда он не девался, просто, скорее всего у автора BDE или IBX.
> >Буду рад, если переубедюсь на работающем примере :)
> и не надейся...
Убедил :)
Sergey_Masloff (2004-04-01 09:49:00) [5]Nikolay M. © (01.04.04 09:42) [7]
>в сабже указан IB, так что скорее всего OLE DB там и не пахнет
почекму? Что OLE DB для IB нет уже? с каких пор?
>Буду рад, если переубедюсь на работающем примере :)
и не надейся...
Nikolay M. (2004-04-01 09:42:00) [6]
> sniknik © (31.03.04 22:00) [5]
А ты сам ftArray у параметра пробовал выставить?
Не говоря уже о том, что в сабже указан IB, так что скорее всего OLE DB там и не пахнет.
Моя имха: только динамически. Буду рад, если переубедюсь на работающем примере :)
Sergey_Masloff (2004-04-01 09:13:00) [7]Параметром тут ну никак не получится. Сервер разбирает текст запроса 1 раз а потом только связывает переменные. Тут 1 переменная и сервер только ее и свяжет. Ну нельзя же в самом деле выполнить запрос
select * from table
where field in('1,2,3,4')
а вы именно это пытаетесь сделать.
sniknik (2004-03-31 22:00:00) [8]Nikolay M. © (31.03.04 21:43) [3]
почему нельзя? есть же типы параметров массив, может и сработает с чем нибудь (на OLEDB как самый новый есть надежда, но сам не пробовал)
sniknik (2004-03-31 21:57:00) [9]нужно, так чего не передаеш? где строка MyQuety.params/parameters/parambyname/parameters.parambyname/в зависимости от компанента....value:= s;
???
хотя так у тебя не сработает, conversion error from stringявно говорит что преобразовать не может. типы не те.
пытаешся в строке как в массиве искать.
Nikolay M. (2004-03-31 21:43:00) [10]В данном случае через параметр нельзя, только динамически формировать текст запроса.
ZSergey (2004-03-31 20:53:00) [11]Ваш пример не работает, появляется ошибка conversion error from string "T".
Да и вопрос не в том, что S параметр или переменная!
Мне нужно передать значение именно в параметр, пусть будет SS!
Desdechado (2004-03-31 20:40:00) [12]s - переменная в Delphi,
:S - параметр запроса
а это разные веши
Myquery.sql.add('where a.tip in (' + S + ')');