Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
 
Dimedrol01
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 4
1

Запрос из нескольких БД

18.05.2014, 10:09. Просмотров 476. Ответов 3
Метки нет (Все метки)

День добрый!
Знающие люди помогите)) Делаю программу которая должна подгружать 6 баз(основные, interbase) и 1(дополнительную тоже interbase, как справочник будет). Пока удалось научить программу добавлять и подключаться ко всем базам, но запрос получается сформировать только к одной и вывести DBGrid.
У основных БД структура одинаковая, разница в содержимом, а дополнительная содержит только одну таблицу.
пока использую компоненты во вкладке InterBase, а именно: 7 IBDatabase, 1 IBTransaction, 1 IBQuery, 1 DataSource и 1 DBGrid.

Следующие вопросы:
1)Как сделать общий запрос ко всем базам, т.е. в каждой базе выбрать нужную таблицу(она всего одна)?
2)это текст запроса для одной базы:
select indexto, count(barcode)
from rpo
where operdate between '01.04.2014' and '30.04.2014' and indexto between 350000 and 354399
group by indexto

здесь выбирается поле indexto(хранит индекс), и поле barcode(хранит уникальный номер письма). count считает количество уникальных номеров по конкретному индексу. потом указан период и диапазон индексов которые нужно вывести. и группировка по индексу.
нужен запрос который сделает такое для 6 баз. и выведет результат : индекс|количество номеров из 6 ти баз для этого индекса.
3)можно ли вообще так сделать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 10:09
Ответы с готовыми решениями:

SQL запрос через ADOQuery из нескольких таблиц
Здравствуйте! В общем, проблема такая.. Нужно мне составить отчет, который...

Запрос из нескольких таблиц
Всем привет. Не бейте сильно ногами, я только начал вникать в PostgreSQL. Есть...

Запрос из нескольких таблиц
Добрый день, к примеру в одной БД у меня есть таблица переводчики, в ней две...

Запрос из нескольких таблиц
Пытаюсь сделать в ADOQUERY запрос на выборку из нескольких таблиц. По задумке...

Запрос из нескольких таблиц
Есть таблица Трудоемкость, Столбцы:Наименование детали, Технология, Пов1, Пов2,...

3
c0rvax
89 / 89 / 22
Регистрация: 02.07.2013
Сообщений: 290
Завершенные тесты: 1
19.05.2014, 10:31 2
Dimedrol01, точно про интербейс не могу сказать, но принцип должен быть аналогичный. В запросе можно явно указать имя БД, к которой идёт обращение. В рамках MSSQL это выглядит так
SQL
1
SELECT * FROM [DBName].[dbo].[rpo]
т.е., запрос сразу из нескольких таблиц можно было бы сделать примерно так
SQL
1
SELECT * FROM [DBName1].[dbo].[rpo], [DBName2].[dbo].[rpo], [DBName3].[dbo].[rpo]
C синтаксисом сам разбирайся. Кстати, если явно задавать имена таблиц, то и нет смысла создавать 7 компонентов IBDatabase, достаточно одного...
0
Dimedrol01
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 4
20.05.2014, 12:12  [ТС] 3
c0rvax, немного не понял про использование одного IBDataBase вместо 7.
Допустим такой вариант выполнения программы: пользователь загружает в программу 7 бд, вводит логин и пароль и жмет кнопку "подключится" и потом начинается выполнение не общего запроса, а запроса для каждой базы(для 6-ти основных баз текст запроса будет одинаков, а для 7-ой он свой). И потом программа помещает это все это в 7 dataset'ов). т.е на данный момент у меня программа работает для каждой базы по отдельности(без запроса из всех баз сразу). И вот назрел вопрос:
Как можно объединить все dataset'ы в один общий? clientdataset - этот набор данных в данном случае может быть использован?
0
c0rvax
89 / 89 / 22
Регистрация: 02.07.2013
Сообщений: 290
Завершенные тесты: 1
21.05.2014, 09:52 4
Dimedrol01, у меня такое предположение. IBDatabase - это ни что иное, как подключение к конкретному файлу БД. Непосредственный доступ осуществляет IBTransaction. В дизаин-тайме, IDTransaction для удобства связывают с IBDatabase, но это совершенно необязательно. Можно вполне обойтись даже вообще без IBDatabase, если в запросах указывать, откуда именно надо брать данные. К примеру, если используются алиасы BDE для каждой БД, то в запросах можно указать алиас
SQL
1
2
3
SELECT indexto, COUNT(barcode)
FROM :DB1:rpo
WHERE operdate BETWEEN '01.04.2014' AND '30.04.2014' AND indexto BETWEEN 350000 AND 354399
Если алиасы не используются, то можно указать явный путь к файлу
SQL
1
2
3
4
5
EXECUTE statement
'select indexto, count(barcode)
from rpo
where operdate between '01.04.2014' and '30.04.2014' and indexto between 350000 and 354399'
ON external 'localhost:DB1'
Естественно, localhost следует заменить на конкретное размещение файлов БД. Соответственно, запрос из нескольких БД будет выглядеть как-то так
SQL
1
2
3
4
5
6
7
8
9
10
11
WITH
  datasource1 AS
    (EXECUTE statement 'select indexto, count(barcode) from rpo' 
     ON external 'localhost:DB1'),
  datasource2 AS
    (EXECUTE statement 'select indexto, count(barcode) from rpo'
     ON external 'localhost:DB2')
SELECT *
  FROM datasource1
  LEFT JOIN datasource2 
 WHERE operdate BETWEEN '01.04.2014' AND '30.04.2014' AND indexto BETWEEN 350000 AND 354399
Может, я и неправ в каких-то деталях или синтаксисе, но идея должна быть примерно такой...
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2014, 09:52

Запрос из нескольких таблиц
Нужно создать запрос с INNER JOIN 1. Найти фамилию и телефон клиента,...

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

Запрос с нескольких серверов
Как сделать запрос с нескольких серверов? Допустим одна таблица на одном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru