M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

    Состояние записи

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