摘 要:集合对象(Collection)是VB重要的特征,利用它可以对具有共同属性的对象进行操作访问。本文介绍了VB中的内部集合和自定义集合的应用,以及它与数组的异同。
关键词:Visual Basic 6.0 集合对象 应用
Visual Basic提供一种很有用的数据集合对象(Collection),它是由相关数据所构成的有序集,它可以使编程者对一组对象进行操作。Visual Basic本身含有一些内部集合,如Forms、Controls和Printers等,它们给出了工程中所有窗体、具体窗体中的所有控件以及Windows环境中的所有打印机的信息。如果要建立自己的集合,则需要使用Collection类。
1 对象变量的集合 对于对象变量可以理解为属于某种类型对象的集合,这个集合可以有很多对象,也可以只有一个,甚至可以是空集。在VB中可以用Set语句使一个对象变量指向一个具体的控件。
对于集合对象,其Count属性是一个非常重要的属性,利用这个属性可以对同一类对象的某一共同的属性进行访问和操作。如可以用以下的代码实现将项目中所有窗体上控件的字体的大小都设置成统一的格式,所有载入的窗体中的控件的字体都被指定为宋体,字号为16。
(1) 在项目中定义一标准模块
'定义两个全局变量 Global CtrFont As Control, Aform As Form '定义一FontAllSame子过程 Sub FontAllSame() Dim i, j As Integer For i = 0 To Forms.Count - 1 'Count属性是从0开始的整数 Set Aform = Forms(i) For j = 0 To Aform.Controls.Count - 1 Set Font1 = Aform.Controls(j) CtrFont.FontName = "宋体" CtrFont.FontSize = 16 Next j Next i End Sub |
(2) 在项目中的所有窗体的Activate事件中加入以下语句:
FontAllSame
2 数据库中的集合对象 在VB的数据库编程中,所有的数据库均看作是一个结构良好一致的对象所组成。可以使用对象的属性及方法对这些对象进行操作、创建和删除。
在VB数据库管理中数据的集合对象存在两类:一类是用于数据库结构的维护和管理,有三种集合:如,表集(TableDefs)、字段集(Fields)和索引集(Indexes);一类是数据存取对象的记录集:Recordset。每个集合对象都可以看作是一个数组,并按数组的方法来调用。一旦数据库建立以后,就可以用这些集合来对数据库的结构进行修改和数据处理。
在这些集合中同样具有属性Count,利用它可对集合中的元素进行操作,如下面是打开一个数据库,并取得其内各表(Table)的具体特征的应用程序实例。可以得到各表:表名,字段名,字段的个数,字段的类型,表中记录的条数。
Sub TableInfo() Dim i, j As Integer, Fname As String Dim db1 As Database, Td1 As TableDefs Dim fld1 As Fields Dim FieldNum, RecNum As Integer
Fname$ = "d:\mdb\xx.mdb" 'XX为Access数据库文件 Set db1 = OpenDataBase(Fname$) '打开一数据库文件 Set Td1 = db1.TableDefs For i = 1 To Td1.Count - 1 Debug.Print Td1(i).Name '输出表名 Set fld1 = Td1(i).Fields FieldNum = fld1.Count RecNum = Td1(i).RecordCount Debug.Print "当前表共有"; FieldNum; "个字段" '输出字段的个数 Debug.Print "当前表有:"; RecNum; "记录" '输出记录的个数 For j = 0 To fld1.Count - 1 Debug.Print "字段名", fld1(j).Name '输出字段名 Debug.Print "类型", fld1(j).Type '输出字段类型 Next j Next i End Sub |
从以上的程序中可以清楚地看出:数据库、表、字段存在着层次关系。在VB中层次结构的顶部是Jet数据引擎(DBEngine对象),它是惟一不被其它对象所包含的数据访问对象。DBEngine对象拥有一个Workspaces集合,该集合含有一个或多个Workspace对象。每个Workspace对象有一个Database集合,该集合又有一个或多个Database对象。每个Database对象含有一个TableDfes集合,该集合又含有一个或多个TableDef对象,依次类推。集合的对象都是基于0的索引来访问的。
如:DBEngine.Workspaces(0).Databases(0).TableDefs(0).Fields("CustName")