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

