データ シェイプで、シェイプされた Recordset の列、列で示されるエンティティ間の関係、および Recordset にデータが入力される方法を定義します。
シェイプされた Recordset は、次のような種類の列で構成されます。
列の種類 | 説明 |
データ | データ プロバイダ、テーブル、または前にシェイプされた Recordset へのクエリ コマンドによって返された Recordset のフィールド。 |
チャプタ | "チャプタ (chapter)" と呼ばれる、別の Recordset への参照。チャプタ列を使うと、"親子" 関係を定義することができます。"親" はチャプタ列を含む Recordset、"子" はチャプタで表される Recordset になります。 |
集計 | 列の値は、子 Recordset のすべての行、またはすべての行を含んだ 1 つの列に "集計関数" を実行することで算出されます (次の表の集計関数を参照してください)。 |
計算式 | 列の値は、Recordset の同じ行にある複数の列に VBA (Visual Basic for Applications) 式を実行することで算出されます。式は、CALC 関数への引数です (次の表の計算式、および「Visual Basic for Applications の関数」を参照してください)。 |
新規 | 後からデータを入力することができる空のフィールド。この列は、NEW キーワードで定義されます (次の表の NEW キーワードを参照してください)。 |
Shape コマンドには、Recordset オブジェクトを返すデータ プロバイダへのクエリ コマンドを指定するための句を含めることができます。クエリの構文は、基になるデータ プロバイダの要件によって異なります。ADO では、特定のクエリ言語を使う必要はありませんが、通常は SQL (Structured Query Language) を使います。
2 つのテーブルを関連付けるために SQL の JOIN 句を使うことができますが、階層 Recordset を使うと、さらに効率的に情報を表すことができます。JOIN で作成された Recordset の各行には、テーブルから引き出した情報が繰り返し入力されます。階層 Recordset では、複数の子 Recordset オブジェクトのそれぞれに対して、1 つだけ親 Recordset が存在します。
Shape コマンドは、Recordset オブジェクトによって、または Command オブジェクトの CommandText プロパティを設定して Execute メソッドを呼び出すことによって、発行することができます。
Shape コマンドは、ネストすることができます。つまり、parent-command または child-command 自体を別の Shape コマンドにすることができます。
階層 Recordset 内の移動については、「階層 Recordset 内の行へのアクセス」を参照してください。
Shape コマンドの正しい構文については、「正式な Shape 文法」を参照してください。
集計関数、CALC 関数、NEW キーワード
データ シェイプは次の関数をサポートしています。操作される列を含むチャプタに割り当てる名前は、chapter-alias です。
column-alias は、column-name を含むチャプタを示す、各チャプタ列の名前をピリオド (.) で区切った、完全修飾名にすることができます。たとえば、親チャプタの chap1 が子チャプタの chap2 を含み、chap2 に総計列である amt がある場合、完全修飾名は、chap1.chap2.amt になります。
集計関数 | 説明 |
SUM(chapter-alias.column-name) | 指定された列のすべての値の合計を計算します。 |
AVG(chapter-alias.column-name) | 指定された列のすべての値の平均を計算します。 |
MAX(chapter-alias.column-name) | 指定された列の最大値を計算します。 |
MIN(chapter-alias.column-name) | 指定された列の最小値を計算します。 |
COUNT(chapter-alias[.column-name]) | 指定されたエイリアスまたは列の行数を数えます。 |
STDEV(chapter-alias.column-name) | 指定された列の標準偏差を計算します。 |
ANY(chapter-alias.column-name) | 列の値がすべての行で同じである、列の値です。 |
計算式 | 説明 |
CALC(expression) | 任意の式で計算しますが、CALC 関数を含む Recordset の列でのみ使用できます。Visual Basic for Applications の関数を使用した式を使うことができます。 |
NEW キーワード | 説明 |
NEW field-type [(width | scale | precision | error [, scale | error])] | 指定された型の空白の列を Recordset に追加します。 |
NEW キーワード付きで渡される field-type は、次のデータ型のどちらかにすることができます。
OLE DB のデータ型 | 同等の ADO のデータ型 |
DBTYPE_BSTR | adBSTR |
DBTYPE_BOOL | adBoolean |
DBTYPE_DECIMAL | adDecimal |
DBTYPE_UI1 | adUnsignedTinyInt |
DBTYPE_I1 | adTinyInt |
DBTYPE_UI2 | adUnsignedSmallInt |
DBTYPE_UI4 | adUnsignedInt |
DBTYPE_I8 | adBigInt |
DBTYPE_UI8 | adUnsignedBigInt |
DBTYPE_GUID | adGuid |
DBTYPE_BYTES | adBinary、AdVarBinary、adLongVarBinary |
DBTYPE_STR | adChar、adVarChar、adLongVarChar |
DBTYPE_WSTR | adWChar、adVarWChar、adLongVarWChar |
DBTYPE_NUMERIC | adNumeric |
DBTYPE_DBDATE | adDBDate |
DBTYPE_DBTIME | adDBTime |
DBTYPE_DBTIMESTAMP | adDBTimeStamp |
DBTYPE_VARNUMERIC | adVarNumeric |
DBTYPE_FILETIME | adFileTime |
DBTYPE_ERROR | adError |
新しいフィールドのデータ型が 10 進数の場合 (OLE DB では DBTYPE_DECIMAL、ADO では adDecimal) は、精度と位取りの値を指定する必要があります。
基になるデータ プロバイダへのコマンドの発行
SHAPE で始まらないすべてのコマンドは、データ プロバイダに渡されます。これは、"SHAPE {プロバイダ コマンド}" の形式の Shape コマンドを発行することと同じです。このようなコマンドで Recordset を作成する必要はありません。たとえば、"SHAPE {DROP TABLE MyTable}" は、データ プロバイダが "DROP TABLE" をサポートすることを想定した、完全に有効な Shape コマンドです。
この機能によって、通常のプロバイダ コマンドと Shape コマンドの両方が同じ接続とトランザクションを共有することができます。