Смекни!
smekni.com

Использование модели briefcase при разработке приложений баз данных (стр. 2 из 2)

Свойство Filter объекта Recordset ADO установить равным adFilterConflictingRecords. При этом будут отображены только конфликтные записи.

Вызвать метод Resync того же объекта с параметром AffectRecords равным adAffectGroup, параметр ResyncValues равным adResyncUnderlyingValues, при этом будут получены обновленные данные о состоянии конфликтных записей с сервера. Актуальные значения полей записей рекордсета хранятся в свойстве UnderlyingValue объекта Field, начальные в OriginalValue, а измененные пользователем в Value.

Отобразив пользователю набор конфликтных записей и значения их полей мы даем ему возможность отредактировать конфликтные записи и устранить конфликты.

Записать в БД изменения пользователя можно вызвав UpdateBatch с параметром adAffectGroup.

Обработку ошибок я вынес в отдельный модуль ADOReconcileError. В нем определена процедура HandleADOReconcileError, отвечающая за поддержку обработки ошибок синхронизации. Сам же код синхронизации выглядит так:

try ParamsConn.Connected:=true; ParamsCS.Connection:=ParamsConn; ParamsCS.UpdateBatch; except on E:EOleException do begin HandleADOReconcileError(ParamsCS); end else raise;end; act_RemoteConnect.Execute;

Отмена внесенных изменений

Еще одной особенностью использования ADO является возможность пользователю отмены сделанных им изменений. Данная возможность реализуется методом CancelBatch. При вызове c параметром arAll (параметр по умолчанию) отменяются все сделанные изменения. При вызове с параметром arCurrent будут отменены изменения, внесенные в текущую запись датасета.

В следующей части статьи будет рассмотрена реализации модели briefcase с помощью средств MIDAS.