Ошибка при попытке открыть файл Excel через ADODB.Connection

1. GonziK_KIV 12.10.17 11:25 Сейчас в теме
Привет, форумчане!
На днях обновили платформу до версии 8.3.10.2580
В клиент-серверной базе есть обработка, загружающая данные из excel.
Подключение к Excel идет следующим образом:

Connection = Новый COMОбъект("ADODB.Connection");      
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + ПутьКФайлу;
СтрокаПодключения = СтрокаПодключения+"; Extended Properties = "+"""Excel 8.0"+"; HDR=No; IMEX=1"";";            
Connection.Open(СтрокаПодключения);
 

Но при попытке открыть файл выдает ошибку:

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

До обновления все работало.
Что это за сбой и как его разрешить?
Спасибо!
По теме из базы знаний
Найденные решения
4. herfis 499 12.10.17 11:59 Сейчас в теме
Не знаю, что за сбой, но у меня долго были пляски с бубном вокруг разных провайдеров для чтения из excel. То одно, то другое вылезало.
В итоге стабилизировались на таком провайдере и параметрах:
Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties="Excel 12.0; HDR=NO; IMEX=1;"
И специально устанавливаем его на серваках из этого дистрибутива: http://www.microsoft.com/en-us/download/details.aspx?id=23734
daho; Toray; Milan-1c; Alex_E; Rustam10; depresnjak; GonziK_KIV; Bitnikov; +8 Ответить
5. ImHunter 315 12.10.17 12:01 Сейчас в теме
Попробуй мой вариант:
Функция ПолучитьКоннектExcel( пИмяФайла, пВызватьИсключение = Ложь ) Экспорт
	
	лРез = Новый COMОбъект("ADODB.Connection");
    СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + пИмяФайла + 
		"; Extended Properties = ""Excel $ver$.0;HDR=NO;IMEX=1"";";
    СтрокаПодключения12 = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + пИмяФайла + 
		"; Extended Properties=""Excel 12.0 Xml;HDR=No;IMEX=1"";";
  	СтрокаПодключенияACE = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + пИмяФайла + 
		";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;""";		
	
	Попытка
        лРез.Open(СтрокаПодключения12);
		Возврат лРез;
	Исключение
		ОписаниеОшибки = ОписаниеОшибки();
	КонецПопытки;
	
	Попытка
        лРез.Open(СтрокаПодключенияACE);
		Возврат лРез;
	Исключение
		ОписаниеОшибки = ОписаниеОшибки();
	КонецПопытки;
	
	Для Версия = 8 По 15 Цикл 
    	//подключение к источнику данных
		ТекСтрокаПодключения = СтрЗаменить(СтрокаПодключения, "$ver$", Строка(Версия));
	    Попытка
	        лРез.Open(ТекСтрокаПодключения);
			Возврат лРез;
		Исключение
			ОписаниеОшибки = ОписаниеОшибки();
		КонецПопытки;
	КонецЦикла;
	
	Если пВызватьИсключение Тогда         
		лТекстОшибки = ОписаниеОшибки;
		лФайл = Новый Файл( пИмяФайла );
		Если ВРег( лФайл.Расширение )=".XLSX" Тогда 
			лТекстОшибки = лТекстОшибки + Символы.ПС + "Сохраните загружаемый файл в формате MS Excel 97-2003 (*.XLS) и попробуйте выполнить загрузку снова.";
		КонецЕсли;
		ВызватьИсключение( лТекстОшибки );
	Иначе 
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

Показать
10. herfis 499 12.10.17 13:04 Сейчас в теме
(9) Насколько я понимаю изначально jet - это типа майкрософтовский движок баз данных (access). Но своими библиотеками и драйверами цепляет и смежные продукты. А ACE-ом обозвали его специализированную версию для 2007 офиса. Что-то в этом духе. В текущем контексте jet - более старые дрова :)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ImHunter 315 12.10.17 11:46 Сейчас в теме
(1) Битность заодно не поменяли?
17. vitara 14.10.17 18:05 Сейчас в теме
Непредвиденная ошибка драйвера внешней базы данных (1) - 3 бессонных ночи и исправил только путем отката обновления за номером KB4041691 (KB4041681) - может кому поможет.. Это проблема безопасности у Microsoft теперь такая чтобы свои же файлы старых версий не записывать и не считывать.. Олухи.
ybatiaev; user869810; AlexHorsse; kuzev; iopmmv; dablack; +6 Ответить
19. iopmmv 18.10.17 14:20 Сейчас в теме
(17)
3 бессонных ночи и исправил только путем отката обновления за номером KB4041691


Большое спасибо вы мне очень помогли.
18. пользователь 14.10.17 18:07
Сообщение было скрыто модератором.
...
3. GonziK_KIV 12.10.17 11:56 Сейчас в теме
нет, битность та же - 32
4. herfis 499 12.10.17 11:59 Сейчас в теме
Не знаю, что за сбой, но у меня долго были пляски с бубном вокруг разных провайдеров для чтения из excel. То одно, то другое вылезало.
В итоге стабилизировались на таком провайдере и параметрах:
Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties="Excel 12.0; HDR=NO; IMEX=1;"
И специально устанавливаем его на серваках из этого дистрибутива: http://www.microsoft.com/en-us/download/details.aspx?id=23734
daho; Toray; Milan-1c; Alex_E; Rustam10; depresnjak; GonziK_KIV; Bitnikov; +8 Ответить
6. ImHunter 315 12.10.17 12:07 Сейчас в теме
Да, и драйвер из (4) тоже нужно установить.
7. GonziK_KIV 12.10.17 12:26 Сейчас в теме
(4) Сан Саныч, спасибо большое! Ваш ответ - и есть решение!
12. GonziK_KIV 12.10.17 14:22 Сейчас в теме
(4) Все вроде бы решилось, де не совсем.
Хотелось бы обойтись без установки доп. проги.

Фишка в том, что на компах пользователей, где отсутствует программа AccessDatabaseEngine, подключение со строкой
Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties="Excel 12.0; HDR=NO; IMEX=1;

работает на ура!

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


Подскажите, где копать?
21. INSH0706 20.10.17 11:24 Сейчас в теме
Сан Саныч, большое спасибо. Все получилось.
5. ImHunter 315 12.10.17 12:01 Сейчас в теме
Попробуй мой вариант:
Функция ПолучитьКоннектExcel( пИмяФайла, пВызватьИсключение = Ложь ) Экспорт
	
	лРез = Новый COMОбъект("ADODB.Connection");
    СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + пИмяФайла + 
		"; Extended Properties = ""Excel $ver$.0;HDR=NO;IMEX=1"";";
    СтрокаПодключения12 = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + пИмяФайла + 
		"; Extended Properties=""Excel 12.0 Xml;HDR=No;IMEX=1"";";
  	СтрокаПодключенияACE = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + пИмяФайла + 
		";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;""";		
	
	Попытка
        лРез.Open(СтрокаПодключения12);
		Возврат лРез;
	Исключение
		ОписаниеОшибки = ОписаниеОшибки();
	КонецПопытки;
	
	Попытка
        лРез.Open(СтрокаПодключенияACE);
		Возврат лРез;
	Исключение
		ОписаниеОшибки = ОписаниеОшибки();
	КонецПопытки;
	
	Для Версия = 8 По 15 Цикл 
    	//подключение к источнику данных
		ТекСтрокаПодключения = СтрЗаменить(СтрокаПодключения, "$ver$", Строка(Версия));
	    Попытка
	        лРез.Open(ТекСтрокаПодключения);
			Возврат лРез;
		Исключение
			ОписаниеОшибки = ОписаниеОшибки();
		КонецПопытки;
	КонецЦикла;
	
	Если пВызватьИсключение Тогда         
		лТекстОшибки = ОписаниеОшибки;
		лФайл = Новый Файл( пИмяФайла );
		Если ВРег( лФайл.Расширение )=".XLSX" Тогда 
			лТекстОшибки = лТекстОшибки + Символы.ПС + "Сохраните загружаемый файл в формате MS Excel 97-2003 (*.XLS) и попробуйте выполнить загрузку снова.";
		КонецЕсли;
		ВызватьИсключение( лТекстОшибки );
	Иначе 
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

Показать
8. GonziK_KIV 12.10.17 12:27 Сейчас в теме
(5) Весьма универсальный способ! Однако пригодится!
15. GonziK_KIV 12.10.17 17:35 Сейчас в теме
(5)Сергей, после обновления windows 8 даже ваша функция не работает(.
Пишет:
 Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft JET Database Engine): Невозможно найти устанавливаемый ISAM.


Все равно требует установить AccessDatabaseEngine.exe. Если установить, то работает. Но можно ли без нее обойтись?
Всю голову уже сломал(
16. ImHunter 315 13.10.17 06:26 Сейчас в теме
(15) А перейти на использование xlsx - вариант? Его можно вообще без экселей/драйверов читать.
9. GonziK_KIV 12.10.17 12:53 Сейчас в теме
А в строках
Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties="Excel 12.0; HDR=NO; IMEX=1
Provider=Microsoft.jet.OLEDB.12.0; Extended Properties="Excel 12.0; HDR=NO; IMEX=1

чем jet отличается от ACE?
10. herfis 499 12.10.17 13:04 Сейчас в теме
(9) Насколько я понимаю изначально jet - это типа майкрософтовский движок баз данных (access). Но своими библиотеками и драйверами цепляет и смежные продукты. А ACE-ом обозвали его специализированную версию для 2007 офиса. Что-то в этом духе. В текущем контексте jet - более старые дрова :)
11. GonziK_KIV 12.10.17 13:11 Сейчас в теме
13. Сурикат 394 12.10.17 15:39 Сейчас в теме
А еще можно ТабличныйДокумент.Прочитать()
14. herfis 499 12.10.17 15:46 Сейчас в теме
(13) С некоторых пор - да, можно. Но не всегда нормально работает. Хотя конкретных примеров сейчас не приведу. Помню, что какие-то проблемы у меня с ним были. Все собирался прямой парсинг xlsx прикрутить (благо xml), но потом плюнул за отсутствием необходимости.
20. ImHunter 315 19.10.17 08:24 Сейчас в теме
Кстати, скорее всего ошибка была из-за обновления Windows. Сам детали не смотрел - писали коллеги об этом. И вчера коллеги отписались, что стало все нормально.
22. user848634 23.10.17 13:39 Сейчас в теме
(20) а что значит стало все нормально? Что для этого было сделано, опишите пожалуйста, если не сложно т.к. у меня так и не работает. Пока спасаемся откатом обновлений (((
23. GonziK_KIV 26.10.17 16:59 Сейчас в теме
Все оказалось предельно просто!
Используйте метод "прочитать". с платформы 8.3.6 работает на ура!
Не надо никаких внешних компонент и прочих "мух". Даже установка Excel не обязательна!

Вот статейка! Очень помогла
http://infostart.me/public/341855/
24. user857605 07.11.17 10:45 Сейчас в теме
Проблема возникала на сервере 2008 при экспорте в эксель, удалил обновление 4042007 от 10.10.2017.
25. user974657 14.05.18 04:48 Сейчас в теме
Удалил обновление KB4041686 и все заработало, спасибо за наводки
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот