Свойство 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.