Principales respuestas
Error 7399 al usar Openrowset con Microsoft.Jet.OLEDB.4.0

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
Respuestas
-
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- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator martes, 14 de agosto de 2012 16:31
-
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- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator martes, 14 de agosto de 2012 16:31
Todas las respuestas
-
-
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
-
-
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
-
-
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
-
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
-
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 -
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.
¿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 -
-
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.Si he contestado tu pregunta, por favor marca mi post como respuesta.
...Y si mi post te ha servido, márcalo como útil -
-
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
-
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- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator martes, 14 de agosto de 2012 16:31
-
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
-
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- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator martes, 14 de agosto de 2012 16:31
-
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! =)
-
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
Saludos.
-- Atte. PPLONN
- Propuesto como respuesta PPLONN lunes, 26 de febrero de 2018 3:33