我有一个MSAccess数据库,我正尝试从位于只读文件夹中的其他MSAccess数据库中提取存档数据。 所以...
Dim aidbx As DAO.Database
Dim stDB as STring
stDB = 'path to read-only database
...
Set aidbx = OpenDatabase(stDB, False, True)
所以即使'True'告诉它以只读方式打开数据库,它也会在此处弯曲。我收到“运行时错误3050-无法锁定文件”错误消息。
我在做什么错了?
答案 0 :(得分:3)
您已经知道如何设置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和SQL的最后一种方法的测试:
Set rs = CurrentDb.OpenRecordset("SELECT Submit.*, [103].*
FROM Submit INNER JOIN [103] ON Submit.LabNum=[103].LabNum
IN 'C:\Users\June\Sample.accdb'", dbOpenSnapshot)
这些方法中的任何一种都可以引用查询而不是表作为源。