none
Erro em código com OPENROWSET RRS feed

  • 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?

    quarta-feira, 19 de junho de 2013 19:05

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

    quarta-feira, 19 de junho de 2013 19:56
  • 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

    Boa 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?

    quarta-feira, 19 de junho de 2013 19:59
  • 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


    quarta-feira, 19 de junho de 2013 20:02
  • 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)"

    quinta-feira, 20 de junho de 2013 13:04
  • 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

    quinta-feira, 20 de junho de 2013 13:10
  • 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 
    GO 

    SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=X:\', [Plan1$])'

    Mas no meu caso, utilizei um arquivo do excel 2013

    []´s

    quinta-feira, 20 de junho de 2013 13:39
  • 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]



    quinta-feira, 20 de junho de 2013 17:49
  • 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]

    quinta-feira, 20 de junho de 2013 17:52
  • 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?

    sexta-feira, 21 de junho de 2013 00:55
  • 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=13255

    Instale.

    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

    sexta-feira, 21 de junho de 2013 13:51
  • 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]

    sexta-feira, 21 de junho de 2013 16:48
  • 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.

    quinta-feira, 27 de junho de 2013 23:44
  • 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.

    quinta-feira, 27 de junho de 2013 23:45
  • 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]

    sexta-feira, 28 de junho de 2013 16:42
  • 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.

    sexta-feira, 28 de junho de 2013 23:08