Visual Basic提供一種很有用的數(shù)據(jù)集合對象(Collection),它是由相關(guān)數(shù)據(jù)所構(gòu)成的有序集,它可以使編程者對一組對象進行操作。Visual Basic本身含有一些內(nèi)部集合,如Forms、Controls和Printers等,它們給出了工程中所有窗體、具體窗體中的所有控件以及Windows環(huán)境中的所有打印機的信息。如果要建立自己的集合,則需要使用Collection類。
對象變量的集合
對于對象變量可以理解為屬于某種類型對象的集合,這個集合可以有很多對象,也可以只有一個,甚至可以是空集。在VB中可以用Set語句使一個對象變量指向一個具體的控件。
對于集合對象,其Count屬性是一個非常重要的屬性,利用這個屬性可以對同一類對象的某一共同的屬性進行訪問和操作。如可以用以下的代碼實現(xiàn)將項目中所有窗體上控件的字體的大小都設(shè)置成統(tǒng)一的格式,所有載入的窗體中的控件的字體都被指定為微軟雅黑,字號為16。
(1) 在項目中定義一標(biāo)準(zhǔn)模塊
‘定義兩個全局變量
Global CtrFont As Control, Aform As Form
‘定義一FontAllSame子過程
Sub FontAllSame()
Dim i, j As Integer
For i = 0 To Forms.Count – 1 ‘Count屬性是從0開始的整數(shù)
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 數(shù)據(jù)庫中的集合對象
在VB的數(shù)據(jù)庫編程中,所有的數(shù)據(jù)庫均看作是一個結(jié)構(gòu)良好一致的對象所組成??梢允褂脤ο蟮膶傩约胺椒▽@些對象進行操作、創(chuàng)建和刪除。
在VB數(shù)據(jù)庫管理中數(shù)據(jù)的集合對象存在兩類:一類是用于數(shù)據(jù)庫結(jié)構(gòu)的維護和管理,有三種集合:如,表集(TableDefs)、字段集(Fields)和索引集(Indexes);一類是數(shù)據(jù)存取對象的記錄集:Recordset。每個集合對象都可以看作是一個數(shù)組,并按數(shù)組的方法來調(diào)用。一旦數(shù)據(jù)庫建立以后,就可以用這些集合來對數(shù)據(jù)庫的結(jié)構(gòu)進行修改和數(shù)據(jù)處理。
在這些集合中同樣具有屬性Count,利用它可對集合中的元素進行操作,如下面是打開一個數(shù)據(jù)庫,并取得其內(nèi)各表(Table)的具體特征的應(yīng)用程序?qū)嵗?梢缘玫礁鞅恚罕砻?,字段名,字段的個數(shù),字段的類型,表中記錄的條數(shù)。
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數(shù)據(jù)庫文件
Set db1 = OpenDataBase(Fname$) '打開一數(shù)據(jù)庫文件
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 "當(dāng)前表共有"; FieldNum; "個字段" ‘輸出字段的個數(shù)
Debug.Print "當(dāng)前表有:"; RecNum; "記錄" ‘輸出記錄的個數(shù)
For j = 0 To fld1.Count - 1
Debug.Print "字段名", fld1(j).Name ‘輸出字段名
Debug.Print "類型", fld1(j).Type ‘輸出字段類型
Next j
Next i
End Sub
從以上的程序中可以清楚地看出:數(shù)據(jù)庫、表、字段存在著層次關(guān)系。在VB中層次結(jié)構(gòu)的頂部是Jet數(shù)據(jù)引擎(DBEngine對象),它是惟一不被其它對象所包含的數(shù)據(jù)訪問對象。DBEngine對象擁有一個Workspaces集合,該集合含有一個或多個Workspace對象。每個Workspace對象有一個Database集合,該集合又有一個或多個Database對象。每個Database對象含有一個TableDfes集合,該集合又含有一個或多個TableDef對象,依次類推。集合的對象都是基于0的索引來訪問的。
如:DBEngine.Workspaces(0).Databases(0).TableDefs(0).Fields(“CustName”)
對象變量的集合
對于對象變量可以理解為屬于某種類型對象的集合,這個集合可以有很多對象,也可以只有一個,甚至可以是空集。在VB中可以用Set語句使一個對象變量指向一個具體的控件。
對于集合對象,其Count屬性是一個非常重要的屬性,利用這個屬性可以對同一類對象的某一共同的屬性進行訪問和操作。如可以用以下的代碼實現(xiàn)將項目中所有窗體上控件的字體的大小都設(shè)置成統(tǒng)一的格式,所有載入的窗體中的控件的字體都被指定為微軟雅黑,字號為16。
(1) 在項目中定義一標(biāo)準(zhǔn)模塊
‘定義兩個全局變量
Global CtrFont As Control, Aform As Form
‘定義一FontAllSame子過程
Sub FontAllSame()
Dim i, j As Integer
For i = 0 To Forms.Count – 1 ‘Count屬性是從0開始的整數(shù)
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 數(shù)據(jù)庫中的集合對象
在VB的數(shù)據(jù)庫編程中,所有的數(shù)據(jù)庫均看作是一個結(jié)構(gòu)良好一致的對象所組成??梢允褂脤ο蟮膶傩约胺椒▽@些對象進行操作、創(chuàng)建和刪除。
在VB數(shù)據(jù)庫管理中數(shù)據(jù)的集合對象存在兩類:一類是用于數(shù)據(jù)庫結(jié)構(gòu)的維護和管理,有三種集合:如,表集(TableDefs)、字段集(Fields)和索引集(Indexes);一類是數(shù)據(jù)存取對象的記錄集:Recordset。每個集合對象都可以看作是一個數(shù)組,并按數(shù)組的方法來調(diào)用。一旦數(shù)據(jù)庫建立以后,就可以用這些集合來對數(shù)據(jù)庫的結(jié)構(gòu)進行修改和數(shù)據(jù)處理。
在這些集合中同樣具有屬性Count,利用它可對集合中的元素進行操作,如下面是打開一個數(shù)據(jù)庫,并取得其內(nèi)各表(Table)的具體特征的應(yīng)用程序?qū)嵗?梢缘玫礁鞅恚罕砻?,字段名,字段的個數(shù),字段的類型,表中記錄的條數(shù)。
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數(shù)據(jù)庫文件
Set db1 = OpenDataBase(Fname$) '打開一數(shù)據(jù)庫文件
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 "當(dāng)前表共有"; FieldNum; "個字段" ‘輸出字段的個數(shù)
Debug.Print "當(dāng)前表有:"; RecNum; "記錄" ‘輸出記錄的個數(shù)
For j = 0 To fld1.Count - 1
Debug.Print "字段名", fld1(j).Name ‘輸出字段名
Debug.Print "類型", fld1(j).Type ‘輸出字段類型
Next j
Next i
End Sub
從以上的程序中可以清楚地看出:數(shù)據(jù)庫、表、字段存在著層次關(guān)系。在VB中層次結(jié)構(gòu)的頂部是Jet數(shù)據(jù)引擎(DBEngine對象),它是惟一不被其它對象所包含的數(shù)據(jù)訪問對象。DBEngine對象擁有一個Workspaces集合,該集合含有一個或多個Workspace對象。每個Workspace對象有一個Database集合,該集合又有一個或多個Database對象。每個Database對象含有一個TableDfes集合,該集合又含有一個或多個TableDef對象,依次類推。集合的對象都是基于0的索引來訪問的。
如:DBEngine.Workspaces(0).Databases(0).TableDefs(0).Fields(“CustName”)