階層レコードセット内の行にアクセスする (例)
次の例では、階層 Recordset の行にアクセスするために必要な手順がわかります。
authors テーブルと titleauthor テーブルからの Recordset オブジェクトは作成者 ID で関連付けられます。
外側のループには、各作成者の姓と名、状態、および ID が表示されます。
各行に追加された Recordset は Fields コレクションから取得され、rstTitleAuthor に割り当てられます。
内部ループには、追加された Recordset の各行から 4 つのフィールドが表示されます。
StayInSync プロパティは説明目的で false に設定されています。そのため、外側のループが繰り返されるたびに章が変わったことがはっきりとわかります。 コード例をもっと効率的にするために、手順 3 の代入を手順 2 の最初の行の前に移動できます。そうすることで、代入が一回だけ実行されます。 次に 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)Shape の正式文法Microsoft Data Shaping Service for OLE DB (ADO サービス プロバイダー)Recordset オブジェクト (ADO)データ シェイプに必要なプロバイダーShape の APPEND 句一般的な Shape コマンドShape の COMPUTE 句Visual Basic for Applications の関数