轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 电脑主程序开源 查看主题

复制数据库(1)

发布者: 沈秋如 | 发布时间: 2018-1-11 10:53| 查看数: 6769| 评论数: 1|帖子模式

  所谓建立数据库复本,实际上就是建立数据库的拷贝。通过数据库复制,每个用户都可以使用数据库中数据的一份拷贝,并可在某个时亥把各个数据库重新组合成宿主数据库,而对宿主数据库的修改都传送到数据库复本。注意,数据库复制功能仅对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, strCollection _As String, stffobJect As String) As integerDim i As IntegerDim blnMatch As BooleanDim tdf As TableDefDim PrP As PropertyDim doc As DocumentDim qdf As QueryDefOn Error GoTo ErrorHandlerSelect Case stalollectionCase "FormS", "RelpOrtS", ''MOdllleS'', ''SCriptS`'Set doc = dbs.Containers(strCollection). _Documents(strObject)Set prp = doc.Createproperty _("KeepLocal", dbText, `'T'')doc.Properties.Append prpCase "TableDefs"Set tdf = dbs.TableDefs(strObJect)Set prp = tdfCreateproperty -(''KeepLocal'', dbText, ''T'')tdfprol)etties.Append prpCase ''QuecyDefs'`Set qdf=dbs.QueryDefs(sbrobject)Set prp = qdf.Createproperty _("KeepLocal", dbText, "T")qdf.properties.Append PrPEnd SelectErrorHandler:Select Case Err

Case 0

case 3265 '对象未发现

SetKeepLocal = 3265

Exit Function

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

Case 3367Select Case sttoollectionCSSel ''Forms'' , ''RelportS'', ``Modlules'' , ''ScriptS'`doc.Properties(''KeepLocal'`).Value = `'T'`Case ''TableDefs'`tdf.Properties(''KeepLocal'').Value = `'T'`Case ''QueryDefs'`qdf.Properties(''KeepLocal'').Value = ''T'`Exit FunctionEnd SelectSetKeepLocal = 0Exit FunctionCase ElseMsgBOx ''Error'' & Err & ":", & Error, vbOKOnlySetKeepLocal=-1Exit FunctionEnd Select

End Function

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

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

Private Sub Command1_Click()Dim MyDb As DatabaseDim a As integerSet 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属性。

最新评论

守夜人-君子攸宁 发表于 2022-5-9 11:38
怎么通过网页源代码下载图片

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表