No announcement yet.

Retrieve data from Access-database to Excel with ADO

  • Filter
  • Time
  • Show
Clear All
new posts

  • Retrieve data from Access-database to Excel with ADO

    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)

    Step 1
    Add a reference to the Microsoft ActiveX Data Object x.x library.

    Step 2
    Insert following procedure in a standardmodule:

    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.
    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.
    Set rst1 = Nothing
    Set rst2 = Nothing
    Set cnt = Nothing
    End Sub
    For those of You who prefer to use a tool instead You may check out:
    SQL Tester

    Kind regards,
    Last edited by XL-Dennis; May 27th, 2004, 07:18.
    Kind regards,

    .NET & Excel | 2nd edition PED | MVP