|
Событие 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.