Article ID: 190605
Article Last Modified on 6/24/2004
Property Value ---------------------- CommandText Customers CommandType adCmdTable
Option Explicit
Dim cn as ADODB.Connection
Dim rsCustomers As ADODB.Recordset
Dim rsOrders As ADODB.Recordset
Dim rsOrderDetails As ADODB.Recordset
Private Sub Form_Load()
Command1.Caption = "Re-pro"
Command2.Caption = "Workaround I"
Command3.Caption = "Workaround II"
End Sub
Private Sub Command1_Click()
Set DataGrid1.DataSource = DataEnvironment1
DataGrid1.DataMember = "Customers"
Set DataGrid2.DataSource = DataEnvironment1
DataGrid2.DataMember = "Orders"
Set DataGrid3.DataSource = DataEnvironment1
DataGrid3.DataMember = "OrderDetails"
End Sub
Private Sub Command2_Click()
Set DataGrid1.DataSource = Nothing
DataGrid1.DataMember = ""
Set DataGrid2.DataSource = Nothing
DataGrid2.DataMember = ""
Set DataGrid3.DataSource = Nothing
DataGrid3.DataMember = ""
Set rsCustomers = DataEnvironment1.rsCustomers
Set rsOrders = rsCustomers.Fields("Orders").Value
Set rsOrderDetails = rsOrders.Fields("OrderDetails").Value
Set DataGrid1.DataSource = rsCustomers
Set DataGrid2.DataSource = rsOrders
Set DataGrid3.DataSource = rsOrderDetails
End Sub
Private Sub Command3_Click()
Dim cn As New ADODB.Connection
With cn
.Provider = "MSDataShape"
.CursorLocation = adUseClient
.ConnectionString = "dsn=nwind;"
.Open
End With
Dim rsCustomers As New ADODB.Recordset
Dim rsOrders As ADODB.Recordset
Dim rsOrderDetails As ADODB.Recordset
rsCustomers.Source = "SHAPE {SELECT * FROM Customers} " & _
"APPEND ((SHAPE {SELECT * FROM Orders} " & _
"AS Orders " & _
"APPEND ({SELECT * FROM [Order Details]} " & _
"AS OrderDetails " & _
"RELATE OrderID TO OrderID)) " & _
"AS Orders RELATE CustomerID TO CustomerID)"
rsCustomers.Open , cn, adOpenStatic, adLockOptimistic
Set rsOrders = rsCustomers.Fields("Orders").Value
Set rsOrderDetails = rsOrders.Fields("OrderDetails").Value
Set DataGrid1.DataSource = Nothing
DataGrid1.DataMember = ""
Set DataGrid2.DataSource = Nothing
DataGrid2.DataMember = ""
Set DataGrid3.DataSource = Nothing
DataGrid3.DataMember = ""
Set DataGrid1.DataSource = rsCustomers
Set DataGrid2.DataSource = rsOrders
Set DataGrid3.DataSource = rsOrderDetails
End Sub
NOTE: Without the workaround, when you move a record from parent table in DataGrid1, the child recordset in DataGrid2 is updated accordingly. However, the grandchild recordset in DataGrid3 disappears.189657 HOWTO: Use the ADO SHAPE Command
185425 ADO Hierarchical Recordsets via SHAPE APPEND via C++/VBA/Java
Keywords: kbbug kbdatabinding kbdatabase kbprb KB190605