Имя: Пароль:
1C
 
Подключение к БД Access. Источник данных не найден и не указан драйвер по умолчанию.
0 Dmitry_333
 
27.04.19
14:13
Всем почти летней весенней субботы!-)

Написал обработку на свом компе, в начальной своей задаче она подрубается к бд access для последующего изъятия оттудова данных, все прекрасно работает. Перенес на комп с Win Server 2008 и все встало.

Сначала была проблема с созданием COMОбъект("ADODB.Connection"), о чем вопрошал на форуме на прошлой неделе.

Ладно, эту проблему разрешил, но следующая настигла буквально на следующей строчке.

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

Собственно, если загуглить эту ошибку, ответов очень много, в том числе и на данном форуме, но 90% из них касаются подключения к базам MS SQL. Мне из этого ничего не помогло.

Теме не менее, что было предпринято и проделано:

1. Скачан свежий MDAC и переустановлен.

2. Дважды скачаны и установлены драйверы для Access

3. Дважды переустановлен Office

Ничто из этого не помогло ни разу.

Операционка 64 бит, офис 32 бит, 1С 32 бит

На ноуте, где тестировалась эта же обработка, расклад по битности такой же, только ОС Windowc 7.

В администраторе источников данных ODBC все один в один, перепроверил несколько раз.

Что еще предпринять, даже предположить не могу...:)
15 hhhh
 
27.04.19
15:06
(11) у меня

Driver={Microsoft Access Driver (*.mdb)};Dbq=
16 Dmitry_333
 
27.04.19
15:09
(15) так тоже пробовал - ошибка как в теме сабжа...
17 Dmitry_333
 
27.04.19
15:14
(12) а что с реестром-то делать? Открыл, в правой части пусто.
18 hhhh
 
27.04.19
15:20
(16) так вы DBQ большими буквами фигачите, сервер такого не прощает.
19 Dmitry_333
 
27.04.19
15:29
(18) переписал на Dbq - ошибка таже.

Проблема где-то в операционке мне кажется, вот только где...
20 hhhh
 
27.04.19
15:34
(17) ну нашли там Driver={Microsoft Access Driver эту строчку?
21 МихаилМ
 
27.04.19
15:44
22 Dmitry_333
 
27.04.19
16:22
(20) Нет, не вижу
23 Garykom
 
гуру
27.04.19
16:25
Имхо проблема в админе и правах, или в чем то не доустановленном или ошибках в "комп с Win Server 2008".
24 Garykom
 
гуру
27.04.19
16:30
Да если требуется только изымать данные из mdb то попробуй https://github.com/brianb/mdbtools

А конкретно https://github.com/lsgunth/mdbtools-win тупо экспорт в csv и далее работа с ними.
25 Garykom
 
гуру
27.04.19
16:31
(24)+ Тут немного инфы https://habr.com/ru/post/309126/
26 Dmitry_333
 
27.04.19
16:31
(23) (24) (25) Благодарю.
27 Garykom
 
гуру
27.04.19
16:45
(26) Не за что, инет сила.

Только что протестил, мелкие таблички мгновенно распаковывает.
mdb-export 'Northwind.mdb' 'Products' > Products.csv
https://i.paste.pics/ad239bcb06c474431080f0026950bf61.png
28 Garykom
 
гуру
27.04.19
16:46
(27)+ Но не проверял что с кириллицей будет, могут быть проблемы.

У меня базы с русским нету ибо нет ms office дома
29 Garykom
 
гуру
27.04.19
16:50
(28) Русские имена таблиц болт
30 Dmitry_333
 
27.04.19
16:53
(29) все имена на латинице. Вот только боюсь что c github быстро разобраться не получится, я о нем раньше только слышал.

Если покопать в сторону админа и прав, с чем можно поиграться?
31 NorthWind
 
27.04.19
16:53
(7) на самом деле тут может быть проблема. Движок Jet 4.0 изымался из висты и из каких-то младших версий MDAC (кажется из MDAC 2.8, хотя могу ошибаться), поэтому то что установили MDAC - еще не гарантирует, что оно будет работать. Такого рода проблемы у меня когда-то давно были. С учетом того что (0) нигде не указывает, что у него W2008 R2, возможно, у него те же проблемы, что и с вистой - т.е. 32-битный Jet 4.0 отсутствует, а поставить он его не может потому что не знает как. Поэтому же не работают и ODBC-драйверы - потому что для работы с MDB им по-любому нужен движок Jet, а его нет в системе.
32 Dmitry_333
 
27.04.19
16:56
(31) Винда 2008 R2.
33 Garykom
 
гуру
27.04.19
16:56
(30) Кириллица cp1251 внутри таблиц в записях все ок, проблема только имена таблиц и возможно полей.

Там ничего разбираться не надо с гитхаб просто скачать https://github.com/lsgunth/mdbtools-win/archive/master.zip и распаковать

Далее mdb-export 'ИмяФайла.mdb' 'ИмяТаблицы' > ИмяТаблицы.csv
34 NorthWind
 
27.04.19
17:00
(32) Вообще немного странно, потому что R2 - это больше "семерка", чем "виста", и Jet 4.0 32-битный в нем должен быть.
35 Garykom
 
гуру
27.04.19
17:01
Сервер 1С точно 32 бит?
36 NorthWind
 
27.04.19
17:02
Вообще во многих источниках говорят про то что Jet устарел и рекомендуют перейти на более новую версию движка
https://www.microsoft.com/EN-US/DOWNLOAD/DETAILS.ASPX?ID=13255
причем он бывает и 32-битный, и 64-битный
37 Dmitry_333
 
27.04.19
17:03
(35) База файловая, 1С-ка 32 битная.
38 NorthWind
 
27.04.19
17:03
но вам тогда придется поменять строку подключения
39 Garykom
 
гуру
27.04.19
17:04
(36) Проще Microsoft SQL Server Express поставить и через него уже
40 Garykom
 
гуру
27.04.19
17:05
(39) Оттуда из строчку подключения дернуть из SQL Server Management Studio
41 NorthWind
 
27.04.19
17:05
(39) а причем тут скуль? Это же разные вещи - формат скуля и настольный формат ACE (ранее MDB)
42 Garykom
 
гуру
27.04.19
17:06
(41) Он требуемое в комплекте поставит в т.ч. для доступа к mdb ))
43 Dmitry_333
 
27.04.19
17:06
(36) самое печальное, что я уже скачивал и устанавливал эту утилитую

А про строку тогда можно более подробнее?
44 NorthWind
 
27.04.19
17:06
другое дело, что скуль до кучи и этот движок может притащить с собой, но я в этом не уверен
45 NorthWind
 
27.04.19
17:07
(43) Сейчас гляну
46 Dmitry_333
 
27.04.19
17:07
(39) На серваке 60 баз-) отдельно одну базу не вариант на него ставить, а 60 на 10 гб не станут-)
47 Garykom
 
гуру
27.04.19
17:08
Попробуй все же через mdb-export вытащить как в (33), если все ок то и нафик, зато решение универсальное и даже под linux работает, если 1С там
48 Dmitry_333
 
27.04.19
17:09
(47) тащить через командную строку?
49 Garykom
 
гуру
27.04.19
17:10
(48) Дык проверенное решение.
Можно конечно извратиться и на основе исходников ВК наваять но нафига?
50 Dmitry_333
 
27.04.19
17:11
(49)не, я уточняю-)
51 NorthWind
 
27.04.19
17:12
(45) У меня станцевало вот так
Provider=Microsoft.ACE.OLEDB.12.0;Data Source="D:\Documents\Programming\Trade\DB\e-scales.mdb"
52 NorthWind
 
27.04.19
17:13
с 32-битным движком. Вот только что специально установил по ссылке в (36).
53 NorthWind
 
27.04.19
17:16
от старенького Jet4 отличается тем, что все исключения, касающиеся базы - на английском, а не на русском. А так разницы особой не вижу.
54 Dmitry_333
 
27.04.19
17:16
(51) у меня на ноуте с Виндой 7 сегодя тоже под этой стройкой станцевало на ура...
а на этом гребаном серваке болт: Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно.
55 Garykom
 
гуру
27.04.19
17:16
(33)+ Уточнение что внутри mdb была кириллица cp1251 а после экспорта в csv там utf8
56 NorthWind
 
27.04.19
17:18
(55) внутри mdb cp1251? Это, наверно, какой-то совсем старый mdb, потому что уже в формате Access 2000 они все шли с UTF-16 Unicode. Я других и не видел тыщу лет.
57 NorthWind
 
27.04.19
17:19
(54) а вы движок перед этим по ссылке поставили? Какой битности? Надо было 32-битный, раз у вас 1С файловая и 32-битная.
58 Dmitry_333
 
27.04.19
17:21
(57) обязательно. И комп (сервак) перезапустил. 32 битный, 64 даже не ставится, пишет не предназначен для данного ПО.
59 Garykom
 
гуру
27.04.19
17:21
(56) А хрен его знает что там внутри, может и UTF16.
Но на выходе UTF8
60 NorthWind
 
27.04.19
17:23
(59) ну если просто открывать на просмотр (например фаром по F3) файл MDB от Access 2000-2003, то видно, что строки там лежат в UTF-16 LE. Собственно, она нативная для современных виндов, так что удивительного тут мало.
61 NorthWind
 
27.04.19
17:28
(58) не предназначен? Вы хотите сказать, что сервер у вас 32-битный?
Тогда попробуйте сделать вот что. Создайте на нем файл 111.udl и запустите его на исполнение двойным щелчком.
Что вы увидите на закладке "Поставщик данных"?
62 Garykom
 
гуру
27.04.19
17:28
63 NorthWind
 
27.04.19
17:32
+ (61) как вариант, вы можете вообще полностью сконструировать и протестировать вашу строку в этом UDL-файле. А потом просто зайти в него и скопировать оттуда данные или написать в строке соединения ADODB.Connection
FILE NAME=[путь]\111.udl
64 Dmitry_333
 
27.04.19
17:42
(61) Операционка 64 бит

это то что на вкладке
https://yadi.sk/i/lzHTDPIHnYr70Q
65 NorthWind
 
27.04.19
18:06
(64) а почему тогда у вас 64-битный инсталлятор движка не запускается на выполнение, как вы пишете в (57)?.. Ладно. Тогда попробуйте сделать следующее. Зайдите в 1С, зайдите в меню Файл, Открыть. Выберите в диалоге открытия Тип файлов - Все файлы (*.*). Найдите ваш 111.udl, щелкните по нему правой кнопкой и выберите последний пункт, "Свойства". Что теперь видите в закладке "Поставщик данных"?
66 Dmitry_333
 
27.04.19
18:09
67 NorthWind
 
27.04.19
18:13
А вот и момент истины. Смотрите. У вас есть аж три (!) 32-битных движка для доступа к Access файлу. Это Microsoft Office 12.0 Access Database Engine, Microsoft Office 16.0 Access Database Engine и Microsoft Jet 4.0 OLE DB Provider. Вы можете проверить их по одному. Выбирайте каждый, заходите в закладку Соединение, прописывайте там путь к файлу и нажимайте Проверить соединение.
68 NorthWind
 
27.04.19
18:14
начните с Jet 4.0, там можно выбрать mdb-файл через диалог. В более новых надо прописывать строку пути руками.
69 Dmitry_333
 
27.04.19
18:37
(68) Результаты следующие: Microsoft Jet 4.0 OLE DB Provider и Microsoft Office 12.0 Access Database Engine - проверка соединения за вершилась успешно.
Попытка проверить соединение от Microsoft Office 16.0 Access Database Engine вызывает исключительную ситуацию с закрытием 1С.
70 NorthWind
 
27.04.19
18:54
(69) ну а теперь все очень просто. Берете любой пример где соединение завершилось успешно и жмете ОК или Применить. После этого внутри файла 111.udl вы имеете рабочую строку соединения, которая гарантированно подключает (вы же проверяли). Этот файл - текстовый, вы можете скопировать из него инфу. Либо можете не копировать, а сделать как написано в конце (61). Пробуйте.
71 Dmitry_333
 
27.04.19
19:01
(70) Невероятно, но гребаный факт, кликаю на этот заполненный файл, выходит сообщение:

"Не удается найти поставщика. Убедитесь, что поставщик был установлен правильно."
72 NorthWind
 
27.04.19
19:02
(71) Вы кликаете откуда, из винды? Зря. Зайдите в 1С, Открыть и Свойства
73 NorthWind
 
27.04.19
19:03
Здесь прикол в том, что когда вы кликаете из винды, вы это делаете из 64-битной среды исполнения. Там все другое. И движков этих - НЕТ. А когда вы делаете то же самое из 1С, вы делаете это из 32-битной среды исполнения.
74 Dmitry_333
 
27.04.19
19:06
Не-не, все предыдущее я проделал как вы все написали, из 1С, через "Свойства".

Сейчас открыт файл в 1С:
"[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\papka\sprut.mdb;Persist Security Info=False"
75 Dmitry_333
 
27.04.19
19:07
Пробую в 1С обработку, опять ошибка...
76 NorthWind
 
27.04.19
19:07
Как выглядит код обработки?
77 NorthWind
 
27.04.19
19:08
вот сейчас, после того как скопировали данные
78 Dmitry_333
 
27.04.19
19:10
Тестирую сразу два вида строки, чтоб быстрее, к первой подключаюсь через попытку

СтрокаПодключения = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + ФайлБазы;

    Connection = Новый COMОбъект("ADODB.Connection");
    
    Попытка
    Connection.Open(СтрокаПодключения);
Исключение
    а = 0;
    
КонецПопытки;


СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\papka\sprut.mdb; Persist Security Info=False";
    
    
Connection.Open(СтрокаПодключения);
79 NorthWind
 
27.04.19
19:12
Строка записана верно. Я бы оставил второй вариант и проверял его.
80 Dmitry_333
 
27.04.19
19:13
(79) Проверяю, но ошибка таже. Фууххх...
81 NorthWind
 
27.04.19
19:14
тогда вариантов пока нет
82 Garykom
 
гуру
27.04.19
19:16
Если операционка x86_64 то может быть такой прикол что тонкий клиент 1С x86 в файловой.
Но еще стоит платформа 1C x86_64 опубликованная на апаче/iis и в ней &НаСервере вполне 64 бит ))
83 Dmitry_333
 
27.04.19
19:18
(82) Отдельная одна база опубликована, но не эта.
84 Garykom
 
гуру
27.04.19
19:19
А как узнал что платформа 1С x86 а не x86_64 ?
85 Garykom
 
гуру
27.04.19
19:20
Сделай ка


&НаСервере
Процедура ИнфоНаСервере()
    
    Сообщить("На сервере------------------------------------------------------");
    СисИнфо = Новый СистемнаяИнформация;
    Сообщить("ВерсияОС: "+СисИнфо.ВерсияОС);
    Сообщить("ТипПлатформы: "+СисИнфо.ТипПлатформы+", ВерсияПриложения: "+СисИнфо.ВерсияПриложения);
    Сообщить("Процессор:"+СисИнфо.Процессор+", Память: "+СисИнфо.ОперативнаяПамять);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ИнфоНаСервере();
    
    Сообщить("На клиенте------------------------------------------------------");
    СисИнфо = Новый СистемнаяИнформация;
    Сообщить("ВерсияОС: "+СисИнфо.ВерсияОС);
    Сообщить("ТипПлатформы: "+СисИнфо.ТипПлатформы+", ВерсияПриложения: "+СисИнфо.ВерсияПриложения);
    Сообщить("Процессор:"+СисИнфо.Процессор+", Память: "+СисИнфо.ОперативнаяПамять);
КонецПроцедуры
86 Dmitry_333
 
27.04.19
19:24
(84) я же их сам ставлю и обновляю-) Ежели она в папке C:\Program Files (x86), следовательно, 32. Или есть какие-то нюансы?

(85) ага, сейчас попробую
87 Garykom
 
гуру
27.04.19
19:27
А сервер то перезагружал после установки (36) ?
88 Dmitry_333
 
27.04.19
19:29
(87) Обязательно!

На Сервере:

ТипПлатформы: Windows x86, ВерсияПриложения: 8.3.13.1513

На клиенте:

ТипПлатформы: Windows x86, ВерсияПриложения: 8.3.13.1513
89 Dmitry_333
 
27.04.19
19:33
Вот только почему функция СисИнфо.ВерсияОС вернула Microsoft Windows 7?? А Компьютер - свойства - показваете Server 2008 r2?... Удивительно.
90 Garykom
 
гуру
27.04.19
19:38
(89) И на сервере и на клиенте "вернула Microsoft Windows 7" ?
91 Dmitry_333
 
27.04.19
19:39
(90) Ага. Ничё непонимаю-)
92 Garykom
 
гуру
27.04.19
19:40
(91) А 1С случаем не в "режиме совместимости" запускаете?
93 Garykom
 
гуру
27.04.19
19:42
94 Dmitry_333
 
27.04.19
19:47
(93) Глянул на всякий, нет, не в режиме совместимости
95 Garykom
 
гуру
27.04.19
19:49
Ну тогда уй его знает, сервак переустановить точно должно помочь. Но не 100% ))
96 Dmitry_333
 
27.04.19
19:52
(95) Снести его нахрен-))

Короч за год с небольшим плотной практики с 1С это первая поблема, решение которой не пришло не изнутри, не извне.

Придется идти обходным путем, как вы выше написали.

Или какого-нить сисадмина 80-го уровня искать-)
97 Dmitry_333
 
27.04.19
19:57
Всемогрмное спасибо за помощь!!!

В особенности Garykom и NorthWind.

По-крайней мере хоть что-то новое узнал-))
98 NorthWind
 
27.04.19
21:14
Спасибо, но вообще все это предельно странно. Особенно странно то, что тест OLEDB-соединения в соответствующей среде проходит успешно. Была бы угроблена винда - не проходил бы тест...
99 Garykom
 
гуру
27.04.19
21:16
(98) Может там учебная версия 1С в которой COM-соединения порезаны ))
100 Garykom
 
гуру
27.04.19
21:16
100
101 NorthWind
 
27.04.19
21:57
(99) Он про ошибку инициализации поставщика говорит. Ошибка явно ADODB. Больше всего похоже, что у него среда исполнения 64-битная и 32-битные провайдеры не работают, но по контексту ничерта не непонятно, как такое может быть, тем более что из-под этой 1Ски в диалоге Data Link тесты соединения проходят. НаСервере тоже проверили. Что это может быть?
102 Dmitry_333
 
27.04.19
22:42
(99) В том-то и дело, что и Comconnector и Excel.Application работают без проблем.
103 Dmitry_333
 
06.05.19
15:53
Не уверен, что в силу редкости описанной задачи велик шанс столкнуться с данной проблемой, но тем не менее.

В результате помогла установка 64-битного Office взамен 32-битного.
104 NorthWind
 
06.05.19
16:50
(103) c 64-битным офисом встал 64-битный OLE-провайдер. Значит, все-таки 64-битный процесс работает от 1С.
105 Сияющий в темноте
 
06.05.19
19:25
Аксесс вполне может запускать подключение в отдельном процессе,тогда битность 1с по барабану.
106 NorthWind
 
06.05.19
20:31
(105) Мне казалось, что ADO с OLEDB провайдером для Access - это точно in-process OLE сервер. И оно реально есть в 32-битной и 64-битной версии, причем ТС в (58) жаловался, что 64-битная версия движка (без MS Office) у него отказалась ставиться. Тут очень много нестыковок - 32-битная 1С, которая не дружит с 32-битным провайдером ADO, 64-битная винда 2008, которая не хочет ставить 64-битный Access Database Engine... Одни загадки.
107 Сияющий в темноте
 
06.05.19
22:18
(106)если нечаянно настроить ком плюс,то и не инпроцесс будет,ине факт,что поставится,т.к.нужно ком плюс тушить на время установки.
просто очень похоже,что бобик зарыт в этой яме.
108 Dmitry_333
 
07.05.19
09:41
Самое мерзкое, что эпопея продолжается-))

Теперь спотыкается на создании com объекта Adodb.Command - "класс не зарегистрирован"

Думал ща по-быстрому перерегистрирую dll-ки из папки C:\Program Files\Common Files\System\ado, но не помогло это.

Картина такая:
        Connection = Новый COMОбъект("ADODB.Connection"); - норм    
    Connection.Open(СтрокаПодключения); - норм

    Command = Новый COMОбъект("ADODB.Command"); - ошибка "класс не зарегистрирован"
109 Dmitry_333
 
07.05.19
09:50
Собственно, кто знает, какая dll-ка отвечает за создание данного com-объекта? Может она просто отсутствует.
110 eklmn
 
гуру
07.05.19
10:15
111 Dmitry_333
 
07.05.19
10:50
(110) Оч годная статья, спасибо. Даже номера ошибок совпадает. Надеюсь поможет.
112 Dmitry_333
 
07.05.19
11:14
Я вот еще что подумал, если вдруг не поможет. Если ADODB.Connection и Open() отрабатывает, возможно ли на этом этапе выгружать нужные мне таблицы в DBF?
113 eklmn
 
гуру
07.05.19
11:43
Неа
114 Dmitry_333
 
07.05.19
19:23
К сожалению это тоже не помогло. Стоит ли пробовать ставить 64-битную платформу 1С? Или это бред?