您已经知道如何设置 ADODB 连接,因为您已经在 Excel 代码中进行了设置。应该能够在 Access VBA 中使用相同的。使用早期绑定的示例,因此需要设置对Microsoft ActiveX Data Objects x.x Library 的引用:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='C:\Users\June\Sample.accdb'"
rs.Open "SELECT * FROM Table1", cn, adOpenStatic, adLockReadOnly
以下是在 DAO 工作区中打开 DAO 数据库和记录集对象的示例,从 Access 2013 开始显然不支持:
Dim DAOws As DAO.Workspace
Dim DAOdb As DAO.Database
Dim DAOrs As DAO.Recordset
Set DAOws = DBEngine.Workspaces(0)
Set DAOdb = DAOws.OpenDatabase("C:\Users\June\Sample.accdb")
Set DAOrs = DAOdb.OpenRecordset("SELECT * FROM Table1", dbOpenSnapshot)
使用 DAO 数据库和记录集对象但不使用工作区的示例:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = OpenDatabase("C:\Users\June\Sample.accdb")
Set rs = db.OpenRecordset("Table1")
Access VBA 可以打开一个记录集对象,该对象通过使用 CurrentDb 对象和 IN 运算符从另一个数据库中提取数据而无需连接和其他数据库对象变量。示例:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Table1 IN 'C:\Users\June\Sample.accdb'")
这是对使用 SQL 和 JOIN 的最后一种方法的测试:
Set rs = CurrentDb.OpenRecordset("SELECT Submit.*, [103].*
FROM Submit INNER JOIN [103] ON Submit.LabNum=[103].LabNum
IN 'C:\Users\June\Sample.accdb'", dbOpenSnapshot)
这些方法中的任何一个都可以引用查询而不是表作为源。