4

У меня есть Windows 7 64-битная система, которая должна запускать 32-битное приложение, которое обращается к MSSQL Server 2005 Express через соединение ODBC. После установки все работало нормально. Теперь через несколько недель после установки я получаю отчет, что приложение больше не подключается к базе данных. Я проверил C:\Windows\SysWow64\odbcad32.exe чтобы увидеть, есть ли проблема с настройками ODBC, и соединение ODBC больше не было видно. Поэтому я проверил реестр, чтобы увидеть, был ли он полностью удален. Раздел реестра:HKEY_LOCAL_MACHINE\Software\Wow6432Node\ODBC Когда я открыл, что значения были, они просто не были доступны для odbcad32 или моего собственного приложения.

Я пытался запустить это как администратор компьютера, чтобы разрешения не были проблемой, и, кроме того, я проверил, чтобы убедиться, что они не были изменены, но я все еще не могу заставить его работать. У кого-нибудь есть идеи, как вернуть значения в апплет odbcad32? Это, скорее всего, решит проблему с программным обеспечением.

4 ответа4

7

Я думаю, что эта статья на сайте моего работодателя об использовании 32-битного ODBC в 64-битной Windows может помочь вам ...

Ничто из того, что вы сказали ни в своем комментарии ниже, ни в исходной формулировке проблемы, явно не указывает на то, что вы используете 32-битный администратор ODBC. Обратите внимание, что и 32-разрядная, и 64-разрядная программы называются одинаково, odbcad32.exe. Разница заключается в их нелогичном расположении каталогов - System32 (для 64-разрядных компонентов) и SysWow64 (для 32-разрядных компонентов).

Вы можете быть удар старой , но повторяющаяся проблемы с незначительной коррупцией в реестре Windows. Коррупция принимает форму записей, содержащих эту 4-символьную строку -

@=""  

Эти записи не видны нигде, кроме файлов экспорта реестра, но они могут привести к ряду нежелательных действий.

ПРИМЕЧАНИЕ. На 64-битном компьютере с Windows, естественно, есть некоторые сложности, связанные с 32-битным реестром. Эта статья о Microsoft KB может быть достаточной, чтобы помочь вам в этом.

Я предлагаю вам использовать 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

У меня была такая же проблема, и вот как я исправил ее для моего системного уведомления о доставке.

Для справки, вот два пути в реестре для определения того, является ли ODBC 64-битным или 32-битным в ОС Windows.

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 записи уведомления о доставке, Type REG_SZ и значением Data для имени ODBC Provider/Driver (в моем случае это был iSeries Access ODBC Driver). Я настроил еще один тест для сервера MS SQL, и значение Data было SQL Server .

Как я обнаружил это, я полностью удалил все папки DSN и папку ODBC Data Sources и заново создал DSN. Он создал как папки, так и связанные ключи, и теперь мои уведомления о доставке отображаются и могут использоваться.

Без ключа с именем поставщика в ODBC Data Sources DSN не будет отображаться в odbcad32.exe . Я также мог бы воссоздать проблему, удалив запись ODBC Data Sources .

Надеюсь, это поможет кому-то, если другое решение не исправит их. Я попытался экспортировать ключи реестра и не увидел @="" как описано в другом решении. Пожалуйста, дайте мне знать, если эти инструкции недостаточно ясны, и я постараюсь опубликовать скриншоты. Спасибо!

0

Как и сказал @TallTed, проблема связана с двойной версией ODBC Administrator, выпущенной в x64/IA64 Windows 7 Windows XP (и более поздних версиях).

Я лично нашел эту замечательную официальную статью в КБ, которая действительно помогла мне преодолеть проблему; Ваша конкретная проблема также рассматривается в другом сообщении KB здесь. Я также попытался обобщить этот конкретный сценарий здесь.

Кстати, эта проблема была (вполне) исправлена в Windows 8 и более поздних версиях, поскольку в папке «Инструменты администратора» панели управления теперь содержатся два разных значка администратора ODBC: один для 32-разрядного, другой для 64-разрядного. Не решение, но, по крайней мере, обычный пользователь сможет разобраться.

Я не знаю, почему такой же обходной путь не был применен и к Win7. (MS сказала что-то, связанное с проблемами ретро-совместимости, ближе к концу второй записи в КБ, о которой я упоминал, но я просто не могу понять, как добавление иконки может что-то сломать.)

-1

В конечном итоге было найдено решение о явной невозможности установки 32-разрядного драйвера ODBC около 4-5 лет назад. Ответ 7 выше указывает на проблему «Разница заключается в их нелогичном расположении каталогов - System32 (для 64-разрядных компонентов) и SysWow64 (для 32-разрядных компонентов)». При запуске odbcad32.exe для отображения окна источников данных ODBC стало очевидно, что команда панели управления запускает 64-разрядную версию в System32\, несмотря на метку «Источники данных ODBC (32-разрядные)». Я также проверил реестр, чтобы найти соответствующие ключевые данные, правильно установленные в HKLM_Software_Wow6432Node.

Мое решение заключается в создании ярлыка для C:\Windows\SysWOW64\Odbcad32.exe на моем рабочем столе. Затем отобразится окно источников данных ODBC для 32-разрядных драйверов. В моей установке ОС Win7 Professional на вкладке «Драйверы» перечислены 25+ 32-разрядных драйверов.

Вывод - Microsoft дала нам команду, которая указывает на неправильную папку, предположительно смущенную их интуитивно понятным именованием папки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .