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