где rsOK - запись успешно сохранена; rsNew - запись добавлена; rsModified - запись была изменена; rsDeleted - запись удалена; rsUnmodified - запись без изменений; rslnvalid - запись не может быть сохранена из-за неверной закладки; rsMultipleChanges - запись не может быть сохранена из-за множественных изменений; rsPendingChanges - запись не может быть сохранена из-за ссылки на несохраненные изменения; rsCanceled - операция с записью была отменена; rsCantRelease - запись заблокирована; rsConcurrencyViolation - запись не может быть сохранена из-за типа блокировки; rsIntegrityViolation - нарушена ссылочная целостность; rsMaxChangesExceeded - ОИШОМ МШО изменений; rsObjectOpen - конфликт с объектом базы данных; rsOutOfMemory - недостаток памяти, rsPermissionDenied - нет доступа; rsSchemaViolation - нарушение структуры данных; rsDBDeleted - запись удалена в БД.
Как видите, благодаря этому свойству состояние отдельной записи может быть определено очень точно.
Кроме этого, метод
type
TUpdateStatus = (usUnmodified, usModified, uslnserted, usDeleted);
function UpdateStatus: TUpdateStatus;
override;
возвращает информацию о состоянии текущей записи.
Соответственно до и после изменения записи вызываются методы-обработчики
TWillChangeRecordEvent = procedure(DataSet: TCustomADODataSet;
const Reason: TEventReason;
const RecordCount: Integer;
var Eventstatus: lEventStatus) of object;
property OnWillChangeRecord: TWillChangeRecordEvent; И
TRecordChangeCompleteEvent = procedure (DataSet: TCustoniADODataSet;
const Reason: TEventReason;
const RecordCount: Integer;
const Error: Error;
var Eventstatus: lEventStatus) of object;
property OnRecordChangeComplete: TrecordChangeCompleteEvent;
где параметр Reason позволяет узнать, какой метод изменил записи, а параметр RecordCount возвращает число измененных записей.
Фильтрация
Помимо обычной фильтрации, основанной на свойствах Filter, Filtered и методе-обработчике OnFilterRecord, класс TCustomADODataSet предоставляет разработчику дополнительные возможности.
Свойство
lEilterGroup = (fgUnassigned, fgNone, fgPendingRecords,
fgAf fectedRecords, fgFetchedRecords, fgRredicate, fgConflictingRecords) ;
property FilterGroup: lEilterGroip;
задает групповой фильтр для записей, основываясь на информации о состоянии каждой записи набора данных, подобно рассмотренному выше свойству RecordStatus.
Фильтрация возможна по следующим параметрам: • fgUnassigned - фильтр не задан;
□
%None - все ограничения, заданные фильтром, снимаются, отображаются все записи набора данных;
О fgPendingRecords - отображаются измененные записи, несохраненные в хранилище данных при вызове метода updateBatch или cancelBatch;
О fgAffectedRecords- показываются записи, обработанные при последнем сохранении в хранилище данных;
П fgFetchedRecords - имеем записи, полученные при последнем обновлении из источника данных;
• fgPredicate - видны только удаленные записи;
OfgConflictirigRecords - отображаются модифицированные записи, при сохранении которых в хранилище данных возникла ошибка.