|
Экспорт и импорт данных в текстовом формате выполняется при помощи методов BatchOutput и BatchInput компонента TpFIBQuery.
Создайте новый проект BatchQuery3. Он похож на предыдущие два проекта.
Рис. 3. Проект BatchQuery3. Экспорт/импорт в текстовом формате
Для экспорта данных в текстовом формате с использованием функции BatchOutput нужно написать следующий обработчик события щелчка по кнопке BQueryBatchOutputD.
Delphi
procedure TFormBatch.BQueryBatchOutputDClick(Sender: TObject);
var Str: TFIBOutputDelimitedFile;
begin
if OpenDialogOutDel.Execute then
begin
Str := TFIBOutputDelimitedFile.Create;
Str.Filename := OpenDialogOutDel.FileName;
// Str.RowDelimiter := '+++';
// Str.ColDelimiter := '**';
// Str.OutputTitles := True;
SelectQuery.Close;
SelectQuery.BatchOutput(Str);
Str.Destroy;
SelectQuery.Close;
end;
end;
C++
void __fastcall TFormBatch::BQueryBatchOutputDClick(TObject *Sender)
{
if (OpenDialogOutDel->Execute())
{ TFIBOutputDelimitedFile *Str;
Str = new TFIBOutputDelimitedFile();
Str->Filename = OpenDialogOutDel->FileName;
// Str->RowDelimiter = "+++";
// Str->ColDelimiter = "**";
// Str->OutputTitles = true;
SelectQuery->Close();
SelectQuery->BatchOutput(Str);
delete Str;
SelectQuery->Close();
}
}
В данном случае функции BatchOutput мы передаем объект Str класса TFIBOutputDelimitedFile, являющийся потомком класса TFIBBatchOutputStream.
Единственным обязательным свойством этого объекта является имя файла (Filename).
Вы также можете указать разделитель строк (RowDelimiter) и разделитель колонок (ColDelimiter). Это могут быть строки символов произвольной длины. Во фрагментах кода разделители представлены в виде комментариев.
По умолчанию разделителем строк являются символы возврата каретки и перевода строки (#13#10 в Delphi, ‘\n’ в C++). Разделитель колонок: символ табуляции (#9 в Delphi, ‘\t’ в C++).
Если свойство OutputTitles объекта Str установить в True, то первой строкой создаваемого файла будет заголовок, содержащий список имен полей набора данных.
Здесь также необходимо закрыть запрос и уничтожить объект Str после выполнения экспорта.
Для импорта данных в текстовом формате с использованием функции BatchInput напишите следующий обработчик события щелчка по кнопке BQueryBatchInputD.
Delphi
procedure TFormBatch.BQueryBatchInputDClick(Sender: TObject);
var Str: TFIBInputDelimitedFile;
begin
if OpenDialogInDel.Execute then
begin
Str := TFIBInputDelimitedFile.Create;
Str.Filename := OpenDialogInDel.FileName;
// Str.RowDelimiter := '+++';
// Str.ColDelimiter := '**';
// Str.SkipTitles := True;
InsertQuery.BatchInput(Str);
pFIBTransaction1.CommitRetaining;
Str.Destroy;
pFIBDataSet1.FullRefresh;
end;
end;
C++
void __fastcall TFormBatch::BQueryBatchInputDClick(TObject *Sender)
{
if (OpenDialogInDel->Execute())
{ TFIBInputDelimitedFile *Str;
Str = new TFIBInputDelimitedFile();
Str->Filename = OpenDialogInDel->FileName;
// Str->RowDelimiter = ”+++”;
// Str->ColDelimiter = ”**”;
// Str->SkipTitles = true;
InsertQuery->BatchInput(Str);
pFIBTransaction1->CommitRetaining();
delete Str;
pFIBDataSet1->FullRefresh();
}
}
Функции BatchInput передается объект Str, являющийся потомком класса TFIBBatchInputStream. Обязательное свойство — Filename.
Как и в случае экспорта, вы можете указать разделитель строк (RowDelimiter) и разделитель колонок (ColDelimiter). Для нормального выполнения импорта необходимо, чтобы здесь были указаны те же разделители, что и при экспорте.
Если при экспорте было установлено в True свойство OutputTitles, то при импорте следует установить в True значение свойства SkipTitles, чтобы строка заголовка не рассматривалась как строка таблицы.
Класс TFIBBatchInputStream содержит еще и свойство ReadBlanksAsNull. Если его значение установить в True, то символьные поля, содержащие только пробелы, будут при помещении в базу преобразованы в значение NULL.