从 MS Access VBA 通过 ODBC 进行 MySQL 查询:ADODB 异步执行不起作用

Posted

技术标签:

【中文标题】从 MS Access VBA 通过 ODBC 进行 MySQL 查询:ADODB 异步执行不起作用【英文标题】:MySQL-Queries via ODBC from MS Access VBA: ADODB asynchronous execution does not work 【发布时间】:2016-11-23 19:16:25 【问题描述】:

我使用 Access 数据库作为前端,mysql 作为后端。为了节省时间相当密集的查询,我希望 MySQL-Server 并行运行这些查询。

目前我无法告诉 VBA 异步发送它们。我的代码是这样的:

Do While ...
   Dim rs_newRecordSet As ADODB.Recordset
   Set rs_newRecordSet = New ADODB.Recordset
   rs_newRecordSet.Open Ext_TranslateQuery(str_query), Ext_Connection, , , adAsyncExecute
Loop

因此,在 Do while 循环期间,通过带有选项 adAsyncExecute 的记录集打开了几个查询。查询都是 INSERT INTO ... SELECT FROM-Queries,所以我不希望记录集返回任何内容。

现在的问题是,即使指定了 adAsyncExecute-Option,VBA 似乎也要等到 Recordset.Open-Command 完成。此外,如果我在 mysql 架构上运行 show processlist,我确实会看到一个带有 INSERT INTO ...-Query 的线程。

为什么 VBA 会等待查询的执行,我该如何更改?

非常感谢 巴斯蒂安

【问题讨论】:

您不应该将rs.Open 用于操作查询。请改用conn.Execute 或者更好的是,创建一个ADODB.Command.Execute 谢谢,切换到 ADODB.Command 【参考方案1】:

感谢您的帮助,我在这里找到了答案: VB6, ADO, Asynchronous command and closing the connection

您必须为要并行执行的每个记录集/命令创建一个新连接,否则查询将堆积在连接执行列表中。执行每个查询后不要忘记关闭连接。

【讨论】:

以上是关于从 MS Access VBA 通过 ODBC 进行 MySQL 查询:ADODB 异步执行不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MySQl 的 ODBC 连接器在 MS Access 中的 VBA 中执行和查询?

如何在 ms-access VBA 中检索表的 odbc 数据库名称

在 Access 中使用 ODBC 连接到 MS SQL Server 2012:手动调用查询和在 VBA 中调用查询之间的巨大时间差异

MS Access VBA 和 SQL Server - 记录集更新时 ODBC 调用失败

VBA代码在MS Access中不区分大小写的过滤器

使用 ODBC 链接到 MySql 时,MS Access 表单不刷新