Иллюстрированный самоучитель по Delphi 7 для профессионалов

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

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.