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