使ACCESS数据库保持同步


  同步(Synchronization)是数据库在网络环境中 利用所要 波及到的一个主要概念 。其 根本过程 大体分以下几个步骤:首先把一个数据库设为可复制副本属性,使其成为设计正本(VB中称设计原版,ACCESS中称设计母版); 而后依据 利用程序的实现需求从设计正本复制出多个副本(VB中称复本),这些副本构成一个副本 集中(设计正本也被看做是第一个的、初始的副本);最终在集中任何复本的数据或 构造被更改会时启用同步机制把转变发送而且 利用于此复本集中的 其余成员,使得副本集中的成员在数据或 构造上 维持 统一性 。实现同步的这一过程被称为同步化 。VB6.0为实现同步,在数据库对象中提供了多个属性与 步骤来实现这一过程,以下介绍主要的几个属性与 步骤,分别对应同步化的几个步骤:

  1.Replicable属性:

  Replicable属性用来使一个数据库对象或数据库中的表对象、 查问对象等对象成为可复制副本的,即成为设计正本 。但数据库对象并不提供Replicable这一属性, 因此首先要用CreatePropety 步骤来 缔造它, 而后把它增加到对象的属性集中,最终再给它赋值,使数据库成为设计正本 。关于数据库对象而言,把Replicable属性设置为“T”将使数据库对象成为可复制的 。以下代码将使VB6.0安装目录下附带的Nwind.mdb数据库成为一个设计正本(为确保安全 提议在操作前备份这一库文件):


  Private Sub Command1_Click()
  Dim dbNwind As Database
  '假如末 引用DAO则 定然要先 引用
  Dim prpNew As Property
  Set dbNwind = OpenDatabase("Nwind.mdb", True)
  With dbNwind
  ' 构建Replicable属性,假如已经存在该属性则程序略过这一步
  On Error Resume Next
  Set prpNew = .CreateProperty("Replicable", dbText, "T")
  .Properties.Append prpNew
  '设置数据库的Replicable属性为True
  .Properties("Replicable") = "T"
  .Close
  End With
  End Sub

  2.MakeReplica 步骤:

  MakeReplica 步骤从设计正本复制出一个新的 彻底副本 。其语法为:database.MakeReplica replica, description, options,其中replica是代表一个新副本路径名称的字符串;description是对正在 缔造的新副本的一个 形容字符串;options是一个可选项, 可以是dbRepMakePartial常量( 缔造一个 部分副本)或dbRepMakeReadOnly常量( 预防消费者 批改新副本中的可复制对象),假如要 构建的是一个只读式的 部分副本,则要加入参数常量 dbRepMakeReadOnly + dbRepMakePartial  。

  在第一个例子中,在关闭数据库之前加入代码:.MakeReplica "NwReplica", "replica of nwind.mdb",则从Nwind.mdb设计正本复制出一个名为NwReplica.mdb的副本,位置在Nwind.mdb同一目录中 。以下是一个通过传递参数的 模式,在实际 利用中可供灵便调用的函数,每调用该函数一次即可实现新建一个副本:

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 = 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 步骤使两个 彻底副本(包含设计正本)同步化 。其语法为:database.Synchronize pathname, exchange 。其中pathname为要同步的 指标副本的路径名称字符串(串中的 .mdb 扩大名可省略);exchange用来标识两个数据库中间的同步方向(如表一),这是一个可选项,默许为表中的第三个选项,即双向 交换 。利用表中第四个dbRepSyncInternet常量选项,还可对通过Internet互联的数据库进行同步化,
  这时要将代表当地网络路径选项pathname用URL地址来 接替 。

  表一、同步化方向常量

常量 同步化方向
DbRepExportChanges 从数据库到副本路径名称
DbRepImportChanges 从副本路径名称到数据库
DbRepImpExpChanges 双向 交换转变(默许)
DbRepSyncInternet 在通过Internet路径衔接的数据库中间传递转变

 

  在同步化操作之前,要确保已经利用 Replicable属性使一个数据库初始出设计正本,而且利用MakeReplica 步骤复制出了一个以上的副本 。

  以下通过在第一个例子增加的副本复制语句之后,加入如下语句:.Synchronize "NwReplica.mdb", dbRepExportChanges,实现把数据库Nwind的设计正本的任何转变传递给副本 NwReplica 。我们 可以在Nwind.mdb库中转变一些数据内容, 而后再运行这一例子,我们会发现Nwind.mdb库的转变已经反映在NwReplica.mdb这一副本中了 。

  以上语句实现从数据库到副本路径名称的同步(把设计正本的数据或 构造转变传递给副本),把dbRepExportChanges常量改为dbRepImportChanges和dbRepImpExpChanges可分别实现从副本路径名称到数据库(数据库 接纳副本上的转变)以及双向 交换(两者间的双向数据传递)同步 。

  Synchronize 步骤还可对通过Internet互联的数据库进行同步化,以下语句实现当地数据库正本与位于Internet服务器上的一个副本同步化:dbNwind.Synchronize "www.mycompany.myserver.com" & "/files/NwReplica.mdb", dbRepImpExpChanges + dbRepSyncInternet

  4.PopulatePartial 步骤:

  上面介绍利用Synchronize 步骤使两个 彻底副本同步化,不会浮现问题,但假如用一个 彻底副 原来同步一个 部分副本,由于 部分副本是由副本过滤器来从 彻底副 原来过滤再一次生成的, 因此可能在 部分副本中产生所谓的“孤立”记录,即这些记录不能再与 其余副本 维持同步 。要解决这一问题引入了另一个称为PopulatePartial的 步骤,该 步骤与Synchronize 步骤 类似,只是它是实现 部分副本与 彻底副本的同步,在同步时,首先 革除 部分副本中的全部记录, 而后依据目前副本的过滤器来再一次生成 部分副本,这样就解决了“孤立”记录的问题 。其语法为:database.PopulatePartial dbname 。dbname是 彻底副本的路径名称 。由于篇幅所限以及其与Synchronize 步骤的 类似性, 因此在此不再累述,更 详尽的 形容请参阅 有关的联机协助 。