| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Запрос с переменным числом параметров |
| Автор: neat 10.6.2007, 22:33 | ||
Здравствуйте люди! Подскажите пожалуйста как составить запрос (Query1) с переменным числом параметров.
Значения x1, x2, ... xn берутся из запроса (Query2) по другой базе. |
| Автор: Anark1 10.6.2007, 23:14 | ||
| Смотришь на результат первого запроса. Что нибудь типа
Так обрабатываешь каждое (не знаю твои условия) условие, получаешь сформированнную строку MySQLStr. Потом DataSet1.SelectSQL.Add('select field1 ... from table where field_id in (' + MySQLStr +')' ; |
| Автор: neat 10.6.2007, 23:43 | ||
Anark1,
Примерно так я и делаю. Но мне это не совсем нравится. Дело в том, что обращение к базе происходит довольно часто, а этот вариант предполагает динамическое создание запроса каждый раз и, естественно, стирание его так же каждый раз перед этим. С точки зрения оптимальности кода неэффективно. |
| Автор: Anark1 10.6.2007, 23:45 |
| Извини, если у тебя каждый раз меняются параметры, то естественно что запрос будет переформировываться каждый раз. |
| Автор: neat 11.6.2007, 03:18 |
| Интересно, а можно ли в качестве параметра поставить хранимую процедуру, возвращающую набор данных, который как раз и является набором значений для условия выборки данного запроса? |
| Автор: Anark1 11.6.2007, 08:07 |
| Хранимая процедура - это хранимая процедура, а вот результат её выполнения вполне. |
| Автор: Savek 11.6.2007, 13:57 | ||
А если так:
Не знаю правда, прокатывают в IB гетерогенные запросы или нет |
| Автор: neat 12.6.2007, 09:01 | ||
Насколько я знаю нет. 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 |