通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务
当前位置:首页>>编程开发>>sql专区>>正文 新版上线![旧版]
注:打开慢时请稍等
网络数据库的复制和同步(6)

http://www.iyit.net  日期:2006-5-3 19:18:40  来源:  点击:
参加讨论】 2.使对象可以复制

  如果在复本中建立了一个新对象,并且想把它从本地的改为可复制的,使得其它用户都可以使用它,则需要在设计原版中建立该对象,并且将其replicab1e属性设置为“t”。在这种情况下,务必删除所有复本中的这个本地对象,否则会产生一个错误。

  对于tabledef和querydef对象,可以直接建立replicab1e属性,并添加到对象的属性集合中,就像处理keeplocal属性那样。而对于由宿主应用程序所定义的窗体、报表、宏和模块,则应建立replicable属性,然后添加到表示该对象的document对象的属性集合中。

  在下一次同步时,新的可复制对象将出现在集合的其它复本中。类似地,如果想把可复制对象改为本地对象,则应将其replicab1e属性设置为“f”。和keeplocal属性一样,如果正在设置replicab1e属性的对象已经从其它对象继承了这个属性,则其它对象设置的值对这个对象不起作用,必须直接对每个对象设置rep1icab1e属性。

  注意,如果把一个对象的replicab1e属性从“t”改为“f”,该对象便从可复制状态变为本地的,在这种情况下, microsoft jet将只在设计原版中保留该对象,而从复本集的其它复本中删掉。在改变表的可复制状态时,应当格外小心。即使在设计原版中暂时把一个可复制表改变为本地表,然后再改回可复制的,但下次同步时仍然将会在每个复本中删除并重建该表。除非在进行设计变更之前同步所有的复本,否则将会丢失自上次同步以来输入到表中的所有数据。

3.构造设计原版

  设计原版也是一个数据库复本,但它是一个可以复制的复本。为了把一个数据库变为设计原版,需要为database对象建立rep1icab1e属性,并把该属性添加到database对象的属性集合中,然后将其replicab1e属性设置为“t”。

  【例】编写一个function过程,把指定的数据库变为设计原版。

  过程如下:

  public function setreplicable(strdb as string)as integer

   dim prpreplicable as property

   dim dbstarget as database

   n error goto errorhandler

   set dbstarget = opendatabase(strdb,true)

   ‘若属性已存在,则关闭错误处理

  on error resume next

   ' 创建replicable 属性

   set prpreplicable =dbstarget.createproperty( "replicable", dbtext, ''t'`)

   '把该属性添加到属性集合中

   dbstarget.properties.append prpreplicable

   '把该属性设置为"t"

   dbstarget.properties("replicable")= ''t''

   setreplicable = 0

 errorhandler:

   select case err

    case 0

     setreplicable = 0

     exit function

    case else

     msgbox "error" & err ":" & error

     setreplicable = -1

     exit function

    end select

  nd function

上述过程把指定的数据库转换为设计原版。如果rep1icab1e属性不存在,则建立该属性,井把它设置为指定的值。

  为了调用上述过程,可以在窗体上画一个命令按钮,然后编写如下的事件过程:

  private sub conunandl_click()

   dim mydb as database

   dim a as integer

   a = setreplicable(''c:\dbdir\dbl .mdb``)

   if a = 0 then

    msgbox "成功设置replicable 属性"

   else

    msgbox "设置失败"

   end if

  end sub

运行程序,单击命令按钮,将调用setreplicable过程,为指定的数据库添加和设置replicab1e属性,并根据执行情况显示相应的信息。在转换进程中,microsoft jet将维持原始数据库的所有属性设置值。


4.用复本生成复本

  当把数据库的replicable属性设置为“t”,从而将数据库转换成设计原版时,在复本集中只有一个复本(即设计原版),只能用它来生成第一个复本。可以用makereplica方法来生成第一个复本和后续的复本。

  用设计原版生成数据库的第一个复本后,可以用集合中的任一复本来生成另外的复本。事实上,在复本集中增加数据库新备份的唯一途径,就是从一个现存的复本来建立它们。一旦立好,新复本即成为复本集的一部分。所有复本都有唯一的标识,并能相互通信和同步。每个复本集与所有其它复本集是互相独立的,不同复本集的复本不能相互通信或同步。

  注意,在原始数据库的备份被变成设计原版之前,不要用它来生成另外的复本。否则,生成的将不是另外的复本,而是新的设计原版和复本集。

  【例】编写一个过程,用来生成数据库复本。

  过程如下:

  function makeadditionalreplica(strreplica as string, strnewreplica as string, intoptions as         integer) as integer

   dim dbs as database

   on error goto errorhandler

   set dbs = opendatabase(strreplicabledb)

   '如果没有选项传递给makeadditionalreplilca,

   '就忽略选项参数,该选项参数的缺省值是完全的,读/写复本;

   '否则,使用intoptions的值

   if intoptions = 0 then

    dbs.makereplica strnewreplica, "replica of " & strreplicabledb

   else

    dbs.makereplica strnewreplica, "replica of " & strreplicabledb, intoptions

   end if

   dbs.close

 rrorhandler:

   select case err

    case 0:

     makeadditionalreplica = 0

     exit function

    case else:

     msgbox"error" & err ":" & error

     makeadditionalreplica =-1

     exit function

   end select

  end function

上述过程可以从一个数据库复本生成一个新的复本。该过程有3个参数,其中第一个参数是数据库复本的文件名,第二个参数是新生成的数据库复本的文件名,第三个参数,即intoptions,可以是dao常数dbrepmakereadonly和dbrepmakepartial的组合,也可以是0。 dbrepmakereadonly常数表示复本是只读的,而dbrepmakepartial常数表示复本是部分复本,不是完全复本。例如,为了建立一个只读部分复本,在调用过程makeadditionalreplica时,应当把dbrepmakereadon1y + dbrepmakepartial的值传递给intoptions参数。如果intoptions参数是0,则过程将建立一个完全的读/写复本,因为忽略了makereplica方法中的options参数。

  为了调用上述过程建立数据库复本,可以在窗体上画一个命令按钮,然后编写如下的事件过程:

  private sub command1_click()

   a=makeadditionalreplica("c:\dbdir\dblcopy1. mdb","c:\dbdir\dblcopy2.mdb",0)

   if a=o then

    msgbox"己生成数据库复本"

   else

    msgbox“操作失败”

   end lf

  end sub

过程中的dblcopy1.mdb 是数据库db1.mdb的复本,而dblcopy2.mdb是dblcopyl.mdb的复本。运行程序,单击命令按钮,将建立一个完全的读/写复本。

  当microsoft jet建立新复本时,新复本将包含源复本的所有数据定义语言属性设置值。后续的复本可以由设计原版或集合中的任一复本来生成。

  在用makerep1ica方法复制数据库时,正在复制的对象一定不能是锁定的,否则方法的调用会失败。如果一个对象以设计模式打开或在同步期间被更新,则该对象会被microsoft jet锁定。在实际的程序设计中,一定要注意这一点,不要试图从拥有锁定对象的数据库来生成复本。

  注意,生成一个新复本后,将把源复本中的所有可复制对象和属性复制到新复本中。虽然所有链接表也被复制,但如果新复本位于网络上,链接表的路径可能会不正确。因此,一定要对新复本进行测试,以确定是否需要为链接表建立新路径。

编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:网络数据库的复制和同步(5)
下一篇:数据库的查询优化技术
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
最新更新 热点排行 推荐新闻
sql server 7.0与以前的版本相比,安全
设置proxy server和sql server实现互联
microsoft sql server 7.0安全问题   
mysql安全性指南(3)(转)           
mysql安全性指南 (2)(转)          
在frontpage 2000中插入flash动画
用frontpage 2000使图像“减肥”
提高frontpage 2002使用效率
用frontpage 2000创建网页动画
用frontpage 2000巧做样式表
用frontpage 2000制作鼠标光照特效
用frontpage轻松转换图片格式
frontpage10全透视教程(9)
frontpage10全透视教程(8)
frontpage10全透视教程(7)
sql server 7.0与以前的版本相比,安全
sql简明教程(6)
sql简明教程(5)
sql简明教程(4)
sql简明教程(3)
qq珊瑚虫外挂4.0版本发布!
多个广告位招商!
摄影后期系列一:1分钟为数码相片去红眼
qq挂机说明
asp进度条
photoshop通道抠图:给秀发飞扬的mm照
教您显示器亮度对比度的调节
新版上线,今日正式开通!!!
更多精彩图文广告等着您!
asp中使用sql语句教程
sql简明教程(1)
第二十章 开发delphi对象式数据管理功
sql简明教程(1)
vbscript和javascript互相调用 
jsp教程(四)-jsp actions的使用
操作系统被入侵后的修复过程
五一别忘电脑防毒 养成良好上网习惯
google对ie浏览器将捆绑搜索功能表担忧
新版上线,今日正式开通!!!
用photoshop创意图形“岁月”
摄影后期系列一:1分钟为数码相片去红眼

 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息