На этом шаге мы рассмотрим пример приложения, иллюстрирующего пакетную обработку данных.
Приложение имеет следующий вид (рисунок 1) :
Рис. 1. Приложение в работе
Приложение позволяет использовать режим пакетной обработки данных. Для этого используется компонент CheckBox1. При щелчке по этому компоненту включается или отключается режим пакетной обработки. Обработчик данного события имеет следующий вид:
procedure TForm1.CheckBox1Click(Sender: TObject); Begin Datamodule1.ADOTable1.Close; if checkBox1.Checked then Datamodule1.ADOTable1.LockType:=ltBatchOptimistic else Datamodule1.ADOTable1.LockType:=ltOptimistic; Datamodule1.ADOTable1.Open; Datamodule1.ADOTable1.Filtered:=True; End;
Щелчок по кнопке "Показать изменяемые записи" в режиме пакетной обнаботки позволяет отобразить измененные записи, которые хранятся в локальном кэше. Для этого используется фильтрация, осуществляемая с помощью свойства FilterGroup компонента ADOTable1.
procedure TForm1.Button3Click(Sender: TObject); Begin if checkBox1.Checked then Datamodule1.ADOTable1.FilterGroup:=fgPendingRecords; End;
Щелчок по кнопке "Назад" позволяет отобразить все имеющиеся записи путем установки свойства FilterGroup компонента ADOTable1 в fgNone.
procedure TForm1.Button4Click(Sender: TObject); Begin if checkBox1.Checked then Datamodule1.ADOTable1.FilterGroup:=fgNone; End;
Щелчок по кнопке "Подтвердить" в режиме пакетной обнаботки позволяет подтвердить сделанные изменения путем отправления измененных записей в базу данных с помощью метода UpdateBatch.
procedure TForm1.Button1Click(Sender: TObject); Begin if checkBox1.Checked then Datamodule1.ADOTable1.UpdateBatch(); End;
Щелчок по кнопке "Отмена" в режиме пакетной обработки позволяет отменить сделанные изменения с помощью метода CancelBatch.
procedure TForm1.Button2Click(Sender: TObject); Begin if checkBox1.Checked then Datamodule1.ADOTable1.CancelBatch(); End;
Обработчик события OnPostError компонента ADOTable1 позволяет обрабатывать ошибки при попытке поместить в базу данных неверные данные. Если режим пакетной обработки отключен. И если попытаться очистить имя или фамилию какого-либо игрока (эти поля обязательно должны содержать данные), то возникнет иссключение и появится сообщение "Неверный ввод".
procedure TDataModule1.ADOTable1PostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); Begin Action:=daAbort; ShowMessage('Неверный ввод!!!'); ADOTable1.Cancel; End;
Полный текст этого приложения можно взять здесь. Файлы базы данных, используемой в приложении можно взять здесь.