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

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

ADOQuery- как правильно работать с ; параметриз.запросом [D5, MSSQL]


kserg@ukr.net ©   (2002-04-03 12:17:00) 

Ранее был вар-т select...where ID_PKI=:IdPKI
где IdPKI - пар-р целое число

Возникла необходимость переделать запрос, чтобы выбирать из списка типа where ID_PKI in (1,2,6)

Переделал запрос
select...where ID_PKI in (:IdPKI)
где IdPKI - пар-р строка типа "1,2,6"

select...where ID_PKI in :IdPKI
где IdPKI - пар-р строка типа "(1,2,6)"

В обоих случаях вылетает ошибка.
Как корректно порешить проблему?

Спасибо


TSV   (2002-04-03 13:39:00) [1]

Только желательно тестить на реальных данных.
А еще можно смотреть план запроса, пробовать строить индексы и т.д.


TSV   (2002-04-03 13:37:00) [2]

> kserg@ukr.net (03.04.02 12:52)
Замерять время выполнения запроса:

declare
@time1 datetime,
@time2 datetime

select @time1 = getdate()
select * from table1 -- тестируемый запрос
select @time2 = getdate()

select datediff(ms, @time1, @time2)

Удачи.


Johnmen   (2002-04-03 13:16:00) [3]

Прошу прощения за дублирование... :(


Johnmen   (2002-04-03 13:06:00) [4]

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


kserg@ukr.net   (2002-04-03 12:52:00) [5]

> Johnmen © (03.04.02 12:25)
Печальный факт, но всё равно
спасибо, уважаемый, не раз получаю от тебя ответы.

У меня ещё вопросик (немного не в тему):
как в MSSQL можно тестировать запросы на предмет скорости
выполнения различных вар-тов запроса.


Aleksandr   (2002-04-03 12:25:00) [6]

Ну, на самом деле здесь проще решать установкой фильтра, а не изменением запроса. Но можно и так:

SELECT * FROM Table
WHERE ID_PKI IN (:ID1,:ID2,:ID3)

И кстати, не советую параметры обзывать именами полей... Бывает, не проскакивает.


Johnmen   (2002-04-03 12:25:00) [7]

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


Наверх

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