次の例は、階層 Recordset内の行にアクセスするために必要な手順を示しています。
レコードセット オブジェクトは、著者 と タイトル著者 のテーブルが著者IDによって関連付けられています。
外側のループには、各作成者の姓と名、状態、および ID が表示されます。
各行の追加された Recordset は、Fields コレクションから取得され、rstTitleAuthorに割り当てられます。
内部ループには、追加された 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 関数