VBA в Excel подключиться к удаленной БД Oracle InstantClient с





Я пытаюсь использовать Excel (в основном 2003, для большей совместимости с пользователем)для подключения к удаленной БД Oracle. Я хотел бы запустить a .скрипт sql и возвращает набор данных на рабочий лист.

Я нахожусь на 64-битной машине Windows 7. Я не знаю спецификации сервера Oracle DB.

Я хотел бы сохранить это как можно более легким (никаких дополнительных установок файлов на клиентских компьютерах, используйте общие сетевые расположения для необходимых файлов как можно больше)







Итак Далеко:



Я скачал и "установил" InstantClient из Oracle (версии 12.1 и 11.2 для 32-битных и 64-битных версий) в удаленное сетевое расположение.

Я попытался подключиться к Oracle DB с помощью SQL Plus, и это сработало отлично (я попробовал несколько установленных версий InstantClient, чтобы увидеть, будут ли проблемы с совместимостью).

В качестве теста: используя SQL Plus и функцию оболочки в VBA, я смог успешно скрутить данные в отдельный excel файл.





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




  • драйвер={Oracle в instantclient_11_2}

  • драйвер={Microsoft ODBC для Oracle}

  • провайдер=MSDAORA

  • провайдер=MSDAORA.1

  • Provider=OraOLEDB.Оракул






Ошибки, Которые Я Получил:



"Run-time error '-2147467259 (80004005)':
[Microsoft][ODBC Driver Manager] Driver's SQLAllocHandle on SQL_HANDLE_ENV failed
The Oracle(tm) client and networking components were not found. These components are supplied by Oracle Corporation..."





"Run-time error '-2147467259 (80004005)':
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"





"Run-time error '3706':
Provider cannot be found. It may not be properly installed"


И несколько других подобных ошибки.








Я добавил сетевое расположение, содержащее файлы instantclient, в переменную среды PATH. Не уверен, какие еще переменные окружающей среды мне нужны или даже если мой текущий является правильным.



Нужно ли мне:

TNS_ADMIN?
ORACLE_HOME?








Вопрос:





  • Как подключиться к удаленной Oracle DB с помощью VBA, используя файлы instantclient , которые находятся в сетевое (общее) местоположение ?





    • Какова правильнаяполная строка соединения? (Я использовал формат EZConnect с SQLPlus; являются ли фактические детали соединения одинаковыми? и для уточнения, может ли кто-нибудь опубликовать пример того, как формат EZConnect преобразуется в другой формат(ы)?)



      My EZConnect Format: username/[email protected]/mydb


    • Какой "провайдер" или "драйвер" я должен использовать для этой цели и есть ли какие-либо существенные различия?


    • какие переменные среды я требую, чтобы это сработало?




Я нашел много вопросов, которые похожи или связаны, но ни один из них не дал прямого ответа на мой вопрос или не помог мне полностью решить его.
1075   1  

1 ответ:

Закончил редактирование/использование этой функции (которая не(?) использовать драйвер / провайдер: InstantClient но все еще использует файлы):

Function ORAQUERY(strHost As String, strDatabase As String, strSQL As String, strUser As String, strPassword As String)
  Dim strConOracle, oConOracle, oRsOracle
  Dim StrResult As String
  StrResult = ""
  strConOracle = "Driver={Microsoft ODBC for Oracle}; " & _
         "CONNECTSTRING=(DESCRIPTION=" & _
         "(ADDRESS=(PROTOCOL=TCP)" & _
         "(HOST=" & strHost & ")(PORT=1521))" & _
         "(CONNECT_DATA=(SERVICE_NAME=" & strDatabase & "))); uid=" & strUser & " ;pwd=" & strPassword & ";"
  Set oConOracle = CreateObject("ADODB.Connection")
  Set oRsOracle = CreateObject("ADODB.Recordset")
  oConOracle.Open strConOracle
  Set oRsOracle = oConOracle.Execute(strSQL)
  MsgBox (oRsOracle.Fields(0).Value)
  varResult = oRsOracle.GetRows
  Do While Not oRsOracle.EOF
      If StrResult <> "" Then
        StrResult = StrResult & Chr(10) & oRsOracle.Fields(0).Value
      Else
        StrResult = oRsOracle.Fields(0).Value
      End If
    oRsOracle.MoveNext
  Loop
  oConOracle.Close
  Set oRsOracle = Nothing
  Set oConOracle = Nothing
  ORAQUERY = StrResult
End Function



Правильная строка полного соединения:

Driver={Microsoft ODBC for Oracle}; CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=strHost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=strDatabase))); uid=strUser; pwd=strPassword;

Поставщик или драйвер:
{Microsoft ODBC для Oracle}

Необходимо задать переменную среды PATH, чтобы она указывала на instantclient.
Не использовал другие переменные среды, например ORACLE_HOME, TNS_ADMIN и т. д.

Comments

    Ничего не найдено.