Inquiridor
Erro em código com OPENROWSET

Pergunta
-
Boa tarde galera!
Pessoal, tenho um arquivo do Excel 2007 chamado PAGAMENTOS.xlsx e nele tenho uma planilha chamada Boletos. Estou querendo usar o OPENROWSET mas está dando o seguinte erro:
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
Já tentei de tudo, até instalar o AccessDatabaseEngine_x64, meu sistema operacional é o Windows Server 2008 R2 e meu SGBD é o SQL Server 2008 R2, todos 64bits. Segue meu código:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=K:\PAGAMENTOS.xlsx', [Boletos$])Alguém sabe onde estou errando?
Todas as Respostas
-
WMN8
Acredito que o seu problema esta ligado a arquitetura x64, aqui no forum tem diversas threads sobre este problema...
da uma olhada nesta thread http://social.msdn.microsoft.com/Forums/sqlserver/en-US/33436d82-085c-43e4-b991-a2d0d701c8fc/linking-to-csv-files-on-64-bit-sql-server
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -
WMN8
Acredito que o seu problema esta ligado a arquitetura x64, aqui no forum tem diversas threads sobre este problema...
da uma olhada nesta thread http://social.msdn.microsoft.com/Forums/sqlserver/en-US/33436d82-085c-43e4-b991-a2d0d701c8fc/linking-to-csv-files-on-64-bit-sql-server
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
Se útil, classifique!!!
Me siga no twitter: @marcelodbaBoa tarde Marcelo,
Eu também pensei que fosse por ser x64, acabei de testar em um servidor com Windows Server 2003 32bits e também não está rodando. O que pode ser?
-
No servidor 32bits exibe a mesma mensagem de erro?
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Editado Marcelo Fernandes da SilvaMVP quarta-feira, 19 de junho de 2013 20:07 ortografia
-
Bom dia Marcelo,
No servidor de 32bits dá a seguinte mensagem:
The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 11
Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)"
-
WMN8
No site do Nilton Pinheiro, existe um post com uma resposta, acredito que você pode usar a mesma estratégia para resolver o seu problema.
http://www.mcdbabrasil.com.br/modules.php?name=Forums&file=viewtopic&t=4393
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -
Sem você instalou o AcessDataEngine, mude o OPENROWSET para o excel 12.
Eu fiz desta maneira em uma carga de dados simples:
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GOSELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=X:\', [Plan1$])'
Mas no meu caso, utilizei um arquivo do excel 2013
[]´s
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 20 de junho de 2013 17:45
-
WMN8,
A questão na verdade é a versão do Excel que você esta utilizando, como o arquivo esta com a extensão XLSX não é permitido utilizar o Driver Microsoft.Jet.OLEDB.4.0, pois esta versão é recomendável e compatível até o Office 2003 ou para extensões no padrão .doc ou .xls
Além disso, a mensagem de erro que você esta recebendo quando roda em ambiente 32 bits, se refere a necessidade de configurar um Linked Server no SQL Server para o Excel apontando para o seu arquivo .XLSX
Minha sugestão, configure um Linked Server no seu SQL Server apontando para o seu arquivo e tente utilizar o OpenRowSet com este linked server.
Outra detalhe, a master.dbo.sp_MSset_oledb_prop que o Advaldo utilizou é compatível com as versões do SQL Server 2008 ou superior.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Editado Junior Galvão - MVPMVP quinta-feira, 20 de junho de 2013 17:51 Atualização
-
WMN8,
Veja este código de exemplo:
EXEC sp_addlinkedserver @server = N'my2007Database', @provider = N'Microsoft.ACE.OLEDB.12.0', @srvproduct = N'OLE DB Provider for ACE 2007', @datasrc = N'C:\datatest\Database1.accdb' GO -- Set up login mapping using current user's security context EXEC sp_addlinkedsrvlogin @rmtsrvname = N'my2007Database', @useself = N'TRUE', @locallogin = NULL, @rmtuser = N'Admin', @rmtpassword = NULL GO --****Resolve permission issue USE [master] GO EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1 GO EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1 GO
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Pessoal, fiz todos os procedimentos que vocês passaram, agora está dando outro erro.
The OLE DB provider "Provider=Microsoft.ACE.OLEDB.12.0" has not been registered.
Tanto no servidor com Windows Server 2008 R2 Enterprise Edition de x64 quanto no Windows Server 2003 Enterprise Edition x86 estão dando a mesma mensagem, antes davam mensagens diferentes. Fiz o download do AcessDataEngine x86 para o 2003 e x64 para o 2008, tentei usar meu script e os que vocês postaram aqui e no final dá essa mesma mensagem de erro. O que pode ser agora?
-
Pode ser que seu AcessDataEngine não esteja instalado.
Faça o download neste site:
http://www.microsoft.com/en-us/download/details.aspx?id=13255Instale.
Pode ser que peça para reiniciar, mas isso somente se tiver alguma outra instalação ou update de registro pendente.
Abra o MMS e execute:
USE [master] GO sp_configure 'show advanced options', 1 GO RECONFIGURE WITH OverRide GO sp_configure 'Ad Hoc Distributed Queries', 1 GO RECONFIGURE WITH OverRide GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1 GO
Estes itens já foram explicados em posts acima.
Execute a consulta pelo OPENROWSET.
Caso de certo, pode ter sido algo na instalação.Pode-se verificar a instalação do componente na aba que se cria o LINKED SERVER -- Provider(s).
Verifique se ele esta aparecendo.[]´s
-
WMN8,
Cara faça um teste, instale o Office 2007 em ambos os servidores.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Boa noite Advaldo, eu tentei o seu código e aparece uma mensagem dizendo que o Microsoft.ACE.OLEDB.12.0 não pode ser registrado.
No Servidor que possui o Windows Server 2003 tem o Office 2007 instalado e o que tem Windows Server 2008 x64 possui o office 2010 x64.
-
Boa noite Junior, o servidor com Windows Server 2003 x86 já tem o Office 2007 e no Windows Server 2008 x64 tem o Office 2010 x64.
Passei esses dias tentando de tudo que encontrava na internet e nada, quando é com arquivo Access funciona perfeitamente, mas quando tento com Excel dá esses problemas.
-
WMN8,
Cara isso é muito comum de acontecer, é a chamada incompatibilidade entre versões.
Você tem que ter o Office 2007 neste servidor 2008 para ter praticamente o mesmo cenário, tente fazer isso.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Junior, o problema é que não funciona em nenhum, nem no servidor que tem o Windows Server 2003 de x86 com o Office 2007. Está aparecendo esta mensagem:
Msg 7403, Level 16, State 1, Line 1
The OLE DB provider "Provider=Microsoft.ACE.OLEDB.12.0" has not been registered.