Ошибка при подключении к adodb connection

   ils108

25.04.17 — 12:06

Добра всем! Подключаюсь к базе следующим образом.

ConnectionString =  «» +

    «Driver={Driver do Microsoft Paradox (*.db )};» +

    «DriverId=538; FIL=Paradox 5.X; » +

    «PWD=» + Пароль + «;» +

    «DefaultDir=» + КаталогФайла + «; DBQ=» + КаталогФайла + «;» +  

    «DataCodePage=ASCII»;

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

    cn.Open(ConnectionString);

    
    ТекстЗапроса = «Select * from » + ИмяФайла;

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

    rs.Open(ТекстЗапроса, cn);

Выскакивает следующая ошибка

{Обработка.ЗагрузкаИзRKeeper.МодульОбъекта(243)}: Ошибка при вызове метода контекста (Open)

    cn.Open(ConnectionString);

по причине:

Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию

   ils108

1 — 25.04.17 — 13:06

http://shot.qip.ru/00Tn5Q-418qb6UGi/

драйвер есть, он x32, кто-то знает как его использовать или где взять для x64 версии?

   ils108

2 — 08.05.17 — 10:28

ап

   ils108

3 — 11.05.17 — 07:41

Подскажите, что в данном случае выступает как источник данных? и где указать драйвер по умолчанию :)

   МихаилМ

4 — 11.05.17 — 08:12

   ils108

5 — 11.05.17 — 08:40

(4) Михаил, можете пояснить?

   МихаилМ

6 — 11.05.17 — 08:58

   ils108

7 — 11.05.17 — 10:15

с другой стороны клиент 1С же x32? и по идее драйвер как раз и должен быть x32 независимо от того, что винда x64?

   МихаилМ

8 — 11.05.17 — 10:27

   ils108

9 — 11.05.17 — 10:43

(8) у меня файловая версия, не серверная

   МихаилМ

10 — 11.05.17 — 10:51

(9) не важно . читайте всю ветку.

   ils108

11 — 11.05.17 — 12:23

скурил все эти ссылки, но так и взлетает.

когда пытаюсь протестить через udl

http://shot.qip.ru/00TvW3-6f35S7oPa/

   ils108

12 — 11.05.17 — 12:26

(10) через Viewer получилось открыть, но все равно непонятно как из 1Ски подключаться

   ils108

13 — 11.05.17 — 12:30

   ils108

14 — 11.05.17 — 12:56

Михаил, выручайте, судя по всему больше никто не зашарил этот момент :)

   МихаилМ

15 — 11.05.17 — 13:51

добавьте к «Driver={Driver do Microsoft Paradox (*.db )};»

строку из ViewODBC.html

   ils108

16 — 11.05.17 — 14:13

(15) попробовал, такая же ошибка

   Fragster

17 — 11.05.17 — 14:15

создать пустой файл .udl, открыть двойным кликом, настроить подключение, сохранить, открыть блокнотом

   ils108

18 — 11.05.17 — 14:17

(17) хорошая идея, но есть ограничение связанное с тем, что там нет нужного драйвера

   Fragster

19 — 11.05.17 — 14:18

(18) так поставь его

   ils108

20 — 11.05.17 — 14:22

(19) нет такого драйвера для x64, да и зачем он если 1Ска x32?

   ils108

21 — 11.05.17 — 14:30

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

АДО.ConnectionString = «Provider=MSDASQL;UID=ODBC;DSN=Personal»;

АДО.ConnectionTimeout = 0;

АДО.Open();

попробовал цепануться через созданное подключение, ругается на разные архитектуры

Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] В указанном DSN архитектура драйвера и архитектура приложения не соответствуют друг другу.

   Fragster

22 — 11.05.17 — 14:53

   ils108

23 — 11.05.17 — 15:00

так, немного сдвинулся, оказалось, что 1Ску накатил x64. Переставил, получается теперь подключиться, но

}: Ошибка при вызове метода контекста (Open)

    rs.Open(ТекстЗапроса, cn);

по причине:

Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Драйвер ODBC Paradox] Внешняя таблица не имеет предполагаемый формат.

   ils108

24 — 11.05.17 — 15:08

таблица .DB естественно

   МихаилМ

25 — 11.05.17 — 15:11

(24)

если в ViewODBC таблица читается, то в 1с читается.

иначе ищите другой драйвер

   ils108

26 — 11.05.17 — 15:17

(25) таблица отображается, но не открывается

http://shot.qip.ru/00TvW3-2f35S7oPl

   МихаилМ

27 — 11.05.17 — 15:20

   ils108

28 — 12.05.17 — 07:23

Залейте пожалуйста драйвер или подскажите ссылку,  не могу нашарить в интернете почему-то

   ils108

29 — 12.05.17 — 07:55

они в файлике odbcjt32.dll лежат

   Бертыш

30 — 12.05.17 — 17:08

У меня родственная проблема. Только у меня вылетает на уровне

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

   Franchiser

31 — 12.05.17 — 17:28

Драйвер настроен через х32 оснастку?

   МихаилМ

32 — 12.05.17 — 18:33

(28)

выкладывайте файл-таблицу из бд.

чтобы подобрать драйвер

   ils108

33 — 16.05.17 — 09:21

(31) [url=http://www.fayloobmennik.net/6989928]Categ.db[/url]

залил табличку.

у меня вышло очень странным образом на данный момент.

// цепляемся через пользовательский DSN

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

_АДО.ConnectionString = «Provider=MSDASQL;UID=ODBC;DSN=Para»;

_АДО.ConnectionTimeout = 0;

_АДО.Open();     

ConnectionString =  «» +

«CollatingSequence=ASCII;DefaultDir=F:1srkeeperRK7 — DB;Driver={Driver do Microsoft Paradox (*.db )};DriverId=538;FIL=Paradox 5.X;FILEDSN=F:1srkeeperRK7 — DBParadox.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ParadoxNetPath=C:WINDOWSsystem32;ParadoxNetStyle=4.x;ParadoxUserName=admin;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;DataCodePage=ASCII;»;

т.е. сначала загружаем DSN, потом подключаюсь по строке. Файлы в таком случае читает, но там кракозябры

   ils108

34 — 16.05.17 — 09:22

   ils108

35 — 16.05.17 — 09:22

(31) пробовал и так и так

   ils108

36 — 16.05.17 — 10:24

на данный момент пришел к загрузке

ConnectionString =  «» + «Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir=» +

ТестКаталог + «;Dbq=» +ТестКаталог+ «;CollatingSequence=ASCII;»;

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

cn.Open(ConnectionString);

ТекстЗапроса = «Select * from » + ИмяФайла;

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

rs.Open(ТекстЗапроса, cn);

и т.д.

данные загружает, но там кракозябры (

   ils108

37 — 16.05.17 — 10:30

   ils108

38 — 16.05.17 — 10:33

через Paradox Data Editor смотрю — данные в норме.

через ODBC Viewer  — кракозябры

   Вафель

39 — 16.05.17 — 10:35

кодировка не та

   ils108

40 — 16.05.17 — 10:39

(39) согласен =)

не могу понять как настроить

   ils108

41 — 17.05.17 — 12:49

  

ils108

42 — 17.05.17 — 14:02

ап

  

Dmitry_333

19.04.19 — 10:57

Всем доброго дня!

Господа, выручайте, пожалуйста-)

Написал обработку на своем компе, все отлично работает. Перенес на комп с ОС winserver 2008  и началось. Выдает вышеописанную ошибку. Перерегистрировал под админом все возможные dll-ки, начиная от comcntr до всех в папке C:Program Files (x86)Common FilesSystemado. Скачал и переустановил MDAC. Никакого результата.

Дабы отсечь варианты, соединение com V83.Comconnector создается, проверял. Проблема именно с ADODB.Connection. Инет весь перерыл, но ответ ничего не помогло, помогите пожалуйста.

  

Skylark

1 — 19.04.19 — 11:18

1. Нужного объекта всё же не зарегистрировано

2. На нужный объект нет прав у пользователя от имени которого 1С

  

Dmitry_333

2 — 19.04.19 — 11:36

(1) 1. Как понять, какой тогда объект нужно зарегистрировать?

2. От админа все делаю.

  

Skylark

3 — 19.04.19 — 12:03

(2) От админа ты запускаешь 1С. Не знаю как насчет файловой 1С, а в серверном варианте надо проверять права пользователя под которым запускается агент сервера 1С вроде. Там создается служебный 1cv8user или что-то в этом духе.

  

Dmitry_333

4 — 19.04.19 — 12:05

(3) Файловая у меня…

  

Dmitry_333

5 — 19.04.19 — 12:44

Вот сейчас еще проверил создание COMОбъект(«EXCEL.Application»).

Тоже работает.

Проблема только с гребаным  ADODB.Connection

  

1Сергей

6 — 19.04.19 — 12:48

msado15.dll тоже зарегал?

  

Dmitry_333

7 — 19.04.19 — 12:56

(6) ага, его в первую очередь

  

NorthWind

8 — 19.04.19 — 13:33

(0) битность того что регали совпадает с битностью 1С?

  

NorthWind

9 — 19.04.19 — 13:37

Если вы ставите мдак, то рискну предположить что библиотека адо 32-битная. А процесс 1С, из-под которого вы создаёте объект — тоже? Должен быть тоже 32 бита.

  

Dmitry_333

10 — 19.04.19 — 13:56

(8) Операционка 64, 1С 32. Регал соответственно: C:WindowsSysWOW64regsvr32 «C:Program Files (x86)и т.д.

  

Сияющий в темноте

11 — 19.04.19 — 14:57

пишем простой скритп на vbscript

Set o=CreateObject(«AdoDb.Connection»)

запускаем его через wscript.exe из system32 и из SysWow64 и смотрим на результат.

добиваемся,чтобы не было ошибок.

если работает из system32, то зарегана 64битная версия,если из syswow64,то 32 битная,если не откуда,то ничего не зарегано.

  

Dmitry_333

12 — 19.04.19 — 15:34

(11) Проделал. Запускал из командной строки. Из system32 не выдало никаких сообщений, ни ошибок. Это значит сработало?

Из SysWow64 вышло окно с ошибкой, что невозможно создание объекта контейнером ActiveX/

  

VS-1976

13 — 19.04.19 — 16:00

(12) У тебя это всё запускается под пользователем с правами Администратор? Если нет попробуй под пользователем с полными правами запустить. Если клиент-серверная вещь, то службу нужно запускать под пользователем с админискими правами.

  

NorthWind

14 — 19.04.19 — 16:04

(12) это значит, что у вас зарегистрирована 64-битная версия ADO, а 32-битная не зарегистрирована. Невозможно создание объекта как раз потому, что класс не зарегистрирован.

  

NorthWind

15 — 19.04.19 — 16:05

вообще это довольно странно, потому что даже под Win10 есть обе версии ADO — и 32 и 64 — «из коробки»

  

Dmitry_333

16 — 19.04.19 — 16:15

(13) Да, под админом.

(14) хм…, странно. Регистрировал строкой: C:WindowsSysWOW64regsvr32 «C:Program Files (x86)Common FilesSystemadomsado15.dll Вроде же так регистрируется 32-битные компоненты из под 64-битной ОС. Или я что-то неправильно делал?

  

Skylark

17 — 19.04.19 — 16:43

попробуй выполнить comexp.msc /32

и посмотреть есть ли там твоя компонента

  

Dmitry_333

18 — 19.04.19 — 16:51

(17) Она там есть, но потому я ее вручную там создавал

  • Remove From My Forums
  • Общие обсуждения

  • Помогите пожалуйста, при выполнении следующей строчки кода

    Dim con As Object = CreateObject(«ADODB.Connection»)

    в Windows Vista (лицензионная) получаю следующую ошибку:

    System.Exception: Cannot create ActiveX component.
    at Microsoft.VisualBasic.Interaction.CreateObject(String ProgId, String ServerName)

    Как решить данную проблему?

    • Изменен тип
      Igor Leyko
      18 октября 2010 г. 17:09
      давность и отсутствие активности в теме
  • Remove From My Forums
  • Question

  • I have an HTA file that is basically a compilation of scripts that I use, and share with others.  I’ve been developing it since 2011.  One of the earliest scripts added was searching AD for servers and returning what OU they were found in. 
    So to say the least, this has been a tried and true script.  Now all of a sudden last week, I started getting an error saying the script was causing the web browser to run slowly.  I rem’d out On Error Resume Next and found the offending line is
    ‘Set objConnection = CreateObject(«ADODB.Connection»).  The error statement is «activex component can’t create object: ‘ADODB.Connection’».  I’ve checked with another person who uses my toolbox and they said it works just fine
    for them.  So luckily it’s only affecting me right now, but who knows how long that will last.  My company locks down our computers so there’s not a lot I can do to make changes to my computer.  I’ll try anything you guys suggest, I just might
    not have rights to do so.

    • Edited by

      Monday, March 4, 2019 2:26 PM

    • Moved by
      Bill_Stewart
      Wednesday, September 4, 2019 6:46 PM
      This is not «design solution for me» forum
  • Remove From My Forums
  • Question

  • I have an HTA file that is basically a compilation of scripts that I use, and share with others.  I’ve been developing it since 2011.  One of the earliest scripts added was searching AD for servers and returning what OU they were found in. 
    So to say the least, this has been a tried and true script.  Now all of a sudden last week, I started getting an error saying the script was causing the web browser to run slowly.  I rem’d out On Error Resume Next and found the offending line is
    ‘Set objConnection = CreateObject(«ADODB.Connection»).  The error statement is «activex component can’t create object: ‘ADODB.Connection’».  I’ve checked with another person who uses my toolbox and they said it works just fine
    for them.  So luckily it’s only affecting me right now, but who knows how long that will last.  My company locks down our computers so there’s not a lot I can do to make changes to my computer.  I’ll try anything you guys suggest, I just might
    not have rights to do so.

    • Edited by

      Monday, March 4, 2019 2:26 PM

    • Moved by
      Bill_Stewart
      Wednesday, September 4, 2019 6:46 PM
      This is not «design solution for me» forum

Всем привет!

1C 8.3.13.1644
Windows Server 2012 (6.2.9200)

После внепланового отключения сервера, при попытке соединиться с базой через 1С (COM, ADODB.Connection) валится ошибка:

-2147221164 (0x800040154): Класс не зарегистрирован

{Справочник._ИБ.Команда.ТестПодключения.МодульКоманды(35)}: Ошибка при вызове конструктора (COMОбъект)
ОбъектБаза = Новый COMОбъект(«ADODB.Connection»);
по причине:
-2147221164(0x80040154): Класс не зарегистрирован

1С использует такую строку для подключения:
Driver={Oracle in OraClient11g_home1};UID=test1c;PWD=test1c;DBQ=10.0.0.1/work

Создал для теста скрипт: Set o=CreateObject(«AdoDb.Connection»)

Запускаю его через cmd в диалоговом режиме из папки %windir%system32 wscript.exe //I D:testado.vbs — ошибок не валится

Когда запускаю его из папки %windir%SysWOW64 wscript.exe //I D:testado.vbs — валится ошибка, т.е. получается не работает 32х битный ADODB.Connection?…

Что так же делал, из того что помню.

Переустанавливал все .NET Framework, AccessDatabaseEngine, MDAC_TYP, и пр

В службе компонентов создавал новое приложение COM+ с указанием comcntr.dll

Перерегистрировал comcntr.dll, msado15.dll

Начал уже грешить на Oracle Provide for OLE DB, т.к. не увидел его наличие в поставщиках данных…

OraOLED dll показывает что зарегистрирована.

Через 32х разрядный источник ODBC соединение работает. Проверял соединение через ХЕ драйвер и через драйвер OraClient11g.

Через sqldeveloper соединения так же работают.

Переустановил ODTwithODAC1120320_32bit.
скрин не мой, галочки отмечал все…

Возможно что то упустил из того что уже делал…

Содержание

  • Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты ‘comcntr’ отличается от версии корневого модуля ‘core83’
    • Заполнение внешней таблицы
    • Выборка данных и запись
    • Использование хранимых процедур
  • Новые записи:

Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты ‘comcntr’ отличается от версии корневого модуля ‘core83’

Часто бывает, что при настроенной синхронизации после обновления платформы появляется ошибка «Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты ‘comcntr’ отличается от версии корневого модуля ‘core83′». Так происходит потому, что автоматически не зарегистрировалась компонента comcntr.dll из-за проблем с правами пользователя на компьютере.

Решить данную проблему можно двумя способами.

Способ №1.

Переустановить платформу под правами Администратора или под пользователем, у которого есть такие права.

Способ №2.

Если не получилось как в способе №1, то можно вручную зарегистрировать самому эту компоненту.

Перед этим нам необходимо изменить Параметры контроль учетной записи.

Для Windows 7 нам необходимо зайти в Пуск затем в Панель управления.

Для Windows 10 нам необходимо в левом нижнем углу панели задач в строке поиска набрать Панель управления и перейти по открывшейся ссылке.

В правом верхнем углу Панели управления выбрать Просмотр-Мелкие значки и затем в списке перейти в Учетные записи пользователей.

Там выбрать Изменить параметры контроля учетных записей.


Затем поставить ползунок в самом нижнем положении.

И перезапустить компьютер.

После перезагрузки необходимо:

Для Windows 7 надо перейти в Пуск, затем в строке поиска ввести cmd.exe,нам покажет что найдена Командная строка и, щелкнув по ней правой клавишей мыши, выбрать «Запуск от имени администратора».

Для Windows 10 нам необходимо в левом нижнем углу панели задач в строке поиска набрать Командная панель или cmd.exe и, щелкнув по ней правой клавишей мыши, выбрать «Запуск от имени администратора».

У нас откроется Командная строка, где нам необходимо ввести команду:

1.Для платформы x86

2.Для платформы х64

Затем нажать клавишу Enter.

Если все сделали правильно, то увидите вот такое окно.

После этого необходимо перезагрузить компьютер. Как включится, пробуйте снова сделать синхронизацию.

Пришлось недавно ближе поработать с объектами ADODB. Давно этого не делал, так что пришлось снова смотреть в старый код, а что-то и в интернете поискать. Решил скомпоновать базу здесь, в блоге — для дальнейшего возвращения.
Работа с ADODB производится через несколько объектов:
ADODB.Connection — Объект производит подключение к источнику данных, а так же трансляцию команд и наборов данных
ADODB.RecordSet — Объект предоставляющий механизмы работы с набором данных, такие как получение, модификация, удаление или добавление данных.
ADODB.Command — Объект, так же предоставляющий механизмы работы с наборами данных, но, в отличие от RecordSet, не возвращает данные на клиента.
ADODB.Connection

Перед тем как начать работать с данными из внешнего источника необходимо установить с ним связь, для этого вызывается функция Open объекта Connection, в единственный параметр этой функции передается строка ConnectionString с описанием параметров подключения.
Попытка ADOСоединение = Новый COMОбъект(«ADODB.Connection»); ADOСоединение.Open(«Provider=SQLOLEDB.1; |Persist Security Info=False; |User ID=»+Пользователь+»; |Password=»+ Пароль+»; |Initial Catalog=»+ База+»; |Data Source=»+ Сервер); Возврат ADOСоединение; Исключение КонецПопытки;
Provider — Имя драйвера источника данных (к примеру SQLOLEDB.1 для MS SQL server)
Persist Security Info — необходимость использования шифрованого канала
User ID — Имя пользователя внешнего источника
Password — Пароль пользователя
Initial Catalog — Имя базы внешного источника
Data Source — Имя сервера
ADODB.RecordSet
Открытие набора данных для всей таблицы. Этот вариант хорош тем, что есть возможность указания дополнительных параметров набора данных.
RecordSet.Open(Источник, Соединение, ТипКурсора, ТипБлокировки, Параметры)
В приведенном ниже примере набор данных открывается с параметрами
Источник — «IMPORT_PRODUCTS»
Соединение — мADOСоединение
ТипКурсора — «0» (adOpenForwardOnly)
ТипБлокировки — «2» (adLockPessimistic)
Параметры — «2» (adCmdTable)
ADOНаборДанныхТовары = Новый COMОбъект(«ADODB.RecordSet»); ADOНаборДанныхТовары.Open(«IMPORT_PRODUCTS», мADOСоединение, 0, 2, 2);
Открытие набора данных по запросу (использование дополнительных параметров вызывает исключения)
ТекстЗапросаТоваров = «SELECT * | FROM | where in (SELECT FROM where (( = ») |or ( = ‘NULL’) or( = ‘1’)))»; ADOНаборДанныхТовары = Новый COMОбъект(«ADODB.RecordSet»); ADOНаборДанныхТовары .Open(ТекстЗапросаТоваров, мADOСоединение);

Заполнение внешней таблицы

При необходимости очистить таблицу внешнего источника данных, и загрузить туда обновленные данные.
Подключаемся к внешней базе
Попытка СтрокаСоединения = «Provider=SQLOLEDB.1; |Persist Security Info=False; |User ID=»+Пользователь+»; |Password=»+ Пароль+»; |Initial Catalog=»+ База+»; |Data Source=»+ Сервер); Connection = Новый COMОбъект(«ADODB.Connection»); Connection.Open(СтрокаСоединения); Исключение Возврат; КонецПопытки; С помощью объекта ADODB.Command выполняем запрос по удалению данных из таблицы по определенному условию. При этом, в CommandText прописываем сам запрос, и важно указать CommandType равным 1.
Command = Новый COMОбъект(«ADODB.Command»); Command.CommandTimeout = 100; Command.CommandText = «DELETE FROM .. WHERE PERIOD_ID = Convert(datetime,’»+Лев(Строка(ДатаНач),10)+»‘,103)»; Command.CommandType = 1; Command.ActiveConnection = Connection; Command.Execute();
Устанавливаем новый запрос, который запишет в таблицу отобранные данные, и выполняем его.
// Выборка данных за прошлый месяц Выборка = Запрос.Выполнить.Выбрать(); Пока Выборка.Следующий() Цикл Command.CommandText = «INSERT INTO ..(PERIOD_ID, CO_ID, ART_ID, S ) VALUES (» + » Convert(datetime,’»+Лев(Строка(ДатаНач),10)+»‘,103)» + «,NULL» + «,»+Формат(Выборка.Код, «ЧГ=») + «,»+Строка(?(Сумма = 0,»0″,Формат(Сумма,»ЧРД=.; ЧГ=; ЧО=»))) +»)»; Попытка Command.Execute(); Исключение Сообщить(«Ошибка записи данных в базу: «+ОписаниеОшибки()); КонецПопытки; КонецЦикла;

Выборка данных и запись

Вариант ситуации, когда необходимо выполнить выборку данных, и записать результат для дальнейшей обработки. (Не забываем создавать объект Connection)
В данном случае используется объект ADODB.Recordset, который позволяет получить набор записей.
CommandText = «select g_id, saledate, sqty, scost from dbo.»+НастройкиADODB.dbo+»(‘»+Формат(НачПериода,»ДФ=yyyyMMdd»)+»‘,’»+Формат(КонПериода,»ДФ=yyyyMMdd»)+»‘) where g_id in («+СтрокаКодовТМЦ+»)»; Попытка rsRES = NEW COMObject(«ADODB.Recordset»); rsRES.Open(CommandText, Connection); Исключение Connection.Close(); Возврат; КонецПопытки Пока не rsRES.eof() Цикл НоваяЗапись = НаборЗаписей.Добавить(); Для х = 0 по 3 Цикл НоваяЗапись = rsRES.Fields(х).Value; КонецЦикла; rsRES.MoveNext(); КонецЦикла; НаборЗаписей.Записать(Истина); rsRES.Close(); Connection.Close();
Кстати, советую пользоваться функцией EOF вместо RecordCount, так как последняя очень не надежна, неопределенная во времени выполнения и может привести к «залипанию» процесса — подробнее можно почитать на форумах.

Использование хранимых процедур

Хранимые процедуры можно вызвать просот из запроса, вписав в начале текста слово «exec», либо указав соответствующий CommandType и название хранимой процедуры в CommandText.
Command = Новый COMОбъект(«ADODB.Command»); Command.CommandTimeout = 100; Command.ActiveConnection = Connection; Command.CommandText = «add_image»; Command.CommandType = 4; Создаем параметр посредством объекта Parameter (на перевес этому можно воспользоваться методом CreateParameter), и добавляем его методом Append в наше подключение.
Парам = Новый COMОбъект(«ADODB.Parameter»); Парам.Name = «@code»; Парам.Direction = 1; //1 — adParamInput Парам.Type = 201; // Парам.Size = 255; Парам.Value = ВнутреннийКод; Command.Parameters.Append(Парам);
Переводим файл, который хотим передать в двоичный поток, создаем и добавляем параметр
Поток = Новый COMОбъект(«ADODB.Stream»); Поток.Type = 1; //StreamTypeEnum.adTypeBinary = 1 StreamTypeEnum.adTypeText = 2 Поток.Open(); Поток.LoadFromFile(ПолноеИмяФайла); локПотокБайт = Новый ComSafeArray(Поток.Read()); Парам = Новый COMОбъект(«ADODB.Parameter»); Парам.Name = «@file_data»; Парам.Direction = 1; //1 — adParamInput Парам.Type = 205; //205 — adLongVarBinary Парам.Size = локПотокБайт.GetLength(); Парам.Value = локПотокБайт; Command.Parameters.Append(Парам); Command.Execute();

Добрый день, всем.
Буду признателен за советы, мысли, как решить неожиданно возникшую проблему с 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");

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

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

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account


Closed

CT144 opened this issue

Oct 18, 2017

· 21 comments


Closed

COMОбъект ADODB.Connection в 18 версии глючит

#559

CT144 opened this issue

Oct 18, 2017

· 21 comments

Comments

@CT144

Один и тот же «скрипт»:
Лог.Отладка("Пытаемся соединиться!"); Соединение = Новый COMОбъект("ADODB.Connection"); _СтрокаСоединения = ПолучитьСтрокуСоединения(БД); Лог.Отладка(_СтрокаСоединения); Результат = Соединение.Open(_СтрокаСоединения); Лог.Отладка("Соединились");
на разных версиях разные результаты:
ОТЛАДКА — Начали (OneScript v.1.0.18.13) …
ОТЛАДКА — Пытаемся соединиться!
ОТЛАДКА — Provider=SQLOLEDB; Data Source=»SQLsrv»; Initial Catalog=»debug_2″; User Id=»aaaaa»; Password=»zzzzz»;
ОТЛАДКА — {Модуль ADOSQL.os / Ошибка в строке: 29 / Внешнее исключение (System.Reflection.TargetInvocationException): Адресат вызова создал исключение.}
ОТЛАДКА — . . . . . ЗАКОНЧИЛИ

ОТЛАДКА — Начали (OneScript v.1.0.17.90) …
ОТЛАДКА — Пытаемся соединиться!
ОТЛАДКА — Provider=SQLOLEDB; Data Source=»SQLsrv»; Initial Catalog=»debug_2″; User Id=»aaaaa»; Password=»zzzzz»;
ОТЛАДКА — Соединились
ОТЛАДКА — . . . . . ЗАКОНЧИЛИ

@nixel2007

@CT144

@nixel2007

@CT144 это призыв последнего правившего сом-объекты :)

@CT144

@dmpas

@CT144 это такой способ позвать меня в обсуждение.

@EvilBeaver

Ну, во-первых, надо найти, где выскочило из заслона System.Reflection.TargetInvocationException и выдавать не его, а InnerException от него.

@EvilBeaver

@CT144 можешь дать точный кусок кода, чтобы не гадать, а сразу запустить?

@CT144

Лог.Отладка(«Пытаемся соединиться!»);
Соединение = Новый COMОбъект(«ADODB.Connection»);
_СтрокаСоединения = «Provider=SQLOLEDB; Data Source=»»»+ИмяСервера+»»»;
Initial Catalog=»»»+ИмяБД+»»»; User Id=»»»+Пользователь+»»»; Password=»»»
+Пароль+»»»;»;
Лог.Отладка(_СтрокаСоединения);
Попытка
Соединение.Open(_СтрокаСоединения);
Результат = Истина;
Исключение
Результат = Ложь;
ВызватьИсключение(«НЕ удалось установить соединение с БД:»+
_СтрокаСоединения);
КонецПопытки;
Лог.Отладка(«Соединились»);

2017-10-20 15:52 GMT+03:00 Andrei Ovsiankin <notifications@github.com>:

@Tavalik

Ишус закрыт, но у меня такая же ошибка. Версия OneScript — 1.0.19.105. При работе с ADODB.Connection получаю ошибку:

(System.Reflection.TargetInvocationException): Адресат вызова создал исключение.}

Но блин, в версии 1.0.17.90 все работает отлично.

Как же так?

@EvilBeaver

@Tavalik

@dvakor

Попробуйте ночную сборку, в ней фикс должен присутствовать. В 1.0.19.105 ошибка не была исправлена ( #670 )

@EvilBeaver

@Tavalik

Нет, в 1.0.20 работает. Спасибо. Ждем релиза и рабочего отладчика в 20.

@nixel2007

@Tavalik

Расскажите тогда как? Из магазина ставится версия расширения 0.2.0. На сайте тоже только эта версия http://oscript.io/downloads. Где взять vsix для Oscript 20? Или я чего-то не понимаю?

@nixel2007

@nixel2007

@Tavalik

Спасибо. Было бы здорово и на сайт добавить.

@EvilBeaver

@Tavalik то что в ночной сборке отсутствует отладчик — это поломка. Он должен там быть. Посмотрю, что случилось.

@EvilBeaver

@Tavalik отладчик для 20-ки опубликован на сайте

OK found the problem. Looks like at some point, one of the external references for the VBA stuff was unticked (ADO 2.8 Recordset). I have added back the reference and it seems to work OK now.

Since I’ve somehow got 3 upvotes for answering my own question (!), I’d better put a bit more detail in case other people are seeing this problem:

In the Visual Basic editor, under Tools -> References, I had Microsoft ActiveX Data Objects 2.8 Library selected. But Microsoft ActiveX Data Objects Recordset 2.8 Library was unselected. Interestingly, this library doesn’t even appear as an option when looking at it under Windows 7, but the macros work without it.

One more note since evidently a lot of people have this problem… My answer above did solve the problem, but only until certain people edit the file again, at which point, their version of Office automatically re-creates the problem, and I had to solve it again.

There are two longer-term solutions:

1) You can use late binding, and get rid of the referenced library entirely. See http://support.microsoft.com/kb/245115 for more details on this.

2) For my purposes, I moved the macros into another workbook entirely — these macros should only be run from the central server anyway (people just viewing the roster won’t have the ODBC data source set up, so the macros won’t run anyway). So now the first step the VBA in the macro’s workbook does is to open up the actual roster workbook, and it then runs the rest of the VBA code unchanged.

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

Добрый день, всем.
Буду признателен за советы, мысли, как решить неожиданно возникшую проблему с 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");

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

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

  • 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

Понравилась статья? Поделить с друзьями:
  • Ошибка при подключении к adobe
  • Ошибка при подключении к ado
  • Ошибка при подключении информационной базы класс не зарегистрирован
  • Ошибка при подключении интернета через телефон
  • Ошибка при подключении интернета с мобильного