Excel подключиться к Oracle 12c с помощью VBA - PullRequest
0 голосов
/ 15 января 2019

Попытка подключения к Oracle Database 12c Enterprise Edition 64-bit с помощью Excel VBA.

На клиентском компьютере установлены следующие 32-разрядные драйверы:

  • Microsoft ODBC для Oracle
  • Oracle в OraClient11g_home1
  • Oracle в OraClient12Home1_32bit

И установлены следующие 64-битные драйверы:

  • Oracle в OraClient11g_home1
  • Oracle в OraClient12Home1

Файл имеет следующую ссылку:

  • Объекты данных Microsoft ActiveX 6.1. Библиотека

Я пробовал несколько форматов строки подключения, но ничего не работает.

'This gave the error "[Oracle][ODBC][Ora]ORA-12560: TNS:protocol adapter error"
cs = "Driver={Oracle in OraClient12Home1}; UID=myuid; PWD=mypwd; SERVER=myhostname/myservicename;"

'This gave the error "[Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the connect identifier specified"
cs = "Driver={Oracle in OraClient12Home1}; UID=myuid; PWD=mypwd; SERVER=myhostname; DBQ=myservicename;"

'This gave the error "[Oracle][ODBC][Ora]ORA-12560: TNS:protocol adapter error"
cs = "Driver={Oracle in OraClient12Home1}; CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostname)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=myservicename)));UID=myuid; PWD=mypwd;"

'This would crash Excel
cs = "Driver={Oracle in OraClient11g_home1}; CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostname)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=myservicename)));UID=myuid; PWD=mypwd;"

Я также пробовал варианты с использованием следующих драйверов в строке подключения

  • Microsoft ODBC для Oracle
  • OraOLEDB.Oracle
  • Oracle в OraClient12Home1

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Спасибо за вашу помощь всем и извините за задержку ответа (у меня было несколько связанных с работой "пожаров", которые я тушил).

В любом случае ... Я нашел решение, которое сработало для меня. Я не думаю, что проблема заключалась в том, что на одном компьютере было несколько драйверов, потому что теперь я могу подключиться, не меняя ничего, кроме метода строки подключения, который я использовал.

Хотя я до сих пор не уверен, почему метод «драйвера» моей строки подключения не работает, я смог использовать строку подключения на основе «провайдера», и это сработало.

'Using OraOLEDB.Oracle.1.
cs = "Provider=OraOLEDB.Oracle.1;User ID=myuid;Password=mypwd;Data Source=myhostname/myservicename;"

'Using OraOLEDB.Oracle.
cs = "Provider=OraOLEDB.Oracle;User ID=myuid;Password=mypwd;Data Source=myhostname/myservicename;"

'Using OraOLEDB.Oracle as a TNS-less connection string.
cs = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostname)(PORT=myport)))(CONNECT_DATA=(SERVICE_NAME=myservicename)(SERVER=DEDICATED)));User Id=myuid;Password=mypwd;"

'Using variation of the above with a port included.
cs = "Provider=OraOLEDB.Oracle.1;User ID=myuid;Password=mypwd;Data Source=myhostname:myport/myservicename;"
0 голосов
/ 15 января 2019

Я считаю плохой идеей иметь более одной установленной версии Oracle Client, то есть одну 32-битную и одну 64-битную.

Для OLE DB (т.е. "OraOLEDB.Oracle") даже невозможно иметь более одной версии из-за ограничения COM , на котором она основана (если вы не зарегистрируете DLL каждый раз перед запуском приложения).

Как правило, вы можете использовать ODBC или OLE DB, оба должны работать.

Наиболее важным моментом является то, что архитектура (т. Е. 32-битная или 64-битная) вашего Excel должна совпадать с архитектурой вашего драйвера Oracle! Архитектура вашей базы данных не имеет значения.

Драйверы ODBC и OLE DB предоставляются Microsoft («Microsoft ODBC для Oracle» и «MSDAO») и Oracle (например, «Oracle в OraClient12Home1» и «OraOLEDB.Oracle»)

Драйверы Microsoft устарели и устарели, вы должны предпочесть драйверы от Oracle. Драйверы Microsoft существуют только для 32-битных, поэтому если ваш Excel 64-битный, вам даже придется использовать драйверы Oracle.

Еще одно замечание: версия драйверов Oracle (ODBC и OLE DB) должна совпадать с версией вашего клиента Oracle, скорее всего, вы ошиблись, когда установили три разных клиента Oracle.

В случае, если вам нужно установить 32-битный и 64-битный клиент, следуйте этой инструкции: BadImageFormatException. Это произойдет при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle

...