Как подключить Oracle Database с помощью 64-битного Excel в Windows 10 - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь подключить свой Excel к Oracle с помощью этой строки подключения в VBA:

И я получаю сообщение об ошибке ниже:

Ошибка времени выполнения '-2147467259 (800004005)': ORA-12154: TNS: не удалось разрешить указанный идентификатор подключения

Использование: - 64-разрядная версия Excel 2016 - 64-разрядная версия Windows 10 - версия 12.1.0.2.0 Oracle Database 12c Enterprise - 64-разрядная версия - PL /SQL Release 12.1.0.2.0 - CORE 12.1.0.2.0 - TNS для Linux: Версия 12.1.0.2.0 - NLSRTL Версия 12.1.0.2.0

Excel 64-bit & oracle предоставляется компанией,надежда может решить это без изменений превосходит 32-битный.Любая помощь будет оценена.Я на самом деле уже пытался уладить это в течение двух дней и не вижу никакой надежды.Спасибо за ваше время.

Не уверен, что драйвер, который я использовал, является 32-битным?Microsoft ODBC для Oracle, MSORCL32.DLL Oracle в Client_11_Std_x86_1, SQORA32.DLL

Dim cnPubs As ADODB.connection
Set cnPubs = New ADODB.connection
Dim strConn As String
With cnPubs
    strConn = "Provider=OraOLEDB.Oracle;" & _
    "Data Source=" & sSource & ";" & _
    "User ID=" & sAC & ";Password=" & sPW & ";"

    .Open strConn
    .CommandTimeout = 0
End With

1 Ответ

0 голосов
/ 08 апреля 2019

Похоже, вы пропустили некоторые основы, давайте объясним. Если вы хотите подключиться к базе данных Oracle, независимо от того, sqlplus или VBA или что-то еще, на самом деле вам придется сделать это следующим образом:

sqlplus MyUserName@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.0)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORA12)))

Однако никто не хочет или не может вспомнить такое длинное и сложное имя базы данных. Таким образом, вы бы предпочли использовать псевдоним, то есть ярлык для (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.0)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORA12)))

Существуют различные способы определения и разрешения таких псевдонимов (см. Управление информацией о сетевом адресе ), наиболее распространенным и простым способом является использование локального tnsnames.ora файла.

В вашем файле tnsnames.ora вы можете добавить строку вроде этой:

MY_DB=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.0)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORA12)))

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

sqlplus MyUserName@MY_DB

Теперь следующий вопрос: как мое приложение находит файл tnsnames.ora в моей системе? Ответ не так тривиален, как вы могли бы предположить, см. Определение местоположения соответствующего файла tnsnames.ora

Наиболее безопасное решение: определите переменную среды TNS_ADMIN и укажите в качестве значения имя каталога, в котором находится файл tnsnames.ora.

Поставщик "msdaora" использует другой шаблон для поиска файла tnsnames.ora, чем поставщик "Oracle OLE DB". msdaora находит ваш файл, Oracle OLE DB - нет. Настройка переменных среды TNS_ADMIN позволяет работать обоим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...