Проблема с INSERT

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
SV
Сообщения: 13
Зарегистрирован: 21 июн 2006, 16:37

Проблема с INSERT

Сообщение SV » 21 июн 2006, 16:53

Помогите пожалуйста!

Наверное этот вопрос не один раз задовался, но никак не могу найти подробный ответ в инете!

(IBExpert) В рабочей (текущей) базе есть таблица и тригер. В этом тригере мне надо добавить строку в другую базу.
Делаю это с помощью INSERT так:

INSERT INTO "Info"."Table" ("Name") VALUES ('SSSSSSSSS');

"Info" - это алиас базы в которую надо добавить строку. "Table" - название таблицы.

НЕ РАБОТАЕТ - какая-то ошибка. Пробовала прописать полный путь к этой базе - аналогичная ошибка. Помогите разобраться.

Заранее спасибо всем откликнувшимся.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 21 июн 2006, 17:21

Ты, наверно, раньше с MS SQL Server работал?
Такая вещь называется гетерогенный запрос. В IB/FB они НЕ поддерживаются.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 июн 2006, 17:22

Ни за что не поверю, что ответа не нашёл.
Он очевиден - firebird не умеет работать с разными базами!
То, что эксперт так умеет - это большой плюс эксперта.

SV
Сообщения: 13
Зарегистрирован: 21 июн 2006, 16:37

Сообщение SV » 21 июн 2006, 17:34

WildSery писал(а):Ни за что не поверю, что ответа не нашёл.
Он очевиден - firebird не умеет работать с разными базами!
То, что эксперт так умеет - это большой плюс эксперта.
Получается, если мне надо записать данные в другую базу, это надо делать в своем приложении: ставить дополнительный компонент Database и делать ему Open, когда требуется запись.

Правильно?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 июн 2006, 17:54

Именно так.
Если пишешь на FIB, советую обратить внимание на функцию TFIBQuery.ExecWPS(ParamSources: array of ISQLObject);

SV
Сообщения: 13
Зарегистрирован: 21 июн 2006, 16:37

Сообщение SV » 21 июн 2006, 18:53

WildSery писал(а):Именно так.
Если пишешь на FIB, советую обратить внимание на функцию TFIBQuery.ExecWPS(ParamSources: array of ISQLObject);
Как раз планирую использовать именно эти компоненты.
Если не трудно, расскажите в чем особенность этой функции, желательно с примерчиком (маленьким) или киньте, пожалуйста ссылку на описание. Я в этом деле новичок, а из литературы есть только Ковязин, Востриков (там есть про FIB, но маловато).

Спасибо ОГРОМНОЕ

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 22 июн 2006, 11:55

Блин, примера не нашёл :? Ладно, так расскажу.
Функция автоматизирует подстановку параметров из других датасетов.
К примеру, у нас есть (синтаксис упрощён):
QueryTo = 'insert into Table1 (id, field1, ..., fieldN) values (:id, :field1, ..., :fieldN)';
этим запросом мы будем вставлять данные в БД2.
А вот этот запрос из БД1 (источник данных):
QueryFrom = 'select id, f1 as field1, ..., fN as fieldN from ...';

Когда мы выполним QueryTo.ExecWPS([QueryFrom]), то у нас выполнится заполнение параметров по значениям текущей записи из QueryFrom, запрос QueryTo выполнится, а курсор в QueryFrom перейдёт на следующую запись.
Следовательно, конструкция
while not(QueryFrom.Eof) do QueryTo.ExecWPS([QueryFrom]);
выполнит вставку для каждой строки исходных данных.

Подстановка параметров осуществляется по именам полей.
ExecWPS([]) может содержать несколько источников (из двух и более запросов/баз читать может).

SV
Сообщения: 13
Зарегистрирован: 21 июн 2006, 16:37

Сообщение SV » 23 июн 2006, 12:40

СПАСИБО! буду пробовать. Если что.... буду спрашивать.

Ответить