2016-11-22 13 views
0

Я разработал приложение в VC++, чтобы подключиться к Oracle DB и получить доступ к его данным. Для этого требуется создание DSN и некоторые переменные среды, такие как PATH, ORACLE_HOME, TNS_ADMIN и т. Д., Которые будут установлены программно в моем коде VC++. Я обновил необходимые записи в реестре. Я установил 32-битный Oracle Instant Client на свою машину.Microsoft - диспетчер драйверов ODBC - имя источника данных не найдено и не указан по умолчанию драйвер

http://download.oracle.com/otn/nt/instantclient/121020/instantclient-basic-nt-12.1.0.2.0.zip http://download.oracle.com/otn/nt/instantclient/121020/instantclient-odbc-nt-12.1.0.2.0.zip

Я выполнил и построил ех приложения, используя опцию Win32 в качестве целевой платформы на Windows 7 64 битой машины. Этот exe отлично работает на 64-битной машине Windows 7, и я могу успешно выполнить соединение с DB, используя SQLDriverConnect().

Но когда я делаю такую ​​же установку на 32-битной машине Windows, как установка 32-битного Oracle Instant Client, устанавливаю некоторые переменные среды, такие как PATH, ORACLE_HOME, TNS_ADMIN и т. Д., Обновляю необходимые записи в реестре и пытаюсь запустить такое же приложение exe (используется на 64 разрядная машина), это приводит к следующей ошибке:

[Microsoft] - [Диспетчер драйверов ODBC] Имя источника данных не найдено, и драйвер по умолчанию не указан.

Просьба предложить шаги разрешения.

+0

Какое имя драйвера у ODBC? Это одно и то же имя (например, «Oracle в OraClient12g_home1») для обеих установок? –

ответ

0

Где вы определяете источники данных ODBC? Вы должны сделать это отдельно

для 64-битного использования %SYSTEMROOT%\system32\odbcad32.exe (обычно c:\windows\system32\odbcad32.exe)

и для 32-битного использовать %SYSTEMROOT%\SysWOW64\odbcad32.exe (обычно c:\Windows\SysWOW64\odbcad32.exe)

+0

На моей 64-битной машине источник данных ODBC находится на C: \ Windows \ SysWOW64 и на моей 32-битной машине, источник данных ODBC находится в каталоге c: \ windows \ system32 Я устанавливаю переменные среды, такие как PATH, TNS_HOME, ORACLE_HOME, используя _putenv () в коде. Я создаю DSN в коде, используя connstring, например DSN =% s; UID =% s; PWD =% s. – ModeLearner

+0

И это отлично работает на моей 64-битной машине. – ModeLearner

0

Спасибо всем за ответ.

В любом случае я исправил проблему.

Как я уже упоминал ранее, я создаю DSN и обновляю записи реестра для DSN программно, путь реестра должен быть разным для 64-битной машины и другой для 32-разрядной машины.

На 64-битной машине, уведомление о доставке пути реестра будут:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ ODBC \ ODBC.INI]

На 32-битной машине, уведомление о доставке пути реестра будет:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBC.INI]

Это решило мою проблему после внесения записей реестра DSN на новый путь в реестре для 32-разрядной машины.

 Смежные вопросы

  • Нет связанных вопросов^_^