У нас есть несколько таблиц 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.Большое спасибо Вернфрид.
Я явно пытался обдумать это.Я уверен, что я должен был попробовать это сначала, но, очевидно, нет.Хорошая работа, я попробовал это снова, и прочитал ответ ... снова.