龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

复本操作的对象、属性和方法(2)--网络数据库的复制和同步(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
3.property对象与Properties集合 Property对象用来描述一个DAO对象的内部属性或用户定义属性,与DAO对象及Properties集合的关系为DAO对象包含Properties集合,Properties集合包含property对象。(其关
3.property对象与Properties集合
  
  Property对象用来描述一个DAO对象的内部属性或用户定义属性,与DAO对象及Properties集合的关系为DAO对象包含Properties集合,Properties集合包含property对象。(其关系详见VB帮助文件)
  
  除Connection和Error对象外,每个DAO对象都含有一个property集合,在该集合中有与相应的DAO对象的内部属性一致的Property对象。同时,用户可以定义Property对象并将其加入某些下列DAO对象的Properties集合:
  Database,Index,QueryDef和TableDef对象
  TableDef对象和QueryDef对象的Fields集合中的Field对象
  Property有4个预定义的属性:
  Name属性:是一个字符串,属性的唯一标识。
  Type属性:是一个整型数(Integer),用来指定属性的数据类型。
  Value属性:是一个包含属性设置的Variant类型的值。
  Inherited属性:是一个Boolean值,用来指示属性是否从另一个对象继承而来。
  Property对象既有预定义的属性,也有用户定义的属性,在引用时,其格式是不一样的。顶定义属性的引用格式为:
  对象.属性
  而用户定义的属性必须采用下面的引用格式:
  对象.Properties.(“属性”)
  
  【例】编写程序,列出Tables容器中的Documents集合,然后列出集合中的第一个Document对象的Properties集合。
  
  在窗体上画一个命令按钮,然后编写如下事件过程:
  
  PrivateSubCommand1_Click()
  DimdbsnorthwindAsDatabase
  DimdocloopAsDocument
  DimprploopAsProperty
  Setdbsnorthwind=OpenDatabase("e:f.mdb")
  Withdbsnorthwind.Containers!tables
  Debug.Print"documentsin"&.Name&"container"
  ForEachdocloopIn.Documents
  Debug.Print""&docloop.Name
  Nextdocloop
  With.Documents(0)
  Debug.Print"propertiesof"&.Name&"document"
  OnErrorResumeNext
  ForEachprploopIn.Properties
  Debug.Print""&prploop.Name&"="&prploop
  Nextprploop
  OnErrorGoTo0
  EndWith
  EndWith
  dbsnorthwind.Close
  EndSub
  
  程序的前半部分与前面的例子相同,后半部分列出第一个Document对象(即Documents(0)的Properties集合。运行程序,单击命令按钮,即可在“立即”窗口中列出上述内容。
  
  用户定义的属性通过CreateProperty方法来定义,用该方法可以建立由用户定义的Property对象(仅MicrosoftJet工作区),用于Database,Document,Field,Index,QueryDef和TableDef对象。其格式为:
  
  setproperty=对象.CreateProperty(name,type,value,DDL)
  
  各参数的含义如下:
  
  property:对象变量,要建立的Property对象。
  Object:对象变量,可以是Database,Field,Index,QueryDef和TableDef对象,可以对这些对象建立Property对象。
  name:可选。variant类型(字符串子型),唯一地命名新的Property对象。
  type:可选。常数,定义新Property对象的类型。
  value:可选。variant类型,指定属性的初值。
  DDL:可选。Variant类型(Boolean子型),用来指示该属性是否是一个DDl对象,缺省值为False。如果DDL为True,则不能删除这个property对象(除非得到dbsecWriteDef的允许)。
  
  说明:
  
  1.)只能在一个永久对象的Property集合中建立用户定义的Property对象。在用CreateProperty方法建立Property对象时,如果省略了一个或多个可选参数,则可在向一个集合追加新的对象之前,用赋值语句设置或重新设置相应的属性。在向集合中追加新的对象之后,可以改变其属性设置的一部分(不是全部)。
  
  2.)如果name参数指的是该集合中已经存在的对象成员,则当用Append方法追加时,将会出现错误。
  
  3.)为了从集合中删除一个由用户定义的属性对象,可以用集合的Delete方法来实现。该方法只能删除用户定义的对象,不能删除预定义属性。
  
  4.)如果省略了DDL参数,则缺省为False(即非DDL)。在这种情况下,没有出现相应的DDL属性,如果需要将一个Property对象由DDL变为DDL,则必须先删除,然后再重新建立。
  
  5.)CreateProperty方法中的type参数是一个符号常量,它是Property对象的设置值或返回值,其可能的取值见表3
  
  type参数的取值
  
  常数类型常数类型
  dbBigIntBig整型数dbGUIDGUID
  dbBinary二进制dbInteger整型数
  dbBoolean布尔值dbLong长整型数
  dbByte字节dbLongBinary长二进制(OEL对象)
  dbChar字符dbMemoMemo
  dbCurrency货币dbNumeric数值
  dbDate日期/时间dbsingle单精度
  dbDecimal十进制dbText文本
  dbDouble双精度dbTime时间
  dbFloat浮点数dbTimeStampTimeStamp
  dbVarBinaryVarBinary
  
  (表3)
  
  设MyDB是一个Database对象变量,MyPro是一个Property对象变量,则可以用下面的程序建立Property对象:
  
  setMyPro=MyDB.createProperty()
  MyPro.Name="NewDefined"
  MyPro.Type=dbText
  MyPro.Value="这是一个用户定义的属性"
  
  可以用下面的语句把新建立的属性加到Properties集合中:
  
  MyDB.Properties.AppendprpNew
  
  【例】编写程序,建立用户定义的Property对象,并把它加到Properties集合中。在窗体上画一个命令按钮,然后编写如下的事件过程。
  
  PrivateSubCommand1_Click()
  DimdbsnorthwindAsDatabase
  DimprpnewAsProperty
  DimprploopAsProperty
  Setdbsnorthwind=OpenDatabase("e:f.mdb")
  Withdbsnorthwind
  
  '建立并添加用户定义的属性
  
  Setprpnew=.CreateProperty()
  prpnew.Name="userdefinednew"
  prpnew.Type=dbText
  prpnew.Value="thisisauser_definednewproperty."
  .Properties.Appendprpnew
  
  '列出当前数据库的所有属性
  
  Debug.Print"propertiesof"&.Name
  ForEachprploopIn.Properties
  Withprploop
  Debug.Print""&Name
  Debug.Print"type:"&.Type
  Debug.Print"inherited:"&.Inherited
  EndWith
  Nextprploop
  EndWith
  EndSub
  
  上述程序建立了一个名为userdefinednew的属性,其类型为dbText,初值为“thisisauser_definednewproperty。”运行程序,单击按钮,将建立该属性,并在立即窗口中显示当前数据库的所有属性。(包括新建立的属性)->

精彩图集

赞助商链接