Имя: Пароль:
1C
1С v8
Соединение из 1С с Oracle через ADODB
0 Child_Men
 
05.05.15
10:41
На сервере установлена 64-разрядная Windows Server Enterprise SP2
Установлен ODAC121012_x64
Настроен DSN для ODBC x64, - тестирование подключения проходит успешно

Для соединения использую код:

    СтрокаПодключения = "DSN=ИмяDSN;Uid=Пользователь;Pwd=Пароль;";
    
    Попытка
            
            
        Connection.Open(СтрокаПодключения);
        Command.ActiveConnection   = Connection;
        Command.CommandText = ЗапросSQL;
        RecordSet = Command.Execute();
        
        Connection.Close();
        Connection = Неопределено;

    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;


Валится на строке:

        Connection.Open(СтрокаПодключения);

С ошибкой:

{Форма.Форма.Форма(84)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Не удается загрузить указанный драйвер из-за системной ошибки  127 (Oracle in OraClient12Home2).

При чем через внешние источники данных для такой же строки подключения - соединение выполняется успешно, проблема именно при соединении через ADODB


Что делали:

1. Пробовали разные строки подключения - соединение не работает
2. Переустановили ODAC - не помогло
3. Переустанавили ODAC и Сервер 1С (Сразу после переустановки ODAC и Сервера 1С соединение через ADO заработало, на следующий день перестало работать с той же ошибкой)

Что не так делаю?


Зачем все это нужно:

Есть учетная система на СУБД Oracle из которой надо как читать, так и записывать в нее данные

Данные на чтение получаю через Внешние источники данных (через ADO возникала проблема с кодировками, а через ВИД проблем нет)
Записывать хочу через ADODB (потому что значения некоторых полей нужно генерировать на лету с помощью SEQUENCE оракла)
1 Child_Men
 
05.05.15
10:43
Соединение. соответственно объявляю так:
    Connection      = Новый COMОбъект("ADODB.Connection");
2 ДенисЧ
 
05.05.15
10:43
На 64бит там много тонкостей...
Одна из которых, что помню - особенности содержимого PATH - путь к клиенту должен быть первым в строке...
Но всё уже не вспомню, помню только, что возился недели 2, пока заработало всё...
3 Child_Men
 
05.05.15
10:51
Тоже 2-ю неделю вожусь....

Содержимое PATH: (путь до клиента на первом месте)
F:\Oracle\product\12.1.0\client_1\bin; F:\Oracle\product\12.1.0\client_1
4 ДенисЧ
 
05.05.15
10:52
Ещё как-то игрался с битностью клиента.
Кажется, ставил в конце концов 32бит...
5 Child_Men
 
05.05.15
11:32
Установил 32-х битного клиента
Через DSN - тест соединения прошел успешно

При попытке соединения через ADO вываливается с ошибкой:

{Форма.Форма.Форма(92)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
6 Apokalipsec
 
05.05.15
11:51
СтрокаПодключения = "Provider=MSDASQL.1;Data Source=test2;UID=***;Password=***";
Не указываешь используемый провайдер.
7 Child_Men
 
05.05.15
12:11
когда строка подключения:
"DSN=ИмяDSN;Uid=Пользователь;Pwd=Пароль;",
Provider=MSDASQL.1 - подставляется автоматически (смотрел через отладчик)
8 МихаилМ
 
05.05.15
12:36
проблему подключения через odbc удобно проверять через

http://alekseyrybakov.narod.ru/ViewODBC.html

тк в ней есть 32 64 битные версии.
9 МихаилМ
 
05.05.15
12:36
+(8) генерируется строка подключения.
10 Child_Men
 
05.05.15
13:39
Сгенерировал строку подключения этой утилиткой и использовал ее

Все равно ошибка:

{Форма.Форма.Форма(95)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Не удается загрузить указанный драйвер из-за системной ошибки  127 (Oracle in OraClient12Home2).
11 Child_Men
 
05.05.15
13:42
Т.е. через утилитку соединяется и 32-х и 64-х битная версия,
а через внешнюю обработку не хочет
12 art_id
 
05.05.15
14:01
у меня такая строка подключения к оракл
"Provider=OraOLEDB.Oracle.1;User ID=user;Data Source=db; Password=pass"
13 Child_Men
 
05.05.15
14:50
Если указываю строку, как в (11), пишет следующее:

{Форма.Форма.Форма(99)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Provider): Разрушительный сбой
14 Kurbash
 
05.05.15
15:02
а в переменных среды путь к клиенту оракловому указан?
15 Мэс33
 
05.05.15
15:04
Если подключаешься через клиента 1С - то он ведь 32битный, и надо ставить 32битного клиента Oracle.

А вот если надо чтобы к примеру фоновый процесс лез в оракл - то тут я не смог победить ораклового клиента))).
16 Мэс33
 
05.05.15
15:06
И настраивать надо через свои утилиты для каждой версии:

The 32-bit version of the Odbcad32.exe file is located in the %systemdrive%\Windows\SysWoW64 folder.
The 64-bit version of the Odbcad32.exe file is located in the %systemdrive%\Windows\System32 folder.
17 Child_Men
 
05.05.15
15:15
(14) да, - указан
18 Мэс33
 
05.05.15
15:17
@Есть учетная система на СУБД Oracle из которой надо как читать, так и записывать в нее данные @

Надо читать фоновым серверным процессом?
19 Child_Men
 
05.05.15
15:18
(16) - подключаться пытаюсь из клиент-серверной базы
На клиентской машине - 64-битная система
На сервере - 64-битая система
20 Child_Men
 
05.05.15
15:19
(18) планировалось, что будет настроено регламентное задание
21 Мэс33
 
05.05.15
15:35
(20) если получится - можете выложить рецепт?
22 Child_Men
 
05.05.15
15:49
(21) ап чем речь )
23 Apokalipsec
 
05.05.15
16:13
Сейчас подключаешься с клиента? 1Сина таки 32х разрядная, если не на сервере выполняешь.
24 Child_Men
 
05.05.15
17:05
(23) подключаюсь с клиента (на клиенте установлена 64-разрядная ОС)
База клиент-серверная
На сервере установлена 64-разрядная ОС
25 Child_Men
 
05.05.15
17:27
Попробовал такое:

1. Создал файловую базу
2. Установил на клиентской машине 32-х битного клиента оракла
3. Настроил на клиентской машине DNS с использованием драйвера 32-х битного клиента оракла

Запускаю внешнюю обработку с кнопкой, по которой должно устанавливаться соединение через ADO из файловой базы 1с - в результате соединение нормально устанавливается
26 Child_Men
 
05.05.15
17:30
пробовал устанавливать 32-х битного клиента на сервер (где крутится агент сервера 1с) и запускать ту же самую обработку - 32-х битный драйвер не находится, соединение соответственно не устанавливается
27 Child_Men
 
05.05.15
17:37
т.е. не работает соединение через ADO, когда: запуск из под клиент-серверной базы с клиента + 64-битный клиент оракла на сервере с настроенным DSN
28 Nik_EV
 
06.05.15
08:32
Была такая проблема с 11 Oracle. Решили ее установкой 32-разрядного сервера 1С, т.е. кластер серверов состоял из 64-разрядного сервера(основного) и 32-разрядного(для запуска процессов которые работали с 32-разрядными дровами Oracle). Через "Требования назначения функциональности" указали что выполнять на этих серверах
29 Child_Men
 
06.05.15
09:03
(28) А можно по подробнее, что-то типа мини-инструкции (шаг 1, шаг 2, шаг 3). Очень нужно!!!
30 Nik_EV
 
07.05.15
11:05
1. На сервер 1С устанавливаем еще один "сервер предприятия 1с"(32-разрядного) запускаем службу по другому порту.

2. В консоли "Администрирование серверов 1С" для нашего локального кластера добавляем 32-разрядный сервер 1С. Т.е. кластер серверов теперь состоит из 64-разрядного сервера(основной) и из 32-разрядного(дополнительный).

3. В "Требования назначения функциональности" основного сервера добавляем новое требование. В "объекте требования" выбираем "Сервис работы с внешними источниками данных через ODBC" (т.к. мне необходимо было чтобы работа с ВИД велась через 32-разрядный сервер 1С. Для запуска рег. задания необходимо выбрать объект требования "Клиентское соединение с ИБ" и указать в значение доп. параметра что-то типа "BackgroundJob.CommonModule.РегламентныеЗадания.ЗагрузитьОстатки"), тип требования - не назначать.

4.В "Требования назначения функциональности" дополнительного сервера делаем тоже самое что и в п.3,только тип требования - назначать.

5.В "Требования назначения функциональности" дополнительного сервера добавляем еще одно требование: объект требования "для всех",тип требования - не назначать.

6. В свойствах локального кластера нажимаем кнопку применить требования назначения функциональности
31 sapphire
 
07.05.15
12:57
(0) tnsnames.ora настроен?
Какого вида строки соединения пробовали?
32 sapphire
 
07.05.15
12:58
+(31) Вызов на клиенте/сервере?
33 Child_Men
 
08.05.15
15:30
(30) Спасибо, будем пробовать )
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший