直播中
“數(shù)據(jù)構(gòu)形”使您能夠回答其答案可由成形的 Recordset 表示的提問。數(shù)據(jù)構(gòu)形定義成形 Recordset 的列、由列表示條目之間的關(guān)系和數(shù)據(jù)充填到 Recordset 的方式。
成形 Recordset 的列可以包含來自數(shù)據(jù)提供者(如 SQL Server)的數(shù)據(jù)、對另一個 Recordset 的引用、對 Recordset 一個行進(jìn)行計算得到的值、對整個 Recordset 的列進(jìn)行操作所得到的值,或者可以是新虛構(gòu)的空列。
在檢索包含對另一個 Recordset 的引用的列的值時,ADO 將自動返回由引用表示的實際的 Recordset。包含另一個 Recordset 的 Recordset 稱為“分級 Recordset”或“分級游標(biāo)”。
例如,假定您要得到由公司每個客戶發(fā)出的所有定單的列表。可對包含名為 Customers 和 Orders 的數(shù)據(jù)庫表發(fā)出數(shù)據(jù)構(gòu)形命令。如同上例一樣,ADO 將返回客戶記錄 Recordset。但是,每行將同時有附加的列,該列引用包含所有該客戶定單的 Recordset。
改進(jìn)該形狀即可獲得按州排列的銷售總計的列表。在 Customers 表中的地址列包含每個客戶的州,而 Orders 表的數(shù)量列則包含每個定單的數(shù)量。發(fā)出不同的數(shù)據(jù)構(gòu)形命令,則 ADO 將返回 Recordset,該 Recordset 包含每個州一個行(在此,每個行包含標(biāo)識州的列)、該州所有定單的銷售量總計和對開列該州的所有客戶的 Recordset 的引用。訪問該客戶 Recordset 將會發(fā)現(xiàn)與前面的范例一樣,每個客戶行均含有對包含所有該客戶定單的 Recordset 的引用。
Shape 命令語法使您能夠通過編程創(chuàng)建成形的 Recordset。然后就可以通過編程或適當(dāng)?shù)目梢暬丶L問 Recordset 的組件。
數(shù)據(jù)構(gòu)形縱覽
ADO 2.0 推出了數(shù)據(jù)構(gòu)形功能、分級記錄集和 Shape 命令語法。
ADO 2.1 通過插入 COMPUTE 命令推出重構(gòu)形、孫子合計和參數(shù)化命令。
數(shù)據(jù)構(gòu)形
數(shù)據(jù)構(gòu)形使您能夠定義成形 Recordset 的列、由列表示的條目之間的關(guān)系和數(shù)據(jù)充填到 Recordset 的方式。
成形 Recordset 的列可以包含數(shù)據(jù)、對另一個 Recordset 的引用、對 Recordset 一個行進(jìn)行計算得到的值、對整個 Recordset 的列進(jìn)行操作所得到的值,或者可以是新虛構(gòu)的空列。
在檢索包含對另一個 Recordset 的引用的列的值時,ADO 將自動返回由引用表示的實際的 Recordset。包含另一個 Recordset 的 Recordset 被稱為“分級 Recordset”。分級 Recordsets 展示的是父-子關(guān)系,其中“父”是包含的 Recordset,而“子”是被包含的 Recordset。對 Recordset 的引用實際是對子的子集合(即“子集”)的引用。單個父可以包含多個子 Recordset。
ADO 2.0 同時推出了新的 Shape 命令語法,能夠通過編程創(chuàng)建成形的 Recordset 對象。Shape 命令可以象其他任何 ADO 命令文本一樣發(fā)出。
使用 Shape 命令語法,可通過兩種途徑創(chuàng)建分級的 Recordset 對象。其一是將子 Recordset 追加到父 Recordset,一般,父和子至少必需有一個列:在父的行中列的值與子的所有行中列的值相同。
其二則是從子 Recordset 產(chǎn)生父 Recordset。在引用子 Recordset 的父中,必須有子集列。創(chuàng)建其他父列的途徑是:對子列的合計運算,運算 Recordset 行的表達(dá)式,使用 BY 關(guān)鍵字指定分組的列,或追加新的空列。
可將分級 Recordset 對象嵌套到所需的任何深度(即創(chuàng)建子 Recordset 對象的子 Recordset 對象,如此繼續(xù))。
通過程序或相應(yīng)的可視控件,可以訪問成形的 Recordset 的 Recordset 組件。
Microsoft 提供了能夠生成 Shape 命令的可視化工具(請參閱 Visual Basic 主題,“數(shù)據(jù)環(huán)境設(shè)計者”)以及另一個能夠顯示分級游標(biāo)的可視化工具(請參閱 Visual Basic 主題,“使用 Microsoft Hierarchical Flexgrid Control”)。
重構(gòu)形
由 Shape 命令的子句創(chuàng)建的 Recordset 可以被賦值為“別名”(一般使用 AS 關(guān)鍵字)。在 ADO 2.1 中,成形 Recordset 的別名可以在完全不同的命令中引用。就是說,可以發(fā)出新的 Shape 命令來更改(即重構(gòu)形)以前構(gòu)形的 Recordset。為了支持該功能,ADO 提供了新的 Recordset 對象 Name 屬性。
所受限制為不可以將列追加到現(xiàn)有的 Recordset 中,或在任何插入 COMPUTE 的子句中對參數(shù)化的 Recordset 或 Recordset 對象進(jìn)行重構(gòu)形,或?qū)Τ诒粯?gòu)形的 Recordset 以外的任何 Recordset 執(zhí)行合計操作。
孫子合計
用 Shape 命令的子句創(chuàng)建的子集列可以得到“子集-別名名稱”(一般使用 AS 關(guān)鍵字)??梢允褂糜靡詷?biāo)識包含了列的子的完整名稱,在子集中標(biāo)識成形 Recordset 的任何列。例如,如果父子集 chap1 包含擁有數(shù)量列 amt 的子子集 chap2,那么完整名稱將是 chap1.chap2.amt。然后,完整名稱可以用作參數(shù)在合計函數(shù) (SUM, AVG, MAX, MIN, COUNT, STDEV, or ANY) 中使用。
使用插入 COMPUTE 命令的參數(shù)化命令
典型的參數(shù)化形狀 APPEND 命令含有通過查詢命令創(chuàng)建父 Recordset 的子句,以及通過參數(shù)化查詢命令(即包含參數(shù)占位符:問號“?”的命令)創(chuàng)建子 Recordset 的另一個子句。最終得到的成形 Recordset 有兩層,父在上層而子占據(jù)下層。
創(chuàng)建子 Recordset 的子句現(xiàn)在可以是任意數(shù)量的嵌套形狀 COMPUTE 命令,在最深的嵌套命令中包含了參數(shù)化查詢。所得到的成形 Recordset 有多層,父占據(jù)最上層,子占據(jù)最下層,而由形狀 COMPUTE 命令生成的任意數(shù)量 Recordsets 則占據(jù)插入的層。
該特性典型的用法是調(diào)用合計函數(shù)和形狀 COMPUTE 命令的分組功能,創(chuàng)建帶有有關(guān)子 Recordset 的分析信息的插入 Recordset 對象??傊?,因為這是參數(shù)化 Shape 命令,每當(dāng)父的子集列被訪問時,就可檢索新的子 Recordset。因為插入層來源于子,它們也將被重新計算