Форма приложения для переноса данных на сервер
23. Форма приложения для переноса данных на сервер
Для переноса данных с одной платформы на другую обычно используется компонент TBatchMove. Этот компонент обеспечивает копирование данных из одной таблицы в другую. Основные свойства этого компонента следующие: Source – таблица (или запрос), откуда копируются данные, Destination – таблица, куда копируются данные, Mapping – определяет соответствие между колонками исходной и результирующей таблиц (для идентичных таблиц это свойство определять не обязательно), Mode – тип перемещения (batAppend – добавляет новые строки в результирующую таблицу, batUpdate – заменяет строки в результирующей таблице на соответствующие строки оригинала, batCopy – копирует строки в результирующую таблицу, переписывая ее, batDelete – удаляет записи в результирующей таблице, соответствующие записям оригинала), KeyViolTableName и ProblemTableName – имена дополнительных таблиц для помещения записей, чье копирование запрещено правилами ссылочной целостности или по каким-либо причинам невозможно (например, из-за несоответствия типов данных), ChangedTableName – имя таблицы для помещения измененных записей. Копирование данных происходит при выполнении метода Execute(). Отметим, что этот метод может быть вызван непосредственно из среды разработки с помощью контекстного меню компонента TBatchMove.
Установим следующие значения свойств используемых компонентов:
Компонент | Свойство | Значение |
Table1 | DatabaseName | Oracle7 |
Exclusive | true | |
TableName | CLIENTS | |
Active | true | |
Table2 | DatabaseName | BCDEMOS |
TableName | ClLIENTS.DBF | |
Active | true | |
DataSource1 | DataSet | Table1 |
DataSource2 | DataSet | Table2 |
DBGrid1 | DataSource | DataSource1 |
DBGrid2 | DataSource | DataSource2 |
DBNavigator1 | DataSource | DataSource1 |
DBNavigator2 | DataSource | DataSource2 |
BatchMove1 | Source | Table2 |
Destination | Table1 | |
Mode | batAppend | |
Button1 | Caption | CLIENTS |
Button2 | Caption | HOLDINGS |
Button3 | Caption | Добавить |
Button4 | Caption | Очистить |
Button5 | Caption | Выход |
#include <vcl\vcl.h>
#pragma hdrstop
#include "upsize1.h"
//--------------------------------------------------------
#pragma link "Grids"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
}
//--------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Table1->Close();
Table2->Close();
Table1->TableName="CLIENTS";
Table2->TableName="CLIENTS.DBF";
Table1->Open();
Table2->Open();
}
//--------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Table1->Close();
Table2->Close();
Table1->TableName="HOLDINGS";
Table2->TableName="HOLDINGS.DBF";
Table1->Open();
Table2->Open();
}
//--------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Table1->EmptyTable();
}
//--------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
BatchMove1->Execute();
}
//--------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close();
}
//-------------------------------------------------------- Скомпилируем и запустим приложение. Кнопки CLIENTS и HOLDINGS осуществляют выбор между той или иной парой таблиц. При нажатии кнопки Добавить происходит перенос данных из активной в данный момент таблицы dBase (CLIENTS или HOLDINGS) в соответствующую таблицу Oracle. Отметим, что наличие поддержки ссылочной целостности можно проверить, попытавшись перенести данные из таблицы HOLDINGS до того, как перенесены данные из таблицы CLIENTS. При этом перенос осуществлен не будет, и в процессе выполнения приложения появится диагностическое сообщение примерно следующего вида (рис.24):