Ошибка поставщика ole db excel
Пробую подключиться к экселевскому файлу как к бд.
Но вот ничего не получается.
Использую ADO, кидаю на форму компонент ADOConnection, создаю строку подключения:
Выбираю провайдера Microsoft OLE DB Provider for ODBC Drivers
Создаю DSN файл:
Выбираю драйвер Driver do Microsoft Excel(*.xls)
В окне выбора файла источника данных указываю мой файл экселевский C:\test\qqq.xls
В выборе книги так же выбираю мой файл.
После чего создается файл DSN, который я и выбираю далее.
Содержание DSN файла:
[ODBC]
DRIVER=Driver do Microsoft Excel(*.xls)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
ReadOnly=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=excel 8.0
DriverId=790
DefaultDir=C:\test
DBQ=C:\test\qqq.xls
Нажимаю проверка подключения, выдается: проверка подключения выполнена.
Потом ставлю свойство Connected у ADOConnection в true, все успешно.
Строка подключения получается следующая:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DBQ=C:\test\qqq.xls;DefaultDir=C:\test;Driver=;DriverId=790;FIL=excel 8.0;FILEDSN=C:\test\qqq.xls.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;R eadOnly=0;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
После чего кидаю на форму ADOQuery, соединяю его с ADOConnection в поле SQL ввожу простейший запрос:
select * from qqq
Делаю Active выдает ошибку:
Объект qqq не найден ядром базы данных Microsoft Jet, проверьте существование объекта и правильность имени и пути.
то же самое выводится и если пишу запрос:
select * from qqq.xls
> делай лучше прямой коннект, без посредников.
не совсем понял. Ты предлагаешь выбирать поставщика Microsoft Jet 4.0 OLE DB Provider?
но если там выбрать екселевский файл, при проверке подключения выдается ошибка:
Не выполнена проверка подключения из-за ошибки при инициализации поставщика. Нераспознаваемый формат базы данных: C:\test\qqq.xls
говорит: Синтаксическая ошибка в запросе. Неполное предложение запроса.
делаю даже через конструктор для CommandText в ADODataSet
получается запрос:
select * from first$
Как я могу убедиться, что поставщик OLE DB Microsoft.ACE.OLEDB.15.0 существует на сервере
Пожалуйста, попробуйте установить Access 2013 runtime на сервере, что должно позволить использовать этот провайдер (по крайней мере, в 32-разрядной версии).
Исключение указывает, что он не может найти указанный поставщик OLE DB, который может быть установлен через стандартные установки Access или путем установки среды выполнения.
Один из моих коллег показал мне использовать 64-разрядный мастер импорта вместо 32-разрядного мастера импорта defualt, который у меня есть в SSMS. Вот короткое видео, которое я опубликовал об успешной загрузке данных на youtube
Мы не можем установить 32-разрядную версию Office, поскольку на вашем компьютере были обнаружены следующие 64-разрядные программы: -list of installed Office apps here-
Пока Microsoft не предоставит 64-битную версию SSMS, мы застряли, используя метод запуска 64-битной версии мастера импорта данных независимо (как описано выше).
Среда: компьютер (64-разрядная версия) Операционная система Windows 10 Pro (64-разрядная версия) Visual Studio 2017 (32-разрядная версия) Visual Studio 2017 (SSDT) (32-разрядная версия) Office 2016 (64-разрядная версия)
Попытка использовать Excel в SSIS. Получены следующие ошибки: при выборе 2016 или 2013 в диспетчере соединений. Проблема должна быть решена. Ошибка на 2016 год:
Ошибка на 2013 год:
- Открытый проект SSIS
- Выберите проект в обозревателе решений
- Выберите Свойства
- Разверните Свойства конфигурации в левой панели
- Нажмите Отладка и измените Run64BitRuntime на False
- Нажмите ОК
Настройка диспетчера подключений: 7. Откройте диспетчер подключений Excel. 8. Нажмите раскрывающееся меню. Параметры Excel работают: Excel 97-2003 и Excel 2007-2010 9. Нажмите Ok
Вы должны иметь возможность предварительного просмотра данных в листе Excel
- Msg 7399, уровень 16, состояние 1, строка 1 Поставщик OLE DB «Microsoft.ACE.OLEDB.15.0» для связанного сервера «(null)» сообщил об ошибке. Провайдер не предоставил никакой информации об ошибке.
- Msg 7303, уровень 16, состояние 1, строка 1 Не удается инициализировать объект источника данных поставщика OLE DB «Microsoft.ACE.OLEDB.15.0» для связанного сервера «(null)».
Вот что я пробовал:
Сначала я побежал .
За ним следует . без любви.
Я изменил код, чтобы читать Microsoft.ACE.OLEDB.12.0 , поскольку я тоже это видел, все еще не люблю.
Я также проверил разрешения C: \ Users \ MSSQLSERVER \ AppData \ Local \ Temp и C: Windows \ ServiceProfiles \ NetworkService \ AppData \ Local, которые предоставили полный доступ для следующих: система, MSSQLSERVER и администраторы, сетевая служба (на последний).
По-прежнему нет любви.
Наконец, я попытался перейти на 32-битную версию ядра СУБД Microsoft Access, которая по-прежнему не работает.
Это решает проблему. По какой-то причине SQL Server не любит учетную запись MSSQLSERVER по умолчанию. Переключение на локальную учетную запись пользователя решает проблему.
Вот что конкретно сработало для меня только когда запрашиваемый файл Excel не был открыт и при запуске службы SQL Server от имени меня [как пользователя, имеющего доступ к файлу система]. Я вижу фрагменты своего ответа, уже приведенные в другом месте, поэтому прошу прощения за избыточность, но ради более сжатого ответа:
Я использую SQL Server 2014 64 bit в Windows 10. Я все перепробовал, вот что заставило его работать:
Я не знаю, почему отключенный AllowInProcess заставляет его работать, но в моем случае это было ключевым моментом. Спасибо за предложение отключить все параметры на сервере ссылок.
Я также хотел бы отметить, что вы можете использовать графический интерфейс в SSMS для включения специального доступа (и многих других опций). В SSMS перейдите в «Связанные серверы»> «Поставщики», щелкните поставщика правой кнопкой мыши и выберите «Свойства». Затем вы можете просто поставить / снять отметку с тех, которые вам нужны.
Закройте SQL Server Management Studio. Введите Services.msc в команде запуска, чтобы открыть окно служб.
Найдите службу SQL Server, щелкните ее правой кнопкой мыши и выберите свойства.
Как только он найдет ваше имя для входа, нажмите ОК.
Теперь введите пароли для входа в оба поля.
Перезапустите службы, чтобы новые изменения вступили в силу, как показано на рисунке ниже.
Теперь запустите SQL Server Management Studio и попробуйте выполнить запрос, если все еще не работает, попробуйте перезапустить систему.
. или выполните следующий запрос:
В нашем случае это помогло добавить параметр для службы SQL Server:
- Перейдите на Services.msc , выберите службу SQL Server. и откройте Свойства.
- Выберите Startup Parameters и добавьте новый параметр –g512
- Перезапустите службу SQL-сервера.
В моем случае эта проблема возникла из-за того, что я обращался к файлу из общей папки с помощью имени компьютера. OPENROWSET ('' Microsoft.Jet.OLEDB.4.0 '', '' Excel 8.0; База данных = '\ ntpc0100 \ MysharedFolder \ KPI_tempData \ VariablePayoutDetails.xls'; IMEX = 1; '', '. ) При использовании computerName ntpc0100 (независимо от имени вашего компьютера) вы должны указать IP-адрес вашего компьютера . например: - OPENROWSET ('' Microsoft.Jet.OLEDB.4.0 '', '' Excel 8.0; Database = '\ 193.34.23.200 \ MysharedFolder \ KPI_tempData \ KPIVariablePayoutDetails.xls' . );
Мне в разных случаях помогали эти две вещи:
1) Если вы только что установили среду выполнения MS Access, перезагрузите сервер. Отскока экземпляра базы данных недостаточно.
2) Убедитесь, что файл Excel не открыт, а также убедитесь, что у вас не открыт проводник Windows с включенной панелью предварительного просмотра - это тоже блокирует его.
В SQL 2014 я изменил службу SQL Server (MSSQL), чтобы она работала как LocalSystem . Это решило проблему для меня.
Насколько я помню, раньше он работал как NT_SERVICE\MSSQL$MSSQL в 2008 году.
Что решило проблему для меня, так это открытие файла .xlsx и его сохранение как файл .xls (excel 2003).
Возможно, файл был поврежден или имеет другой формат, и его повторное сохранение исправило это.
Это мой код ошибки:
Моя проблема заключалась в том, что на пути отсутствовал файл Excel. Достаточно просто положить файл с нужным листом.
Для меня это было разрешение на папку с файлом. Мне пришлось добавить все разрешения для пользователя «Все». Папка / свойства / безопасность -> добавить всех пользователей и установить все разрешения.
Есть две важные неочевидные настройки, которые я обнаружил при настройке связанных серверов в Excel под SQL Server 2014. С этими настройками ' FROM OPENDATASOURCE(''Microsoft.ACE.OLEDB.16.0'', . )' , а также '. FROM [' + @srv_name + ']. data AS xl . ' работают правильно.
Создание связанного сервера
Это просто для контекста.
- @datasrc : здесь решающее значение имеет кодировка: varchar вместо n varchar.
- @provstr : важны версия, настройки и синтаксис!
- @provider : укажите поставщика, установленного в среде SQL Server. Доступные поставщики перечислены в разделе Server Objects::Linked Servers::Providers в обозревателе объектов SSMS.
Предоставление доступа к связанному серверу под определенными именами входа в SQL Server.
Это первая важная настройка. Даже для SA , как и для любого другого входа в SQL Server:
- @rmtuser : должно быть admin . На самом деле, в системе одновременно нет никаких admin при входе в систему Windows.
- @rmtpassword : это должна быть пустая строка.
Предоставление доступа к связанному серверу через специальные запросы
Это вторая важная настройка. Установка Ad Hoc Distributed Queries на 1 недостаточно. Следует установить значение 0 в разделе реестра DisallowAdhocAccess явно для драйвера, указанного для @provider :
Удаление флажка только для чтения из C:\Users\SQL Service account name\AppData\Local\Temp сработало для меня.
Ошибка
. поставщик не предоставил информацию . Невозможно инициализировать объект источника данных .
Номера ошибок
Решение
Файл был открыт. Закрой его.
Кредит
Ошибка
Доступ запрещен . Невозможно получить информацию о столбце .
Номера ошибок
7399, 73 50
Решение
Кредит
Ошибка
Не задано значение для одного или нескольких обязательных параметров . Невозможно выполнить запрос .
Номера ошибок
. , 73 20
Решение
Имена столбцов могут быть неправильными. Существуют ли [Col A] и [Col B] в вашей таблице?
Ошибка
«Неизвестная ошибка» . Невозможно инициализировать объект источника данных .
Номера ошибок
. , 7303
Решение
Запустите SSMS от имени администратора. См. этот вопрос.
Другие ссылки
Другие ответы, предлагающие изменить свойства. Не уверен, как может помочь изменение этих двух свойств (их установка или снятие отметки).
Как разрешить "Не удалось найти устанавливаемый ISAM". ошибка для поставщика OLE DB "Microsoft.ACE.OLEDB.12.0"
СМС рассылка без абонплаты!
Решения LoRaWAN для ЖКХ и города
Получите Допуск СРО! Акция - От 55т.р!
Я пытаюсь импортировать данные из файлов Excel 2007 (.xlsx) в SQL Server 2008 с помощью команды T-SQL OpenRowset() с поставщиком OLE DB "Microsoft.ACE.OLEDB.12.0" , и я получаю постоянная ошибка "Не удалось найти устанавливаемый ISAM". Все аппаратные средства 32-разрядные.
[Пересмотрено 1/10/12, чтобы попытаться более резко сосредоточиться на аномалиях)
Следующий оператор T-SQL создает ошибку:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"',
'SELECT * FROM [Sheet1$]'
Если я сохраню файл Excel в формате Excel 97-2003 (.xls) и использую более старый поставщик Microsoft.Jet.OLEDB.4.0 для импорта данных, он работает нормально. Это заставляет меня думать, что это не проблема безопасности или другая экологическая проблема.
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'SELECT * FROM [Sheet1$]'
Однако, когда я пытаюсь создать файл *.xls с поставщиком Microsoft.ACE.OLEDB.12.0, который должен быть обратно совместим с форматом *.xls, он снова терпит неудачу с той же ошибкой:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xls;Extended Properties="Excel 8.0;HDR=YES";',
'SELECT * FROM [Sheet1$]'
Кроме того, интересно, когда я использую мастер SSMS "Импорт данных. ", он отлично работает. Я сохранил вывод мастера импорта данных в виде пакета SSIS и просмотрел файл SSIS, чтобы попытаться выяснить, как он работает, и он успешно использует поставщика Microsoft.ACE.OLEDB.12.0. Это строка соединения из пакета SSIS:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
Я также выполнил соответствующую конфигурацию SQL Server, чтобы разрешить распространенный запрос OPENROWSET:
sp_configure 'show advanced options', 1
sp_configure 'Ad Hoc Distributed Queries', 1
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
. тогда ошибка изменится на "Unspecified error":
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
Однако я не уверен, что это ошибка восходящего или нисходящего потока. (Теперь он находит "устанавливаемый ISAM", но впоследствии не работает?)
Я пробовал это с несколькими файлами Excel на двух разных машинах/операционных системах (Windows Server 2003, Windows XP SP3). Обе машины 32-разрядные.
"Microsoft.Jet.OLEDB.4.0" работает с использованием T-SQL, но "Microsoft.ACE.OLEDB.12.0" этого не делает.
"Microsoft.ACE.OLEDB.12.0" работает с помощью мастера "Импорт данных. " (насколько я могу сказать из сохраненного файла задания SSIS).
Настройка свойств "AllowInProcess" и "DynamicParameters" на "1" изменяет ошибку на "Unspecified error". (Это шаг вперед?!)
tsql excel-2007 oledb openrowset isam
Martin_ATS 10 янв. '12 в 2:48
ПОПРОБУЙТЕ это, это может вам помочь:
установите path и strFileType согласно требованию
// string strFileType = Path.GetExtension(UpfileName.FileName).ToLower();
// string path = UpfileName.PostedFile.FileName;
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
else if(strFileType.Trim() == ".xlsx")
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
Sagar R 30 янв. '14 в 9:42
Хай также столкнулся с такой ситуацией, я решил ее
string ConeectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFlp.Text
+ ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"");
OleDbConnection oconn = new OleDbConnection(ConeectionString);</b>
user4049619 17 сент. '14 в 9:03
Не удалось найти устанавливаемый ISAM. Ошибка сервера в приложении
Соединение OLEDB с базой данных Access с паролем: "Не удалось найти устанавливаемый ISAM"
сохраняйте это исключение System.Data.OleDb.OleDbException(0x80004005) :?
Поставщик Microsoft.ACE.OLEDB.12.0 больше не может открывать .mdb под Windows 8
Как узнать причину разрешения поставщика OLE на SQL Server?
Агент SQL Server не может выполнить запрос OPENROWSET, но я могу - "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" сообщила об ошибке
Экспорт данных из SQL Server 2014 в Excel
Проверьте это: Msg 7302, уровень 16, состояние 1, строка 1 Невозможно создать экземпляр поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)"
В принципе, вы переходите к
Панель управления > Администрирование > Службы компонентов
Службы компонентов > Компьютеры > Мой компьютеp > Конфигурация DCOM
Свойствa > Безопасность > Разрешения запуска и активации
добавьте свое имя пользователя или "все", если вы предпочитаете
отметьте ВСЕ поля "разрешить" для нового пользователя/группы
и нажмите ОК на обеих страницах
Теперь посмотрите, работает ли ваша команда OpenRowSet/OpenDataSource
Hamid Sadeghian 19 мая '14 в 10:30
Это сработало для меня:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
Simon Turner 18 июл. '17 в 11:27
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'EXCEL 12.0;DataBase=C:\TEMP\test.xlsx;Extended Properties="EXCEL 12.0 Xml;HDR=YES', [Sheet1$])
Gurm 26 февр. '13 в 17:01
Я думаю, что ответ скрывается в информации о пакете SSIS, которую вы опубликовали. Новый формат файла xlsx хранит данные в формате XML вместо старого. Посмотрите на это снова. Он читает. Расширенные свойства = "Excel 12.0 XML; HDR = YES
Не пропустите этот XML после стандартного материала. (Для чего это стоит, я также прочитал, что вам нужно "Excel 12.0 Macro" для подключения к файлу xslm.)
Читайте также: