同步(Synchronization)是數據庫在網絡環境中應用所要涉及到的一個重要概念其基本過程大致分以下幾個步驟首先把一個數據庫設為可復制副本屬性使其成為設計正本(VB中稱設計原版ACCESS中稱設計母版)然後根據應用程序的實現需要從設計正本復制出多個副本(VB中稱復本)這些副本組成一個副本集合(設計正本也被看做是第一個的初始的副本)最後在集中任何復本的數據或結構被更改會時啟用同步機制把改變發送並且應用於此復本集中的其他成員使得副本集中的成員在數據或結構上保持一致性實現同步的這一過程被稱為同步化VB為實現同步在數據庫對象中提供了多個屬性與方法來實現這一過程以下介紹主要的幾個屬性與方法分別對應同步化的幾個步驟
.Replicable屬性
Replicable屬性用來使一個數據庫對象或數據庫中的表對象查詢對象等對象成為可復制副本的即成為設計正本但數據庫對象並不提供Replicable這一屬性因此首先要用CreatePropety方法來創建它然後把它添加到對象的屬性集中最後再給它賦值使數據庫成為設計正本對於數據庫對象而言把Replicable屬性設置為T將使數據庫對象成為可復制的以下代碼將使VB安裝目錄下附帶的Nwindmdb數據庫成為一個設計正本(為確保安全建議在操作前備份這一庫文件)
Private Sub Command_Click()
Dim dbNwind As Database
如果末引用DAO則一定要先引用
Dim prpNew As Property
Set dbNwind = OpenDatabase(Nwindmdb True)
With dbNwind
建立Replicable屬性如果已經存在該屬性則程序略過這一步
On Error Resume Next
Set prpNew = CreateProperty(Replicable dbText T)
PropertiesAppend prpNew
設置數據庫的Replicable屬性為True
Properties(Replicable) = T
Close
End With
End Sub
.MakeReplica方法
MakeReplica方法從設計正本復制出一個新的完全副本其語法為databaseMakeReplica replica description options其中replica是代表一個新副本路徑名稱的字符串description是對正在創建的新副本的一個描述字符串options是一個可選項可dbRepMakePartial常量(創建一個部分副本)或dbRepMakeReadOnly常量(防止用戶修改新副本中的可復制對象)如果要建立的是一個只讀式的部分副本則要加入參數常量dbRepMakeReadOnly + dbRepMakePartial
在第一個例子中在關閉數據庫之前加入代碼MakeReplica NwReplica replica of nwindmdb則從Nwindmdb設計正本復制出一個名為NwReplicamdb的副本位置在Nwindmdb同一目錄中以下是一個通過傳遞參數的形式在實際應用中可供靈活調用的函數每調用該函數一次即可實現新建一個副本
Function MakeAdditionalReplica(strReplicableDB As String strNewReplica As
String intOptions As Integer) As Integer
Dim dbsTemp As Database
On Error GoTo ErrorHandler
Set dbsTemp = OpenDatabase(strReplicableDB)
如果在調用此函數時intOptions處末給出參數 則忽略該參數項
默認建立一個完全的可讀/寫的副本否則就利用提供的參數按要求建立副本
If intOptions = Then
dbsTempMakeReplica strNewReplica Replica of & strReplicableDB
Else
dbsTempMakeReplica strNewReplica Replica of & strReplicableDB
intOptions
End If
dbsTempClose
ErrorHandler:
Select Case Err
Case :
MakeAdditionalReplica =
Exit Function
Case Else:
MsgBox Error & Err & : & Error
MakeAdditionalReplica = Err
Exit Function
End Select
End Function
.Synchronize方法
Synchronize方法使兩個完全副本(包括設計正本)同步化其語法為databaseSynchronize pathname
exchange其中pathname為要同步的目標副本的路徑名稱字符串(串中的 mdb擴展名可省略)exchange用來標識兩個數據庫之間的同步方向(如表一)這是一個可選項默認為表中的第三個選項即雙向交換利用表中第四個dbRepSyncInternet常量選項還可對通過Internet互聯的數據庫進行同步化這時要將代表本地網絡路徑選項pathname用URL地址來代替
一同步化方向常量
常量同步化方向
DbRepExportChanges從數據庫到副本路徑名稱
DbRepImportChanges從副本路徑名稱到數據庫
DbRepImpExpChanges雙向交換改變(默認)
DbRepSyncInternet在通過Internet路徑連接的數據庫之間傳遞改變
在同步化操作之前要確保已經利用 Replicable屬性使一個數據庫初始出設計正本並且利用MakeReplica方法復制出了一個以上的副本
以下通過在第一個例子添加的副本復制語句之後加入如下語句Synchronize NwReplicamdb dbRepExportChanges實現把數據庫Nwind的設計正本的任何改變傳遞給副本NwReplica我們可以在Nwindmdb庫中改變一些數據內容然後再運行這一例子我們會發現Nwindmdb庫的改變已經反映在NwReplicamdb這一副本中了
以上語句實現從數據庫到副本路徑名稱的同步(把設計正本的數據或結構改變傳遞給副本)把dbRepExportChanges常量改為dbRepImportChanges和dbRepImpExpChanges可分別實現從副本路徑名稱到數據庫(數據庫接收副本上的改變)以及雙向交換(兩者間的雙向數據傳遞)同步
Synchronize方法還可對通過Internet互聯的數據庫進行同步化以下語句實現本地數據庫正本與位於Internet服務器上的一個副本同步化dbNwindSynchronize wwwmycompanymyservercom & /files/NwReplicamdb dbRepImpExpChanges
+ dbRepSyncInternet
.PopulatePartial 方法
上面介紹利用Synchronize方法使兩個完全副本同步化不會出現問題但如果用一個完全副本來同步一個部分副本因為部分副本是由副本過濾器來從完全副本來過濾重新生成的因此可能在部分副本中產生所謂的孤立記錄即這些記錄不能再與其他副本保持同步要解決這一問題引入了另一個稱為PopulatePartial的方法該方法與Synchronize方法類似只不過它是實現部分副本與完全副本的同步在同步時首先清除部分副本中的所有記錄然後根據當前副本的過濾器來重新生成部分副本這樣就解決了孤立記錄的問題其語法為databasePopulatePartial
dbnamedbname是完全副本的路徑名稱由於篇幅所限以及其與Synchronize方法的相似性因此在此不再累述更詳細的描述請參閱相關的聯機幫助
From:http://tw.wingwit.com/Article/program/SQL/201311/16337.html