Option Explicit
Private Sub Command1_Click() Dim cn As ADODB.Connection, rsSource As ADODB.Recordset, rsDest As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=nwind.mdb" Set rsSource = cn.Execute("SELECT * FROM Customers") Set rsDest = MakeRS(rsSource) OpenAndFillRS rsSource, rsDest rsSource.Close cn.Close Set DataGrid1.DataSource = rsDest End Sub '________________________________________________________ Function MakeRS(ByVal rsSource As ADODB.Recordset) As ADODB.Recordset Dim rsTemp As ADODB.Recordset, F As ADODB.Field Set rsTemp = New ADODB.Recordset For Each F In rsSource.Fields If F.Type <> adChapter Then rsTemp.Fields.Append F.Name, F.Type, _ F.DefinedSize, F.Attributes And adFldIsNullable With rsTemp(F.Name) .Precision = F.Precision .NumericScale = F.NumericScale End With End If Next F Set MakeRS = rsTemp End Function '________________________________________________________ Sub OpenAndFillRS(ByVal rsSource As ADODB.Recordset, ByVal rsDest As ADODB.Recordset) Dim F As ADODB.Field If rsSource.State = adStateClosed Then Exit Sub<BR/> If rsSource.EOF And rsSource.BOF Then Exit Sub If rsSource.CursorType <> adOpenForwardOnly Then If Not rsSource.EOF And Not rsSource.BOF Then rsSource.MoveFirst End If End If rsDest.CursorLocation = adUseClient rsDest.Open Do While Not rsSource.EOF rsDest.AddNew For Each F In rsSource.Fields If F.Type <> adChapter Then rsDest(F.Name).Value = F.Value Next F rsDest.Update rsSource.MoveNext Loop End Sub Open a new project in Microsoft Visual Basic 6.0. Form1 is created by default. From the Projects menu, choose Components, select the "Microsoft DataGrid Control 6.0 (OLEDB)" control, and place it on the form. Make it fairly large. From the Projects menu, choose References, select "Microsoft ActiveX Data Objects 2.1 Library." Add the following code to the form module: |