程序员人生 网站导航

使ACCESS数据库保持同步

栏目:access时间:2014-02-11 00:57:09

  同步(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方法的相似性因此在此不再累述更详细的描述请参阅相关的联机帮助

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐