Skip to Content
Course content

9.4 Connecting to External Databases Using ADO.

Connecting to external databases is a powerful feature in VBA that allows you to retrieve, manipulate, and store data in databases such as SQL Server, MySQL, or Access. The ActiveX Data Objects (ADO) library is commonly used to establish connections, query databases, and retrieve or update data directly from VBA.

In this section, we’ll explore how to use ADO to connect to external databases, execute queries, and handle database records in VBA.

1. What is ADO?

ActiveX Data Objects (ADO) is a library used to connect to, query, and manipulate data from various databases. ADO provides an easy-to-use interface for working with different data sources, making it a popular choice for integrating Excel with external databases.

2. Setting Up ADO in VBA

Before you can use ADO in your VBA code, you need to enable the Microsoft ActiveX Data Objects Library.

Steps to Enable ADO:

  1. Open the VBA editor by pressing Alt + F11.
  2. Go to Tools > References.
  3. Scroll down and check Microsoft ActiveX Data Objects x.x Library (where "x.x" is the version, e.g., 6.1).
  4. Click OK.

Now, you are ready to use ADO in your VBA project.

3. Basic Structure of ADO

The basic components needed to use ADO in VBA are:

  • Connection: Represents the connection to the external database.
  • Recordset: Represents the data retrieved from the database.
  • Command: Represents an SQL query or stored procedure to be executed on the database.

The following is the general flow:

  1. Establish a connection to the database.
  2. Create a recordset to hold the returned data.
  3. Execute an SQL query on the database.
  4. Retrieve and manipulate the results in VBA.

4. Connecting to a Database Using ADO

4.1 Connection to an Access Database

To connect to an Access database using ADO, you need to use the OLE DB provider. Here’s an example of how to connect to an Access database and query data:

Sub ConnectToAccess()
    Dim conn As Object
    Dim rs As Object
    Dim sqlQuery As String
    Dim ws As Worksheet
    
    ' Set references to worksheet and database
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    ' Define connection string (Access Database)
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\yourdatabase.accdb;"
    conn.Open
    
    ' Define SQL query
    sqlQuery = "SELECT * FROM Customers"
    
    ' Execute the query and store the results in a recordset
    rs.Open sqlQuery, conn
    
    ' Transfer data to Excel (starting at A1)
    ws.Range("A1").CopyFromRecordset rs
    
    ' Close the recordset and connection
    rs.Close
    conn.Close
End Sub

In this example:

  • The conn.ConnectionString specifies the connection parameters for the Access database.
  • The rs.Open method is used to execute the SQL query and retrieve data into the recordset.
  • The CopyFromRecordset method transfers the data from the recordset to Excel.

4.2 Connection to a SQL Server Database

You can also connect to a SQL Server database using ADO. Here’s an example connection string for SQL Server:

Sub ConnectToSQLServer()
    Dim conn As Object
    Dim rs As Object
    Dim sqlQuery As String
    Dim ws As Worksheet
    
    ' Set references to worksheet and database
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    ' Define connection string (SQL Server)
    conn.ConnectionString = "Provider=SQLOLEDB;Data Source=your_server;Initial Catalog=your_database;User ID=your_user_id;Password=your_password;"
    conn.Open
    
    ' Define SQL query
    sqlQuery = "SELECT * FROM Employees"
    
    ' Execute the query and store the results in a recordset
    rs.Open sqlQuery, conn
    
    ' Transfer data to Excel (starting at A1)
    ws.Range("A1").CopyFromRecordset rs
    
    ' Close the recordset and connection
    rs.Close
    conn.Close
End Sub

In this example:

  • Provider=SQLOLEDB is used for SQL Server.
  • Data Source=your_server specifies the server hosting the SQL Server database.
  • The rest of the connection string provides the authentication credentials and database name.

5. Running SQL Queries Using ADO

5.1 Executing Select Queries

You can use ADO to run SELECT queries to retrieve data from the database. This data is typically stored in a Recordset object.

Sub ExecuteSelectQuery()
    Dim conn As Object
    Dim rs As Object
    Dim sqlQuery As String
    Dim ws As Worksheet
    
    ' Set references to worksheet and database
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    ' Open connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\yourdatabase.accdb;"
    
    ' Define SQL query
    sqlQuery = "SELECT ProductName, Price FROM Products WHERE Price > 100"
    
    ' Execute the query
    rs.Open sqlQuery, conn
    
    ' Transfer data to Excel
    ws.Range("A1").CopyFromRecordset rs
    
    ' Close the connection and recordset
    rs.Close
    conn.Close
End Sub

This script will retrieve product names and prices from the Products table where the price is greater than 100.

5.2 Executing Update or Insert Queries

You can also execute UPDATE or INSERT queries using ADO. For these queries, you don't need a recordset. Instead, you can use the Execute method of the connection object.

Sub ExecuteInsertQuery()
    Dim conn As Object
    Dim sqlQuery As String
    
    ' Set up connection
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\yourdatabase.accdb;"
    
    ' Define SQL insert query
    sqlQuery = "INSERT INTO Employees (FirstName, LastName) VALUES ('John', 'Doe')"
    
    ' Execute the query
    conn.Execute sqlQuery
    
    ' Close the connection
    conn.Close
End Sub

In this example:

  • The Execute method is used to run an INSERT INTO query that adds a new employee to the database.

6. Closing the Connection and Recordset

It is important to close the Recordset and Connection objects when you are done using them to free up resources.

rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing

This ensures that the objects are properly released from memory and that the connection to the database is terminated.

7. Error Handling in ADO

When working with external databases, errors such as connection failures or query issues may occur. You can use error handling to manage these situations.

Sub ConnectWithErrorHandling()
    On Error GoTo ErrorHandler
    
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\yourdatabase.accdb;"
    
    ' Your database operations here
    
    conn.Close
    Set conn = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "Error: " & Err.Description
    Set conn = Nothing
End Sub

In this example:

  • On Error GoTo ErrorHandler directs the program to handle any errors that occur.
  • Err.Description is used to display the error message.

8. Summary of Connecting to External Databases

  • ADO Setup: Enable the Microsoft ActiveX Data Objects Library in VBA references.
  • Connection: Use the ConnectionString to define how to connect to different databases (Access, SQL Server, etc.).
  • Queries: Use Recordset for SELECT queries and Execute for UPDATE, INSERT, or DELETE queries.
  • Error Handling: Implement error handling to manage connection issues or query failures.
  • Closing Connections: Always close the Connection and Recordset objects to free resources.

By learning how to connect and work with external databases using ADO, you can enhance your VBA projects by integrating Excel with other data sources, automating data retrieval, and updating records in external databases directly from VBA.

Commenting is not enabled on this course.