我有一台 Windows 7 64 位系统,必须运行一个 32 位应用程序,该应用程序通过 ODBC 连接访问 MSSQL Server 2005 Express。安装后一切正常。现在安装几周后,我收到报告说该应用程序不再连接到数据库。我检查了C:\Windows\SysWow64\odbcad32.exe
ODBC 设置是否有问题,发现 ODBC 连接不再可见。所以我检查了注册表以查看它是否已被完全删除。注册表项是HKEY_LOCAL_MACHINE\Software\Wow6432Node\ODBC
当我打开它时,值就在那里,只是 odbcad32 或我自己的应用程序无法访问它们。
我试图以计算机管理员身份运行它,因此权限不应该成为问题,此外,我还检查了权限是否没有更改,但我仍然无法让它工作。有人知道如何将值恢复到 odbcad32 小程序中吗?这很可能也会解决软件问题。
答案1
我认为本文在我的雇主的网站,关于在 64 位 Windows 上使用 32 位 ODBC,可能会对您有所帮助...
您在下面的评论中以及您最初的问题陈述中所说的内容都没有明确表明您正在使用 32 位 ODBC 管理器。请注意,32 位和 64 位程序的名称相同,odbcad32 工具。区别在于它们违反直觉的目录位置—— System32
(对于 64 位组件)和SysWow64
(对于 32 位组件)。
你可能遇到一个老问题,但反复出现,Windows 注册表中存在轻微损坏。损坏的形式是包含以下 4 个字符的字符串的条目——
@=""
除了注册表导出文件之外,这些条目在任何地方都不可见 - 但它们可能会导致许多不良行为。
笔记:在 64 位 Windows 机器上,自然会出现一些与 32 位注册表相关的复杂问题。 此 Microsoft 知识库文章可能足以帮助你度过这些难关。
我建议您使用 64 位注册表编辑器导出以下分支(这些条目通常位于其中)--
HKEY_LOCAL_MACHINE\Software\ODBC
HKEY_LOCAL_MACHINE\Software\WOW6432Node\ODBC
HKEY_CURRENT_USER\Software\ODBC
HKEY_CURRENT_USER\Software\WOW6432Node\ODBC
在任何文本编辑器中编辑这些文件(Notepad.exe
通常Wordpad.exe
都可以),并删除所有包含上述 4 个字符的字符串的行。然后,删除您导出的注册表树段,并从编辑的文件导入 - 从而恢复树段,减去损坏部分。
答案2
我遇到了同样的问题,下面是我针对系统 DSN 修复该问题的方法。
作为参考,这里是注册表中的两个路径,用于指示 Windows 操作系统上的 ODBC 是 64 位还是 32 位。
64 位:
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
32 位:
\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI
该文件夹中ODBC.INI
有一个子文件夹,其名称为 DSN 及其所有相关键,另一个子文件夹ODBC Data Sources
仅包含键(Default): (value not set)
。
文件夹中ODBC Data Sources
还应该有一个键,其中包含Name
DSN 条目的 ,Type
以及名称的值REG_SZ
(在我的情况下是)。我对 MS SQL 服务器进行了另一个测试,其值为。Data
ODBC Provider/Driver
iSeries Access ODBC Driver
Data
SQL Server
我发现这个问题的原因是,我彻底删除了所有 DSN 文件夹和ODBC Data Sources
文件夹,然后从头开始重新创建了我的 DSN。它创建了两个文件夹和相关键,现在我的 DSN 可以显示了,而且可以使用。
如果 中没有包含提供商名称的密钥ODBC Data Sources
,则 DSN 将不会显示在 中odbcad32.exe
。我还可以通过删除该ODBC Data Sources
条目来重现该问题。
如果其他解决方案无法解决问题,希望这能对某些人有所帮助。我尝试导出我的注册表项,但没有看到@=""
其他解决方案中描述的内容。如果这些说明不够清楚,请告诉我,我会尝试发布屏幕截图。谢谢!
答案3
正如@TallTed所说,这个问题与双重版本有关ODBC 管理员在 x64/IA64 Windows 7 Windows XP(及更高版本)中发布。
我个人觉得这很棒官方知识库文章这确实帮助我克服了这个问题;你的具体问题也得到了解决在另一篇知识库文章中。我也试图总结一下这个特定的场景这里。
顺便说一句,这个问题在 Windows 8 及更高版本中已经得到(相当)修复,因为控制面板的管理工具文件夹现在包含两个不同的 ODBC 管理员图标:一个用于 32 位,一个用于 64 位。这不是解决方案,但至少普通用户能够解决问题。
我不知道为什么同样的解决方法没有应用于 Win7。(微软在年底前表示了一些与复古兼容性问题有关的事情我提到的第二个 KB 条目,但我只是不明白添加图标怎么会破坏任何东西。)
答案4
最终在 4-5 年前找到了解决 32 位 ODBC 驱动程序安装失败的问题。上面的第 7 个答案指出了这个问题“区别在于它们的反直觉目录位置——System32(用于 64 位组件)和 SysWow64(用于 32 位组件)。”在运行 odbcad32.exe 以显示 ODBC 数据源窗口时,很明显控制面板命令在 System32\ 中运行 64 位版本,尽管标签为“ODBC 数据源(32 位)”。我还检查了注册表,发现相关关键数据已正确安装在 HKLM_Software_Wow6432Node 中。
我的解决方案是在我的桌面上创建 C:\Windows\SysWOW64\Odbcad32.exe 的快捷方式。然后会显示 32 位驱动程序的 ODBC 数据源窗口。在我的 Win7 Professional OS 安装中,驱动程序选项卡列出了 25+ 个 32 位驱动程序。
结论 - 微软给了我们一个指向错误文件夹的命令,大概是他们违反直觉的文件夹命名让我们感到困惑。