VB中數(shù)據(jù)集合對象的應(yīng)用

字號:

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”)