vba - Microsoft Excel VBA 连接到多个 Microsoft Access DB
问题描述
我目前正在尝试连接到 2 个单独.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
解决方案
这有一些奇怪的事情。
[Excel 8.0;HDR=YES;IMEX=2;
是连接到 Excel 文件而不是 MDB 数据库的连接字符串。由于您将 MDB 数据库作为参数传递给它,因此肯定会出现奇怪的错误。由于连接到 Access 是 Access 本机的,因此您只需要指定路径。- 我会在连接字符串中指定所有连接参数,包括 uid。
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 受加密保护(仅提示密码),而不是用户级安全性(提示密码和用户名)。
推荐阅读
- python - 获取当前用于存储文档的集合的名称
- image - 使用图像选择器 (Flutter) 创建 API 和 REST
- javascript - 在输入中使用符号来格式化文本
- java - JavaFX LoadException 解决事件
- javascript - 根据关系展开Json
- entity-framework-core - EF Core 完全忽略了我在选择中选择的属性
- excel - 以日期格式取月份的名称
- docker - docker-compose.yml - 在 Ubuntu 主机上具有退出状态的容器
- php - 通过 XAMPP 发送电子邮件不起作用
- android - com.example.`constructerName` Kotlin 中定义的公共构造函数`constructerName` 的参数太多