網絡數據庫的復制和同步(5)

發表于:2007-07-14來源:作者:點擊數: 標簽:
網絡 數據庫 的復制和同步(5) 所謂建立數據庫復本,實際上就是建立數據庫的拷貝。通過數據庫復制,每個用戶都可以使用數據庫中數據的一份拷貝,并可在某個時亥把各個數據庫重新組合成宿主數據庫,而對宿主數據庫的修改都傳送到數據庫復本。注意,數據庫復
網絡數據庫的復制和同步(5)

所謂建立數據庫復本,實際上就是建立數據庫的拷貝。通過數據庫復制,每個用戶都可以使用數據庫中數據的一份拷貝,并可在某個時亥把各個數據庫重新組合成宿主數據庫,而對宿主數據庫的修改都傳送到數據庫復本。注意,數據庫復制功能僅對Microsoft Jet 3.5版的數據庫有效。

   Microsoft Jet 數據庫引擎不允許用數據庫密碼來保護復制數據庫。在開始使用復本之前,必須先從將要復制的數據庫中刪去所有數據庫密碼保護。設置用戶權限與復本同步沒有沖突。

   用DAO復制數據庫的一般步驟如下:

   (1)識別數據庫中不需要復制的對象,并將它們的KeepLocal屬性設置為“T”。

   (2)將數據庫的Replicable屬性設置為“T”,使它變成設計原版。

   (3)用MakeReplica方法從設計原版中生成附加的復本。

在設置Replicable屬性之前,應先確定在轉換數據庫以前數據庫是否已經被復制。

   1.保持對象本地化

   當把正常的數據庫轉換為設計原版時,將復制數據庫中的所有對象。如果不想把數據中的所有對象都放在復本集中,則可對不想復制的對象添加并設置KeepLocal屬性。例如,果數據庫中有一個表,在該表中含有機密的工資信息、初始化信息或登錄到數據庫的用名,則可能希望不把這些信息放到復本中。在這種情況下,可將該表的KeepLocal屬性設為“T”,使得復制數據庫時,這些信息不被復制。

   對于TableDef 和 QueryDef對象,可以建立keepLocal屬性并把它添加到對象的屬性集合中。對于由主機應用程序定義的窗體、報表、宏以及模塊,可以建立KeepLocal屬性并把它添加到表示該對象的Document對象的屬性集合中。

注意,在設置keepLocal (以及Rep1icab1e )屬性之前,必須先建立它,然后添加到將使用它的對象的屬性集合中。如果在建立并添加該屬性之前先引用了它,則將產生一個運行時錯誤。
【例】編寫一個Function 過程,對數據庫中指定的對象進行本地化處理。

   Function SetKeepLocal(dbs As Database, strCollection As String, stffobJect As String) As integer

   Dim i As Integer

   Dim blnMatch As Boolean

   Dim tdf As TableDef

   Dim PrP As Property

   Dim doc As Document

   Dim qdf As QueryDef

   On Error GoTo ErrorHandler

   Select Case stalollection

    Case "FormS", "RelpOrtS", ´´MOdllleS´´, ´´SCriptS`´

      Set doc = dbs.Containers(strCollection). Documents(strObject)

      Set prp = doc.Createproperty ("KeepLocal", dbText, `´T´´)

      doc.Properties.Append prp

    Case "TableDefs"

      Set tdf = dbs.TableDefs(strObJect)

      Set prp = tdfCreateproperty (´´KeepLocal´´, dbText, ´´T´´)

      tdfprol)etties.Append prp

    Case ´´QuecyDefs´`

      Set qdf=dbs.QueryDefs(sbrobject)

      Set prp = qdf.Createproperty ("KeepLocal", dbText, "T")

      qdf.properties.Append PrP

   End Select

ErrorHandler:

   Select Case Err

    Case 0

     case 3265 ´對象未發現

     SetKeepLocal = 3265

     Exit Function

     ´屬性已經存在,把它設置為“T”

    Case 3367

     Select Case sttoollection

      CSSel ´´Forms´´ , ´´RelportS´´, ``Modlules´´ , ´´ScriptS´`

      doc.Properties(´´KeepLocal´`).Value = `´T´`

    Case ´´TableDefs´`

      tdf.Properties(´´KeepLocal´´).Value = `´T´`

    Case ´´QueryDefs´`

      qdf.Properties(´´KeepLocal´´).Value = ´´T´`

    Exit Function

   End Select

   SetKeepLocal = 0

   Exit Function

   Case Else

    MsgBOx ´´Error´´ & Err & ":", & Error, vbOKOnly

    SetKeepLocal=-1

    Exit Function

    End Select

   End Function

用上述過程可以對指定數據庫對象建立并添加KeepLocal屬性,如果該屬性已經存在,則將產生代碼為3367的錯誤,在這種情況下,將在錯誤處理程序中把該屬性的值設置為“T”

   該過程有3個參數,其中第一個參數是Database對象,第二個參數是集合的名字,第三個參數是數據庫中的對象名。過程的返回值是一個整型數,它實際上是一個錯誤代碼。為了調用上面的過程,可以在窗體上畫一個命令按鈕,然后編寫如下的事件過程:

   Private Sub Command1_Click()

    Dim MyDb As Database

    Dim a As integer

    Set MyDb = OpenDatabase(´´c:\dbdir\db1.mdb´´)

    a = SetKeepLocal(MyDb, ´´TableDefs´´,´´Tabel1´´)

    If a = 0 Then

     MsgBox "已成功設置KeepLocal 屬性"

    Elself a = 3265 Then

     MsgBox "對象未找到"

    Elself a = 3367 Then

     MsgBox "KeepLocal屬性已存在,設置為“T”

    Else

     MsgBox“出錯”

    End lf

   End sub

該事件過程調用SetKeepLocal過程,用來建立并設置數據庫db1.mdb的TableDefs集合中Tabel1對象的KeepLocal屬性。

   如果已經在數據庫的兩個表之間建立起關系,則必須將兩個表的keepLocal屬性設置為相同的值,即兩個表都必須是本地的或者是可復制的。如果兩個表的keepLocal屬性設置不一樣,則轉換將會失敗。但是應注意,不能在關系有效時設置keepLocal屬性,也就是說,在設置屬性之前,應先刪除兩個表之間的關系,在設置好KeepLocal屬性之后再恢復兩個表之間的關系,然后繼續進行數據庫轉換。

   如果正在設置KeepLocal屬性的對象已經從其它對象中繼承了該屬性,則由其它對象設置的值對保留為本地對象的操作沒有影響,必須直接為每個對象設置keepLocal屬性。

(未完待續)

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97