A quite frequent questions on several forums is how to connect to a so called Access-database (per se MS Jet Database) and retrieve data to Excel.
The tips also shows how we can use several Recordset with one connection.
One of the critical process when working with database is to reduce the time we are connected to the database, i e working with the Recordset. If we experience a slow datatransfer we then may consider to disconnect the Recordset(s).
In the tip You will see how easy it is to create a disconnected Recordset.
What we need:
* Microsoft Windows 2000 or above
* Microsoft Excel 2000 or above
* MDAC 2.5 or above
* A Jet database (mdb)
Add a reference to the Microsoft ActiveX Data Object x.x library.
Insert following procedure in a standardmodule:
For those of You who prefer to use a tool instead You may check out:VB:Option Explicit Sub Import_AccessData() Dim cnt As ADODB.Connection Dim rst1 As ADODB.Recordset, rst2 As ADODB.Recordset Dim stDB As String, stSQL1 As String, stSQL2 As String Dim stConn As String Dim wbBook As Workbook Dim wsSheet1 As Worksheet Dim lnField As Long, lnCount As Long 'Instantiate the ADO-objects. Set cnt = New ADODB.Connection Set rst1 = New ADODB.Recordset Set rst2 = New ADODB.Recordset Set wbBook = ThisWorkbook Set wsSheet1 = wbBook.Worksheets(1) 'Path to the database. stDB = "c:\db1.mdb" 'Create the connectionstring. stConn = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & stDB & ";" 'The 1st raw SQL-statement to be executed. stSQL1 = "SELECT * FROM Production_E1" 'The 2nd raw SQL-statement to be executed. stSQL2 = "SELECT * FROM Production_E2" 'Clear the worksheet. wsSheet1.Range("A1").CurrentRegion.Clear With cnt .Open (stConn) 'Open the connection. .CursorLocation = adUseClient 'Necessary to disconnect the recordset. End With With rst1 .Open stSQL1, cnt 'Create the recordset. Set .ActiveConnection = Nothing 'Disconnect the recordset. End With With rst2 .Open stSQL2, cnt 'Create the recordset. Set .ActiveConnection = Nothing 'Disconnect the recordset. End With With wsSheet1 .Cells(2, 1).CopyFromRecordset rst1 'Copy the 1st recordset. .Cells(2, 2).CopyFromRecordset rst2 'Copy the 2nd recordset. End With 'Release objects from the memory. rst1.Close Set rst1 = Nothing rst2.Close Set rst2 = Nothing cnt.Close Set cnt = Nothing End Sub
Last edited by XL-Dennis; May 27th, 2004 at 07:18.
There are currently 7 users browsing this thread. (0 members and 7 guests)