Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ИП 2010-04-04 doc.doc
Скачиваний:
108
Добавлен:
13.05.2015
Размер:
5.96 Mб
Скачать

9.4.5. Обмен данными с помощью репликаций

При работе с базой часто является удобным скопировать на клиент­скую машину всю или часть базы в отдельную локальную базу-реплику (процедура создания реплики) и работать с репликой. После окончания ра­бо­ты с репликой ее можно вернуть в базу (процедура синхронизации). При создании реплики (на основе уже существующей) и при син­хро­ни­за­ции реплики копируются только новые или откор­рек­тирован­ные записи, что сокращает объем копируемой информации. Реп­­ликация снижает наг­руз­ку на базу коллективного использования и ус­коряет работу поль­зо­ва­те­лей, повышает надежность работы с базой.

Свойства и методы, используемые при репликации

{TableDef | QueryDef}.KeepLocal=True‑ возможность репликации.

{DataBase | TableDef | QueryDef}.Replicable=”T‑ возможность реплика­ции во время синхронизации (задается символами “T”, “F”).

{TableDef | QueryDef}.ReplicableBool=True‑ возможность репликации во время син­хронизации (задается логическими константамиTrue,False).

TableDef.ReplicaFilter=<условие> ‑ условие отбора записей из базы в час­тич­ную реплику.

Relation.PartialReplica=True‑ записи копируются на основе связей между таблицами.

Database.MakeReplica‑ метод формирования полной реплики.

Database.PopulatePartial‑ метод формирования частичной реплики.

DatabaseSynchronize‑ метод синхронизации реплики с базой.

Пример создания полной и частичной реплики

Private Sub Command2_Click() ‘процедура создания реплики

Dim db As Database, tdf As TableDef, fld As Field, qdf As QueryDef

Dim i As Integer, pr As Property, relation As relation ‘объявление переменных

Dim Sourcedb As String, Mastredb As String, Replicadb As String

Sourcedb = App.Path + “\Учет строек.mdb“ ‘имя исходной базы

masterdb = App.Path + “\master.mdb“ ‘имя копии исходной базы (основная)

Replicadb = App.Path + “\Replica.mdb“ ‘имя базы‑реплики

On Error GoTo proc_err 'переход на процедуру обработки ошибок

FileCopy Sourcedb, masterdb ‘копирование исходной базы в основую

‘открытие базы в монопольном режиме (True) для создания свойств

Set db = OpenDatabase(masterdb, True)

‘создание свойства (pr) Replicable=“T“ ‑ база будет реплицируемой

Set pr = db.CreateProperty(“Replicable“, dbText, “T“)

db.Properties.Append pr ‘добавление созданного свойства в массив свойств

db.Properties(“Replicable“) = “T “ ‘установка значения Replicable=“T“

For i = db.Relations.Count - 1 To 0 Step -1 'удаление существующих связей

If db.Relations(i).Name = “Заказчики“ Or _

db.Relations(i).Name = “НаселенныеПункты“ Then 'удаление связи

Set relation=db.Relations(i):db.Relations.Delete relation.Name

End If

Next 'окончание цикла удаления связей

For i=0 To db.TableDefs.Count-1 'установка свойств реплицируемости таблицы

If db.TableDefs(i).Name = “Стройки“ Or db.TableDefs(i).Name = _

“Заказчики“ Or db.TableDefs(i).Name = “Населенные пункты“ Then

Set tdf = db.TableDefs(i)

tdf.Properties(“replicableBool“) = True ‘таблица реплицируема

End If

Next 'окончание цикла

Вариант создания полной реплики

'db.MakeReplica Replicadb, “Полная реплика” ‘создание реплики

‘db.Close: Set db = Nothing ‘закрытие базы

Вариант создания частичной реплики

db.MakeReplica Replicadb,“Пустая реплика“,dbRepMakePartial ‘создание реплики

db.Close: Set db = Nothing ‘закрытие базы

Set db = OpenDatabase(Replicadb, True) ‘открытие пустой реплики

Set tdf = db.TableDefs(“Стройки“) 'открытие таблицы “Стройки“

tdf.ReplicaFilter=“knp=2“ ‘задание условия отбора записей из базы в реплику

db.PopulatePartial masterdb ‘формирование частичной реплики

db.Close: Set db = Nothing ‘закрытие базы-реплики

Exit Sub 'выход из процедуры

proc_err: 'блок обработки ошибок

Select Case Err.Number ‘номер ошибки

Case 3270 ‘свойство отсутствует в таблице и его нужно создать

Set pr = tdf.CreateProperty(“ReplicableBool“, dbBoolean, True) 'создание

tdf.Properties.Append pr ‘добавление свойства в массив свойств таблицы

Case Else ‘обработка остальных ошибок

MsgBox (“Описание: “ & Err.Description + “ Код ошибки: “ & _

Err.Number & “ Источник ошибки: “ & Err.Source) ' вывод сообщения

End Select

End Sub

Пример синхронизации реплики

Private Sub Command3_Click() ‘процедура синхронизации реплики

Dim db As Database, Mastredb As String, Replicadb As String

masterdb=App.Path+“\master.mdb“ : Replicadb=App.Path+“\Replica.mdb“

Setdb=OpenDatabase(masterdb,True) ‘открытие в монопольном режиме

db.SynchronizeReplicadb‘синхронизация ‑ возвращение реплики в базу

db.Close: Set db = Nothing: End Sub ‘закрытие базы и процедуры