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
无法通过 Windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008