Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно передать параметру в запросе строку ...? [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 + ')');


Наверх

Титульная страница Поиск, карта сайта Написать письмо