ME URGE!! problema con el controlador ACCESSS *mbd, *accdb

Iniciado por NaTxosS, 12 Noviembre 2014, 21:27 PM

0 Miembros y 1 Visitante están viendo este tema.

NaTxosS

Hola, tengo un problema con el que llevo ya dos días y ya estoy rozando la locura y tengo que enviar mi pequeño proyecto antes del domingo.
Os pongo en situación, tengo un Lenovo con win 8 de 64 bits y el Access es del 2010 (con la extensión *accdb, me exigen que la base de datos sea con access), trabajo con un netbeans 8.0.1 y en herramientas administrativas tengo estas dos aplicaciones:



cosa que no entiendo muy bien, porque a la hora de buscar soluciones en internet todos los casos solo tienen una aplicación:

Origenes de datos ODBC

Bueno mi problema, como podéis imaginar algunos es que no consigo cargar el controlador Microsoft Access Driver (*mdb, *accdb), el código de mi programa debe estar bien porque le he enviado mi programa a mi hermano que también esta empezando con java y con un win 7 de 64 bits, eclipse y access 2010 ha conseguido cargar el controlador después de hacer el siguiente tutorial:

http://es.slideshare.net/hackerchurritos/conectar-java-con-access-2010

El tutorial lo he hecho de arriba a abajo, de abajo a arriba y de todas las maneras posibles, ya como unas veinte veces, el archivo odbcad32.exe esta más que copiado y recopiado en la carpeta \syswow64\, pero sigue sin aparecerme el controlador deseado:

http://subefotos.com/ver/?ede1c4349074e758a362c03726db2bebo.jpg

El tutorial lo he hecho con los dos orígenes de datos, tanto con el de 32 como con el de 64.

Esta es la parte del código de mi programa que se encarga del controlador:

try {
           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
       } catch(Exception e) {
           JOptionPane.showMessageDialog(null, "Error al cargar el controlador");
      }

No se si antes de hacer este tutorial hice algo que no debía (antes de llegar al tutorial probé con otros consejos que encontre por la red), también instale el cargador que se descarga en esta pagina:

http://www.microsoft.com/es-es/download/details.aspx?id=13255

que aún sigue instalado.

Espero que alguien sepa como solucionarlo. Muchas gracias de antemano.
La mejor manera de hacerse optimista es pisando una buena mielda.

MeCraniDOS

Quizás no te sirve de mucho, pero porque no le pides el pc a tu hermano y lo terminas desde el suyo?  :huh:

Si consideras que el proyecto y el código son correctos, también puedes hablar con el profesor y comentarle tu problema...  :-\

Saludos
"La física es el sistema operativo del Universo"
     -- Steven R Garman

NaTxosS

#2
Mi hermano esta a 500 km de mí, y ya he hablado con mi profesor y me ha dicho que lo haga con MySQL, aun así quería saber si esto tenia solución para futuros problemas.
Saludos
La mejor manera de hacerse optimista es pisando una buena mielda.

someRandomCode

no te fijaste de casualidad cual fue el error dentro del try-catch?
Deberias fijarte que dice e.toString() asi podemos ver bien el error y fijarnos para donde correr

NaTxosS

con e.getMessage() me salta esto :

sun.jdbc.odbc.JdbcOdbcDriver

y con e.toString(); esto:

java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver

También he probado con instalar en mi ordenador la version JDK de 32 bits e indicar en las propiedades de mi proyecto que trabaje con la plataforma de 32 bits y nada, sigue igual.
La mejor manera de hacerse optimista es pisando una buena mielda.

NaTxosS

A ver que os parece mi bautizo haciendo tutoriales, jeje, he hecho una pequeña guía para realizar la conexión con Access teniendo en cuenta el problema que os detallaba en este Tema:

////////////////////////////////////////////////////////////////////////////////////////////////

Dos primeros pasos JAVA-ACCESS (cargar y conectar controlador)‏

Antes de nada, las importaciones, el constructor y los atributos de la clase son así:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;

public class ventanaprincipal extends javax.swing.JFrame {

    Connection conexion;
    Statement sentencia;
   
    public ventanaprincipal() {
        initComponents();
        prepararBaseDatos();
    }

/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

PRIMERA PARTE (cargar controlador en java):

Esta parte tiene el siguiente código:

try {
            String controlador = "sun.jdbc.odbc.JdbcOdbcDriver";
            Class.forName(controlador).newInstance();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al cargar el controlador");
        }

Esto siempre es así, ahora para que esto funcione sin mas tienes que tener tu sistema x86 con plataforma JDK para x86, en definitiva todo de x86, si tienes un x64 con windows 8 no te puedo ayudar, he probado todo y no funciona nada, he probado a hacer lo que ahora voy a explicar a continuación, a instalar un JDK para x86 y asignarle a mi proyecto que trabaje con esa plataforma, pero nada de nada, seguro que habrá alguna solución o a lo mejor no, yo no la he encontrado, tuve que buscarme otro ordenador porque me exigían que mi proyecto fuera con Access, o sino hacerlo con MySQL u otra cosa.

Si no funciona lo atrás explicado (es decir, nos salto la excepción indicándonos Error al cargar el controlador) probaremos lo siguiente que tienes dos variantes según tengamos un sistema x86 o x64:

1.- Nos vamos a panel de control / Herramientas administrativas / Origenes de datos ODBC
(si os salen 2, es decir, Orígenes de datos ODBC (32 bits) y Origenes de datos ODBC (64 bits), aquí ya me pierdo, supongo que estáis con windows 8, es el caso que os cuento que no encontré solución, probé a hacer esto con los dos y no resulto).

2.- En la pestaña controladores comprobamos que este el controlador "Microsoft Access Driver (*.mdb)" en caso que trabajemos con un Access de extensión .mdb, o el controlador "Microsoft Access Driver (*.mdb, *.accdb)", en caso que trabajemos con un Access de extensión .accdb.

.mdb creo que son las versiones Access anteriores a 2007, REPITO CREO, la 2003 seguro que es .mdb, y las siguientes son .accdb, REPITO CREO, la 2010 seguro que ya es accdb.

3.- En caso que se encontrara el controlador deseado nos vamos a la pestaña DNS Usuario y hacemos clic en el botón Agregar.
3.1. - Seleccionamos en la ventana que se nos abre el controlador deseado, ya sabéis el que pone "Microsoft Access Driver (*.mdb)" para extensiones .mdb o "Microsoft Access Driver (*.mdb, *.accdb)" para extensiones .accdb. Cuidado con confundir con el que pone Driver Do Microsoft Access.
3.2.- Le damos a Finalizar, se nos cierra esta ventana y nos sale otra ventana.
3.3.- Donde pone Nombre del origen de datos, escribimos un nombre, normalmente el mismo que el de nuestra base de datos Access, recordarlo, porque luego lo usaremos (por ejemplo: mibasedatos), y hacemos clic en el botón seleccionar.
3.4.- En la nueva ventana que sale tendremos que buscar y ubicar nuestra base de datos, le damos a Aceptar, y cerramos todas las ventanas que teníamos abiertas del Orígenes de datos ODBC dando en el botón Aceptar.
3.5.- Nos vamos a NetBeans o Eclipse y seguimos con nuestro proyecto (SEGUNDA PARTE).

4.- En caso de que no se encuentre el controlador deseado, porque usa x64, cerramos Orígenes de datos ODBC y nos iríamos al menú inicio / accesorios y haciendo clic en el botón derecho hariamos clic en ejecutar como administrador.
4.1.- Si ya estamos en C:\windows\system32> (y si no lo estamos, nos ponemos ahí), escribimos esto: copy odbcad32.exe .\SYSWOW64 (estamos copiando el archivo  odbcad32.exe de la carpeta system32 a la carpta syswow64).
4.2.- Escribimos exit y salimos del simbolo del sistema.
4.3.- Nos vamos a panel de control / Herramientas administrativas y con el botón derecho del ratón hacemos clic en Orígenes de datos ODBC y clic en propiedades.
4.4.- En la ventana que nos aparece en la pestaña acceso directo, en el JTextField Destino: sustituimos la palabra system32 por syswow64, es decir quedaría así: %windir%\syswow64\odbcad32.exe
4.5.- Aceptamos.
4.6.- Abrimos Origenes de Datos ODBC y nos vamos a la pestaña DNS Usuario y hacemos clic en el botón Agregar.
4.7. - Seleccionamos en la ventana que se nos abre el controlador deseado, ya sabéis el que pone "Microsoft Access Driver (*.mdb)" para extensiones .mdb o "Microsoft Access Driver (*.mdb, *.accdb)" para extensiones .accdb. Cuidado con confundir con el que pone Driver Do Microsoft Access.
4.8.- Le damos a Finalizar, se nos cierra esta ventana y nos sale otra ventana.
4.9.- Donde pone Nombre del origen de datos, escribimos un nombre, normalmente el mismo que el de nuestra base de datos Access, recordarlo, porque luego lo usaremos (por ejemplo: mibasedatos), y hacemos clic en el botón seleccionar.
4.10.- En la nueva ventana que sale tendremos que buscar y ubicar nuestra base de datos, le damos a Aceptar, y cerramos todas las ventanas que teníamos abiertas del Orígenes de datos ODBC dando en el botón Aceptar.
4.11.- Nos vamos a NetBeans o Eclipse y seguimos con nuestro proyecto (SEGUNDA PARTE).

/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

SEGUNDA PARTE (creamos el objeto conexión):

Esta parte tiene el siguiente código si no has tenido que realizar ningún paso hasta ahora de los descritos por mi anteriormente:

try {
            String DNS = "jdbc:odbc:Driver={Microsoft Access Driver (*mdb)};DBQ="+"Base\\mibasedatos.mdb";
            String user = "";
            String password = "";
            conexion = DriverManager.getConnection(DNI, user, password);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al realizar la conexón");
        }

Si has llegado hasta aquí sin antes hacer nada de los apartados anteriores pero al ejecutar te salta esta excepción (Error al realizar la conexión) sin que haya saltado la excepción anterior (Error al cargar el controlador), entonces tendrías que hacer los pasos 2 y 3 completamente y después cambiar el código de crear el objeto de conexión por este:

try  {
            conexion = DriverManager.getConnection("jdbc:odbc:mibasedatos");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al realizar la conexón");
        }

MUY IMPORTANTE!!!   Observar que donde pone "mibasedatos" es el nombre que asignamos a nuestro Origen de datos ODBC. Poned el nombre que pusisteis vosotros.

Bueno si después de esto no os funciona yo ya no os puedo ayudar.

Después de esto va la creación del objeto sentencia, que es así:

try {
            sentencia = conexion.createStatement(
                ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al crear el objeto sentencia");
        }

Los pasos del 1 al 4 son extraídos de:

http://es.slideshare.net/hackerchurritos/conectar-java-con-access-2010

Mis conocimientos son básicos en informática y esto que he escrito se basa en mi experiencia en este PEDAZO escalón que me encontré hasta que pude saltarlo (mas que saltarlo, esquivarlo, jajaj). Por lo que supongo que es posible que habré puesto información errónea o confusa, sobretodo al intentar ramificar el problema según la arquitectura y/o software de los equipos.

Así que cualquier estirón de orejas sera bienvenido. Saludos.
La mejor manera de hacerse optimista es pisando una buena mielda.

NaTxosS

He modificado algunas cosas que he visto que estaba mal.

////////////////////////////////////////////////////////////////////////////////////////////////

Dos primeros pasos JAVA-ACCESS (cargar y conectar controlador)‏

Antes de nada, las importaciones, el constructor y los atributos de la clase son BASICAMENTE así:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;

public class ventanaprincipal extends javax.swing.JFrame {

    Connection conexion;
    Statement sentencia;
   
    public ventanaprincipal() {
        initComponents();
        prepararBaseDatos();
    }

/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

PRIMERA PARTE (cargar controlador en java):

Esta parte tiene el siguiente código:

try {
            String controlador = "sun.jdbc.odbc.JdbcOdbcDriver";
            Class.forName(controlador).newInstance();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al cargar el controlador");
        }

Esto siempre es así, ahora para que esto funcione sin mas tienes que tener tu sistema x86 con plataforma JDK para x86, en definitiva todo de x86, si tienes un x64 con windows 8 no te puedo ayudar, he probado todo y no funciona nada, he probado a hacer lo que ahora voy a explicar a continuación, a instalar un JDK para x86 y asignarle a mi proyecto que trabaje con esa plataforma, pero nada de nada, seguro que habrá alguna solución o a lo mejor no, yo no la he encontrado, tuve que buscarme otro ordenador porque me exigían que mi proyecto fuera con Access, o sino hacerlo con MySQL u otra cosa.

Si no funciona lo atrás explicado (es decir, nos salto la excepción indicándonos Error al cargar el controlador) probaremos lo siguiente que tienes dos variantes según tengamos un sistema x86 o x64, si funciona pasa a la segunda parte directamente:

1.- Nos vamos a panel de control / Herramientas administrativas / Origenes de datos ODBC
(si os salen 2, es decir, Orígenes de datos ODBC (32 bits) y Origenes de datos ODBC (64 bits), aquí ya me pierdo, supongo que estáis con windows 8, es el caso que os cuento que no encontré solución, probé a hacer esto con los dos y no resulto).

2.- En la pestaña controladores comprobamos que este el controlador "Microsoft Access Driver (*.mdb)" en caso que trabajemos con un Access de extensión .mdb, o el controlador "Microsoft Access Driver (*.mdb, *.accdb)", en caso que trabajemos con un Access de extensión .accdb.

.mdb creo que son las versiones Access anteriores a 2007, REPITO CREO, la 2003 seguro que es .mdb, y las siguientes son .accdb, REPITO CREO, la 2010 seguro que ya es accdb.

3.- En caso que se encontrara el controlador deseado nos vamos a la pestaña DNS Usuario y hacemos clic en el botón Agregar, en el caso que no se encuentre nuestro controlador deseado pasamos al punto 4.
3.1. - Seleccionamos en la ventana que se nos abre el controlador deseado, ya sabéis el que pone "Microsoft Access Driver (*.mdb)" para extensiones .mdb o "Microsoft Access Driver (*.mdb, *.accdb)" para extensiones .accdb. Cuidado con confundir con el que pone Driver Do Microsoft Access.
3.2.- Le damos a Finalizar, se nos cierra esta ventana y nos sale otra ventana.
3.3.- Donde pone Nombre del origen de datos, escribimos un nombre, normalmente el mismo que el de nuestra base de datos Access, recordarlo, porque luego lo usaremos (por ejemplo: mibasedatos), y hacemos clic en el botón seleccionar.
3.4.- En la nueva ventana que sale tendremos que buscar y ubicar nuestra base de datos, le damos a Aceptar, y cerramos todas las ventanas que teníamos abiertas del Orígenes de datos ODBC dando en el botón Aceptar.
3.5.- Nos vamos a NetBeans o Eclipse y seguimos con nuestro proyecto (SEGUNDA PARTE, saltamos el punto 4 entero).

4.- En caso de que no se encuentre el controlador deseado, porque usa x64, cerramos Orígenes de datos ODBC y nos iríamos al menú inicio / accesorios y haciendo clic en el simbolo del sistema con botón derecho haríamos clic en ejecutar como administrador.
4.1.- Si ya estamos en C:\windows\system32> (y si no lo estamos, nos ponemos ahí), escribimos esto: copy odbcad32.exe .\SYSWOW64 (estamos copiando el archivo  odbcad32.exe de la carpeta system32 a la carpta syswow64).
4.2.- Escribimos exit y salimos del simbolo del sistema.
4.3.- Nos vamos a panel de control / Herramientas administrativas y con el botón derecho del ratón hacemos clic en Orígenes de datos ODBC y clic en propiedades.
4.4.- En la ventana que nos aparece en la pestaña acceso directo, en el JTextField Destino: sustituimos la palabra system32 por syswow64, es decir quedaría así: %windir%\syswow64\odbcad32.exe
4.5.- Aceptamos.
4.6.- Abrimos Origenes de Datos ODBC y nos vamos a la pestaña DNS Usuario y hacemos clic en el botón Agregar.
4.7. - Seleccionamos en la ventana que se nos abre el controlador deseado, ya sabéis el que pone "Microsoft Access Driver (*.mdb)" para extensiones .mdb o "Microsoft Access Driver (*.mdb, *.accdb)" para extensiones .accdb. Cuidado con confundir con el que pone Driver Do Microsoft Access.
4.8.- Le damos a Finalizar, se nos cierra esta ventana y nos sale otra ventana.
4.9.- Donde pone Nombre del origen de datos, escribimos un nombre, normalmente el mismo que el de nuestra base de datos Access, recordarlo, porque luego lo usaremos (por ejemplo: mibasedatos), y hacemos clic en el botón seleccionar.
4.10.- En la nueva ventana que sale tendremos que buscar y ubicar nuestra base de datos, le damos a Aceptar, y cerramos todas las ventanas que teníamos abiertas del Orígenes de datos ODBC dando en el botón Aceptar.
4.11.- Nos vamos a NetBeans o Eclipse y seguimos con nuestro proyecto (SEGUNDA PARTE).

/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

SEGUNDA PARTE (creamos el objeto conexión):

Esta parte tiene el siguiente código si no has tenido que realizar ningún paso hasta ahora de los descritos por mi anteriormente (Pasos del 1 al 4):

try {
            String DNS = "jdbc:odbc:Driver={Microsoft Access Driver (*mdb)};DBQ="+"Base\\mibasedatos.mdb";
            String user = "";
            String password = "";
            conexion = DriverManager.getConnection(DNI, user, password);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al realizar la conexón");
        }

Si has llegado hasta aquí sin antes hacer nada de los apartados anteriores pero al ejecutar te salta esta excepción (Error al realizar la conexión) sin que haya saltado la excepción anterior (Error al cargar el controlador), entonces tendrías que hacer los pasos 1, 2 y 3 completamente y después cambiar el código de crear el objeto de conexión por este:

try  {
            conexion = DriverManager.getConnection("jdbc:odbc:mibasedatos");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al realizar la conexón");
        }

MUY IMPORTANTE!!!   Observar que donde pone "mibasedatos" es el nombre que asignamos a nuestro Origen de datos ODBC. Poned el nombre que pusisteis vosotros.

Bueno si después de esto no os funciona yo ya no os puedo ayudar.

Después de esto va la creación del objeto sentencia, que es así:

try {
            sentencia = conexion.createStatement(
                ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al crear el objeto sentencia");
        }

Los pasos del 1 al 4 son extraídos de:

http://es.slideshare.net/hackerchurritos/conectar-java-con-access-2010
La mejor manera de hacerse optimista es pisando una buena mielda.