中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 数据库
JAVA-数据库-网络数据库的复制和同步(5)
作者:未知 时间:2006-06-16 21:44 出处:网络转载 责编:LOKI
              摘要:暂无

网络数据库的复制和同步(5)

所谓建立数据库复本,实际上就是建立数据库的拷贝。通过数据库复制,每个用户都可以使用数据库中数据的一份拷贝,并可在某个时亥把各个数据库重新组合成宿主数据库,而对宿主数据库的修改都传送到数据库复本。注意,数据库复制功能仅对Microsoft Jet 3.5版的数据库有效。

   Microsoft Jet 数据库引擎不允许用数据库密码来保护复制数据库。在开始使用复本之前,必须先从将要复制的数据库中删去所有数据库密码保护。设置用户权限与复本同步没有冲突。

   用DAO复制数据库的一般步骤如下:

   (1)识别数据库中不需要复制的对象,并将它们的KeepLocal属性设置为“T”。

   (2)将数据库的Replicable属性设置为“T”,使它变成设计原版。

   (3)用MakeReplica方法从设计原版中生成附加的复本。

在设置Replicable属性之前,应先确定在转换数据库以前数据库是否已经被复制。

   1.保持对象本地化

   当把正常的数据库转换为设计原版时,将复制数据库中的所有对象。如果不想把数据中的所有对象都放在复本集中,则可对不想复制的对象添加并设置KeepLocal属性。例如,果数据库中有一个表,在该表中含有机密的工资信息、初始化信息或登录到数据库的用名,则可能希望不把这些信息放到复本中。在这种情况下,可将该表的KeepLocal属性设为“T”,使得复制数据库时,这些信息不被复制。

   对于TableDef 和 QueryDef对象,可以建立keepLocal属性并把它添加到对象的属性集合中。对于由主机应用程序定义的窗体、报表、宏以及模块,可以建立KeepLocal属性并把它添加到表示该对象的Document对象的属性集合中。

注意,在设置keepLocal (以及Rep1icab1e )属性之前,必须先建立它,然后添加到将使用它的对象的属性集合中。如果在建立并添加该属性之前先引用了它,则将产生一个运行时错误。
【例】编写一个Function 过程,对数据库中指定的对象进行本地化处理。

   Function SetKeepLocal(dbs As Database, sCollection As Sing, stffobJect As Sing) As integer

   Dim i As Integer

   Dim blnMatch As Boolean

   Dim f As TableDef

   Dim PrP As Property

   Dim doc As Document

   Dim qdf As QueryDef

   On Error GoTo ErrorHandler

   Select Case stalollection

    Case "FormS", "RelpOrtS", ´´MOdllleS´´, ´´SCriptS`´

      Set doc = dbs.Containers(sCollection). Documents(sObject)

      Set prp = doc.Createproperty ("KeepLocal", dbText, `´T´´)

      doc.Properties.Append prp

    Case "TableDefs"

      Set f = dbs.TableDefs(sObJect)

      Set prp = fCreateproperty (´´KeepLocal´´, dbText, ´´T´´)

      fprol)etties.Append prp

    Case ´´QuecyDefs´`

      Set qdf=dbs.QueryDefs(sbrobject)

      Set prp = qdf.Createproperty ("KeepLocal", dbText, "T")

      qdf.properties.Append PrP

   End Select

ErrorHandler:

   Select Case Err

    Case 0

     case 3265 ´对象未发现

     SetKeepLocal = 3265

     Exit Function

     ´属性已经存在,把它设置为“T”

    Case 3367

     Select Case sttoollection

      CSSel ´´Forms´´ , ´´RelportS´´, ``Modlules´´ , ´´ScriptS´`

      doc.Properties(´´KeepLocal´`).Value = `´T´`

    Case ´´TableDefs´`

      f.Properties(´´KeepLocal´´).Value = `´T´`

    Case ´´QueryDefs´`

      qdf.Properties(´´KeepLocal´´).Value = ´´T´`

    Exit Function

   End Select

   SetKeepLocal = 0

   Exit Function

   Case Else

    MsgBOx ´´Error´´ & Err & ":", & Error, vbOKOnly

    SetKeepLocal=-1

    Exit Function

    End Select

   End Function

用上述过程可以对指定数据库对象建立并添加KeepLocal属性,如果该属性已经存在,则将产生代码为3367的错误,在这种情况下,将在错误处理程序中把该属性的值设置为“T”

   该过程有3个参数,其中第一个参数是Database对象,第二个参数是集合的名字,第三个参数是数据库中的对象名。过程的返回值是一个整型数,它实际上是一个错误代码。为了调用上面的过程,可以在窗体上画一个命令按钮,然后编写如下的事件过程:

   Private Sub Command1_Click()

    Dim MyDb As Database

    Dim a As integer

    Set MyDb = OpenDatabase(´´c:\dbdir\db1.mdb´´)

    a = SetKeepLocal(MyDb, ´´TableDefs´´,´´Tabel1´´)

    If a = 0 Then

     MsgBox "已成功设置KeepLocal 属性"

    Elself a = 3265 Then

     MsgBox "对象未找到"

    Elself a = 3367 Then

     MsgBox "KeepLocal属性已存在,设置为“T”

    Else

     MsgBox“出错”

    End lf

   End sub

该事件过程调用SetKeepLocal过程,用来建立并设置数据库db1.mdb的TableDefs集合中Tabel1对象的KeepLocal属性。

   如果已经在数据库的两个表之间建立起关系,则必须将两个表的keepLocal属性设置为相同的值,即两个表都必须是本地的或者是可复制的。如果两个表的keepLocal属性设置不一样,则转换将会失败。但是应注意,不能在关系有效时设置keepLocal属性,也就是说,在设置属性之前,应先删除两个表之间的关系,在设置好KeepLocal属性之后再恢复两个表之间的关系,然后继续进行数据库转换。

   如果正在设置KeepLocal属性的对象已经从其它对象中继承了该属性,则由其它对象设置的值对保留为本地对象的操作没有影响,必须直接为每个对象设置keepLocal属性。

(未完待续)

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有