Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2020, 17:19   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Как создать передставление таблицы из одной БД на таблицу в другой БД

Доброе время суток форумчане.

Есть две БД (FireBird), в одной хранится оборудование, в другой лаборатории, в которой это оборудование находится, и мне нужно одиним запросом, объединить эту инфу.
Я думал в одной из БД (с оборудованием) создать view, на лаборатории (из другой БД).
У меня рабочий запрос для вынимания лабораторий:

Код:
EXECUTE BLOCK
RETURNS(ID integer,  NAME_SHORT VARCHAR(20))
AS
BEGIN
FOR EXECUTE STATEMENT 'SELECT ID, NAME_SHORT FROM LABORATORY'
ON EXTERNAL '…:D:\Database\Plan.fdb' AS USER 'SYSDBA' PASSWORD '…'
INTO  :ID, :NAME_SHORT
DO SUSPEND;
END
Мне нужно создать из него представление, но наверное данный код нельзя так просто вставить в view. При вставке в view, вылетает ошибка

«Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 7, column 1. EXECUTE.»

Вопроса 3:

- можно ли такое view вообще делать?
- как в view передать путь к БД (потому что он будет меняться)
- может есть другой путь?

Или просто в IBDataSet запихнуть
Код:
EXECUTE BLOCK
RETURNS(NAME varchar(260), NAME_SHORT VARCHAR(20))
AS
  declare procedure qqq
  RETURNS(ID integer,  NAME_SHORT VARCHAR(20))
    AS
    BEGIN
    FOR EXECUTE STATEMENT 'SELECT ID, NAME_SHORT FROM LABORATORY'
    ON EXTERNAL '...D:\Database\Plan.fdb'
    AS USER 'SYSDBA' PASSWORD '...'
    INTO  :ID, :NAME_SHORT
    DO SUSPEND;
    end
begin
  for
  select q.NAME
    , w.NAME_SHORT
    from EQUIPMENT q
  left join qqq w on w.id = q.HOST_LABORATORY
  into  NAME, NAME_SHORT
  do suspend;
END
но тогда мне придется в первом "RETURNS(..." перечисля все поля таблицы оборудования

Последний раз редактировалось KBO; 21.08.2020 в 17:35.
KBO вне форума Ответить с цитированием
Старый 24.08.2020, 22:27   #2
Viktor61
Пользователь
 
Регистрация: 05.05.2018
Сообщений: 92
По умолчанию

Сразу - по существу. На форумах вопрос обсуждался. Ответ - нельзя одновременно работать с данными из двух БД, т.к. они работают в разных транзакциях (или что-то в таком духе).
Возможные пути решения:
1). информацию из какой-либо БД перенести в другую и работать в обычном порядке.
2). информацию из какой-либо БД перенести во внешнюю таблицу и что-то придумывать там. Но это довольно глючный вариант.
В обеих случаях требуется доступ к БД на уровне админа.
Viktor61 вне форума Ответить с цитированием
Старый 26.08.2020, 00:13   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Воспользовался вторым моим вариантом, т.е. запихнул в DataSet, "EXECUTE BLOCK", только еще добавил процедуру как и "qqq", только обратился к второй таблице. - работает)

в сумме в DataSet получилось 3 таблицы, 2 - из внешней БД, 1 из "родной"
KBO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных из одного листа одной таблицы в создаваемые листы другой таблицы zlotaust Microsoft Office Excel 5 25.06.2016 14:14
Как создать таблицу, используя данные из другой таблицы? re1ax SQL, базы данных 2 11.12.2011 12:22
Как обновить столбец одной таблицы из другой таблицы kairat_tuyakbaev Microsoft Office Access 2 24.09.2010 12:46
Как обновить столбец одной таблицы из другой таблицы kairat_tuyakbaev SQL, базы данных 0 23.09.2010 23:42
авт. перенос данных из нескольких столбцов одной таблицы в один столбец другой таблицы A_ALL Microsoft Office Access 7 24.08.2009 21:13