Состояние записи
Класс TCustomADODataSet обладает дополнительными возможностями, которые позволяют отслеживать состояние каждой записи.
Для текущей записи набора данных можно определить ее состояние. Для этого предназначено свойство
TRecordStatus = (rsOK, rsNew, rsModified, rsDeleted, rsUnmodified, rslnvalid, rsMultipleChanges, rsPendingChanges, rsCanceled, rsCantRelease, rsConcurrencyViolation, rsIntegrityViolation, rsMaxChangesExceeded, rsObjectOpen, rsOutOfMemory, rsPermissionDenied, rsSchemaViolation, rsDBDeleted); property RecordStatus: TRecordStatusSet;
где rsOK — запись успешно сохранена; rsNew — запись добавлена; rsModified — запись была изменена; rsDeleted — запись удалена; rsUnmodified — запись без изменений; rslnvalid — запись не может быть сохранена из-за неверной закладки; rsMultipleChanges — запись не может быть сохранена из-за множественных изменений; rsPendingChanges — запись не может быть сохранена из-за ссылки на несохраненные изменения; rsCanceled — операция с записью была отменена; rsCantRelease — запись заблокирована; rsConcurrencyViolation — запись не может быть сохранена из-за типа блокировки; rsintegrityvioiation — нарушена ссылочная целостность; rsMaxChangesExceeded — слишком много изменений; rsObjectOpen — конфликт с объектом базы данных; rsoutofMemory — недостаток памяти, rsPermissionDenied — нет доступа; rsSchemaViolation — нарушение структуры данных; rsDBDeleted — запись удалена в БД.
Как видите, благодаря этому свойству состояние отдельной записи может быть определено очень точно.
Кроме этого, метод
type
TUpdateStatus = (usUnmodified, usModifled, uslnserted, usDeleted);
function UpdateStatus: TUpdateStatus; override;
возвращает информацию о состоянии текущей записи.
Соответственно до и после изменения записи вызываются методы-обработчики
TWillChangeRecordEvent = procedure(DataSet: TCustomADODataSet; const Reason: TEventReason;
const RecordCount: Integer;
var EventStatus: TEventStatus) of object;
property OnWillChangeRecord: TWillChangeRecordEvent;
И
TRecordChangeCompleteEvent = procedure(DataSet: TCustomADODataSet; const Reason: TEventReason;
const RecordCount: Integer; const Error: Error;
var EventStatus: TEventStatus) of object;
property OnRecordChangeComplete:
TrecordChangeCompleteEvent;
где параметр Reason позволяет узнать, какой метод изменил записи, а параметр RecordCount возвращает число измененных записей.