Интеграция 1С с внешними СУБД, такими как Oracle, часто сопровождается техническими сложностями при настройке COM-соединения. Если вы столкнулись с ошибками при вызове ADODB.Connection, давайте разберем, как последовательно устранить основные препятствия.
Первым делом убедитесь, что вы верно используете методы объекта ADODB.Connection. Ошибка часто возникает из-за неправильной последовательности присвоения свойств. Рассмотрим корректный синтаксис:
Соединение = Новый COMObject("ADODB.Connection");
Соединение.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=ваш_пароль;Persist Security Info=True;User ID=имя_пользователя;Data Source=имя_источника";
Соединение.Open();
Важно помнить, что если код выполняется &НаСервере, то все настройки должны быть применимы именно для пользователя, от имени которого запущен процесс сервера 1С.
Частая причина ошибки «Источник данных не найден» заключается в том, что служба сервера 1С (обычно под учетной записью USR1CV8) не имеет прав на использование библиотек Oracle. Чтобы проверить это:
udl-файл в этой сессии и выполнить тест подключения.Если соединение установлено, но вместо кириллицы вы видите знаки вопроса (или другие некорректные символы), необходимо настроить переменную окружения NLS_LANG. Это ключевой параметр для Oracle, определяющий кодировку данных при передаче.
Для исправления установите системную переменную среды:
Переменная: NLS_LANG
Значение: AMERICAN_AMERICA.CL8MSWIN1251
После добавления переменной обязательно перезапустите службу сервера 1С, чтобы изменения вступили в силу для всех процессов платформы.
Если система выдает ошибку «Не удается найти указанный поставщик», проанализируем разрядность установленного ПО. Сервер 1С версии 8.3 является 64-битным приложением. Это означает, что он может работать только с 64-битными провайдерами OLE DB.
Oracle Client.После того как соединение установлено, для получения данных используйте объект ADODB.Recordset. Рассмотрим пример корректного получения данных из таблицы Oracle:
ТекстЗапроса = "SELECT zpu_name AS ""Name"" FROM PARUS.ZPU_TYPES";
rsRES = Новый COMObject("ADODB.Recordset");
rsRES.Open(ТекстЗапроса, Соединение);
Пока rsRES.EOF = 0 Цикл
ЗначениеПоля = СокрЛП(rsRES.Fields("Name").Value);
Сообщить(ЗначениеПоля);
rsRES.MoveNext();
КонецЦикла;
При использовании rsRES не забывайте закрывать курсор и само соединение после завершения работы, чтобы избежать утечек памяти на сервере.
Если после выполнения всех шагов ошибка сохраняется, выполним финальную проверку:
OraOLEDB.Oracle зарегистрирован в системе (при необходимости перерегистрируйте библиотеку через regsvr32).MSDASQL, будьте готовы к тому, что он может некорректно обрабатывать национальные кодировки, поэтому предпочтение стоит отдавать нативному провайдеру OraOLEDB.Data Source, которые должны соответствовать записям в tnsnames.ora на сервере.