Как я могу подключиться к базе данных Oracle из Excel VBA, используя LDAP? - PullRequest
0 голосов
/ 31 января 2019

У нас есть несколько таблиц Excel, подключающихся к базе данных Oracle с помощью подключения ADODB (см. Пример кода ниже).Соединение устанавливается с помощью TNSNAMES, который настраивается на клиентском компьютере с помощью драйвера Oracle Instaclient.

Set oCN = CreateObject("ADODB.Connection")
oCN.CursorLocation = 3
oCN.CommandTimeout = 0

cCN11 = "DRIVER=Oracle in instantclient11_1;"
strDatabase = "DBQ=DATABASE_NAME;"
strID = "UID=YourID;"
strPassword = "PWD=YourPassword;"

oCN.Open cCN11 & strDatabase & strID & strPassword

Этот код работает нормально.Однако было принято решение отказаться от поддержки TNSNAMES.ORA для использования LDAP.Я попытался найти некоторую информацию о том, как использовать LDAP для подключения через VBA, но мне не удалось найти какую-либо полезную информацию.

Я не уверен, разрешает ли соединение ADODB строки подключения LDAP или мне нужно полностью использовать что-то еще.Если кто-нибудь может указать мне правильное направление, это будет оценено.

РЕДАКТИРОВАТЬ

Просто чтобы дать больше информации о моей настройке.Клиент 32 oracle установлен на нашем сетевом диске (z: \ oracle11).Клиентские машины, использующие это, имеют информацию о драйвере в реестре здесь:

HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ ODBC \ ODBCINST.INI \ Oracle in instantclient11_1

«HKEY_LOCAL_MACHINE \ SOFTW32N \ \»msgstr "установлены ORACLE_HOME и TNS_ADMIN для указания на установленный клиент oracle (z: \ oracle11).TNSNAMES.ORA находится в корне папки установки (z: \ oracle11).

Эта настройка действует годами и прекрасно работает при подключении через TNSNAMES.

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

SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));

uid = myUsername; pwd = myPassword;

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

Я создал строку подключения, используя текущие данные TNSNAMES.ORA (HOST, PORT, SERVICE_NAME, UID и PWD были отредактированы по соображениям безопасности)

Dim sSQL As String
Dim oRS As ADODB.Recordset  'ADODB.Recordset
Dim oCN As ADODB.Connection

Set oCN = CreateObject("ADODB.Connection")
oCN.CursorLocation = 3
oCN.CommandTimeout = 0


' Build the connection string
strConnectionString = "DRIVER=Oracle in instantclient11_1;DBQ=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=my_ host)(PORT=1234)))(CONNECT_DATA=(SERVICE_NAME=myhost.world)(SERVER=DEDICATED)));Pwd=my_password;Uid=my_user_id"

' Open the connection using the connection string
oCN.Open strConnectionString

К сожалению, я получаю сообщение об ошибке, которое появляется, если в файле TNSNAMES не существует «DBQ».

[Oracle][ODBC][Ora][ORA-12154: TNS:could not resolve the connect identifier specified.

Если я изменяю DBQ на SERVER (как в примере строки подключения), я получаю другое сообщение об ошибке:

[Oracle][ODBC][Ora][ORA-12560: TNS:protocol adapter error.

Я сделал NSLOOKUP против "my_host""значение, и это решается, поэтому я знаю, что это правильно.Номер порта правильный.Имя службы также является правильным, так же как имя пользователя и пароль.

Я также пытался использовать библиотеку «Microsoft ActiveX Data Objects 2.8» и версию 6.1, ни одна из которых не имеет никакого значения.

ОТВЕТ

Чтобы уточнить ответ Wernfried Domscheit, просто измените «DBQ = DATABASE_NAME», чтобы значение DATABASE_NAME было вашим значением DNS.Большое спасибо Вернфрид.

Я явно пытался обдумать это.Я уверен, что я должен был попробовать это сначала, но, очевидно, нет.Хорошая работа, я попробовал это снова, и прочитал ответ ... снова.

1 Ответ

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

DATABASE_NAME это просто псевдоним для вашей базы данных.Это не имеет никакого значения, если такой псевдоним разрешается файлом tnsnames.ora или сервером LDAP.

Таким образом, разницы нет.Просто установите переменную TNS_ADMIN, как для файла tnsnames.ora.

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