Adodb connection ошибка при вызове метода контекста open

Студворк — интернет-сервис помощи студентам

Добрый день, всем.
Буду признателен за советы, мысли, как решить неожиданно возникшую проблему с 1С 8.3. Имеем 1С 8.3.5.15.17, через MSSQL2008, MSOffice 2007. Всё лицензионное.
Недавно перешли с 8.2 на 8.3 . До переход использовалась специальная процедура: записать в file MSAccess2007 некоторую информацию, выглядело это так:

1C
1
2
3
4
5
6
7
8
9
10
    СтрокаПодключения="Provider=Microsoft.Ace.OLEDB.12.0;Data Source=E:MyDBMyFile.accDB;Persist Security Info=False;";
    Connection=Новый ComObject("ADODB.Connection");
    // Подключение
    Попытка
        Connection.Open(СтрокаПодключения);
    Исключение
        Сообщить("Ошибка подключения к Access: " + ОписаниеОшибки());
        Вовзрат;
    КонецПопытки;
    // работаем с accDB

И всё работало на ура без всяких проблем.
После перехода на 8.3 столкнулся с проблемою, что Open не даёт соединения — просто упорно выдаёт ошибку.

Ошибка подключения к Access: {ОбщийМодуль.АС_ОСЧ.Модуль(212)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Access Database Engine): ‘E:MyDBMyFile.accDB’ is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.

Ошибки на создания ComObject нет. Появляется на любой машине с любыми правами.
Естественно (для тестов) диск Е взят локальный (не сетевой) к базе вообще (MyFile.accDB) вообще никто не подключен; запускается от имени администратора — т.е. все полные права. Если взять запустить через WIndows->RUN «E:MyDBMyFile.accDB», то всё открывается, всё видно. Для тестов вообщен сделал E:MyDBMyFile.accDB как простой file без каких-либо ограничений.
Пробовал совершенно разные варианты команды «СтрокаПодключения» в различных исполнениях — ничего, всё в одном и том же: не открвает accDB никак.
Пробовал установить с Microsoft’а «AccessDatabaseEngine» — не помогает.

Самое интересное… При этом код

1C
1
2
3
4
5
6
7
8
9
10
11
12
    СтрокаПодключения="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:MyDBbook1.xlsx;Extended Properties=Excel 12.0;";
    // создание соединения
        Connection=Новый ComObject("ADODB.Connection");
    // Подключение
    Попытка
        Connection.Open(СтрокаПодключения);
    Исключение
        Возврат
        Сообщить("Ошибка подключения к EXCEL: " + ОписаниеОшибки());
        Возврат
    КонецПопытки;
    сообщить("УСПЕШНО EXCEL");

работает успешно.

Большое спасибо за комментарии.

Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно.

Ранее работало, что-то изменилось в компе, уже не припомню .. Что пробовал:

1. разные строки подключения —

Connection = Новый COMОбъект(«ADODB.Connection»);

    СтрокаПодключения = «Provider=Microsoft.Jet.OLEDB.4.0; Data Source = » + Файл +

        «; Extended Properties = «»Excel $ver$.0;HDR=YES;IMEX=1″»;»;

    СтрокаПодключения12 = «Provider=Microsoft.Jet.OLEDB.4.0; Data Source = » + Файл +

        «; Extended Properties=»»Excel 12.0 Xml;HDR=YES;IMEX=1″»;»;

      СтрокаПодключенияACE = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source= » + Файл +

        «;Extended Properties=»»Excel 12.0;HDR=YES;IMEX=1;»»»;        

    
    Попытка

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

    Исключение

        Попытка

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

        Исключение

            
            Для Версия = 8 По 16 Цикл

                //подключение к источнику данных

                ТекСтрокаПодключения = СтрЗаменить(СтрокаПодключения, «$ver$», Строка(Версия));

                Попытка

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

                Исключение

                    ОписаниеОшибки = ОписаниеОшибки();

                КонецПопытки;

            КонецЦикла;              

        КонецПопытки;          

    КонецПопытки;

2. переустанавливал OFFICE 32/64 бит

что за «Не удается найти указанный поставщик. Вероятно, он установлен неправильно.» ???

  • Remove From My Forums
  • Вопрос

  • Доброго времени суток!

    Ситуация следующая. Имеем MS Server 2008 Standart x64 SP1, MS SQL 2008 Standart x64 SP3, 1С предприятие 8.2.14.540 x64 (клиент серверный вариант). Сервер в домен не входит.

    Соответственно в 1с идет загрузка накладных из файла xls. На сервере установлен MS Office 2010 x64. Ошибка идет при загрузке excel файла «Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанного
    поставщика. Вероятно, он установлен неправильно.»

    В логах винды ошибок нет. Делал настройку dcomcnfg, чтобы пользователь usr1cv82, под которым запускается «Агент сервера 1с», имел доступ к com объектам. Также его добавил в группу Пользователи DCOM. Причем для тестирования то же самое делал на Server 2008 Standart
    R2 SP1 — там все работало.

    • Перемещено

      20 апреля 2012 г. 9:34
      merge forums (От:Windows Server 2008)

Ответы

    • Помечено в качестве ответа
      Yuriy Lenchenkov
      27 февраля 2012 г. 12:54
  • Спасибо за ответ, но самое интересное, что у меня получилась загрузка на windows 2008 r2 (и sql 2008r2). И еще я заметил, что в dcomcnfg
    на 
    2008 Standart x64 в Настройках DCOM нет пункта Приложение Excel, а в R2 есть….

    • Помечено в качестве ответа
      Yuriy Lenchenkov
      27 февраля 2012 г. 12:54

  1. Доброго времени суток!

    Пытаюсь подключиться к БД oracle:

        СтрокаПодключения = "Driver=OraClient11g_home1_32bit;Server=Serv;DataBase=DEMO;Uid=usr;Password=pass;";
        Connection = Новый COMОбъект("ADODB.Connection");
       
        Попытка
            Connection.Open(СтрокаПодключения);
            Сообщить("Подключился");
        Исключение
            Сообщить(ОписаниеОшибки());
            Возврат;
        КонецПопытки;
    

    Получаю ошибку:


  2. nomad_irk

    Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.901
    Симпатии:
    1.035
    Баллы:
    204

  3.     stringConnect1 = "Provider=OraOLEDB.Oracle;Data Source=NameBD;User Id=usr;Password=123;";
    

    Ту же ошибку выдает.


  4. nomad_irk

    Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.901
    Симпатии:
    1.035
    Баллы:
    204

    NameBD — это у вас что?
    Нужно название в файле TNSnames.ora

  5. Имя моей БД. А что должно быть?

    Вот в файле как:

    CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = NameBD)

    — Объединение сообщений, 24 мар 2017

    Правда теперь изменилась ошибка:

    {ВнешняяОбработка.Загрузка.Форма.Форма.Форма(392)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Provider cannot be found. It may not be properly installed.

  6. nomad_irk

    Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.901
    Симпатии:
    1.035
    Баллы:
    204

    В файле все остальное прописано: IP адрес, порт, имя базы?

    Провайдер именно так называется в списке провайдеров: OraClient11g_home1_32bit?

    Переменные окружения настраивали?

  7. Дело в том, что мне всё настраивал админ.
    Но точно знаю, в файле всё прописано, я посмотрел. Более того мы, успешно, подключались через командную строку. И в списках(клиента) есть все нужные мне БД, в том числе и так к которой я пытаюсь подключиться. Про провайдера затрудняюсь ответить. После того как админ мне клиента поставил я посмотрел в некий файл:
    Но если создать текстовый файл udl.Получим

    upload_2017-3-24_16-4-57.png

    Причём, если кликнуть первый или третий, то выскакивает ошибка, поставщики более не доступны

    — Объединение сообщений, 24 мар 2017

    Но я так понимаю, если я конечно правильно понимаю. В моём первом варианте я использовал не провайдера, а драйвер:

        СтрокаПодключения = "Driver=OraClient11g_home1_32bit;Server=Serv;DataBase=DEMO;Uid=usr;Password=pass;";

    А во втором как раз через провайдера:

     stringConnect1 = "Provider=OraOLEDB.Oracle;Data Source=NameBD;User Id=usr;Password=123;";

  8. TrasserZero

    Offline

    TrasserZero
    Опытный в 1С

    Регистрация:
    26 окт 2016
    Сообщения:
    69
    Симпатии:
    4
    Баллы:
    29

    должен стоять провайдер (оракл-клиент). его можно тупо скопировать в любую папку. скачать можно на сайте оракла. Далее идем в системные переменные среды и там рисуем следующее (корректируя пути, ессно):
    LD_LIBRARY_PATH=C:instantclient_11_2
    ORACLE_HOME=C:instantclient_11_2
    SQL_PATH=C:instantclient_11_2
    TNS_ADMIN=C:instantclient_11_2networkadmin
    Path=;C:instantclient_11_2
    NLS_LANG= american_america.cl8mswin1251

    на стороне базы должен быть настрое листенер (прослушивальщик). ннада знать айпишник сервака и порт (по дефолту 1521). Пихаем эти знания в tnsnames.ora в таком примерно виде:
    имя =
    (DESCRIPTION =
    (ADDRESS =
    (PROTOCOL = TCP)
    (HOST = хх.хх.х.ххх)
    (PORT = 1521)
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = имя)
    )
    )

    как-то так..


  9. Вот всё выше перечисленное мне админ и делал.(


  10. nomad_irk

    Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.901
    Симпатии:
    1.035
    Баллы:
    204

    Переменных сред достаточно:

    ORACLE_HOME=C:instantclient_11_2
    NLS_LANG= RUSSIAN_CIS.CL8MSWIN1251

    Судя по скриншоту со списком установленных ODBC драйверов, нужного нет.

    Строка соединения:

    100% рабочая при условии корректности остальных настроек.

    Список драйверов ODBC при этом:
    upload_2017-3-24_16-54-13.png


  11. nickpugachev

    Offline

    nickpugachev
    Профессионал в 1С
    Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.398
    Симпатии:
    156
    Баллы:
    104

    вот такое работает у нас
    DRIVER={Oracle in OraClient11g_home1};UID=***;PWD=***;DBQ=dbserver.dns.name:1530/DATABASE.dns.name

    это прямое подключение к конкретному серверу

    Клиент оракла нужен той же разрядности что и сервер

  12. И снова, доброго времени суток, коллеги!

    И так. Администратор БД, мне сказал, что технология ODBC надежная, но старая и через неё подключаться не айс. Надо подключаться через Ole провайдера.
    Моя ошибка, что я настраивал провайдеров, драйвера и клиента для Оракла, на машине, где стоит клиент, а директива была &НаСервере. Т.е. всё это надо было поставить на сервер 1С-ки. Что я и сделал. И ура! У меня появился Ole провайдер Оракла:

    upload_2017-3-29_11-40-18.png

    Дальше, добавляем среду «ORACLE_HOME=путь к клиенту» делаем тест:

    upload_2017-3-29_11-44-6.png

    Видим, что тест «Ok». Значит делаем вывод, что на сервере все установлено и настроено верно.

    Строка соединения:

        stringConnect1 = "Provider=OraOLEDB.Oracle;Data Source=DEMO;User Id=login;Password=123;";
    

    И в результате всё равно получаем ошибку:

    P.S.
    Статья которая мне помогла:
    http://info-comp.ru/sisadminst/551-linked-server-oracle-in-ms-sql-server.html
    Может кому пригодится

  13. Через отладчик посмотрел, что строка коннекта какая-то лажа. Делаю так:

    Connection = Новый COMОбъект("ADODB.Connection");
        Connection.ConnectionString  = "Provider=OraOLEDB.Oracle;Data Source=DEMO;User Id=login;Password=123;";  
    

    Т.е. задаю напрямую значение ConnectionString, но в отладчике вижу что ConnectionString =
    Почему провайдер подставляется другой?

    — Объединение сообщений, 29 мар 2017

    Если явно указать:

        Connection.Provider ="OraOLEDB.Oracle";
    

    Получаю ошибку:

    Последнее редактирование: 29 мар 2017

  14. nomad_irk

    Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.901
    Симпатии:
    1.035
    Баллы:
    204

    Вам уже 2 человека написали 100% рабочие строки соединения, которые работают годами, но вы дальше можете экспериментировать…..

  15. Если бы эти строки работали, то я бы наверное не писал бы и не экспериментировал.
    Плюс ко всему я уже писал выше, что админ «КРАЙНЕ» не рекомендует подключаться через ODBC, т.е. как раз через драйвер никак.

  16. Ура заработало!!! Всё было элементарно: надо было не так:

    Connection.Open(ConnectString);
    

    а вот так:

    Connection.ConnectionString =  stringConnect1;
    Connection.Open();

    Чёрт. Наврал и первый вариант работает, ошибка валится если идти пошагово, в отладчике. Почему так я не знаю.

    Последнее редактирование: 29 мар 2017

  17. nickpugachev

    Offline

    nickpugachev
    Профессионал в 1С
    Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.398
    Симпатии:
    156
    Баллы:
    104

    Посоветуйте админу почитать сайт микрософта :)
    Они таки решили уходить от OLEDB
    Либо odbc как универсальная технология доступа и для windows и для linux, либо native библиотеки, что для 1С никак

    На самом деле без разницы как вы будете подключаться, через OLEDB или через ODBC, вы получите одни и те же библиотеки доступа к Oracle, просто через разные прокладки.

  18. Я не думаю, что мне стоит что-то советовать админу. Тем более что после его прихода, в эту компанию, 1С стала хоть более менее нормально работать.
    Человек уже много лет работает админом БД, причём разных и Oracle и MSSQL и др.
    Этот человек оптимизировал работу MSSQL серверов, с БД в довольно больших объемов, а значит я ему склонен доверять.
    Потом, в работе админов, не мне им советовать что и как дело и что читать.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

mov68
26.10.2010 10:25 Прочитано: 15503

Есть файл для загрузки Excel 2007:
1.Работают ли описанные на сервере методы работы с Exсel в 2007? Если есть отличия, дайте пример плиз…
2.На компе стоят и Excel 2003 и Excel 2007, как в таком случае при запуске COMобъекта указать какой запускать?

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
26.10.2010 11:16 Ответ № 1

1. Не совсем понятен вопрос!? что значит — описанные на сервере методы работы с Exсel?
2. объект всегда один:
Код 1C v 8.х

 Попытка
Excel=Новый ComОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
mov68
26.10.2010 12:29 Ответ № 2

Да, именно так Exсel и открывают, если на компе 2 версии Exсel, какая откроется? как задать чтобы открылась нужная?

mov68
26.10.2010 12:31 Ответ № 3

Например работа через ADO DB, взятая с этого сервера прекрасно работает с 2003 версией и не работает с 2007, сейчас разбираюсь…

E_Migachev
26.10.2010 13:43 Ответ № 4

(2) никак, объект Excel.Application — одни, от последней устатовки
(3) давай код и какую ошибку выводит, посмотрим )

mov68
26.10.2010 14:18 Ответ № 5

Код 1C v 8.х

 еБаза=Новый COMОбъект("ADODB.Connection");
//Если необходимо в дальнейшем оперировать цифровыми значениями колонок,то ставим признак HDR = NO
//если необходимо производить загрузку с учетом псевдонимов в 1й строке,то ставим HDR = YES
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = "+ИмяФайла;
СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 8.0"+";HDR=NO;IMEX=1"";";

Попытка
еБаза.Open(СтрокаПодключения);
Исключение
Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;

влетает с 2007 в исключение с ошибкой:
Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft JET Database Engine): Внешняя таблица не имеет предполагаемый формат

С форматом 2003-го все нормально грузится

mov68
26.10.2010 14:20 Ответ № 6

Должны быть другие реквизиты для 2007 в строке подключения? обшариваю иннет, пока не нашел.

E_Migachev
26.10.2010 14:57 Ответ № 7

(5) При использовании Office 2007 необходимо заменить в примере следующую строку кода:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
Замените эту строку кода следующей строкой:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=

mov68
26.10.2010 15:01 Ответ № 8

А Extended Properties оставляем Excel 8.0?

E_Migachev
26.10.2010 15:05 Ответ № 9

(8) тоже меняется на:
Extended Properties=Excel 12.0

E_Migachev
26.10.2010 15:08 Ответ № 10

Код 1C v 8.х

  // читаем данные
оЕксел = Новый COMОбъект("Excel.Application");
Version = оЕксел.Version;

Версия = Число(Сред(Version,1,Найти(Version,".")-1));
оЕксел.Quit();
Для Каждого Лист ИЗ СписокЛистов Цикл
ОбработкаПрерыванияПользователя();
Попытка
conn = NEW COMObject("ADODB.Connection");
conn.Provider = "Microsoft." + ?(Версия = 12,"ACE.OLEDB.12.0","Jet.OLEDB.4.0");
conn.Properties("Extended Properties").Value = "Excel " + ?(Версия = 12,"12.0","8.0") + ";HDR=NO;IMEX=1;MAXSCANROWS=200;FIRSTROWHASNAMES=1";
rs = NEW COMObject("ADODB.RecordSet");
conn.Open(ПолноеИмяФайла);
rs.ActiveConnection = conn;
rs.CursorType = 3;
rs.LockType = 2;
rs.Open("S_elect TOP 2000 * FROM `" + Лист.Значение + "$A:AX` ");

СчСтрок = 0;
КолКолонок = rs.Fields.Count;

Пока НЕ rs.EOF Цикл
rs.MoveNext();

КонецЦикла;

//................................

// Записываем
conn = NEW COMObject("ADODB.Connection");
strConn = "Provider=Microsoft." + ?(Версия = 12,"ACE.OLEDB.12.0","Jet.OLEDB.4.0") + ";"
+ "Data Source=" + FileName + ";Extended Properties=Excel " + ?(Версия = 12,"12.0","8.0");
conn.ConnectionString = strConn;

Попытка
conn.Open();
cmd = NEW COMObject("ADODB.Command");
cmd.ActiveConnection = conn;
Попытка
cmd.CommandText = "CREATE TABLE `MyList` (Value_1 char(255), Value_2 char(255))";
cmd.Execute();
Исключение
КонецПопытки;
cmd.CommandText = "I_nsert INTO `MyList` (Value_1, Value_2) values ('AAA', 'Andrew')";
cmd.Execute();
conn.Close();
Исключение
Сообщить(ОписаниеОшибки());
Попытка
conn.Close();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

КонецПопытки;

mov68
26.10.2010 15:08 Ответ № 11

СПАСИБО, сработало, и как ни странно даже при Extended Properties=Excel 8.0

Вопрос закрыт. Еще раз спасибо.

E_Migachev
26.10.2010 15:49 Ответ № 12

)

andogskiy
12.11.2012 16:19 Ответ № 13

А для серверного варианта базы на управляемых формах не подскажете код?
Приведенный пример выдает ошибку: «Ошибка при вызове метода контекста (Properties): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно.»

DJ_Serega
12.11.2012 18:30 Ответ № 14

а я подключаю Excel вот таким образом:Код 1C v 8.х

 
Попытка
Эксель = Неопределено;
Книга = Неопределено;
Лист = Неопределено;

Состояние("Выполняется подключение к Excel");
Попытка
Книга = ПолучитьCOMОбъект(Файл, "Excel.Application");
Эксель = Книга.Application;
Исключение
Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(Файл);
КонецПопытки;
Лист = Книга.WorkSheets(1);
Эксель.Visible = Истина;
Исключение
Сообщить("Не удалось подключить Excel." + Символы.ПС + ОписаниеОшибки());
Возврат;
КонецПопытки;

Подсказка: Для редактирования своего ответа щелкните по значку (справа)

Понравилась статья? Поделить с друзьями:
  • Adobe acrobat ошибка 100700
  • Adast коды ошибок
  • Acopos 1045 ошибки
  • Access 2007 номер ошибки 2950
  • Abs ошибка акцент