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

Posted

技术标签:

【中文标题】如何使用 MySQl 的 ODBC 连接器在 MS Access 中的 VBA 中执行和查询?【英文标题】:How to execute and query in VBA in MS Access using the ODBC Connector for MySQl? 【发布时间】:2020-06-23 16:11:03 【问题描述】:

以下 VBA 代码将允许您在当前访问数据库中运行 sql 查询

我在通过 ODBC 连接器连接到 mysql 数据库的 MS Access 文件中进行了尝试。但是这段代码不起作用,大概是因为它不是正常的访问数据库。

如何使用现有的 ODBC 连接查询数据库?

编辑:我总是收到“运行时错误 3024 找不到文件”

试试 1

Dim mydb As Database
Dim myrs As DAO.Recordset


Set mydb = CurrentDb

Set myrs = mydb.OpenRecordset("select from blah blah...")

试试 2

Dim dbMine As DAO.Database
Set dbMine = CurrentDb

Dim qr As String
qr = "select count(*) as `result` from floatinp_appdb2.clientes where cliente_email = 'tiagovalente@float-in.pt';"
'debug.print qr
dbMine.Execute qr, dbFailOnError

【问题讨论】:

“但是,此代码不起作用.....”是什么意思?你有错误吗?如果是这样,它说明了什么?什么都没有发生吗?它会做一些事情,但不是您期望它做的事情吗?请提供尽可能多的关于正在发生的事情的信息。 错误 3024 找不到文件! 什么文件说不能正常?你可能想看看这个:errorvault.com/en/troubleshooting/runtime-errors/microsoft/…. 找不到自己 我刚刚在之前的评论中链接了来自 ErrorVault.com 的一篇文章,该文章讨论了您的错误以及可能的修复方法。看看是否有任何解决方案可以帮助您,如果有,请在此处发布答案,以帮助其他有相同错误的人。 【参考方案1】:

要求是: 链接表定义了一个 PK。

所以,这应该可行:

Set myrs = mydb.OpenRecordset("select from blah blah...",dbOpenDynaset, dbSeeChanges)

还有: 任何真/假列(位字段)都应设置默认值 0。 (不允许 true/false 列使用空值)。

您可以也应该考虑添加 rowversion 列,但以上就足够了。

【讨论】:

非常感谢,但我仍然收到“运行时错误 3024 找不到文件” 能否从 Access UI 打开链接表?您可以通过打开链接表来编辑记录吗?将链接表翻转到设计视图(是只读提示)。现在,表设计器是否展示了一个PK集?另外,尝试将您的查询粘贴到查询生成器中?您的 as 子句不需要在别名列名周围加上引号。所以让查询首先在访问查询构建器中工作(翻转到 sql 视图 - 粘贴到你的 sql 查询中 - 它工作吗? 我确实设置了 PK,但是我的查询是用 MySQL 编写的,并且在表之前包含了数据库的名称,例如db2.table1 感谢您的帮助 嗯,您必须使用与链接表相同的名称,或者您可以重命名链接表以与 MySQL 表具有相同的名称。当然,如果您基于现有名称构建代码、表单和报告,那么重新命名表格将是一个坏主意。您可以采用传递查询,这将允许您将原始 100% MySQL 格式粘贴到访问查询中。这包括 db 前缀,链接表的名称无关紧要。因此,如果您想使用传递查询,那么您可以使用 100% MySQL 语法。您甚至不需要将表格链接到本地​​。【参考方案2】:

虽然错误是“运行时错误 3024 找不到文件”,但我的错误是在表前包含数据库名称

例如从 DB2.Table1 中选择 *

【讨论】:

以上是关于如何使用 MySQl 的 ODBC 连接器在 MS Access 中的 VBA 中执行和查询?的主要内容,如果未能解决你的问题,请参考以下文章

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

删除/编辑 MySQL ODBC 链接表中的行导致 MS Access 出错

ODBC 连接凭据如何存储在 MS Access 中? [关闭]

使用 ODBC 连接时如何在 MS Access 或 SQL Server 中使用日期数据类型

MS Access + ODBC 8.0 + MySQL 某些字段显示前 10 行 =0,尽管 MySQL 显示其他值

如何使用 ODBC 驱动程序仅从 MS Access 向 MySql 自动插入新记录?