數(shù)據(jù)構(gòu)形一般需要兩個(gè)提供者。服務(wù)提供者 OLE DB 的數(shù)據(jù)構(gòu)形服務(wù)提供數(shù)據(jù)構(gòu)形功能,而數(shù)據(jù)提供者,例如 SQL Server 的 OLE DB 提供者,則提供充填成形 Recordset 的數(shù)據(jù)行。
服務(wù)提供者的名稱可以指定為 Connection 對(duì)象 Provider 屬性的值,或連接字符串關(guān)鍵字“Provider=”。
數(shù)據(jù)提供者的名稱可以指定為“Data Provider”動(dòng)態(tài)屬性的值,該動(dòng)態(tài)屬性由 Data Shaping Service for OLE DB 添加到 Connection 對(duì)象 Properties 集合。或者也可以指定為連接字符串關(guān)鍵字“Data Provider=”。
如果沒有充填 Recordset(例如,如果成形 Recordset 的所有列均使用 NEW 關(guān)鍵字創(chuàng)建),則不需要數(shù)據(jù)提供者。在這種情況下指定“Data Provider=none”。
范例
Dim cnn As New ADODB.Connection cnn.Provider = "MSDataShape" cnn.Open "Data Provider=MSDASQL;DSN=vfox;uid=sa;pwd=vfox;database=pubs” 常規(guī) Shape 命令
“數(shù)據(jù)構(gòu)形”定義了成形 Recordset 的列、由列代表的條目之間的關(guān)系以及數(shù)據(jù)充填到 Recordset 的方式。
成形的 Recordset 可以由如下類型的列組成:
列類型 說(shuō)明 數(shù)據(jù) 由對(duì)數(shù)據(jù)提供者、表或以前成形 Recordset 使用查詢命令所返回的 Recordset 的字段。 子集 對(duì)另一個(gè) Recordset 的引用,稱為“子集”。子集列使定義“父-子”關(guān)系成為可能,在這種關(guān)系中“父”是包含子集列的 Recordset,“子”是由子集代表的 Recordset。 合計(jì) 列的值通過(guò)對(duì)所有行執(zhí)行“合計(jì)函數(shù)”獲得,或者是子 Recordset 的所有行的列。(請(qǐng)參閱下表中的合計(jì)函數(shù)。) 計(jì)算表達(dá)式 列的值通過(guò)對(duì)在 Recordset 的相同行中的列進(jìn)行 Visual Basic for Applications 表達(dá)式的計(jì)算而獲得。表達(dá)式是 CALC 函數(shù)的參數(shù)。(請(qǐng)參閱下表中的計(jì)算表達(dá)式。) 新建 空的、虛構(gòu)的字段,可在隨后充填數(shù)據(jù)。列使用 NEW 關(guān)鍵字定義。(請(qǐng)參閱下表中的 NEW 關(guān)鍵字。)
Shape 命令可以包含子句,指定針對(duì)基本數(shù)據(jù)提供者并將返回 Recordset 對(duì)象的查詢命令。查詢的語(yǔ)法取決于對(duì)基本數(shù)據(jù)提供者的要求。雖然 ADO 并不要求使用任何指定的查詢語(yǔ)言,但通常是使用結(jié)構(gòu)化查詢語(yǔ)言 (SQL)。
您可以使用 SQL JOIN 子句關(guān)聯(lián)兩個(gè)表,但是,分級(jí) Recordset 可以更有效地表達(dá)信息。由 JOIN 創(chuàng)建的 Recordset 的每行會(huì)多余地重復(fù)一個(gè)表中的信息。分級(jí) Recordset 的多個(gè)子 Recordset 對(duì)象中,每個(gè)對(duì)象僅有一個(gè)父 Recordset。
Shape 命令可以僅由 Recordset 對(duì)象發(fā)出。
Shape 命令可以嵌套,即父命令或子命令本身可以是另一個(gè) Shape 命令。
有關(guān)定位分級(jí) Recordset 的詳細(xì)信息,請(qǐng)參閱訪問(wèn)分級(jí) Recordset 中的行。
有關(guān)語(yǔ)法正確的 Shape 命令的詳細(xì)信息,請(qǐng)參閱形狀語(yǔ)法格式。
合計(jì)函數(shù)、CALC 函數(shù)和 NEW 關(guān)鍵字
數(shù)據(jù)構(gòu)形支持如下函數(shù)。chapter-alias 是指定給包含了將被操作列的子集名稱。
chapter-alias(子集-別名)可以是完整的,由指向包含 column-name 的子集的每個(gè)子集列名稱組成,全部用句號(hào)分隔。例如,如果父子集 chap1 包含擁有數(shù)量列 amt 的子子集,則完整名即是 chap1.chap2.amt。
合計(jì)函數(shù) 說(shuō)明 SUM(chapter-alias.column-name) 計(jì)算指定列中所有值的和。 AVG(chapter-alias.column-name) 計(jì)算指定列中所有值的平均值。 MAX(chapter-alias.column-name) 計(jì)算指定列中的最大值。 MIN(chapter-alias.column-name) 計(jì)算指定列中的最小值。 COUNT(chapter-alias[.column-name]) 計(jì)算指定別名或列中行的數(shù)量。 STDEV(chapter-alias.column-name) 計(jì)算指定列中的標(biāo)準(zhǔn)偏差。 ANY(chapter-alias.column-name) 列的值(列的值在所有行均相同)。
計(jì)算表達(dá)式 說(shuō)明 CALC(expression) 計(jì)算任意表達(dá)式,但僅針對(duì)包含 CALC 函數(shù)的 Recordset 行。可以是任何 Visual Basic for Applications (VBA) 函數(shù)或表達(dá)式。
NEW 關(guān)鍵字 說(shuō)明 NEW (field type [(width | scale ][,precision])] 將指定類型的空列添加到 Recordset。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!