|
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集合。
在窗体上画一个命令按钮,然后编写如下事件过程:
Private Sub Command1_Click()
Dim dbsnorthwind As Database
Dim docloop
As Document
Dim prploop As Property
Set dbsnorthwind = OpenDatabase("e:\f.mdb")
With
dbsnorthwind.Containers!tablesDebug.Print "documents in "
& .Name & "container"For Each docloop In .DocumentsDebug.Print
" " & docloop.NameNext docloopWith .Documents(0)Debug.Print
"properties of" & .Name & "document"On Error
Resume NextFor Each prploop In .PropertiesDebug.Print " "
& prploop.Name & "=" & prploopNext prploopOn Error
GoTo 0End WithEnd Withdbsnorthwind.Close
End Sub
程序的前半部分与前面的例子相同,后半部分列出第一个Document对象(即Documents(0)的 Properties集合。运行程序,单击命令按钮,即可在“立即”窗口中列出上述内容。
用户定义的属性通过CreateProperty方法来定义,用该方法可以建立由用户定义的Property对象(仅Microsoft Jet
工作区),用于Database,Document,Field,Index,QueryDef和TableDef对象。其格式为: set property=对象.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参数的取值 |
| 常数 |
类型 |
常数 |
类型 |
| dbBigInt |
Big整型数 |
dbGUID |
GUID |
| dbBinary |
二进制 |
dbInteger |
整型数 |
| dbBoolean |
布尔值 |
dbLong |
长整型数 |
| dbByte |
字节 |
dbLongBinary |
长二进制(OEL对象) |
| dbChar |
字符 |
dbMemo |
Memo |
| dbCurrency |
货币 |
dbNumeric |
数值 |
| dbDate |
日期/时间 |
dbsingle |
单精度 |
| dbDecimal |
十进制 |
dbText |
文本 |
| dbDouble |
双精度 |
dbTime |
时间 |
| dbFloat |
浮点数 |
dbTimeStamp |
TimeStamp |
| dbVarBinary |
VarBinary |
|
|
(表3)
设MyDB是一个Database对象变量,MyPro是一个Property对象变量,则可以用下面的程序建立Property对象:
set MyPro=MyDB.createProperty()MyPro.Name="NewDefined"
MyPro.Type=dbText
MyPro.Value="这是一个用户定义的属性"
可以用下面的语句把新建立的属性加到Properties集合中:
MyDB.Properties.Append prpNew
【例】编写程序,建立用户定义的Property对象,并把它加到Properties集合中。在窗体上画一个命令按钮,然后编写如下的事件过程。
Private Sub Command1_Click() Dim dbsnorthwind As DatabaseDim prpnew
As PropertyDim prploop As PropertySet dbsnorthwind = OpenDatabase("e:\f.mdb")
With dbsnorthwind
'建立并添加用户定义的属性
Set prpnew = .CreateProperty()prpnew.Name = "userdefinednew"prpnew.Type
= dbTextprpnew.Value = "this is a user_definednew property."
.Properties.Append prpnew
'列出当前数据库的所有属性
Debug.Print "properties of " & .NameFor Each prploop
In .PropertiesWith prploopDebug.Print " " & NameDebug.Print
" type:" & .TypeDebug.Print " inherited:" &
.InheritedEnd WithNext prploopEnd With
End Sub
上述程序建立了一个名为userdefinednew的属性,其类型为dbText,初值为“this is a user_definednew
property。”运行程序,单击按钮,将建立该属性,并在立即窗口中显示当前数据库的所有属性。(包括新建立的属性)
|