У меня есть макрос VBA (Excel), который подключается к базе данных Oracle и запрашивает ее. Работая под Windows 7, работает следующая строка подключения:
Driver={Microsoft ODBC for Oracle}; Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxx))(CONNECT_DATA=(SERVICE_NAME=name))); Uid=username;Pwd=password;
Я и остальные пользователи этого шаблона Excel переходят на Windows 10 (64-разрядная версия) с 32-разрядной версией Office 365. Что яНапример, эта строка подключения не требует отдельного файла tnsnames.ora - функции, которую я хотел бы сохранить. Я также знаю, что драйверы Microsoft устарели (и все равно не работают), поэтому пришло время изменить их.
У меня установлено следующее:
- Oracle Instant Client 12.2 (32 бита)
- Драйверы Oracle ODBC для Instant Client 12.2 (32 бита)
- Visual Studio 2019 (32-разрядная версия) (при условии, что драйверы Oracle совместимы с прямой пересылкой)
Я проверил, что:
- первое значение в PATH установлено накаталог, в котором установлен Instant Client 12.2
- ORACLE_HOME настроен на тот же каталог
- есть только одна переменная ORACLE_HOME
- Драйвер (Oracle в instantclient_12_2) виден в32-битный инструмент администрирования ODBC
Я пробовал различные изменения в следующей строке подключения, но безуспешно
Driver={Oracle in instantclient_12_2}; Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxx))(CONNECT_DATA=(SID=name))); Uid=username;Pwd=password
Я пытался использовать "Источник данных" вместо«Сервер», «SERVICE_NAME» вместо «SID», и оба одновременно. Я также попробовал строку во внутреннем соединении ODBC в Excel 365. Я получаю сообщение об ошибке:
ORA-12560: TNS: ошибка адаптера протокола
Я начинаю подозревать, что необходим файл tnsname.oraпод Windows 10. Можно ли создать 32-разрядное соединение OBDC для Windows 10 без использования файла tnsnames.ora или каких-либо других действий, кроме установки драйверов Oracle на компьютер пользователя?
Редактировать: я создал удаленно доступный файл tnsnames. Когда строка подключения использует этот файл и установлена переменная среды TNS_ADMIN, она подключается. Если я использую точный текст из файла tnsnames в самом VBA, он не распознает его (ошибка адаптера TNS). Я собираюсь предположить, что мое подозрение относительно драйверов Oracle, требующих файла tnsnames.ora, верно, по крайней мере для VBA.