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

时间:2015-02-26 14:40:21

标签: ms-access odbc mysql-connector

我正在尝试将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 个答案:

答案 0 :(得分:0)

只需像在第一步中那样从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应该分发给需要此应用程序的每台计算机。如果它们在同一网络等上,则不需要代码或重新链接表。另一方面,如果您正在开发场外,或者应用程序必须分发给几个不同的公司,那么很可能EACH公司将拥有一个不同的服务器位置,以确定MySQL的运行位置,因此您需要重新链接每个那些案件。

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

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

相关问题