ODBC 机器 DSN 设置存储在 Windows 中的啥位置?

Posted

技术标签:

【中文标题】ODBC 机器 DSN 设置存储在 Windows 中的啥位置?【英文标题】:Where are ODBC Machine DSN settings stored in Windows?ODBC 机器 DSN 设置存储在 Windows 中的什么位置? 【发布时间】:2019-09-12 16:20:05 【问题描述】:

在我的 Access 数据库中,我引用 DSN“mydatasourcename”来连接到在线 mysql 数据库。它是一个机器 DSN。不知何故,在编辑我的配置文件的过程中,创建了一个幻像 DSN。这个 DSN 现在已经过时了,我需要用新的主机名更新它(在迁移 MySQL 服务器之后)。但是找不到配置文件。它不会以 32 位或 64 位“ODBC 数据源”形式显示。我在注册表编辑器中搜索了“mydatasourcename”,但它也不存在。奇怪的是,当我打开一个引用“mydatasourcename”的 Access 链接表时,它会打开一个 MySQL ODBC 连接器对话框,其中包含旧的连接信息。它是如何做到的?它从哪里获取连接字符串信息?为了回答这个问题,我要求列出 ODBC 驱动程序查找配置文件的位置以及如何访问它们,以便我可以删除旧的配置文件。我正在使用 MySQL ODBC 连接器 8.0.16。谢谢。

编辑:根据引用 DSN 的事实,在我的链接表中找到的连接字符串肯定是在 Access 之外查找连接信息。我的一个链接表中的连接字符串如下:“ODBC;DSN=mydatasourcename;;TABLE=qrychemigationapplications_materialsrequired1”

【问题讨论】:

机器数据源保存在注册表中 我使用注册表编辑器广泛搜索了注册表,但找不到数据源配置文件。这就是问题所在。 在这种情况下,在Ms访问中检查它,查看重复问题。 Linked table ms access 2010 change connection string的可能重复 PK 是 int autoincrement 并命名为自动识别的 PK 字段(例如 ID),时间戳具有默认值和 onupdate 值?但是您可以通过切换到 ODBC/Connector 5.3.10 来进行测试。如果问题持续显示受影响的表创建语句。 【参考方案1】:

在 Windows 上,ODBC DSN 信息存储在 Windows 注册表中。系统 DSN 可以在注册表项中找到

64 位驱动程序的 DSN:HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI 32 位驱动程序的 DSN:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI

用户 DSN 可以在

中找到

HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI

如果 DSN 未出现在 ODBC 管理器 (odbcad32.exe) 中,可能是因为 DSN 名称未包含在相应子项的 DSN 列表中

...\ODBC.INI\ODBC Data Sources

odbcad32.exe 的路径:

x86:

%windir%\syswow64\odbcad32.exe

x64:

%windir%\system32\odbcad32.exe

【讨论】:

我来得太晚了;(但你应该添加 odbcad32.exe 路径,因为它们很混乱(system32 for x64 / syswow64 for x86) 所以我的 ODBC 软件是 32 位的,但我没有在以下位置看到 ODBC.INI:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC。只有文件夹 ODBCINST.INI 在那里。由于缺乏权限,我是否可能在此位置看不到密钥? 您在启动 regedit.exe 时没有收到 UAC 提示吗? 我确实收到了 UAC 提示。实际上,没有任何东西是有道理的,因为它旨在成为用户 DSN。因此,当我转到 HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI\ 时,我找到了我的数据源……但它显示了更新的连接信息。当我进入 Access 并尝试单击引用此 DSN 的链接表时,它会显示旧的(不正确的)连接信息...因此数据源位于正确的位置,但 Access 或 ODBC 驱动程序仍在查看幻像数据源,而不是这个。 我解决了这个问题,但我仍然不知道问题是什么,也不知道 Access 将什么引用为 DSN。我重新创建了机器数据源在 Access 中,而不是在 ODBC 管理器中。这似乎覆盖了幻像数据源。但我仍然不知道它之前引用的到底是什么,并且可能还在引用......太奇怪了【参考方案2】:

我能够在此处找到 Microsoft Access 在 Windows 注册表中创建的“机器数据源”:

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\ODBC\ODBC.INI\ODBC 数据源

注册表这一部分中的“机器数据源”似乎只能通过 MS Access 访问。如果您使用标准的 Windows ODBC 数据源管理器“小部件”(32 位或 64 位)来查找它们,则由于某种原因您看不到“已创建访问”机器数据源。如果有人能告诉我们原因,那就太好了!

更令人沮丧的是,至少使用最新的 Microsoft Access Office 365 版本,您只能创建新的机器数据源。您不能删除或编辑现有的“机器数据源”。

话虽如此,如果您避免使用 Microsoft Access 本身创建“机器数据源”,而是使用标准的 64 位 Windows ODBC 数据源管理器“小部件”,那么无论出于何种原因,Access 都会看到您在其中创建的那些这边。

因此,您所描述的问题似乎是 Microsoft 针对 Microsoft Access ODBC 连接专门实施的一些奇怪设计的结果,原因让我无法理解。

希望这会有所帮助!

【讨论】:

我的注册表停在“Office”。我没有“ClickToRun”文件夹。知道那里发生了什么吗? 没有真正的线索......但你不只是喜欢微软吗?我想我不应该抱怨,因为我也不喜欢 Google。可能是版本问题?我正在使用 Microsoft Office Access Office 365 版。我是如何在注册表中找到这个位置的?我刚刚在我的注册表中搜索了我知道我使用 Microsoft Access 明确建立的 ODBC 连接的名称。因此,也许您可​​以通过使用 Access 创建一个明显唯一的 SQL ODBC 数据源来找到您的(如果它们存在于注册表中),然后在注册表中搜索它。如果微软能更好地记录事情会更有趣。 是的,仍然找不到它...我正在使用 Microsoft Access for Office 365 MSO。我想知道这是否与您的版本不同。谢谢。

以上是关于ODBC 机器 DSN 设置存储在 Windows 中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

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

访问 64 位 ODBC

无法通过 Windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008

[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

连接到服务器上安装的ODBC DSN

使用 VB.NET 创建 ODBC DSN