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