none
Error 7399 al usar Openrowset con Microsoft.Jet.OLEDB.4.0 RRS feed

  • Pregunta

  • Buenas:

    Tengo 4 equipos en pruebas con la siguiente configuración:

    Equipo Sobremesa:

    config-01 =  windows 7 ultimate, office 2007, sql server 2008 r2 express. Tiene una carpeta llamada admin donde se aloja un archivo excell con la información a insertar en la bbdd.

    Equipo servidor con 2 máquinas virtuales vmware:

    host1 = windows server 2003 sp2 y sql server 2005 enterprise SP4 que aloja una base de datos llamada Open con una tabla llamada registros. La cuenta de los servicios de sql server es sql-services y está en el grupo usuarios. He accedido al servidor con esa cuenta y en variables de entorno de usuario he configurado c:\temp en TEMP y c:\temp en TMP como indicaba en un artículo para solucionar el problema. Adhoc está habilitado en el sql server.

    host2 = windows server 2003 sp2 y sql server management studio 2005

    Y finalmente un equipo portátil:

    PX102 = windows xp sp3 y los management studio de 2000, 2005 y 2008

    La query que se utiliza es la siguiente:

    SELECT * INTO registros FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'Excel 8.0;Database=\\config-01\admin\importar.xls', 'SELECT * FROM [Hoja1$]')

    Bien pues voy a explicar un poco la situación, desde el config-01 lanzo la query y me funciona 100%. Ahora bien desde host 2 y px102 me da el siguiente error:

    Server: Msg 7399, Level 16, State 1, Line 1
    OLE DB provider 'Microsoft.Jet.OLEDB.4.0' reported an error. The provider did not give any information about the error.
    OLE DB error trace [OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005:  The provider did not give any information about the error.].

    Alguien me puede echar una mano con este problemilla?

    Muchas gracias y un saludo

    miércoles, 30 de mayo de 2012 7:31

Respuestas

Todas las respuestas

  • ¿Tiene permisos la cuenta de servicio del motor a ese archivo? ¿Si lo copias a local en las máquinas donde ahora te está dando el error tiene el mismo comportamiento?
    miércoles, 30 de mayo de 2012 7:43
  • El archivo si lo pongo en local (en el servidor) funciona bien. El problema está cuando pongo el archivo en las máquinas Host2 y px102. En el config-01 si lo pongo en local funciona. La carpeta donde esta alojada el archivo incluso llegué a probar a compartirla con todos control total y me sale el mismo error. Lo raro es que en el equipo con windows 7 funcione y en el resto no.

    Gracias por tu atención

    Un saludo

    miércoles, 30 de mayo de 2012 7:57
  • Si en local funciona y estando en remoto no, es un problema de permisos. Asegúrate que la cuenta con la que arranca el servicio del motor de SQL tiene permisos en esa carpeta
    miércoles, 30 de mayo de 2012 10:05
  • Gracias por contestar, 

    La carpeta está con control total a todos y no funciona a excepción de la máquina con windows 7. Si fuera un problema de permisos no debería no funcionar en ninguna máquina salvo en local? 

    De hecho al seguir este artículo fué cuando me funcionó en el config-01(windows 7) pero no desde el resto de máquinas:

    http://support.microsoft.com/kb/814398/es

     


    jueves, 31 de mayo de 2012 7:07
  • Pero en tu mensaje inicial dices "Ahora bien desde host 2 y px102 me da el siguiente error". De la máquina host 1 no dices nada, y la máquina con Windows 7 es la máquina local y la que aparentemente es la única que te funciona...
    jueves, 31 de mayo de 2012 11:28
  • Creo que explico que función tiene cada máquina y donde está alojado el archivo claramente y luego digo:

    "Bien pues voy a explicar un poco la situación, desde el config-01 lanzo la query y me funciona 100%."

    La máquina HOST1 es el servidor que aloja la base de datos y la tabla registros en cuestión. El equipo Config-01 es el que aloja el archivo excel (registros) a insertar en la base de datos y desde el que ejecuto la query openrowset. Eso es remoto y funciona 100% como bien digo antes.

    Lo que no me funciona es cuando lo lanzo desde HOST2 y PX102 (con el archivo excel en cada una de las dos) que son 2 máquinas totalmente distintas y remotas hacia el mismo servidor HOST1.

    Si pongo el archivo en HOST1 y ejecuto la query cambiando la ruta claro está, también me funciona (a esto es lo que llamo lanzarlo en local).

    Un saludo

    jueves, 31 de mayo de 2012 13:44
  • Buen día

    Prueba con el siguiente código:

    SELECT * INTO registros FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;Database=\\config-01\admin\importar.xls', 'SELECT * FROM [Hoja1$]')
    Programación

    • Editado Angsus lunes, 11 de junio de 2012 14:06
    lunes, 11 de junio de 2012 14:04
  • Hola.

    ¿Resolviste el problema?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 17 de junio de 2012 15:14
    Moderador
  • Buenas:

    Pues la verdad es que por motivos de trabajo no he podido seguir mucho con este tema pero he probado lo que me dijo ANGSUS y me tira el mismo error:

    Msg 7399, Level 16, State 1, Line 1
    El proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(null)" informó de un error. El proveedor no proporcionó información acerca del error.
    Msg 7303, Level 16, State 1, Line 1
    No se puede inicializar el objeto de origen de datos del proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(null)".

    Si alguien tiene alguna idea de como seguir con este tema...

    Gracias a todos


    lunes, 18 de junio de 2012 9:58
  • Hola.

    ¿Usas 32 o 64 bits en las máquinas que fallan? ¿Y en la que funciona?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 18 de junio de 2012 12:41
    Moderador
  • Buenas:

    Pues la máquina config-01 desde la que ejecuto la query que funciona es 64 bits, el servidor host-1 que aloja la base de datos es 32 bits y las otras 2 también son 32 bits (esas fallan al lanzar la query)

    Un saludo

    lunes, 18 de junio de 2012 13:12
  • A mi me pasó lo mismo y nunca pude solucionarlo. Tuve que instalar un SQL Express de 32 bits para leer los ficheros (access/excel) y conectar desde el 64 bits al servidor de SQL Express de 32 bits. 

    logo osoft
    Si he contestado tu pregunta, por favor marca mi post como respuesta.
    ...Y si mi post te ha servido, márcalo como útil smile

    lunes, 18 de junio de 2012 13:18
  • Buen día

    Prueba con esto:

    EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
    GO
    EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
    GO


    ANGSUS

    lunes, 18 de junio de 2012 14:32
  • Buen día

    Prueba con esto:

    EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
    GO
    EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
    GO


    ANGSUS

    Buenas, el allowinproccess lo tenía habilitado igual que en el Microsoft.Jet.OLEDB.4.0. El dynamicparameters no lo tenía habilitado pero no ha habido suerte, me da el mismo error.

    Gracias

    martes, 19 de junio de 2012 10:38
  • Hola.

    Parece que el problema está en los drivers de 32 y 64 bits, ya que funciona en el de 64 y no en los dos de 32 bits. Asegúrate de tener los drivers instalados. En el siguiente link podrás encontrar los drivers que te indico para Access 2010. Tendrás que emplear Excel 2007 o posterior (los de extensión ".xlsx") para usarlos. Angsus ya te indicó cómo preparar el openrowset.

    http://www.microsoft.com/en-us/download/details.aspx?id=13255

    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 29 de junio de 2012 15:22
    Moderador
  • Buenas:

    Ante todo gracias por vuestra colaboración que de verdad me está sirviendo de mucho.

    He probado a reinstalar los drivers que me has comentado y he probado con un .xlsx y no he tenido suerte, me sigue dando el mismo fallo. Incluso he instalado los mismos drivers en todas las máquinas por si fuera necesario.

    He realizado también otra prueba instalando un sql server 2000 SP4 en un windows server 2003 32 bits y desde una máquina en remoto con windows xp 32 bits con un office 2003 también me da el mismo error. Es el mismo escenario casi que el anterior, en local se ejecuta sin problemas pero en remoto no hay manera. Esta prueba la he realizado porque leí que openrowset se usaba desde sql server 2000 según este artículo:

    http://msdn.microsoft.com/en-us/library/aa276850(v=sql.80).aspx

    Es posible hacerlo andar sin tener que recurrir a las últimas versiones del producto o a software de 64 bits?

    Un saludo

    lunes, 2 de julio de 2012 9:17
  • Hola.

    Este tipo de problemas son bastante tediosos de resolver, ya que en ocasiones, la existencia del driver de 64 bits imposibilita la instalación del del 32, o viceversa. De todos modos, este último caso que describes es extraño que se deba a lo mismo, lo que me lleva a pensar que simplemente no sabemos cómo indicarte la información que necesitamos para ayudarte.

    Te recomiendo abrir un caso con MS para que te guíen en tu escenario concreto. 


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    miércoles, 25 de julio de 2012 20:39
    Moderador
  • Buenas:

    Pues la verdad es que por motivos de trabajo no he podido seguir mucho con este tema pero he probado lo que me dijo ANGSUS y me tira el mismo error:

    Msg 7399, Level 16, State 1, Line 1
    El proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(null)" informó de un error. El proveedor no proporcionó información acerca del error.
    Msg 7303, Level 16, State 1, Line 1
    No se puede inicializar el objeto de origen de datos del proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "(null)".

    Si alguien tiene alguna idea de como seguir con este tema...

    Gracias a todos


    Hola, yo use la misma cadena

    SELECT * INTO registros FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=\\config-01\admin\importar.xls', 'SELECT * FROM [Hoja1$]')

    Y me dio el mismo error, pero le quite las dos \\ al iniico de la ruta de la fuente de información, quedando asi:

    SELECT * INTO DB FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\k\b\C.xlsx', [DB$])

    Y funcionó perfecto, además de que la extensión del archivo que uso es Xlsx, no se si eso haga diferencia

    Saludos! =)

    jueves, 20 de marzo de 2014 19:16
  • Buenas tardes, ese error solo se me presenta si intento cargar los datos teniendo el archivo de Excel abierto, Saludos.

    Yo lo solucione de la siguiente manera:

    EXECUTE master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1;
    EXECUTE master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1;
    
    EXECUTE sp_configure 'Advanced', 1;
    EXECUTE sp_configure 'xp_cmdshell', 1;
    
    RECONFIGURE
    GO
    
    EXECUTE SP_CONFIGURE 'show advanced options', 1;
    RECONFIGURE WITH OVERRIDE;
    GO
    
    EXECUTE SP_CONFIGURE 'Ad Hoc Distributed Queries', 1;
    RECONFIGURE WITH OVERRIDE;
    GO
    
    SELECT	*
    FROM	OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    			'Excel 12.0;
    			 HDR=YES;
    			 Database=C:\scrcfa6\tbIvtrMerc.xlsx;',
    			'SELECT * FROM [Hoja1$]');
    GO

    Y cuando cerré el archivo de Excel, me leyó los datos sin problemas.

    PD: En mi caso instalé el Driver de 32 Bits

    AccessDatabaseEngine

    Saludos.


    -- Atte. PPLONN

    • Propuesto como respuesta PPLONN lunes, 26 de febrero de 2018 3:33
    sábado, 9 de diciembre de 2017 18:43