次の方法で共有


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

次の例は、階層 Recordset内の行にアクセスするために必要な手順を示しています。

  1. レコードセット オブジェクトは、著者タイトル著者 のテーブルが著者IDによって関連付けられています。

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

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

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

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

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 Shaping Service for OLE DB (ADO Service Provider)Recordset オブジェクト (ADO)データ シェイプに必要なプロバイダーShape APPEND 句一般的な Shape コマンドShape COMPUTE 句Visual Basic for Applications 関数