MSAccess 2010 VBA打开只读数据库

问题描述 投票:0回答:1

我有一个MS Access数据库,我试图从存在于只读文件夹中的另一个MS Access数据库中提取存档数据。所以......

Dim aidbx As DAO.Database
Dim stDB as STring
 stDB = 'path to read-only database
...
Set aidbx = OpenDatabase(stDB, False, True)

所以它就在那里陨石坑,即使'True'告诉它以只读方式打开数据库。我收到'运行时错误3050 - 无法锁定文件'错误消息。

我究竟做错了什么?

vba ms-access readonly
1个回答
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和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)

任何这些方法都可以引用查询而不是表作为源。

© www.soinside.com 2019 - 2024. All rights reserved.