复制数据库(2)--网络数据库的复制和同步(6)

2016-02-19 12:56 9 1 收藏

下面图老师小编跟大家分享复制数据库(2)--网络数据库的复制和同步(6),一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

【 tulaoshi.com - 编程语言 】

2.使对象可以复制
  
  如果在复本中建立了一个新对象,并且想把它从本地的改为可复制的,使得其它用户都可以使用它,则需要在设计原版中建立该对象,并且将其Replicab1e属性设置为“T”。在这种情况下,务必删除所有复本中的这个本地对象,否则会产生一个错误。
  
  对于TableDef和QueryDef对象,可以直接建立Replicab1e属性,并添加到对象的属性集合中,就像处理KeepLocal属性那样。而对于由宿主应用程序所定义的窗体、报表、宏和模块,则应建立Replicable属性,然后添加到表示该对象的Document对象的属性集合中。
  
  在下一次同步时,新的可复制对象将出现在集合的其它复本中。类似地,如果想把可复制对象改为本地对象,则应将其Replicab1e属性设置为“F”。和KeepLocal属性一样,如果正在设置Replicab1e属性的对象已经从其它对象继承了这个属性,则其它对象设置的值对这个对象不起作用,必须直接对每个对象设置Rep1icab1e属性。
  
  注意,如果把一个对象的Replicab1e属性从“T”改为“F”,该对象便从可复制状态变为本地的,在这种情况下,MicrosoftJet将只在设计原版中保留该对象,而从复本集的其它复本中删掉。在改变表的可复制状态时,应当格外小心。即使在设计原版中暂时把一个可复制表改变为本地表,然后再改回可复制的,但下次同步时仍然将会在每个复本中删除并重建该表。除非在进行设计变更之前同步所有的复本,否则将会丢失自上次同步以来输入到表中的所有数据。
  
  3.构造设计原版
  
  设计原版也是一个数据库复本,但它是一个可以复制的复本。为了把一个数据库变为
  
  设计原版,需要为Database对象建立Rep1icab1e属性,并把该属性添加到Database对象的
  
  属性集合中,然后将其Replicab1e属性设置为“T”。
  
  编写一个Function过程,把指定的数据库变为设计原版。
  
  过程如下:
  
  PublicFunctionSetReplicable(strDBAsString)Asinteger
  DimprpReplicableAsProperty
  DimdbsTargetAsDatabase
  OnErrorGoToErrorHandler
  SetdbsTarget=OpenDatabase(strDB,True)
  
  ‘若属性已存在,则关闭错误处理
  
  OnErrorResumeNext
  
  '创建Replicable属性
  
  SetprpReplicable=dbsTarget.Createproperty("Replicable",dbText,''T'`)
  
  '把该属性添加到属性集合中
  
  dbsTarget.Properties.AppendprpReplicable
  
  '把该属性设置为"T"
  
  dbsTarget.PrOperties("Replicable")=''T''
  SetReplicable=0
  ErrorHandler:
  SelectCaseErr
  Case0
  SetReplicable=0
  ExitFunction
  CaseElse
  MsgBox"Error"&Err":"&Error
  SetReplicable=-1
  ExitFunction
  EndSelect
  EndFunction
  上述过程把指定的数据库转换为设计原版。如果Rep1icab1e属性不存在,则建立该属性,井把它设置为指定的值。
  
  为了调用上述过程,可以在窗体上画一个命令按钮,然后编写如下的事件过程:
  
  PrivateSubConunandl_Click()
  DimMyDBAsDatabase
  DimaAsinteger
  a=SetReplicable(''c:dbdirdbl.mdb``)
  Ifa=0Then
  MsgBox"成功设置Replicable属性"
  Else
  MsgBox"设置失败"
  Endif
  Endsub
  
  运行程序,单击命令按钮,将调用SetReplicable过程,为指定的数据库添加和设置Replicab1e属性,并根据执行情况显示相应的信息。在转换进程中,MicrosoftJet将维持原始数据库的所有属性设置值。
  
  4.用复本生成复本
  
  当把数据库的Replicable属性设置为“T”,从而将数据库转换成设计原版时,在复本集中只有一个复本(即设计原版),只能用它来生成第一个复本。可以用MakeReplica方法来生成第一个复本和后续的复本。
  
  用设计原版生成数据库的第一个复本后,可以用集合中的任一复本来生成另外的复本。事实上,在复本集中增加数据库新备份的唯一途径,就是从一个现存的复本来建立它们。一旦立好,新复本即成为复本集的一部分。所有复本都有唯一的标识,并能相互通信和同步。每个复本集与所有其它复本集是互相独立的,不同复本集的复本不能相互通信或同步。
  
  注意,在原始数据库的备份被变成设计原版之前,不要用它来生成另外的复本。否则,生成的将不是另外的复本,而是新的设计原版和复本集。
  
  编写一个过程,用来生成数据库复本。
  
  过程如下:
  
  FunctionMakeAdditionalReplica(strReplicaAsString,strNewReplicaAsString,intOptionsAsInteger)Asinteger
  DimdbsAsDatabase
  OnErrorGoToErrorHandler
  Setdbs=OpenDatabase(strReplicableDB)
  '如果没有选项传递给MakeAdditionalReplilca,
  '就忽略选项参数,该选项参数的缺省值是完全的,读/写复本;
  '否则,使用intoptions的值
  IfintOptions=0Then
  dbs.MakeReplicastrNewReplica,"Replicaof"&strReplicableDB
  Else
  dbs.MakeReplicastrNewReplica,"Replicaof"&strReplicableDB,intOptions
  Endif
  dbs.Close
  ErrorHandler:
  SelectCaseErr
  Case0:
  MakeAdditionalReplica=0
  ExitFunction
  CaseElse:
  MsgBox"error"&err":"&Error
  MakeAdditionalReplica=-1
  Exitfunction
  Endselect
  Endfunction
  
  上述过程可以从一个数据库复本生成一个新的复本。该过程有3个参数,其中第一个参数是数据库复本的文件名,第二个参数是新生成的数据库复本的文件名,第三个参数,即intOptions,可以是DAO常数dbRepMakeReadOnly和dbRepMakePartial的组合,也可以是0。dbRepMakeReadOnly常数表示复本是只读的,而dbRepMakePartial常数表示复本是部分复本,不是完全复本。例如,为了建立一个只读部分复本,在调用过程MakeAdditionalReplica时,应当把dbRepMakeReadon1y+dbRepMakePartial的值传递给intOptions参数。如果intOptions参数是0,则过程将建立一个完全的读/写复本,因为忽略了MakeReplica方法中的options参数。
  
  为了调用上述过程建立数据库复本,可以在窗体上画一个命令按钮,然后编写如下的事件过程:
  
  PrivateSubCommand1_Click()
  A=MakeAdditionalReplica("c:dbdirdblcopy1.mdb","c:dbdirdblcopy2.mdb",0)
  ifa=oThen
  MsgBox"己生成数据库复本"
  Else
  MsgBox“操作失败”
  Endlf
  Endsub
  
  过程中的dblcopy1.mdb是数据库db1.mdb的复本,而dblcopy2.mdb是dblcopyl.mdb的复本。运行程序,单击命令按钮,将建立一个完全的读/写复本。
  
  当MicrosoftJet建立新复本时,新复本将包含源复本的所有数据定义语言属性设置值。后续的复本可以由设计原版或集合中的任一复本来生成。
  
  在用MakeRep1ica方法复制数据库时,正在复制的对象一定不能是锁定的,否则方法的调用会失败。如果一个对象以设计模式打开或在同步期间被更新,则该对象会被MicrosoftJet锁定。在实际的程序设计中,一定要注意这一点,不要试图从拥有锁定对象的数据库来生成复本。
  
  注意,生成一个新复本后,将把源复本中的所有可复制对象和属性复制到新复本中。虽然所有链接表也被复制,但如果新复本位于网络上,链接表的路径可能会不正确。因此,一定要对新复本进行测试,以确定是否需要为链接表建立新路径。->

来源:http://www.tulaoshi.com/n/20160219/1602476.html

延伸阅读
正在看的ORACLE教程是:Oracle数据库集复制方法浅议。前言 日益增长的分布式应用需求要求实现更好分布式的软件环境,不断推动着分布式技术的进步。Oracle数据复制是实现分布式数据环境的一种技术,通过在不同的物理站点拷贝数据来建立分布式数据环境。它与分布式数据库不同,在分布式数据库中,虽然每个数据对象也对所有的站点可用,但是特...
在Internet上运作数据库经常会有这样的需求:把遍布全国各城市相似的数据库应用统一起来,一个节点的数据改变不仅体现在本地,还反映到远端。复制技术给用户提供了一种快速访问共享数据的办法。 一、实现数据库复制的前提条件 1、数据库支持高级复制功能 您可以用system身份登录数据库,查看v$option视图,如果其中Advanced...
那些对Access数据库无经验的开发人员,他们常常不知道改变复制为对象设计,而不是数据表,那样会引起一些问题。这是令人失望的,首先, 因为复制似乎是分布完整的Access应用程序的最好途径,毕竟,Microsoft是支持它的。 问题是,Jet的复制是设计有数据表的。这是因为Jet复制主要是用于Visual Basic应用程序的,在那里,只有数据可以被存储在*...
标签: SQLServer
  为SQL Server在WinSock上定义协议的步骤如下: 1. 在”启动”菜单上,指向”程序/Microsoft Proxy Server”,然后点击”Microsoft Management Console”。 2. 展开”Internet Information Service”,再展开运行Proxy Server的服务器。 3. 右击WinSock Proxy service, 再点击属性。 4. 在WinSock Proxy Service Properties For computern...
标签: SQLServer
  2005-08 余枫                                         在SQL Server 2000里设置和使用数据库复制之前,应先检查相关的几台SQL ...

经验教程

857

收藏

90
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部