我有一个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-无法锁定文件"错误消息。
我在做什么错?
您已经知道如何设置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:UsersJuneSample.accdb'"
rs.Open "SELECT * FROM Table1", cn, adOpenStatic, adLockReadOnly
以下是在DAO工作区中打开DAO数据库和RecordSet对象的示例,显然是在访问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:UsersJuneSample.accdb")
Set DAOrs = DAOdb.OpenRecordset("SELECT * FROM Table1", dbOpenSnapshot)
使用DAO数据库和RecordSet对象的示例,而不是工作区:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = OpenDatabase("C:UsersJuneSample.accdb")
Set rs = db.OpenRecordset("Table1")
访问vba可以打开一个记录集对象,该对象通过使用CurrentDB对象和操作符在没有连接的其他数据库和其他数据库对象变量的情况下从另一个数据库中提取数据。示例:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Table1 IN 'C:UsersJuneSample.accdb'")
这是对使用SQL的最后一种方法的测试:
Set rs = CurrentDb.OpenRecordset("SELECT Submit.*, [103].*
FROM Submit INNER JOIN [103] ON Submit.LabNum=[103].LabNum
IN 'C:UsersJuneSample.accdb'", dbOpenSnapshot)
这些方法中的任何一种都可以引用查询而不是表作为源。