Количество показов: 1756
Опубликован: 2007-01-12 06:38:10
Автор:  Александр Бондарь

Предыдущая часть


Компонент TpFIBQuery содержит еще один полезный метод — BatchToQuery. Он дает возможность поместить результат выполнения одного запроса в таблицу при помощи другого запроса. Наиболее подходящий вариант использования этого метода — перемещение данных из одной базы данных в другую. Метод позволяет работать с полями Blob и массивами.

Скопируем нашу базу данных FIBSAMPLE.GDB в тот же каталог с другим именем: FIBSAMPLE2.GDB.

Создайте новый проект BatchQuery5.

Рисунок 5

Рис. 5. Проект BatchQuery5. Копирование данных в другую базу данных

Положите на форму несколько новых компонентов:

pFIBDatabase2: TpFIBDatabase;
pFIBTransaction2: TpFIBTransaction;
pFIBDataSet2: TpFIBDataSet;
QueryToAnotherBase: TpFIBQuery;
BBatchToQuery: TButton;
BDeleteFromAnotherBase: TButton;
DataSource2: TDataSource;
DBGrid2: TDBGrid;

Свойство DBName компонента pFIBDatabase2 ссылается на базу данных FIBSAMPLE2.GDB. Компонент pFIBDataSet2 использует ту же таблицу PERSON. DBGrid2 в нижней части формы отображает содержимое таблицы PERSON во второй базе данных.

Щелчок по кнопке DeleteFromAnotherBase удаляет все записи из таблицы PERSON во второй базе данных.

Обработчик события щелчка по кнопке BatchToQuery выполняет перезапись содержимого запроса во вторую базу данных:

Delphi

procedure TFormBatch.BBatchToQueryClick(Sender: TObject);
var SL: TStringList;
begin
SL := TStringList.Create;
SL.Clear;
SL.Add('CODPERS=CODPERS');
SL.Add('FIRST_NAME=FIRST_NAME');
SL.Add('LAST_NAME=LAST_NAME');
SL.Add('COUNTRY=COUNTRY');
SelectQuery.BatchToQuery(QueryToAnotherBase, SL);
SL.Free;
SelectQuery.Close;
pFIBTransaction2.CommitRetaining;
pFIBDataSet2.FullRefresh;
end;

C++

void __fastcall TFormBatch::BBatchToQueryClick(TObject *Sender)
{
TStringList *SL;
SL = new TStringList();
SL->Clear();
SL->Add("CODPERS=CODPERS");
SL->Add("FIRST_NAME=FIRST_NAME");
SL->Add("LAST_NAME=LAST_NAME");
SL->Add("COUNTRY=COUNTRY");
SelectQuery->BatchToQuery(QueryToAnotherBase, SL);
delete SL;
SelectQuery->Close();
pFIBTransaction2->CommitRetaining();
pFIBDataSet2->FullRefresh();
}
Здесь мы вызываем метод BatchToQuery компонента SelectQuery. SelectQuery выбирает все записи таблицы PERSON из первой базы данных. Методу BatchToQuery передается в первом параметре имя другого компонента TpFIBQuery, QueryToAnotherBase, который содержит оператор INSERT для записи данных в таблицу PERSON во вторую базу данных. Его свойство SQL:
INSERT INTO PERSON(
CODPERS,
FIRST_NAME,
LAST_NAME,
COUNTRY
)
VALUES(
?CODPERS,
?FIRST_NAME,
?LAST_NAME,
?COUNTRY
)

Второй параметр, передаваемый методу BatchToQuery, является объектом типа TStringList, каждая строка которого содержит конструкцию следующего вида:

Имя_параметра_другого_запроса=Имя_поля_текущего_запроса
Наш параметр SL будет содержать четыре строки:
CODPERS=CODPERS
FIRST_NAME=FIRST_NAME
LAST_NAME=LAST_NAME
COUNTRY=COUNTRY

Продолжение следует...



Специальные цены для ex-USSR (кроме стран ЕС):

235 Euro
1500 руб. для физ. лиц
3600 руб. для юр. лиц

Скидки при покупке нескольких копий!

Меня поражает как в них [FIBPlus] все хорошо продумано. И приятно, что это сделали русские программисты. >>

Admin maw.ru
Раздел для покупателей
Получение полных версий и обновлений. Перейти в Customer's Center

Все об InterBase, Firebird и Yaffil. Новости, статьи, интервью, ссылки...