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

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


Событие OnBatching наступает при экспорте или импорте каждой записи прииспользовании любого из методов: BatchOutputRawFile, BatchInputRawFile, BatchOutput или BatchInput. В обработчике этого события можно указать, следует ли продолжить дальнейшую обработку, также можно изменить значения отдельных полей.

Событие OnBatching для методов BatchOutputRawFile и BatchInputRawFile не является особенно полезным. Его можно использовать разве что для подсчета количества экспортируемых или импортируемых строк. Для методов BatchOutput и BatchInput это событие можно использовать для корректировок значений полей таблицы.

Delphi

procedure TFormBatch.SelectQueryBatching(BatchOperation:
TBatchOperation; RecNumber: Integer; var BatchAction: TBatchAction);
begin
...
end;

C++

void __fastcall TFormBatch::SelectQueryBatching(
TBatchOperation BatchOperation, int RecNumber,
TBatchAction &BatchAction)
{
...
}

Параметр BatchOperation типа TBatchOperation содержит признак выполняемой функции:

boInput Выполняется BatchInput или BatchInputRawFile метод.
boOutput Выполняется BatchOutput или BatchOutputRawFile метод.
boOutputToQuery Выполняется BatchToQuery метод (см. ниже).

Параметр BatchAction дает возможность в программе указать требуемые действия по выполнению функции:

baContinue Продолжить обработку текущей записи.
baStop Остановить выполнение функции.
baSkip Пропустить текущую запись.

По умолчанию возвращается baContinue.

Параметр RecNumber передает порядковый номер обрабатываемой записи.

Проиллюстрируем изменение значения одного поля при импорте данных. Напишем обработчик события OnBatching таким образом, чтобы значение первичного ключа каждой записи (поле CODPERS) увеличивалось перед помещением в базу данных на 100.

Внесем в проект BatchQuery3 следующие изменения.

Объявление переменной Str уберем из обработчика события щелчка по кнопке импорта и перенесем в интерфейсную часть объявлений переменных (для Delphi) или в заголовочный файл (C++Builder), чтобы сделать эту переменную доступной также и в обработчике события OnBatching.

Обработчик события напишем в следующем виде:

Delphi

procedure TFormBatch.InsertQueryBatching(BatchOperation: TBatchOperation;
RecNumber: Integer; var BatchAction: TBatchAction);
begin
Str.Params.Vars[0].AsInteger := Str.Params.Vars[0].AsInteger + 100;
или:
Str.Params.ByName['CODPERS'].AsInteger :=
Str.Params.ByName['CODPERS'].AsInteger + 100;
end;

C++

void __fastcall TFormBatch:: InsertQueryBatching(
TBatchOperation BatchOperation, int RecNumber,
TBatchAction &BatchAction)
{
Str->Params->Vars[0]->AsInteger = Str->Params->Vars[0]->AsInteger + 100;
или:
Str->Params->ByName["CODPERS"]->AsInteger =
Str->Params->ByName["CODPERS"]->AsInteger + 100;
}
Событие наступает до помещения каждой записи в базу данных, следовательно, мы можем изменить значение любого поля в обработчике этого события.

Здесь мы используем свойство Params класса TFIBInputDelimitedFile, которое возвращает параметр XSQLDA. В этом параметре можно использовать свойство Vars, которое дает возможность получить доступ к параметру запроса по индексу, или свойство ByName, дающее возможность получить доступ к параметру по имени. Изменяя значение параметра запроса CODPERS, мы тем самым изменяем значение соответствующего поля таблицы.

Событие OnBatchError наступает при возникновении ошибок в процессе экспорта или импорта записей.

Delphi

procedure TFormBatch.QueryToAnotherBaseBatchError(E: EFIBError;
var BatchErrorAction: TBatchErrorAction);
begin
...
end;

C++

void __fastcall TFormBatch::SelectQueryBatchError(EFIBError *E,
TBatchErrorAction &BatchErrorAction)
{
...
}

Параметр E типа EFIBError передает тип ошибки. Позволяет с высокой точностью определить ошибку. Здесь можно получить SQLCode, IBErrorCode, Message, IBMessage и SQLMessage.

Параметр BatchErrorAction дает возможность указать требуемые действия по выполнению функции:

beFail Возвращает ту же ошибку на предыдущий уровень.
beAbort Отменяет выполнение функций BatchInput или BatchToQuery.
beRetry Повторить последнюю операцию, вызвавшую ошибку.
beIgnore Игнорировать последнюю ошибку и операцию.

По умолчанию возвращается beAbort.

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

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

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

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

Огромное спасибо!!! FIB+ rullezzz! >>

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

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