使Access數(shù)據(jù)庫保持同步的思路分析

同步(Synchronization)是數(shù)據(jù)庫在網(wǎng)絡(luò)環(huán)境中應(yīng)用所要涉及到的一個重要概念。其基本過程大致分以下幾個步驟:
1、首先把一個數(shù)據(jù)庫設(shè)為可復(fù)制副本屬性,使其成為設(shè)計正本(VB中稱設(shè)計原版,ACCESS中稱設(shè)計母版)。
2、然后根據(jù)應(yīng)用程序的實現(xiàn)需要從設(shè)計正本復(fù)制出多個副本(VB中稱復(fù)本),這些副本組成一個副本集合(設(shè)計正本也被看做是第一個的、初始的副本)。
3、最后在集中任何復(fù)本的數(shù)據(jù)或結(jié)構(gòu)被更改會時啟用同步機制把改變發(fā)送并且應(yīng)用于此復(fù)本集中的其他成員,使得副本集中的成員在數(shù)據(jù)或結(jié)構(gòu)上保持一致性。
實現(xiàn)同步的這一過程被稱為同步化。VB6.0為實現(xiàn)同步,在數(shù)據(jù)庫對象中提供了多個屬性與方法來實現(xiàn)這一過程,以下介紹主要的幾個屬性與方法,分別對應(yīng)同步化的幾個步驟:
1.Replicable屬性:
Replicable屬性用來使一個數(shù)據(jù)庫對象或數(shù)據(jù)庫中的表對象、查詢對象等對象成為可復(fù)制副本的,即成為設(shè)計正本。但數(shù)據(jù)庫對象并不提供Replicable這一屬性,因此首先要用CreatePropety方法來創(chuàng)建它,然后把它添加到對象的屬性集中,最后再給它賦值,使數(shù)據(jù)庫成為設(shè)計正本。對于數(shù)據(jù)庫對象而言,把Replicable屬性設(shè)置為“T”將使數(shù)據(jù)庫對象成為可復(fù)制的。以下代碼將使VB6.0安裝目錄下附帶的Nwind.mdb數(shù)據(jù)庫成為一個設(shè)計正本(為確保安全建議在操作前備份這一庫文件):
Private Sub Command1_Click() |
2.MakeReplica方法:
MakeReplica方法從設(shè)計正本復(fù)制出一個新的完全副本。其語法為:database.MakeReplica replica, description, options,其中replica是代表一個新副本路徑名稱的字符串;description是對正在創(chuàng)建的新副本的一個描述字符串;options是一個可選項,可以是dbRepMakePartial常量(創(chuàng)建一個部分副本)或dbRepMakeReadOnly常量(防止用戶修改新副本中的可復(fù)制對象),如果要建立的是一個只讀式的部分副本,則要加入?yún)?shù)常量 dbRepMakeReadOnly + dbRepMakePartial 。
在第一個例子中,在關(guān)閉數(shù)據(jù)庫之前加入代碼:.MakeReplica "NwReplica", "replica of nwind.mdb",則從Nwind.mdb設(shè)計正本復(fù)制出一個名為NwReplica.mdb的副本,位置在Nwind.mdb同一目錄中。以下是一個通過傳遞參數(shù)的形式,在實際應(yīng)用中可供靈活調(diào)用的函數(shù),每調(diào)用該函數(shù)一次即可實現(xiàn)新建一個副本:
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)
' 如果在調(diào)用此函數(shù)時,intOptions處末給出參數(shù), 則忽略該參數(shù)項,
'默認建立一個完全的、可讀/寫的副本,否則就利用提供的參數(shù)按要求建立副本
If intOptions = 0 Then
dbsTemp.MakeReplica strNewReplica, "Replica of " & strReplicableDB
Else
dbsTemp.MakeReplica strNewReplica, "Replica of " & strReplicableDB, intOptions
End If
dbsTemp.Close
ErrorHandler:
Select Case Err
Case 0:
MakeAdditionalReplica = 0
Exit Function
Case Else:
MsgBox "Error " & Err & " : " & Error
MakeAdditionalReplica = Err
Exit Function
End Select
End Function
3.Synchronize方法:
Synchronize方法使兩個完全副本(包括設(shè)計正本)同步化。其語法為:database.Synchronize pathname, exchange。其中pathname為要同步的目標(biāo)副本的路徑名稱字符串(串中的 .mdb擴展名可省略);exchange用來標(biāo)識兩個數(shù)據(jù)庫之間的同步方向(如表一),這是一個可選項,默認為表中的第三個選項,即雙向交換。利用表中第四個dbRepSyncInternet常量選項,還可對通過Internet互聯(lián)的數(shù)據(jù)庫進行同步化,
這時要將代表本地網(wǎng)絡(luò)路徑選項pathname用URL地址來代替。
表一、同步化方向常量
常量 | 同步化方向 |
DbRepExportChanges | 從數(shù)據(jù)庫到副本路徑名稱 |
DbRepImportChanges | 從副本路徑名稱到數(shù)據(jù)庫 |
DbRepImpExpChanges | 雙向交換改變(默認) |
DbRepSyncInternet | 在通過Internet路徑連接的數(shù)據(jù)庫之間傳遞改變 |
在同步化操作之前,要確保已經(jīng)利用 Replicable屬性使一個數(shù)據(jù)庫初始出設(shè)計正本,并且利用MakeReplica方法復(fù)制出了一個以上的副本。
以下通過在第一個例子添加的副本復(fù)制語句之后,加入如下語句:.Synchronize "NwReplica.mdb", dbRepExportChanges,實現(xiàn)把數(shù)據(jù)庫Nwind的設(shè)計正本的任何改變傳遞給副本 NwReplica。我們可以在Nwind.mdb庫中改變一些數(shù)據(jù)內(nèi)容,然后再運行這一例子,我們會發(fā)現(xiàn)Nwind.mdb庫的改變已經(jīng)反映在NwReplica.mdb這一副本中了。
以上語句實現(xiàn)從數(shù)據(jù)庫到副本路徑名稱的同步(把設(shè)計正本的數(shù)據(jù)或結(jié)構(gòu)改變傳遞給副本),把dbRepExportChanges常量改為dbRepImportChanges和dbRepImpExpChanges可分別實現(xiàn)從副本路徑名稱到數(shù)據(jù)庫(數(shù)據(jù)庫接收副本上的改變)以及雙向交換(兩者間的雙向數(shù)據(jù)傳遞)同步。
Synchronize方法還可對通過Internet互聯(lián)的數(shù)據(jù)庫進行同步化,以下語句實現(xiàn)本地數(shù)據(jù)庫正本與位于Internet服務(wù)器上的一個副本同步化:dbNwind.Synchronize "www.mycompany.myserver.com" & "/files/NwReplica.mdb", dbRepImpExpChanges + dbRepSyncInternet
4.PopulatePartial 方法:
上面介紹利用Synchronize方法使兩個完全副本同步化,不會出現(xiàn)問題,但如果用一個完全副本來同步一個部分副本,因為部分副本是由副本過濾器來從完全副本來過濾重新生成的,因此可能在部分副本中產(chǎn)生所謂的“孤立”記錄,即這些記錄不能再與其他副本保持同步。要解決這一問題引入了另一個稱為PopulatePartial的方法,該方法與Synchronize方法類似,只不過它是實現(xiàn)部分副本與完全副本的同步,在同步時,首先清除部分副本中的所有記錄,然后根據(jù)當(dāng)前副本的過濾器來重新生成部分副本,這樣就解決了“孤立”記錄的問題。其語法為:database.PopulatePartial dbname。dbname是完全副本的路徑名稱。由于篇幅所限以及其與Synchronize方法的相似性,因此在此不再累述,更詳細的描述請參閱相關(guān)的聯(lián)機幫助。
相關(guān)文章
Access可以設(shè)置數(shù)據(jù)庫密碼嗎?Access設(shè)置數(shù)據(jù)庫密碼教程
Access是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng)。它結(jié)合了 Microsoft Jet Database Engine 和 圖形用戶界面兩項特點,是 Microsoft Office 的系統(tǒng)程式之一,下面跟著小編來學(xué)習(xí)2023-02-24Access如何導(dǎo)出access表格數(shù)據(jù)?Access導(dǎo)出access表格數(shù)據(jù)教程
Access是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng)。它結(jié)合了 Microsoft Jet Database Engine 和 圖形用戶界面兩項特點,是 Microsoft Office 的系統(tǒng)程式之一。下面來看看在這里怎2023-02-24Access如何創(chuàng)建數(shù)據(jù)庫?Access創(chuàng)建數(shù)據(jù)庫教程
access是由微軟發(fā)布的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng),讓用戶擁有強大的數(shù)據(jù)處理功能,主要應(yīng)用于網(wǎng)站數(shù)據(jù)存儲、軟件數(shù)據(jù)存儲等,下面來看看怎么去創(chuàng)建數(shù)據(jù)庫吧2022-10-19Access如何設(shè)置單元格居中?Access設(shè)置單元格居中方法
Access數(shù)據(jù)庫全稱Microsoft Office Access,是由微軟開發(fā)的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng),在軟件中大家知道怎么去設(shè)置單元格居中嗎?一起來看看2022-10-19- access是由微軟發(fā)布的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng),主要應(yīng)用于小型企業(yè),或者大公司的部門,今天咱們就來學(xué)習(xí)下在access中怎么隱藏表吧2022-11-04
Access數(shù)據(jù)庫圖片數(shù)據(jù)怎么轉(zhuǎn)換成位圖?
Access數(shù)據(jù)庫圖片數(shù)據(jù)怎么轉(zhuǎn)換成位圖?Access數(shù)據(jù)庫中所有圖片需要轉(zhuǎn)成位圖,該怎么操作呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2021-03-29access窗體中怎么添加條形碼? access條形碼生成教程
access窗體中怎么添加條形碼? access窗體中想要插入條形碼,該怎么插入呢?下面我們就來看看access條形碼生成教程,需要的朋友可以參考下2021-02-24access數(shù)據(jù)庫怎么實現(xiàn)過期日期提醒? access到期提醒的方法
access數(shù)據(jù)庫怎么實現(xiàn)過期日期提醒?access數(shù)據(jù)庫表格中想要制作一個過期提醒,該怎么制作這個功能呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2021-02-24- Access數(shù)據(jù)表怎么顯示文檔選項卡?Access數(shù)據(jù)庫中的表格想要顯示文檔選項卡,該怎么設(shè)置呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2021-02-08
access表重命名后沒變怎么辦? access數(shù)據(jù)庫表重命名的技巧
access表重命名后沒變怎么辦?access數(shù)據(jù)庫中的數(shù)據(jù)表想要進行重命名,該怎么有效的重命名呢?下面我們就來看看access數(shù)據(jù)庫表重命名的技巧,需要的朋友可以參考下2021-01-13