Discussion:
Falla Conectividadad con OLEDB ACCESS
(demasiado antiguo para responder)
Irak
2009-05-04 15:30:01 UTC
Permalink
Hola, buen día, quisiera saber que es lo que está sucediendo con lo siguiente:

Tengo Windows Vista 64bits, Visual Studio 2008. Creo una aplicación para
conectarme a una base de datos de Access pero cuando la aplicación ejecuta el
comando Cn.Open(); se produce un error "silencioso" es decir, que no muestra
ningun mensaje de excepción y solo sale del procedimiento donde está
declarada ésta instrucción. Cuando verifico el estado actual de mi variable
de conexión (Cn), resulta que éste sigue en "Closed", es decir, nunca se
abrió.

La cadena de conexión es la misma que genera Visual Studio en el archivo
app.config. y la he probado en otra instancia de Visual Studio en un ambiente
de Windows XP SP2 y este ha resultado positivo. ¿Cómo es posible que Visual
Studio si pueda conectarse a mi base de datos de Access y consultar sus
tablas y desde programación yo no pueda, siendo que creo que Visual Studio
utiliza el mismo proveedor ¿no? y ¿cuál podría ser la solución? ¿tengo que
descargar algun archivo para 64bits ? no sé

Gracias por tu asistencia
Alberto Poblacion
2009-05-04 20:15:33 UTC
Permalink
Post by Irak
Tengo Windows Vista 64bits, Visual Studio 2008. Creo una aplicación para
conectarme a una base de datos de Access pero cuando la aplicación ejecuta el
comando Cn.Open(); se produce un error "silencioso" es decir, que no muestra
ningun mensaje de excepción y solo sale del procedimiento donde está
declarada ésta instrucción. Cuando verifico el estado actual de mi variable
de conexión (Cn), resulta que éste sigue en "Closed", es decir, nunca se
abrió.
La cadena de conexión es la misma que genera Visual Studio en el archivo
app.config. y la he probado en otra instancia de Visual Studio en un ambiente
de Windows XP SP2 y este ha resultado positivo. ¿Cómo es posible que Visual
Studio si pueda conectarse a mi base de datos de Access y consultar sus
tablas y desde programación yo no pueda, siendo que creo que Visual Studio
utiliza el mismo proveedor ¿no? y ¿cuál podría ser la solución? ¿tengo que
descargar algun archivo para 64bits ? no sé
El problema es que no existen drivers para el JET Engine (el motor de
Access) en 64 bits, sólo en 32 bits. Visual Studio puede conectarse porque
rueda en 32 bits (Windows-on-Windows) aunque el sistema operativo sea de 64
bits, y por eso "monta" la dll de 32 bits con los drivers de Access y puede
acceder.
Pero si compilas tu programa de .Net con la opción predetermnada ("Any
CPU"), se ejecuta automáticamente en 64 bits si el sistema operativo es de
64 bits, y entonces no funciona porque no encuentra la correspondiente dll
para el JET.

El remedio es cambiar las opciones de compilación del proyecto, de forma
que en lugar de "Any CPU", se compile para "x86". De esta forma, el
ejecutable rueda siempre en 32 bits y puede acceder a los .mdb.
Irak Rubio
2009-05-04 22:02:07 UTC
Permalink
Wow!!!!
Me quedo bastante claro, entonces debo compilar a 32 bits... con razon
tampoco las soluciones que tengo a 32 no las podía ni cargar en la de 64...
En fin, supongo que esto debe ser una medida temporal, porque nuestros genios
de Microsoft no nos van a dejas sin OLEDB para 64 ¿verdad?

Un saludo y gracias
Post by Alberto Poblacion
Post by Irak
Tengo Windows Vista 64bits, Visual Studio 2008. Creo una aplicación para
conectarme a una base de datos de Access pero cuando la aplicación ejecuta el
comando Cn.Open(); se produce un error "silencioso" es decir, que no muestra
ningun mensaje de excepción y solo sale del procedimiento donde está
declarada ésta instrucción. Cuando verifico el estado actual de mi variable
de conexión (Cn), resulta que éste sigue en "Closed", es decir, nunca se
abrió.
La cadena de conexión es la misma que genera Visual Studio en el archivo
app.config. y la he probado en otra instancia de Visual Studio en un ambiente
de Windows XP SP2 y este ha resultado positivo. ¿Cómo es posible que Visual
Studio si pueda conectarse a mi base de datos de Access y consultar sus
tablas y desde programación yo no pueda, siendo que creo que Visual Studio
utiliza el mismo proveedor ¿no? y ¿cuál podría ser la solución? ¿tengo que
descargar algun archivo para 64bits ? no sé
El problema es que no existen drivers para el JET Engine (el motor de
Access) en 64 bits, sólo en 32 bits. Visual Studio puede conectarse porque
rueda en 32 bits (Windows-on-Windows) aunque el sistema operativo sea de 64
bits, y por eso "monta" la dll de 32 bits con los drivers de Access y puede
acceder.
Pero si compilas tu programa de .Net con la opción predetermnada ("Any
CPU"), se ejecuta automáticamente en 64 bits si el sistema operativo es de
64 bits, y entonces no funciona porque no encuentra la correspondiente dll
para el JET.
El remedio es cambiar las opciones de compilación del proyecto, de forma
que en lugar de "Any CPU", se compile para "x86". De esta forma, el
ejecutable rueda siempre en 32 bits y puede acceder a los .mdb.
Alberto Poblacion
2009-05-05 08:19:22 UTC
Permalink
Post by Irak Rubio
En fin, supongo que esto debe ser una medida temporal, porque nuestros genios
de Microsoft no nos van a dejas sin OLEDB para 64 ¿verdad?
Cito:
"The Jet Database Engine will remain 32-bit for the foreseeable future.
Microsoft has no plans to natively support Jet under 64-bit versions of
Windows." (http://en.wikipedia.org/wiki/Microsoft_Jet_Database_Engine).
Loading...