Estoy tratando de importar datos desde archivos de Excel 2007 (.xlsx) a SQL Server 2008 utilizando un comando T-SQL OpenRowset() con el "Microsoft.ACE". OLEDB.12.0 "proveedor OLE DB, y obtengo un error persistente" No se pudo encontrar ISAM instalable ". Todo el hardware es de 32 bits.Cómo resolver "No se pudo encontrar el ISAM instalable". error para el proveedor OLE DB "Microsoft.ACE.OLEDB.12.0"
[Revisado 10/01/12 a tratar de centrarse más en las anomalías]
La siguiente instrucción T-SQL produce el error:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"',
'SELECT * FROM [Sheet1$]'
)
Si salvo el archivo de Excel en el formato "Excel 97-2003" (.xls) y usa el antiguo proveedor Microsoft.Jet.OLEDB.4.0 para importar los datos, funciona bien. Esto me hace pensar que no es un problema de seguridad u otro problema ambiental.
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\work\TestData.xls;HDR=YES',
'SELECT * FROM [Sheet1$]'
)
Sin embargo, cuando intento el archivo .xls * con el proveedor de Microsoft.ACE.OLEDB.12.0, que debe ser compatible con el formato * .xls, de nuevo se produce el mismo error:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xls;Extended Properties="Excel 8.0;HDR=YES";',
'SELECT * FROM [Sheet1$]'
)
Además, curiosamente, cuando uso el asistente "Importar datos ..." de SSMS, funciona bien. Guardé el resultado del asistente Importar datos como un paquete SSIS y miré en el archivo SSIS para tratar de descubrir cómo funciona, y está utilizando con éxito el proveedor Microsoft.ACE.OLEDB.12.0. Esta es la cadena de conexión del paquete de SSIS:
<DTS:Property DTS:Name="ConnectionString">
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
</DTS:Property>
También he hecho la configuración de SQL Server pertinente para evaluar la consulta distribuida OPENROWSET:
sp_configure 'show advanced options', 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
GO
Si yo también puse el siguiente * * sp_MSset_oledb_prop los valores (que he encontrado en un puesto en alguna parte) ...
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
... entonces cambia el error de "error no especificado":
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
Sin embargo, no estoy seguro de si esto es un error de subida o de bajada. (¿Ahora está encontrando el "ISAM instalable" pero fallando posteriormente?)
He intentado esto con múltiples archivos de Excel en dos máquinas/sistemas operativos diferentes (Windows Server 2003, Windows XP SP3). Ambas máquinas son de 32 bits.
También intenté volver a instalar las versiones de Office 2007 y Office 2010 de AccessDatabaseEngine.exe (http://www.microsoft.com/download/en/details.aspx?id=23734 y http://www.microsoft.com/download/en/details.aspx?id=13255, respectivamente), fue en vano.
En resumen:
- proveedor "Microsoft.Jet.OleDb.4.0" funciona utilizando T-SQL, pero "Microsoft.ACE.OLEDB.12.0" no.
- "Microsoft.ACE.OLEDB.12.0" funciona utilizando el asistente "Importar datos ..." (hasta donde puedo decir desde el archivo de trabajo SSIS guardado).
- Al establecer las propiedades "AllowInProcess" y "DynamicParameters" en "1", se cambia el error a "Error no especificado". (¿Es eso un paso adelante ?!)
¿Alguna idea?
Ha buscado SO para este eeor? Hay muchas preguntas al respecto, la mayoría de las respuestas parecen girar en torno a la adición de comillas alrededor de 'Data Source = '...' ' –
Sí, pasé unas horas buscando SO y en otros lugares, y probé muchas variaciones de la cadena de conexión, incluso jugando con las comillas, así que no creo que ese sea el problema. (Eso incluye copiar la cadena de conexión SSIS que está funcionando.) –
Estoy teniendo el mismo problema – Pete