无法使用 MySQL 连接器/ODBC 将 Access DB 连接到 ODBC DSN

Posted

技术标签:

【中文标题】无法使用 MySQL 连接器/ODBC 将 Access DB 连接到 ODBC DSN【英文标题】:Cannot Connect Access DB to ODBC DSN Using MySQL Connector/ODBC 【发布时间】:2015-02-26 14:40:20 【问题描述】:

我正在尝试将 MS Access 连接到 mysql 数据库后端 - 使用 Windows 的“设置数据源 (ODBC)”命令可以很好地连接到我的数据库,但由于某种原因不会保存 DSN 文件。

我试图通过手动创建一个 DSN 文件来解决这个问题(使用实际数据而不是 ***):

[ODBC]
DRIVER=MySQL ODBC 5.1 Driver
USER=****
PASSWORD=****
SERVER=**.***.**.**
DATABASE=cl39-beech

但是 Access 抛出了消息

ODBC--call failed.
[microsoft][odbc driver manager] data source name not found and no default driver specified.

对如何解决问题有任何想法吗?如果我可以手动创建 DSN 文件,我不太担心第一个,但需要找出第二个出错的地方!

【问题讨论】:

【参考方案1】:

就像您在第一步中所做的那样,只需从 Access 创建工作链接。当 Access 的 ODBC 管理器启动时,只需创建一个文件数据源。

通过在 Access 中打开链接表来检查链接表是否正常工作,以确保连接正常并且您可以看到数据。

现在,只需在调试窗口中像这样抓取/拉出为该表保存的连接字符串(点击 ctrl+g 启动 VBA IDE 并跳转到命令行)。

? currentdb.TableDefs("dbo_customers2").Connect 

然后调试窗口会输出正确的连接字符串。 (所以在上面,将我所拥有的替换为 WORKING 链接表的名称)。

您可以使用上面的连接字符串结果来重新链接表。

可以在here找到上述字符串重新链接表的建议代码示例。

因此,不必费心尝试使用 DSN,因为通常存在无数问题,例如您必须将文件放在哪里才能工作等。上述方法意味着不需要 DSN。

编辑:

编辑:

在大多数情况下,您可能不需要任何代码。请记住,一旦您链接了 Access 表,则通常不需要 DSN。访问链接表“记住”它们的设置。

因此,如果您不打算“手动”使用来自访问权限的 ODBC 管理器来链接表,那么您真的只需要这样的代码。

因此,代码只需要“一次”运行。因此,您在开发机器上只需将代码放在标准代码模块中,然后在 VBA 编辑器中按 F5。如前所述,如果您已经链接了表,那么无论如何您都不再需要 DSN(它仅在重新链接过程“期间”使用,并且该 DSN 中的设置会传输到每个链接的表。

因此,您无需以某种形式运行代码——这是您做的“一次性”事情,就像设计表单一样。您无需在应用程序启动时重新设计表单,也无需在表已链接后运行一些重新链接代码。

在大多数情况下,仅当您要更改后端数据库(例如从开发人员后端更改为实际的生产后端数据库)时,才需要重新链接代码。因此,我想您可以制作一个带有按钮的表单以重新链接,但作为一般规则,您不需要在每次应用程序运行时都运行该代码。

一旦表被链接,那么您的表单和报告等应该像这些表是常规的“本地”访问表一样工作。因此,此重新链接代码实际上是您手动链接到 SQL 服务器表的“替代品”。但是,一旦您完成了“手动”链接,则不需要原始 DSN。因此,在“大多数”情况下,重新链接代码允许您将前端数据库重新链接到您选择的后端数据库,或者在您支持“遥远”客户端的情况下。

如果您正在“非现场”开发,那么您的链接表将指向您本地的 MySQL 副本。当您将应用程序的更新“下一个伟大”版本发送到客户站点时,您的表格链接是错误的,并且在启动时您需要运行重新链接代码以将表格正确链接到它们的后端。一个“好”的方法是始终在与应用程序相同的目录中有一个文本文件。您的应用程序在启动时可以读取该文本文件,如果连接字符串与现有连接不同,那么您调用 + 使用此新连接字符串运行重新链接代码。因此,您不必在客户的网站上推出更新的软件。下次应用程序运行时,连接字符串将匹配,因此启动时不需要重新链接。因此,重新链接在这里是一种“一次性”交易。

这里有十亿个不同的用例。对我有用的东西可能对你不起作用。不清楚您是在“现场”工作(因此可能不需要重新链接表),还是您在运行自己的 MySql 副本的情况下进行异地开发(因此您链接的表指向错误的服务器)。或者您正在现场开发,但在开发过程中,您的前端表链接到数据库的“测试”副本,以免意外地“弄乱”生产数据。

所以代码属于标准(非类)代码模块。至于你什么时候需要运行这样的代码将取决于十亿种不同的可能性(所以这有点像让我告诉你早上你的鞋子在哪里——我不知道也永远不会知道)。不过我可以告诉你,出门一定要穿鞋!

因此,如果您的链接表现在可以工作,那么您的应用程序应编译为 accDE,然后该 accDE 应分发到需要此应用程序的每台计算机。如果它们在同一个网络上等,则不需要代码或重新链接表。另一方面,如果您是在异地开发,或者应用程序必须分发给几个不同的公司,那么很可能每个公司都有不同的服务器位置来确定 MySQL 的运行位置,因此您需要重新链接每个公司那些案例。

因此,您很可能不需要任何重新链接代码。如果您在“现场”,那么一旦您链接了这些表,那么您的应用程序应该可以在任何计算机上运行,​​而无需任何重新链接代码或运行此重新链接代码。

因此,一旦表被“链接”,访问会记住该设置并且它是永久性的。

【讨论】:

我想我明白了,但我实际上将代码放在哪里?它是从表格中获取数据的任何形式/报告吗? 我在上面的答案中解释了代码的放置位置(阅读编辑后的部分:)。

以上是关于无法使用 MySQL 连接器/ODBC 将 Access DB 连接到 ODBC DSN的主要内容,如果未能解决你的问题,请参考以下文章

powerdesigner 连接mysql 后 出现 表重复 问题。 请问怎么解决?

无法通过 ODBC 从 Windows 10 连接到 Linux MySQL DB

将 MySQL 3.23 与 pyodbc 3.07 连接

mySQL 命令行有效,但 ODBC 和工作台无效

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

oracle已经配置好odbc数据源为啥打开access还是无法连接oracle