階層レコードセット内の行にアクセスする (例)

次の例では、階層 Recordset の行にアクセスするために必要な手順がわかります。

  1. authors テーブルと titleauthor テーブルからの Recordset オブジェクトは作成者 ID で関連付けられます。

  2. 外側のループには、各作成者の姓と名、状態、および ID が表示されます。

  3. 各行に追加された RecordsetFields コレクションから取得され、rstTitleAuthor に割り当てられます。

  4. 内部ループには、追加された Recordset の各行から 4 つのフィールドが表示されます。

StayInSync プロパティは説明目的で false に設定されています。そのため、外側のループが繰り返されるたびに章が変わったことがはっきりとわかります。 コード例をもっと効率的にするために、手順 3 の代入を手順 2 の最初の行の前に移動できます。そうすることで、代入が一回だけ実行されます。 次に StayInSync プロパティを true に設定します。それにより、rstTitleAuthorrst が新しい行に移動するたびに該当する章に暗黙的かつ自動的に変化します。

Sub datashape()
   Dim cnn As New ADODB.Connection
   Dim rst As New ADODB.Recordset
   Dim rstTitleAuthor As New ADODB.Recordset

   cnn.Provider = "MSDataShape"
   cnn.Open    "Data Provider=MSDASQL;" & _
               "Data Source=SRV;Integrated Security=SSPI;Database=Pubs"
' STEP 1
   rst.StayInSync = FALSE
   rst.Open    "SHAPE  {select * from authors} "  & _
               "APPEND ({select * from titleauthor} " & _
               "RELATE au_id TO au_id) AS chapTitleAuthor", _
               cnn
' STEP 2
   While Not rst.EOF
      Debug.Print    rst("au_fname"), rst("au_lname"), _
                     rst("state"), rst("au_id")
' STEP 3
      Set rstTitleAuthor = rst("chapTitleAuthor").Value
' STEP 4
      While Not rstTitleAuthor.EOF
         Debug.Print rstTitleAuthor(0), rstTitleAuthor(1), _
                     rstTitleAuthor(2), rstTitleAuthor(3)
         rstTitleAuthor.MoveNext
      Wend
      rst.MoveNext
   Wend
End Sub

参照

データ シェイプの概要フィールド オブジェクトフィールド コレクション (ADO)Shape の正式文法Microsoft Data Shaping Service for OLE DB (ADO サービス プロバイダー)Recordset オブジェクト (ADO)データ シェイプに必要なプロバイダーShape の APPEND 句一般的な Shape コマンドShape の COMPUTE 句Visual Basic for Applications の関数