Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Запрос с переменным числом параметров


Автор: neat 10.6.2007, 22:33
Здравствуйте люди! Подскажите пожалуйста как составить запрос (Query1) с переменным числом параметров.
Код

select
     field1,
     field2,
     .
     .
from 
    table
where
     field_id in (x1, x2, ... xn)

Значения x1, x2, ... xn берутся из запроса (Query2) по другой базе.

Автор: Anark1 10.6.2007, 23:14
Смотришь на результат первого запроса.
Что нибудь типа 
Код

if (x1 <> 0 ) then MyStrSQL:=MyStrSQL + 'x1, ';

Так обрабатываешь каждое (не знаю твои условия) условие, получаешь сформированнную строку MySQLStr.
Потом
DataSet1.SelectSQL.Add('select field1 ... from table where field_id in (' + MySQLStr +')' ;

Автор: neat 10.6.2007, 23:43
Anark1, 
Цитата

DataSet1.SelectSQL.Add('select field1 ... from table where field_id in (' + MySQLStr +')' ;

Примерно так я и делаю. Но мне это не совсем нравится. Дело в том, что обращение к базе происходит довольно часто, а этот вариант предполагает динамическое создание запроса каждый раз и, естественно, стирание его так же каждый раз перед этим. С точки зрения оптимальности кода неэффективно.

Автор: Anark1 10.6.2007, 23:45
Извини, если у тебя каждый раз меняются параметры, то естественно что запрос будет переформировываться каждый раз.

Автор: neat 11.6.2007, 03:18
Интересно, а можно ли в качестве параметра поставить хранимую процедуру, возвращающую набор данных, который как раз и является набором значений для условия выборки данного запроса?

Автор: Anark1 11.6.2007, 08:07
Хранимая процедура - это хранимая процедура, а вот результат её выполнения вполне.

Автор: Savek 11.6.2007, 13:57
А если так:
Код

select
field1,
field2,
.
.
from 
table
where
field_id in (select ID from table in "...\другая база"')

Не знаю правда, прокатывают в IB гетерогенные запросы или нет

Автор: neat 12.6.2007, 09:01
Цитата

Не знаю правда, прокатывают в IB гетерогенные запросы или нет


Насколько я знаю нет.

API IB не поддерживает гетерогенные запросы ни обычным способом, ни при помощи 2PC транзакций.http://hghltd.yandex.com/yandbtm?url=http%3A%2F%2Fwww.ibase.ru%2Fdevinfo%2Fibtrans.htm&text=%E3%E5%F2%E5%F0%EE%E3%E5%ED%ED&reqtext=(%E3%E5%F2%E5%F0%EE%E3%E5%ED%ED%3A%3A2908763%20%3C%3C%20host%3D%22www.ibase.ru%22%3A%3A1819103916%3A0)&dsn=0&d=1538561&sh=3&sg=11&isu=1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)