Состояние записи
Класс 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 возвращает число измененных записей.
|