⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 网络数据库的复制和同步(6).htm

📁 写给JSP初级程序员的书
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0057)http://eps.www85.cn4e.com/java/article/devshow.asp?id=196 -->
<HTML><HEAD><title>csdn_网络数据库的复制和同步(6)</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE type=text/css>TD {
	FONT-FAMILY: "Verdana", "Arial", "宋体"; FONT-SIZE: 9pt
}
A {
	COLOR: #660000; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #660000; TEXT-DECORATION: none
}
.line {
	LINE-HEIGHT: 14pt
}
</STYLE>

<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff text=#000000>

  <table><tbody>
  <TR>
    <TD height=21>
      <DIV align=center><B><FONT size=3>网络数据库的复制和同步(6) <BR><FONT 
      size=2> 
      </FONT></FONT></FONT>
      <HR align=center color=#cccccc noShade SIZE=1>
      </DIV></TD></TR>
  <TR>
    <TD class=line><FONT 
      color=#333300>2.使对象可以复制&nbsp;<BR><BR>  如果在复本中建立了一个新对象,并且想把它从本地的改为可复制的,使得其它用户都可以使用它,则需要在设计原版中建立该对象,并且将其Replicab1e属性设置为“T”。在这种情况下,务必删除所有复本中的这个本地对象,否则会产生一个错误。<BR><BR>  对于TableDef和QueryDef对象,可以直接建立Replicab1e属性,并添加到对象的属性集合中,就像处理KeepLocal属性那样。而对于由宿主应用程序所定义的窗体、报表、宏和模块,则应建立Replicable属性,然后添加到表示该对象的Document对象的属性集合中。<BR><BR>  在下一次同步时,新的可复制对象将出现在集合的其它复本中。类似地,如果想把可复制对象改为本地对象,则应将其Replicab1e属性设置为“F”。和KeepLocal属性一样,如果正在设置Replicab1e属性的对象已经从其它对象继承了这个属性,则其它对象设置的值对这个对象不起作用,必须直接对每个对象设置Rep1icab1e属性。<BR><BR>  注意,如果把一个对象的Replicab1e属性从“T”改为“F”,该对象便从可复制状态变为本地的,在这种情况下,&nbsp;Microsoft&nbsp;Jet将只在设计原版中保留该对象,而从复本集的其它复本中删掉。在改变表的可复制状态时,应当格外小心。即使在设计原版中暂时把一个可复制表改变为本地表,然后再改回可复制的,但下次同步时仍然将会在每个复本中删除并重建该表。除非在进行设计变更之前同步所有的复本,否则将会丢失自上次同步以来输入到表中的所有数据。<BR><BR>3.构造设计原版<BR><BR>  设计原版也是一个数据库复本,但它是一个可以复制的复本。为了把一个数据库变为设计原版,需要为Database对象建立Rep1icab1e属性,并把该属性添加到Database对象的属性集合中,然后将其Replicab1e属性设置为“T”。<BR><BR>  【例】编写一个Function过程,把指定的数据库变为设计原版。<BR><BR>  过程如下:<BR><BR>  Public&nbsp;Function&nbsp;SetReplicable(strDB&nbsp;As&nbsp;String)As&nbsp;integer<BR><BR>   Dim&nbsp;prpReplicable&nbsp;As&nbsp;Property<BR><BR>   Dim&nbsp;dbsTarget&nbsp;As&nbsp;Database<BR><BR>   n&nbsp;Error&nbsp;GoTo&nbsp;ErrorHandler<BR><BR>   Set&nbsp;dbsTarget&nbsp;=&nbsp;OpenDatabase(strDB,True)<BR><BR>   ‘若属性已存在,则关闭错误处理<BR><BR>  On&nbsp;Error&nbsp;Resume&nbsp;Next<BR><BR>   '&nbsp;创建Replicable&nbsp;属性&nbsp;<BR><BR>   Set&nbsp;prpReplicable&nbsp;=dbsTarget.Createproperty(&nbsp;"Replicable",&nbsp;dbText,&nbsp;''T'`)<BR><BR>   '把该属性添加到属性集合中<BR><BR>   dbsTarget.Properties.Append&nbsp;prpReplicable<BR><BR>   '把该属性设置为"T"<BR><BR>   dbsTarget.PrOperties("Replicable")=&nbsp;''T''<BR><BR>   SetReplicable&nbsp;=&nbsp;0<BR><BR> ErrorHandler:<BR><BR>   Select&nbsp;Case&nbsp;Err<BR><BR>    Case&nbsp;0<BR><BR>     SetReplicable&nbsp;=&nbsp;0<BR><BR>     Exit&nbsp;Function<BR><BR>    Case&nbsp;Else<BR><BR>     MsgBox&nbsp;"Error"&nbsp;&amp;&nbsp;Err&nbsp;":"&nbsp;&amp;&nbsp;Error<BR><BR>     SetReplicable&nbsp;=&nbsp;-1<BR><BR>     Exit&nbsp;Function<BR><BR>    End&nbsp;Select<BR><BR>  nd&nbsp;Function<BR><BR>上述过程把指定的数据库转换为设计原版。如果Rep1icab1e属性不存在,则建立该属性,井把它设置为指定的值。<BR><BR>  为了调用上述过程,可以在窗体上画一个命令按钮,然后编写如下的事件过程:<BR><BR>  Private&nbsp;Sub&nbsp;Conunandl_Click()<BR><BR>   Dim&nbsp;MyDB&nbsp;As&nbsp;Database<BR><BR>   Dim&nbsp;a&nbsp;As&nbsp;integer<BR><BR>   a&nbsp;=&nbsp;SetReplicable(''c:\dbdir\dbl&nbsp;.mdb``)<BR><BR>   If&nbsp;a&nbsp;=&nbsp;0&nbsp;Then<BR><BR>    MsgBox&nbsp;"成功设置Replicable&nbsp;属性"<BR><BR>   Else<BR><BR>    MsgBox&nbsp;"设置失败"<BR><BR>   End&nbsp;if<BR><BR>  end&nbsp;sub<BR><BR>运行程序,单击命令按钮,将调用SetReplicable过程,为指定的数据库添加和设置Replicab1e属性,并根据执行情况显示相应的信息。在转换进程中,Microsoft&nbsp;Jet将维持原始数据库的所有属性设置值。<BR><BR><BR><BR><BR><BR>  4.用复本生成复本<BR><BR>  当把数据库的Replicable属性设置为“T”,从而将数据库转换成设计原版时,在复本集中只有一个复本(即设计原版),只能用它来生成第一个复本。可以用MakeReplica方法来生成第一个复本和后续的复本。<BR><BR>  用设计原版生成数据库的第一个复本后,可以用集合中的任一复本来生成另外的复本。事实上,在复本集中增加数据库新备份的唯一途径,就是从一个现存的复本来建立它们。一旦立好,新复本即成为复本集的一部分。所有复本都有唯一的标识,并能相互通信和同步。每个复本集与所有其它复本集是互相独立的,不同复本集的复本不能相互通信或同步。<BR><BR>  注意,在原始数据库的备份被变成设计原版之前,不要用它来生成另外的复本。否则,生成的将不是另外的复本,而是新的设计原版和复本集。<BR><BR>  【例】编写一个过程,用来生成数据库复本。<BR><BR>  过程如下:<BR><BR>  Function&nbsp;MakeAdditionalReplica(strReplica&nbsp;As&nbsp;String,&nbsp;strNewReplica&nbsp;As&nbsp;String,&nbsp;intOptions&nbsp;As&nbsp;        Integer)&nbsp;As&nbsp;integer<BR><BR>   Dim&nbsp;dbs&nbsp;As&nbsp;Database<BR><BR>   On&nbsp;Error&nbsp;GoTo&nbsp;ErrorHandler<BR><BR>   Set&nbsp;dbs&nbsp;=&nbsp;OpenDatabase(strReplicableDB)<BR><BR>   '如果没有选项传递给MakeAdditionalReplilca,<BR><BR>   '就忽略选项参数,该选项参数的缺省值是完全的,读/写复本;<BR><BR>   '否则,使用intoptions的值&nbsp;<BR><BR>   If&nbsp;intOptions&nbsp;=&nbsp;0&nbsp;Then<BR><BR>    dbs.MakeReplica&nbsp;strNewReplica,&nbsp;"Replica&nbsp;of&nbsp;"&nbsp;&amp;&nbsp;strReplicableDB<BR><BR>   Else<BR><BR>    dbs.MakeReplica&nbsp;strNewReplica,&nbsp;"Replica&nbsp;of&nbsp;"&nbsp;&amp;&nbsp;strReplicableDB,&nbsp;intOptions<BR><BR>   End&nbsp;if<BR><BR>   dbs.Close<BR><BR> rrorHandler:<BR><BR>   Select&nbsp;Case&nbsp;Err<BR><BR>    Case&nbsp;0:<BR><BR>     MakeAdditionalReplica&nbsp;=&nbsp;0<BR><BR>     Exit&nbsp;Function<BR><BR>    Case&nbsp;Else:<BR><BR>     MsgBox"error"&nbsp;&amp;&nbsp;err&nbsp;":"&nbsp;&amp;&nbsp;Error<BR><BR>     MakeAdditionalReplica&nbsp;=-1<BR><BR>     Exit&nbsp;function<BR><BR>   End&nbsp;select<BR><BR>  End&nbsp;function<BR><BR>上述过程可以从一个数据库复本生成一个新的复本。该过程有3个参数,其中第一个参数是数据库复本的文件名,第二个参数是新生成的数据库复本的文件名,第三个参数,即intOptions,可以是DAO常数dbRepMakeReadOnly和dbRepMakePartial的组合,也可以是0。&nbsp;dbRepMakeReadOnly常数表示复本是只读的,而dbRepMakePartial常数表示复本是部分复本,不是完全复本。例如,为了建立一个只读部分复本,在调用过程MakeAdditionalReplica时,应当把dbRepMakeReadon1y&nbsp;+&nbsp;dbRepMakePartial的值传递给intOptions参数。如果intOptions参数是0,则过程将建立一个完全的读/写复本,因为忽略了MakeReplica方法中的options参数。<BR><BR>  为了调用上述过程建立数据库复本,可以在窗体上画一个命令按钮,然后编写如下的事件过程:<BR><BR>  Private&nbsp;Sub&nbsp;Command1_Click()<BR><BR>   A=MakeAdditionalReplica("c:\dbdir\dblcopy1.&nbsp;mdb","c:\dbdir\dblcopy2.mdb",0)<BR><BR>   if&nbsp;a=o&nbsp;Then<BR><BR>    MsgBox"己生成数据库复本"&nbsp;<BR><BR>   Else<BR><BR>    MsgBox“操作失败”<BR><BR>   End&nbsp;lf<BR><BR>  End&nbsp;sub<BR><BR>过程中的dblcopy1.mdb&nbsp;是数据库db1.mdb的复本,而dblcopy2.mdb是dblcopyl.mdb的复本。运行程序,单击命令按钮,将建立一个完全的读/写复本。<BR><BR>  当Microsoft&nbsp;Jet建立新复本时,新复本将包含源复本的所有数据定义语言属性设置值。后续的复本可以由设计原版或集合中的任一复本来生成。<BR><BR>  在用MakeRep1ica方法复制数据库时,正在复制的对象一定不能是锁定的,否则方法的调用会失败。如果一个对象以设计模式打开或在同步期间被更新,则该对象会被Microsoft&nbsp;Jet锁定。在实际的程序设计中,一定要注意这一点,不要试图从拥有锁定对象的数据库来生成复本。<BR><BR>  注意,生成一个新复本后,将把源复本中的所有可复制对象和属性复制到新复本中。虽然所有链接表也被复制,但如果新复本位于网络上,链接表的路径可能会不正确。因此,一定要对新复本进行测试,以确定是否需要为链接表建立新路径。&nbsp;<BR><BR><BR><BR></FONT></TD></TR>
  <TR>
    <TD height=5>
      <HR align=center color=#cccccc noShade SIZE=1>
    </TD></TR></TBODY></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -