JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Solucionar problemas con el driver de Access Microsoft.ACE.OLEDB.12.0 en sistemas de 64 bits

Hoy he perdido un buen rato con este problema, así que comparto la solución aquí por si a alguien más le pasa.

Tengo una aplicación vieja de escritorio que importa unos archivos XML dentro de una base de datos Access. Recientemente he instalado la versión definitiva de Office 2013 y he aprovechado para instalar la versión de 64bits de la suite, ya que antes tenía Office 2010 x32. Desde el momento en que he instalado esta nueva versión me dejó de funcionar la aplicación de importar archivos. Todo el tiempo daba el siguiente error:

ACEOLEDB12

Al tener instalado Access 2013 eso no debería pasar. El caso es que desde Visual Studio también ocurría al intentar acceder desde el explorador de servidores si intentabas añadir una conexión a cualquier Access.

Lo cierto es que el formato de Access no ha cambiado desde la versión 2007 por lo que cualquier versión del driver por antigua que sea debería funcionar, y con más razón si tienes instalada la última versión del entorno.

Todo apuntaba a que era un problema por haber instalado la versión de 64 bits, y de hecho así era.

El driver para manejar archivos de Office desde OLEDB no ha cambiado desde la versión 7, aunque sacaron una versión actualizada con Office 2010 que se puede descargar desde aquí. La principal novedad de esta versión era que se soportaban los drivers también en sistemas de 64 bits, algo que no ocurría con Office 2007.

En teoría, teniendo instalado Office 2013 no debería necesitar instalar estos drivers, pero por si acaso me descargué la versión x64 del mismo y volví a ejecutar la aplicación. Resultado: el mismo error :-(

Entonces se me ocurrió lo que podía estar pasando: aunque mi sistema es de 64 bits y el driver de 64 bits estaba instalado seguro ¿qué pasa con la aplicación?

Efectivamente, ésta estaba compilada para funcionar como aplicación de 32 bits, por lo que entonces al ejecutarla se usaba la capa de emulación de Windows 32 (WoW64, o Windows On Windows64). Al hacerlo los drivers de 64 bits no estaban disponibles y los de 32 bits se habían desinstalado y no es posible instalarlos en un sistema de 64 bits...

La solución final al problema: recompilar la aplicación asegurándonos de que se hace para 64 bits:

ACEOLEDB12_x64

Ahora al lanzar la aplicación ésta se ejecuta normalmente, sin la capa de emulación, por lo que es capaz de acceder a los drivers de 64 bits y por lo tanto funciona perfectamente :-)

¡Espero que a alguien más le resulte útil!

José Manuel Alarcón José Manuel Alarcón
Fundador y director de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Comentarios (27) -

Estaba exactamente en la misma situación en MSVS 2013, Compilaba para x86 y Any CPU. No había probado con X64. Funciona perfectamente. Gracias por la solución.

Responder

Hola Jose Manuel,

entiendo que esta solución es para ASP.NET, pero los que seguimos teniendo que mantener las aplicaciones en ASP Clásico??

Me han migrado el server de w2003 a w2008 y ahora al importar el fichero xls me da error. Claro, no hay Jet4. He pedido a los industrializadores (yo no tengo permiso para tocar nada en el servidor) que instalen el MS Access Database Engine, pero ellos me dicen que no, que van a instalar el Office 2010 y Access. (a mi me parece matar moscas a cañonazos....)

Por mi parte cambiaré la forma de abrir el fichero:

antes:
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strRutaBase & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"

ahora:
strConn = "Provider=Microsoft.Jet.ACE.OLEDB.12.0;Data Source=" & strRutaBase & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"

Será suficiente con eso?

Un saludo y muchas gracias!

Responder

Spain José M. Alarcón

Hola Sonia,

La verdad es que no lo sé, tendría que hacer una prueba real. De todos modos si el servidor es de 64bits y tienes instalada la aplicación de ASP clásico en el IIS del mismo, si no me equivoco (ahora lo digo de memoria) hay un ajuste en IIS 7.x y 8.x para que las aplicaciones de ASP clásico puedan ejecutarse en 32 o 64 bits. Asegúrate de que se ejecuta en x64.

Saludos.

Responder

Si, ya he visto ese parámetro en el IIS 7, supongo que es el de "enabled 32" true/false. Lo tienen en false.

Bueno, el lunes haré la prueba...han instalado en el server un office 2010 de 32 bits, y como que no... así que he pedido desinstalarlo (las cosas de palacio van despacio) y luego instalarán el MS Access Database Engine de 64bits.  

Por cierto...la cadena de conexión que puse arriba, con las prisas tenía una errata.
Corregida:
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strRutaBase & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"

Avisaré si funciona.

Un saludo y muchas gracias!

Responder

muchas muchas gracias... muy util

Responder

Que se me había olvidado confirmar.

Con el engine 64bits ya funciona perfectamente.

Muchas gracias :-)

Responder

buenas tardes, muchas gracias por la ayuda brindada en este blog, es un gran aporte, ya que me permitio dar solucion al problema encontrado al tratar de buscar registros en mi aplicativo, muchas gracias y da alegria encontrar paginas en español que ayuden a dar soluciones, dando pasos de forma escrita y de igual forma mostrando una imagen de donde se debe cambiar la opcion

Responder

Me pasó al revés: a sistemas de 64 bits les metían un Office de 32bits, por lo que no existían los drivers para 64 bits. Mi solución: instalarles la versión de 32 bits de la app.

Responder

Uuuff alfin logre hacerlo funcionar amigo Gracias....

Responder

Ecuador Javier Erick

como hago para acceder a ese menu de configuracion

Responder

Colombia heimar garcia

Muchas gracias, estuve luchando con ese problemas, y tu solucion fue la correcta. muchas gracias

Responder

Spain jimmy fernandez

Quiero informarles que todo trabaja bien en 64bits o 32bits el driver. El problema que se me presento es que si los campos tienen menos de 256 caracteres todo unciona bien pero en mi caso hay campos superiores a este numero y me genero un error de que el tamaño del campo es muy pequeño para lo que va a almacenar. si hay alguien que ya paso ´por esto y encontro solucion por favor avisarme.

Responder

Peru Christian Coz Alvarez

Hola a todos, me parece que mi tema no se ajusta al 100% pero es lo más cercano y es posible que alguno de ustedes me pueda ayudar.

He hecho una aplicación en office vía programación en vba pero resulta que están cambiando máquinas en la oficina y ahora traen laptops con windows 8 de 64 bits, allí creó que tengo semejanza con este tema.

El aplicativo se trata de conexión de exceles a access vía programación, creó que cambiando la línea de conexión indicada en los correos anteriores me resultaría.

¿Alguno tiene o tuvo un caso como el mío?

Muchas gracias.

Responder

Spain Miguel Arce

He migrado de Windows 7 a Windows 2010, con Visual Studio 2013 Express y como b.d. utilizo Access 2010, todos ellos están instalados con 64 bits. Tengo una aplicación desde hace un par de años, la cual nunca ha dado problemas y al migrar me encuentro que después de compilar aun no dando ningún error no se me ejecuta pues muestra un aviso "El Proveedor "Microsoft.ACE.OLEDB.12.0" no está registrado. La aplicación no ha cambiado en nada ya que la instalación del Windows 10 se hizo sin alterar nada de lo que tenía instalado.
Puede alguien indicar cuál es la opción para solucionar dicho problema.
Muchas gracias.

Responder

Spain José M. Alarcón

En teoría instalando la versión de 64 bits (x64) del "redistribuible" de Access:

www.microsoft.com/.../details.aspx?id=13255

debería funcionarte.

Saludos.

Responder

Spain Miguel Arce

Ayer me puse a instalar este fichero, pero no lo pude instalar hasta haber desisnstalado previamente la Officce 2010. Entiendo que será porque es de 32 bits. Asi que voy a instalar el Officce 2010 de 64 bits y espero que así queda arreglado este problema.

Una vez lo tenga ya le comunicare el final conseguido.

Muchas gracias

Responder

Spain Miguel Arce

He hecho la prueba en otro ordenador donde tengo Windows 10, con Visual Studio 13 Express y Access 2007, los tres son de 32 bits. He instalado el AccessDatabaseEngine  que imagino que será el de 32 bits y sigue dando el mismo error.

Comento esta prueba por si alguna otra persona tiene la misma situacción que tenga una orientación del tema.

Muchas gracias

Responder

Cambiando las propiedades del proyecto en Visual Studio, si tienes un SO de 64 bits y tu Office's es de 32 bits, debes seleccionar x86, si es tu Office de 64 bits seleccionar x64

Puede que soluciones estas instalaciones AccessDatabaseEngine y sus diferentes versiones para Office 2007, 2010, para 64 bits, pero yo no lo he instalado y se me soluciona con el primer comentario.

Ahora lo que hay que saber programar es cuando utilizamos la base de datos y el destino puede que tenga 32 bits o 64 bits en Office, eso es lo que hay que buscar, pero de momento en mi empresa el Office lo tienen con 32 bits.

Responder

Peru Luis Enrique

Estimados, es necesario tener instalado Access por que no lo ubico como proveedor y el office ke tengo instalado no viene con access

Responder

Peru Luis Enrique

Estimados, es necesario tener instalado Access por que no lo ubico como proveedor y el office ke tengo instalado no viene con access

Responder

Hola, a mi me sucede algo curioso. Ya realicé todos los cambios que sugiere Jose Manuel y logré cargar el Excel a SQL Server 2008 R2, pero sigo con un problemita, y es que son varios archivos que tengo que cargar a varias tablas en SQL Server y me carga uno SI y otro NO. O sea, tengo que cargar 8 archivos en 8 tablas y solo me carga bien 4, los otros 4 arroja el error "OBDC: error al conectar con '{SQL Server Native Client 10.0}PC1\SQLEXPRESS'." Cuando cierro el aplicativo y lo ejecuto de nuevo, entonces puedo cargar los que no cargaron la vez pasada, pero solo la mitad (recuerda que cargan uno Si y el otro NO, otro Si y el siguiente NO). Puedes ayudarme con esto?

Responder

by Jose M. Alarcon

Hola Max:

Eso tiene pinta de ser algún bug del código. No lo sé, quizá que intentas reutilizar una conexión abierta al no cerrarla en un bucle y entre una y otra no le da tiempo a acabar las operaciones y cerrarla automáticamente, algo así...

Asegúrate de cerrar la conexión antes de volver a utilizarla. Y para salir de dudas quizá puedas hacer lo siguiente: métele un retraso al código con Thread.sleep que lo pare al menos 1 o 2 segundos entre cada vuelta del bucle. Si así funciona, ya tienes la clave y seguro que tiene que ver con lo que te digo...

Saludos

Responder

Saludos, gracias por tu aporte. Ya sé que este foro es viejo pero dejo un comentario con una consulta Trabajo con un programa en VB6.0 el cual trabaja con Access 2007, trabajo totalmente bien hasta el Office 2013, pero cuando le instalé el office 2016 aparece el mismo error que cuando tiene instalado un Office de 64 bit. ¿Hay una forma que mi programa trabaje con cualquier Office desde el 2007 de 32 o 64 bit? o combinar con una condición a mi programa para que trabaje con una cadena de conexión para 32 bits o 64 bits. Gracias

Responder

by Jose M. Alarcon

Hola:

Creo que no podrás trabajar con versiones de 64 bits del motor de Access desde VB6 porque VB6 genera ejecutables de 32 bits :-S

Pero el VB6 lo dejé hace 15 o 16 años, así que podría estar equivocado. siento no ser de más ayuda.

Saludos

Responder

Gracias amigo, lo sospechaba, ya que nadie ha podido dar con la solución, yo pensaba que con solo cambiar la cadena de conexión era suficiente.

Responder

Se que la entrada es bastante antigua Gabriel. Pero quería saber que solución aplicaste en tu caso

Responder

Eduardo Cortes

Me has salvado, llevaba todo el día peleándome con esto.

Muchas gracias.

Responder

Agregar comentario