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

次の例は、階層的なレコードセット内の行にアクセスするために必要な手順を 示しています

  1. 作成者 テーブルと titleauthor テーブルの レコードセット オブジェクトは、作成者 ID によって関連付けされます。

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

  3. 各行に 追加されたレコード セットは 、Fields コレクションから取得され 、rstTitleAuthor に割り当てられます

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

StayInSync プロパティは、外側のループの各イテレーションで章の変更を明示的に確認できるよう、図を示す目的で false に設定されています。 コード例をより効率的に行う場合は、手順 3 の割り当てを手順 2 の最初の行の前に移動して、割り当てが 1 回だけ実行されます。 次に 、StayInSyncプロパティを true に設定して 、rstTitleAuthor が新しい行に移動するたびに、対応する章に暗黙的および自動的に変更されます。

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)仮形文法 Microsoft Data Shape Service for OLE DB (ADO サービスプロバイダー) レコードセット オブジェクト(ADO)一般的な図形COMPUTE句 Visual Basic for Applications 関数のデータ整形図形APPEND句図形コマンドに必要なプロバイダー