Шаг 74 - Метод PopulatePartial

Описание
Выполняет синхронизацию любых изменений в частичной реплике с полной репликой, очищает все записи в частичной реплике, а затем снова заполняет частичную реплику с использованием текущих фильтров реплики (только в базах данных Microsoft Jet).

базаДанных.PopulatePartial имяБД

Параметры
базаДанных
Объектная переменная, представляющая ссылку на частичную реплику объекта Database, которую требуется заполнить.
имяБД
Выражение типа String, указывающее путь и имя полной реплики, из которой берутся записи.

Замечания
При синхронизации частичной реплики с полной репликой возможно образование в частичной реплике записей, не имеющих исходных в полной реплике. Например, предположим, что имеется таблица "Клиенты", с заданным в свойстве ReplicaFilter условием "Город = 'Тверь'". Если пользователь заменяет в записях частичной реплики "Тверь" на "Тула", а затем выполняет синхронизацию с помощью метода Synchronize, то изменения будут направлены в полную реплику, но записи, содержащие значение "Тула" в частичной реплике, не будут иметь соответствующих им записей в полной, поскольку не удовлетворяют условиям фильтра.
Чтобы разрешить проблему записей, не имеющих исходных, следует использовать метод PopulatePartial. Метод PopulatePartial аналогичен методу Synchronize, но в нем выполняется общая синхронизация с полной репликой, удаляются все записи из частичной реплики, а затем частичная реплика заполняется снова с использованием текущих фильтров реплики. Даже если фильтры реплики не были изменены, метод PopulatePartial всегда очищает все записи в частичной реплики, а затем снова заполняет ее с помощью текущих фильтров.
В общем случае, метод PopulatePartial следует использовать при создании частичной реплики и при каждом изменении фильтров реплики. Если приложение изменяет фильтры реплики, необходимо выполнить следующие действия:
1 Выполните синхронизацию полной реплики с частичной репликой, в которой были изменены фильтры.
2 С помощью свойств ReplicaFilter и PartialReplica внесите необходимые изменения в фильтр реплики.
3 Вызовите метод PopulatePartial для удаления всех записей из частичной реплики и перевода в нее всех записей из полной реплики, удовлетворяющих новым условиям фильтра.
Если фильтр реплики был изменен, а метод Synchronize вызывается без предварительного вызова метода PopulatePartial, возникает перехватываемая ошибка.
Метод PopulatePartial можно вызывать для частичной реплики, которая была открыта для монопольного доступа. Более того, нельзя вызывать метод PopulatePartial из программы, выполняющейся в самой частичной реплике. Вместо этого следует открыть частичную реплику с монопольным доступом из полной реплики или из другой базы данных, а затем вызвать метод PopulatePartial.
Хотя метод PopulatePartial выполняет односторонюю синхронизацию до очистки и нового заполнения частичной реплики, полезным приемом является вызов метода Synchronize перед вызовом PopulatePartial. Если вызов Synchronize окажется неудачным, возникает перехватываемая ошибка. Пользователь имеет возможность использовать эту ошибку, чтобы решить, стоит или нет вызывать метод PopulatePartial (который удалит все записи из частичной реплики). Если же вызвать только метод PopulatePartial, и при синхронизации записей возникнет ошибка, записи частичной реплики будут удалены, что может явиться нежелательным.

Пример
Следующая программа вызывает метод PopulatePartial после изменения фильтра реплики.

Sub PopulatePartialX()

	Dim tdfCustomers As TableDef
	Dim strFilter As String
	Dim dbsTemp As Database

	' Открывает частичную реплику для монопольного доступа.
	Set dbsTemp = OpenDatabase("F:\SALES\FY96CA.MDB", True)
	With dbsTemp
		Set tdfCustomers =.TableDefs("Клиенты")
		' Выполняет синхронизацию с полной репликой 
		' перед заданием фильтра реплики.
		.Synchronize "C:\SALES\FY96.MDB" 
		strFilter = "Город = 'Тула'"
		tdfCustomers.ReplicaFilter = strFilter
		' Заполняет реплику записями из полной реплики.
		.PopulatePartial "C:\SALES\FY96.MDB"
		.Close
	End With
End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 14.03.2002