Skip to Content
Course content

4.3.1 Working with Recordsets: Opening Recordsets

In Microsoft Access, a Recordset is an object used to interact with the data returned from a query. A Recordset represents a set of records (rows) from a table or the result of a query. You can use Recordsets to retrieve, manipulate, and update data in your Access database programmatically. The ability to open and work with Recordsets is essential for managing data dynamically in VBA.

This section explains how to open Recordsets in Access using VBA, covering the following topics:

  1. DAO Recordsets vs. ADO Recordsets
  2. Opening a Recordset with DAO
  3. Opening a Recordset with ADO
  4. Types of Recordsets
  5. Example: Opening and Navigating through Recordsets

1. DAO Recordsets vs. ADO Recordsets

In Access VBA, you can work with two types of Recordsets: DAO (Data Access Objects) and ADO (ActiveX Data Objects). While both allow you to interact with databases, DAO is more closely integrated with Access, and it's generally recommended for use when working with Access databases.

  • DAO: Ideal for interacting with Access databases and objects such as tables, queries, and forms.
  • ADO: Primarily used for accessing external data sources, such as SQL Server or other databases.

2. Opening a Recordset with DAO

DAO is the default object library used in Access. To open a Recordset using DAO, you need to use the OpenRecordset method of the Database object. DAO Recordsets are efficient and support a wide range of database operations, making them ideal for working with Access-specific data.

Syntax:

Set rs = db.OpenRecordset("SQL_QUERY_OR_TABLE", [Type], [Options], [LockType])
  • db: The Database object that represents the current database.
  • SQL_QUERY_OR_TABLE: The SQL query or the table name from which you want to retrieve data.
  • Type (optional): The type of Recordset (e.g., dbOpenDynaset, dbOpenSnapshot).
  • Options (optional): Specifies how the Recordset is opened.
  • LockType (optional): Determines the locking behavior for records.

Example: Opening a Recordset with DAO

Dim db As Database
Dim rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT EmployeeName, Salary FROM Employees WHERE Department = 'Sales'")

' Loop through the records and print employee details
Do While Not rs.EOF
    Debug.Print rs!EmployeeName & " - " & rs!Salary
    rs.MoveNext
Loop

rs.Close
Set rs = Nothing
Set db = Nothing

In this example:

  • The OpenRecordset method is used to open a Recordset based on the SQL query.
  • A Do While Not rs.EOF loop iterates through the records, printing the employee names and salaries.
  • Finally, the Recordset and Database objects are closed and set to Nothing to free up memory.

3. Opening a Recordset with ADO

ADO is used to access external data sources such as SQL Server, Oracle, and other OLE DB or ODBC-compatible databases. To open an ADO Recordset in Access VBA, you need to use the Open method of the Recordset object, which requires an active connection to the data source.

Syntax:

Set rs = New ADODB.Recordset
rs.Open "SQL_QUERY", conn, [CursorType], [LockType]
  • conn: The ADO connection object to the data source.
  • SQL_QUERY: The SQL query or table from which you want to retrieve data.
  • CursorType (optional): Specifies the type of cursor (e.g., adOpenStatic, adOpenDynamic).
  • LockType (optional): Specifies the locking behavior for records.

Example: Opening a Recordset with ADO

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String

Set conn = New ADODB.Connection
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path_to_database.accdb;" ' Connection string

sql = "SELECT EmployeeName, Salary FROM Employees WHERE Department = 'Sales'"

Set rs = New ADODB.Recordset
rs.Open sql, conn, adOpenStatic, adLockReadOnly

' Loop through the records and print employee details
Do While Not rs.EOF
    Debug.Print rs!EmployeeName & " - " & rs!Salary
    rs.MoveNext
Loop

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

In this example:

  • A connection to an Access database is established using ADO.
  • A SQL query is executed to open a Recordset.
  • The Do While Not rs.EOF loop iterates through the records, printing employee names and salaries.
  • Finally, the Recordset and Connection objects are closed and set to Nothing to free up resources.

4. Types of Recordsets

When opening a Recordset, you can specify the type of Recordset you want to create. The type determines how the Recordset behaves, such as whether it is read-only or editable.

Common Recordset Types:

  • dbOpenSnapshot (DAO): A read-only Recordset that cannot be modified. Used for quickly retrieving data without making changes.
  • dbOpenDynaset (DAO): A read-write Recordset that can be modified. Used when you need to update or delete records.
  • adOpenStatic (ADO): A read-only Recordset that allows you to move forward and backward through the data.
  • adOpenDynamic (ADO): A dynamic, read-write Recordset that reflects changes made by other users or processes.
  • adOpenKeyset (ADO): A read-write Recordset that shows changes made by the current user but not changes from other users.

5. Example: Opening and Navigating through Recordsets

Dim db As Database
Dim rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT EmployeeName, Salary FROM Employees")

' Navigate through the Recordset and print employee details
If Not rs.EOF Then
    rs.MoveFirst
    Do While Not rs.EOF
        Debug.Print rs!EmployeeName & " - " & rs!Salary
        rs.MoveNext
    Loop
End If

rs.Close
Set rs = Nothing
Set db = Nothing

In this example:

  • The OpenRecordset method opens a Recordset from the "Employees" table.
  • The MoveFirst method moves to the first record.
  • The Do While Not rs.EOF loop iterates through the records until the end of the Recordset.
  • Finally, the Recordset object is closed and cleaned up.

Conclusion

Opening Recordsets in Access VBA is an essential skill for interacting with database data programmatically. By understanding how to use DAO or ADO Recordsets, you can retrieve, modify, and navigate through records efficiently. Whether you're working with local Access data or external data sources, mastering Recordsets allows you to automate complex data management tasks and build more dynamic applications in Access.

Commenting is not enabled on this course.