我目前正在尝试连接到两个单独的.mdb
文件并执行一个INNER JOIN
。
所以,我有2 .mdb (Sample1.mdb
& Sample2.mdb
)。两者都有密码保护。
当我试图连接时,它显示了一个错误,说明了"it's already opened exclusively by another user, or you need permission..."
。
是否发生错误是因为我没有在此语句中插入password
属性?如果是,如何在此语句中插入password
属性?
[Excel 8.0;HDR=YES;IMEX=2;DATABASE=" & Application.ActiveWorkbook.Path & "\Sample1.mdb]
下面是我的全部示例代码:
Dim Conn As ADODB.Connection
Dim resultSet As ADODB.Recordset
Set Conn = New ADODB.Connection
sqlStatement = "SELECT * FROM [Excel 8.0;HDR=YES;IMEX=2;DATABASE=" &
Application.ActiveWorkbook.Path & "\Sample1.mdb].[SampleData$] a INNER JOIN
[Excel 8.0;HDR=YES;IMEX=2;DATABASE=" & Application.ActiveWorkbook.Path &
"\Sample2.mdb].[SampleInfo$] b ON a.Index = b.Index WHERE a.idCode = 2"
With Conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = Application.ActiveWorkbook.Path + "\Sample2.mdb"
.Properties("Jet OLEDB:Database Password") = "password"
.Open
Set resultSet = .Execute(sqlStatement)
End With
发布于 2018-09-30 05:52:21
这件事有些奇怪的地方。
[Excel 8.0;HDR=YES;IMEX=2;
是连接到Excel文件的连接字符串,而不是MDB数据库。由于要将MDB数据库作为参数传递给它,因此必然会出现奇怪的错误。因为连接到Access是本机访问,所以只需要指定路径。Dim Conn As ADODB.Connection
Dim resultSet As ADODB.Recordset
Set Conn = New ADODB.Connection
sqlStatement = "SELECT * FROM [" &
Application.ActiveWorkbook.Path & "\Sample1.mdb].[SampleData$] a INNER JOIN [SampleInfo$] b ON a.Index = b.Index WHERE a.idCode = 2"
With Conn
.Provider = ""
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source="Application.ActiveWorkbook.Path + "\Sample2.mdb;Jet OLEDB:Database Password=""password"""
.Open
Set resultSet = .Execute(sqlStatement)
End With
若要使用密码查询Access数据库,请在ISAM连接字符串中指定密码:
"SELECT * FROM [MS Access;PWD=password;DATABASE=" &
Application.ActiveWorkbook.Path & "\Sample1.mdb].[SampleData$] a INNER JOIN
[MS Access;PWD=password;DATABASE=" & Application.ActiveWorkbook.Path &
"\Sample2.mdb].[SampleInfo$] b ON a.Index = b.Index WHERE a.idCode = 2"
当然,您需要确保对两个MDB数据库使用正确的连接字符串:对于当前代码,Sample2是受保护的,但Sample1不是,Sample2是由加密(仅提示密码)保护的,而不是用户级别的安全性(提示密码和用户名)。
https://stackoverflow.com/questions/52574716
复制相似问题