Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос с переменным числом параметров, IB7.1 
:(
    Опции темы
neat
  Дата 10.6.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



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

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

Значения x1, x2, ... xn берутся из запроса (Query2) по другой базе.
PM MAIL   Вверх
Anark1
Дата 10.6.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



Смотришь на результат первого запроса.
Что нибудь типа 
Код

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

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



--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
neat
Дата 10.6.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Anark1
Цитата

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

Примерно так я и делаю. Но мне это не совсем нравится. Дело в том, что обращение к базе происходит довольно часто, а этот вариант предполагает динамическое создание запроса каждый раз и, естественно, стирание его так же каждый раз перед этим. С точки зрения оптимальности кода неэффективно.
PM MAIL   Вверх
Anark1
Дата 10.6.2007, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



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



--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
neat
Дата 11.6.2007, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Интересно, а можно ли в качестве параметра поставить хранимую процедуру, возвращающую набор данных, который как раз и является набором значений для условия выборки данного запроса?
PM MAIL   Вверх
Anark1
Дата 11.6.2007, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



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


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Savek
Дата 11.6.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



А если так:
Код

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

Не знаю правда, прокатывают в IB гетерогенные запросы или нет
PM MAIL   Вверх
neat
Дата 12.6.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Цитата

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


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

API IB не поддерживает гетерогенные запросы ни обычным способом, ни при помощи 2PC транзакций.Здесь про это написано
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1033 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.