データ シェイプの例
次のデータ シェイプ コマンドは、Northwind データベースの Customers と Orders の各テーブルから階層的な Recordset を構築する方法を示しています。
SHAPE {SELECT CustomerID, ContactName FROM Customers}
APPEND ({SELECT OrderID, OrderDate, CustomerID FROM Orders} AS chapOrders
RELATE customerID TO customerID)
(「Visual Basic のデータ シェイプの例」に示すように) このコマンドを使って Recordset オブジェクトを開くと、Customers テーブルから返される各レコードにチャプター (chapOrders) が作成されます。 このチャプターは、Orders テーブルから返された Recordset のサブセットで構成されます。 chapOrders チャプターには、指定した顧客からの注文に関して要求されたすべての情報が含まれています。 この例のチャプターは、OrderID、OrderDate、CustomerID という 3 つの列で構成されています。
結果として形成された Recordset の先頭の 2 つのエントリは次のようになります。
CustomerID | [ContactName] | OrderID | OrderDate | CustomerID |
---|---|---|---|---|
ALFKI | Maria Ander | 10643 10692 10702 10835 10952 11011 |
1997-08-25 1997-10-03 1997-10-13 1998-01-15 1998-03-16 1998-04-09 |
ALFKI ALFKI ALFKI ALFKI ALFKI ALFKI |
ANATR | Ana Trujillo | 10308 10625 10759 10926 |
1996-09-18 1997-08-08 1997-11-28 1998-03-04 |
ANATR ANATR ANATR ANATR |
SHAPE コマンドでは、APPEND を使い、RELATE 句を指定して親 Recordset (先ほど説明した SHAPE キーワードの直後のプロバイダー固有コマンドから返されます) に関連する子 Recordset を作成します。 通常、親と子には共通する列が少なくとも 1 つあります。親のある行の列値は、子のすべての行の列値と同じです。
SHAPE コマンドには 2 つ目の使い方があります。つまり、子 Recordset から親 Recordset を生成することです。 通常、子 Recordset のレコードは BY 句を使ってグループ化します。また、子の結果のグループごとに、1 行が親 Recordset に追加されます。 BY 句を省略すると、子 Recordset が 1 つのグループになり、親 Recordset には 1 行のみが含まれます。 これは、子 Recordset 全体の "総計" 集計を計算する場合に役立ちます。
SHAPE コマンド コンストラクトを使うと、形成された Recordset をプログラムで作成することもできます。 その後は、プログラムで、または適切なビジュアル コントロールを使って Recordset のコンポーネントにアクセスできます。 shape コマンドの発行方法は、他の ADO コマンド テキストと同様です。 詳細については、「一般的な Shape コマンド」を参照してください。
親 Recordset の形成方法に関係なく、これには、子 Recordset に関連付けるために使用されるチャプター列が含まれます。 必要に応じて、子の行の集計 (SUM、MIN、MAX など) を含む列を親 Recordset に持つこともできます。 親と子の両方の Recordset に、Recordset 内の行の式を含む列と、新規で最初は空の列を持つこともできます。
このセクションは次のトピックに続きます。