none
Servidor Vinculado con archivo XLSX. RRS feed

  • 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

    miércoles, 13 de julio de 2016 22:02

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
    jueves, 14 de julio de 2016 22:30
  • 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
    jueves, 14 de julio de 2016 22:31

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.
    jueves, 14 de julio de 2016 5:17
  • 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

    jueves, 14 de julio de 2016 14:06
  • 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
    jueves, 14 de julio de 2016 22:30
  • 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
    jueves, 14 de julio de 2016 22:31
  • 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

    martes, 19 de julio de 2016 13:54