Principales respuestas
Servidor Vinculado con archivo XLSX.

Pregunta
-
Estimados,
He intentado generar un servidor vinculado para poder leer una archivo XLSX, y me arroja el siguiente error:
El proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" del servidor vinculado "TempExcelSpreadsheet" devolvió el mensaje "Error no esperado desde el controlador de la base de datos externa () .".
Msg 7303, Level 16, State 1, Procedure sp_columns_ex, Line 177
No se puede inicializar el objeto de origen de datos del proveedor OLE DB "Microsoft.ACE.OLEDB.12.0" para el servidor vinculado "TempExcelSpreadsheet".El código que utilizo para la creación del servidor vinculado es el siguiente:
EXEC master.dbo.sp_addlinkedserver
@server = N'test' ,
@srvproduct = N'ACE 12.0' ,
@provider = N'Microsoft.ACE.OLEDB.12.0' ,
@datasrc = N'D:\PROYECTO CCDD\JERARQUIAS.xlsx'
@provstr = N'Excel 12.0;HDR=Yes'
luego ejecuto la instrucción
EXEC sp_columns_ex test
para listas los campos del XLSX y arroja el mensaje ya indicado anteriormente.
Al cambiar el parámetro del archivo a un XLS, no arroja ningún error y me muestra todos los campos del archivo. Por lo que el problema es sólo para los del tipo XLSX.
por lo que he leido también he probado colocando en el parámetro @provstr esta instrucción:
@provstr = N'Excel 12.0 Xml;HDR=Yes'
Pero aún así sigue apareciendo el error.
Muchas gracias por tu ayuda.
Martin
Respuestas
-
proba con este query a ver si trae datos
- SELECT * FROM OPENROWSET(
- ‘Microsoft.ACE.OLEDB.12.0’,
- ‘Excel 12.0;Database=c:\TEMP\DimBalance.xlsx;HDR=YES’,
- ‘SELECT * FROM [Hoja1$]’)
- Propuesto como respuesta José De Alva lunes, 18 de julio de 2016 22:47
- Marcado como respuesta MartinMartinez martes, 19 de julio de 2016 13:54
-
Aca hay un hilo tambien sobre lo mismo.
https://social.msdn.microsoft.com/Forums/es-ES/eda4c974-676c-434f-9b03-fae105594168/spaddlinkedserver-con-excel-2010-en-sql-server-2008-r2?forum=sqlserveres
- Propuesto como respuesta José De Alva lunes, 18 de julio de 2016 22:47
- Marcado como respuesta MartinMartinez martes, 19 de julio de 2016 13:54
Todas las respuestas
-
Se me ocurren un par de cosas que debes comprobar. La primera es que el proveedor ACE esté instalado con el mismo número de bits que el motor de base de datos. Por ejemplo, si el motor está rodando en 64 bits, asegúrate de que tienes instalado el ACE de 64 bits (no funcionará con el de 32 bits). La segunda es que compruebes los permisos en disco del fichero .xlsx. Tiene que ser accesible desde la cuenta del servicio SQL, no es suficiente con que tenga permisos para el usuario que envía el comando que le ordena leer el fichero.
-
gracias por responder Alberto.
Mira Reinstale el ACE de 64 bits, pero aún así sigue apareciendo el mensaje de error.
Por otra parte la carpeta es leída por el servidor dado que al utilizar un archivo XLS en la misma ruta, funciona sin ningún problema. Pero al intentar leer un archivo XLSX se cae.
la cadena de conexión que utiliza es:
Exec sp_addlinkedserver
@server = 'Prueba',
@srvproduct = 'ACE 12.0', --N'ExcelData ',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = 'C:\xampp\xls_subidos\Historica-ENO (1)_20160713_16_35_26.xlsx',
@provstr = 'EXCEL 12.0 Xml; HDR=Yes'la verdad es que ya no se me ocurre que pode ser.
estoy perdido :(
Martin
-
proba con este query a ver si trae datos
- SELECT * FROM OPENROWSET(
- ‘Microsoft.ACE.OLEDB.12.0’,
- ‘Excel 12.0;Database=c:\TEMP\DimBalance.xlsx;HDR=YES’,
- ‘SELECT * FROM [Hoja1$]’)
- Propuesto como respuesta José De Alva lunes, 18 de julio de 2016 22:47
- Marcado como respuesta MartinMartinez martes, 19 de julio de 2016 13:54
-
Aca hay un hilo tambien sobre lo mismo.
https://social.msdn.microsoft.com/Forums/es-ES/eda4c974-676c-434f-9b03-fae105594168/spaddlinkedserver-con-excel-2010-en-sql-server-2008-r2?forum=sqlserveres
- Propuesto como respuesta José De Alva lunes, 18 de julio de 2016 22:47
- Marcado como respuesta MartinMartinez martes, 19 de julio de 2016 13:54
-
Gracias por responder, efectivamente leí los hilos que dejaste José, pero el tema es que es un servidor y como tal, la solución que se aplica allí, lamentablemente no la puede utilizar puesto que no esta permitido la instalación de officce en este servidor.
por otra parte, cambié el código al que haces mención con OPENROWSET, aunque no era lo que buscaba este código funciona. y Menciono que no era lo que buscaba ya que este código implica que al leer el XLSX debo saber con anterioridad el nombre que debe tener la hoja, y para el aplicativo este nombre podría llegar a ser cualquier cosa ya que lo colocan los usuarios.
De todas formas y dado que no tengo más alternativas, utilizaré este código y tendré que desplegar un mensaje en caso de que la hoja tenga un nombre distinto al que se establecerá.
Muy agradecido por tu tiempo y respuesta.
Martin