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

📄 网络数据库的复制和同步(5).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=195 -->
<HTML><HEAD><title>csdn_网络数据库的复制和同步(5)</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>网络数据库的复制和同步(5) <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>所谓建立数据库复本,实际上就是建立数据库的拷贝。通过数据库复制,每个用户都可以使用数据库中数据的一份拷贝,并可在某个时亥把各个数据库重新组合成宿主数据库,而对宿主数据库的修改都传送到数据库复本。注意,数据库复制功能仅对Microsoft&nbsp;Jet&nbsp;3.5版的数据库有效。&nbsp;<BR><BR>  Microsoft&nbsp;Jet&nbsp;数据库引擎不允许用数据库密码来保护复制数据库。在开始使用复本之前,必须先从将要复制的数据库中删去所有数据库密码保护。设置用户权限与复本同步没有冲突。<BR><BR>  用DAO复制数据库的一般步骤如下:<BR><BR>  (1)识别数据库中不需要复制的对象,并将它们的KeepLocal属性设置为“T”。<BR><BR>  (2)将数据库的Replicable属性设置为“T”,使它变成设计原版。<BR><BR>  (3)用MakeReplica方法从设计原版中生成附加的复本。<BR><BR>在设置Replicable属性之前,应先确定在转换数据库以前数据库是否已经被复制。<BR><BR>  1.保持对象本地化<BR><BR>  当把正常的数据库转换为设计原版时,将复制数据库中的所有对象。如果不想把数据中的所有对象都放在复本集中,则可对不想复制的对象添加并设置KeepLocal属性。例如,果数据库中有一个表,在该表中含有机密的工资信息、初始化信息或登录到数据库的用名,则可能希望不把这些信息放到复本中。在这种情况下,可将该表的KeepLocal属性设为“T”,使得复制数据库时,这些信息不被复制。<BR><BR>  对于TableDef&nbsp;和&nbsp;QueryDef对象,可以建立keepLocal属性并把它添加到对象的属性集合中。对于由主机应用程序定义的窗体、报表、宏以及模块,可以建立KeepLocal属性并把它添加到表示该对象的Document对象的属性集合中。<BR><BR>注意,在设置keepLocal&nbsp;(以及Rep1icab1e&nbsp;)属性之前,必须先建立它,然后添加到将使用它的对象的属性集合中。如果在建立并添加该属性之前先引用了它,则将产生一个运行时错误。<BR>【例】编写一个Function&nbsp;过程,对数据库中指定的对象进行本地化处理。<BR><BR>  Function&nbsp;SetKeepLocal(dbs&nbsp;As&nbsp;Database,&nbsp;strCollection&nbsp;As&nbsp;String,&nbsp;stffobJect&nbsp;As&nbsp;String)&nbsp;As&nbsp;integer<BR><BR>  Dim&nbsp;i&nbsp;As&nbsp;Integer<BR><BR>  Dim&nbsp;blnMatch&nbsp;As&nbsp;Boolean<BR><BR>  Dim&nbsp;tdf&nbsp;As&nbsp;TableDef<BR><BR>  Dim&nbsp;PrP&nbsp;As&nbsp;Property<BR><BR>  Dim&nbsp;doc&nbsp;As&nbsp;Document<BR><BR>  Dim&nbsp;qdf&nbsp;As&nbsp;QueryDef<BR><BR>  On&nbsp;Error&nbsp;GoTo&nbsp;ErrorHandler<BR><BR>  Select&nbsp;Case&nbsp;stalollection<BR><BR>   Case&nbsp;"FormS",&nbsp;"RelpOrtS",&nbsp;''MOdllleS'',&nbsp;''SCriptS`'<BR><BR>     Set&nbsp;doc&nbsp;=&nbsp;dbs.Containers(strCollection).&nbsp;Documents(strObject)<BR><BR>     Set&nbsp;prp&nbsp;=&nbsp;doc.Createproperty&nbsp;("KeepLocal",&nbsp;dbText,&nbsp;`'T'')<BR><BR>     doc.Properties.Append&nbsp;prp<BR><BR>   Case&nbsp;"TableDefs"<BR><BR>     Set&nbsp;tdf&nbsp;=&nbsp;dbs.TableDefs(strObJect)<BR><BR>     Set&nbsp;prp&nbsp;=&nbsp;tdfCreateproperty&nbsp;(''KeepLocal'',&nbsp;dbText,&nbsp;''T'')<BR><BR>     tdfprol)etties.Append&nbsp;prp<BR><BR>   Case&nbsp;''QuecyDefs'`<BR><BR>     Set&nbsp;qdf=dbs.QueryDefs(sbrobject)<BR><BR>     Set&nbsp;prp&nbsp;=&nbsp;qdf.Createproperty&nbsp;("KeepLocal",&nbsp;dbText,&nbsp;"T")<BR><BR>     qdf.properties.Append&nbsp;PrP<BR><BR>  End&nbsp;Select<BR><BR>ErrorHandler:<BR><BR>  Select&nbsp;Case&nbsp;Err<BR><BR>   Case&nbsp;0<BR><BR>    case&nbsp;3265&nbsp;'对象未发现<BR><BR>    SetKeepLocal&nbsp;=&nbsp;3265<BR><BR>    Exit&nbsp;Function<BR><BR>    '属性已经存在,把它设置为“T”<BR><BR>   Case&nbsp;3367<BR><BR>    Select&nbsp;Case&nbsp;sttoollection<BR><BR>     CSSel&nbsp;''Forms''&nbsp;,&nbsp;''RelportS'',&nbsp;``Modlules''&nbsp;,&nbsp;''ScriptS'`<BR><BR>     doc.Properties(''KeepLocal'`).Value&nbsp;=&nbsp;`'T'`<BR><BR>   Case&nbsp;''TableDefs'`<BR><BR>     tdf.Properties(''KeepLocal'').Value&nbsp;=&nbsp;`'T'`<BR><BR>   Case&nbsp;''QueryDefs'`<BR><BR>     qdf.Properties(''KeepLocal'').Value&nbsp;=&nbsp;''T'`<BR><BR>   Exit&nbsp;Function<BR><BR>  End&nbsp;Select<BR><BR>  SetKeepLocal&nbsp;=&nbsp;0<BR><BR>  Exit&nbsp;Function<BR><BR>  Case&nbsp;Else<BR><BR>   MsgBOx&nbsp;''Error''&nbsp;&amp;&nbsp;Err&nbsp;&amp;&nbsp;":",&nbsp;&amp;&nbsp;Error,&nbsp;vbOKOnly<BR><BR>   SetKeepLocal=-1<BR><BR>   Exit&nbsp;Function<BR><BR>   End&nbsp;Select<BR><BR>  End&nbsp;Function<BR><BR>用上述过程可以对指定数据库对象建立并添加KeepLocal属性,如果该属性已经存在,则将产生代码为3367的错误,在这种情况下,将在错误处理程序中把该属性的值设置为“T”&nbsp;<BR><BR>  该过程有3个参数,其中第一个参数是Database对象,第二个参数是集合的名字,第三个参数是数据库中的对象名。过程的返回值是一个整型数,它实际上是一个错误代码。为了调用上面的过程,可以在窗体上画一个命令按钮,然后编写如下的事件过程:<BR><BR>  Private&nbsp;Sub&nbsp;Command1_Click()<BR><BR>   Dim&nbsp;MyDb&nbsp;As&nbsp;Database<BR><BR>   Dim&nbsp;a&nbsp;As&nbsp;integer<BR><BR>   Set&nbsp;MyDb&nbsp;=&nbsp;OpenDatabase(''c:\dbdir\db1.mdb'')<BR><BR>   a&nbsp;=&nbsp;SetKeepLocal(MyDb,&nbsp;''TableDefs'',''Tabel1'')<BR><BR>   If&nbsp;a&nbsp;=&nbsp;0&nbsp;Then<BR><BR>    MsgBox&nbsp;"已成功设置KeepLocal&nbsp;属性"<BR><BR>   Elself&nbsp;a&nbsp;=&nbsp;3265&nbsp;Then<BR><BR>    MsgBox&nbsp;"对象未找到"<BR><BR>   Elself&nbsp;a&nbsp;=&nbsp;3367&nbsp;Then<BR><BR>    MsgBox&nbsp;"KeepLocal属性已存在,设置为“T”<BR><BR>   Else<BR><BR>    MsgBox“出错”<BR><BR>   End&nbsp;lf<BR><BR>  End&nbsp;sub<BR><BR>该事件过程调用SetKeepLocal过程,用来建立并设置数据库db1.mdb的TableDefs集合中Tabel1对象的KeepLocal属性。<BR><BR>  如果已经在数据库的两个表之间建立起关系,则必须将两个表的keepLocal属性设置为相同的值,即两个表都必须是本地的或者是可复制的。如果两个表的keepLocal属性设置不一样,则转换将会失败。但是应注意,不能在关系有效时设置keepLocal属性,也就是说,在设置属性之前,应先删除两个表之间的关系,在设置好KeepLocal属性之后再恢复两个表之间的关系,然后继续进行数据库转换。<BR><BR>  如果正在设置KeepLocal属性的对象已经从其它对象中继承了该属性,则由其它对象设置的值对保留为本地对象的操作没有影响,必须直接为每个对象设置keepLocal属性。&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 + -