Acesso de linhas em um conjunto de registros hierárquico
Aplica-se ao: Access 2013, Office 2013
O exemplo a seguir mostra as etapas necessárias para acessar as linhas em um Recordset hierárquico:
Os objetos Recordset dos autores e as tabelas do autor de títulos são relacionados pelo ID do autor.
O loop externo exibe o nome e sobrenome de cada autor, o estado e a identificação.
O Recordset anexado para cada linha é recuperado da coleção Fields e designado ao rstTitleAuthor.
O loop interno exibe quatro campos de cada linha no Recordset anexado.
Observação
A propriedade StayInSync é definida como FALSE para fins de ilustração, para que você possa ver a alteração do capítulo explicitamente em cada iteração do loop externo. No entanto, o exemplo será mais eficiente se a atribuição na etapa 3 for movida antes da primeira linha na etapa 2; de modo que a atribuição seja executada apenas uma vez. Defina a propriedade StayInSync como TRUE, para que rstTitleAuthor altere implicitamente e automaticamente para o capítulo correspondente sempre que rst passar para uma nova linha.
Exemplo
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;" & _
"User Id=MyUserName;Password=MyPassword;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