¿No se encuentra origen de datos?

Iniciado por |Miguel|, 14 Febrero 2012, 18:17 PM

0 Miembros y 2 Visitantes están viendo este tema.

|Miguel|

Hola, buenas... veamos estoy intentando actualizar una base de datos de Access desde Java con el siguiente código:

Código (java) [Seleccionar]

String nom=jtxtNombre.getText(), ape1=jtxtApellido1.getText(), ape2=jtxtApellido2.getText(), id=jtxtNum.getText();
        String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
        String miDB = "jdbc:odbc:propietarios";
        try {
            Class.forName(DRIVER);
            Connection conexion =  DriverManager.getConnection(miDB);
            PreparedStatement select = conexion.prepareStatement("SELECT * FROM Propietario where dni='"+id+"';");
            ResultSet rs = select.executeQuery();
            select=conexion.prepareStatement("update propietario set nombre='"+nom+"', apellido1='"+ape1+"', apellido2='"+ape2+"' where dni='"+id+"';");
            select.executeUpdate();
            rs.close();
            select.close();
            conexion.close();
        }
        catch (Exception e) {
            System.out.println("Error: " + e);
        }


Y me da el siguiente error (excepción, en realidad):
Cita de: javaError: java.sql.SQLException: [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especific? ning?n controlador predeterminado

No entiendo qué le pasa. He definido mi archivo de base de datos desde Herramientas administrativas/Orígenes de datos ODBC. Adjunto captura de la configuración...

Saludos, y gracias!

|Miguel|

#1
Utilizando unos cuantos print he localizado la línea que falla, esta:
Código (java) [Seleccionar]

Connection conexion =  DriverManager.getConnection(miDB);


Pero no llego a ver el fallo... El código completo de cómo he aislado la línea donde casca es este:
Código (java) [Seleccionar]

int i=1;
           System.out.print(i);i++;
           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");System.out.print(i);i++;
           Connection conexion =  DriverManager.getConnection(miDB);System.out.print(i);i++;
           PreparedStatement select = conexion.prepareStatement("SELECT * FROM Propietario;");System.out.print(i);i++;
           ResultSet rs = select.executeQuery();System.out.print(i);i++;


EDITO:
Cita de: java12Error: java.sql.SQLException: [Microsoft][Administrador de controladores ODBC] La arquitectura del DSN especificado no coincide entre el controlador y la aplicaci?n.

|Miguel|

He probado el programa tal cual, sin tocar código, en una máquina de 32 bits (antes lo hice en una de 64) y funciona perfectamente.

Mañana indagaré sobre el asunto, porque ya sabía que ese tema daba problemas pero supuestamente se solventaba utilizando este archivo c:\windows\syswow64\odbcad32.exe en lugar del acceso directo que hay en Herramientas adminsitrativas... pero no, por lo visto hay algo que desconozco o debo haber olvidado...

Saludos.

jperezmonge

No se si te ayuda algo o quizás entiendas mas que yo y te rías de mi. Yo trabajo con mysql y lo único que tengo que hacer es al proyecto con el que estoy trabajando adjuntar el jar donde están los driver, no se si te sirve de algo.

|Miguel|

Al final era lo que comentaba antes, que al compilar en una máquina de 64 bits había que bajar el JDK a uno de 32 ya que no existen ODBC's de 64.

Lo que tú dices creo que es otra cosa, los driver hay que pasárselos siempre si no me equivoco... no sé, acabo de empezar a trastear con BBDD .

jperezmonge


theluigy13etv

#6
CitarMañana indagaré sobre el asunto, porque ya sabía que ese tema daba problemas pero supuestamente se solventaba utilizando este archivo c:\windows\syswow64\odbcad32.exe en lugar del acceso directo que hay en Herramientas adminsitrativas... pero no, por lo visto hay algo que desconozco o debo haber olvidado...

Disculpen que reviva este post pero creo que tengo la solución.
En windows 7 de 64 bits existen dos archivos odbcad32.exe que se encuentran en dos ubicaciones distintas.

c:\windows\syswow64\      .....<---- (Aquí esta el ODBC de 32 bits, no te confundas por los números contradictorios)
c:\windows\System32\      ..........<---- (Aquí esta el ODBC de 64 bits

La diferencia entre ambas es que el primero tiene la lista de controladores ODBC de 32 bits mientras que la segunda tiene la lista de controladores ODBC de 64 bits. Por defecto, cuando ingresas a Orígenes de Datos ODBC en el Panel de Control, te manda al Administrador ODBC de 64 bits. Pero en dicho Administrador no vas a encontrar el controlador de 64 bits de Access, en cambio si ingresas al segundo, osea, al que se encuentra en c:\windows\syswow64\ allí si lo encuentras. Con eso logras seleccionar el controlador 32 bits de Access. Pero creo que él error ocurre porque estás compilando tu trabajo en un JDK para 64 bits.

Yo lo que hice fue instalar el JDK de 32 bits, no necesité desinstalar el JDK de 64 bits, ya que se isntalan en carpetas diferentes. Luego, como utilizo el NetBeans, en las propiedades de proyecto, elijo el JDK que quiero utilizar para generar mi programa. Así, utilizando el JDK de 32 bits no hay ningún problema para conectar tu programa con la base de Datos de Access.

isakmtz

Oye theluigy13etv, que bueno que pones la solución.

Efectivamente yo tuve el mismo problema, tenia instalado el SDK de 64 bits y no seconectaba con Access 2007, entonces instale el SDK de 32 bits (jdk-6-windows-i586)

Tuve que ejecutar eclipse de 32 bits tambien.

theluigy13etv

Cita de: isakmtz en  1 Octubre 2012, 05:39 AM
Oye theluigy13etv, que bueno que pones la solución.

Efectivamente yo tuve el mismo problema, tenia instalado el SDK de 64 bits y no seconectaba con Access 2007, entonces instale el SDK de 32 bits (jdk-6-windows-i586)

Tuve que ejecutar eclipse de 32 bits tambien.

Sí, pero creo que no es necesario que tu Eclipse sea de 32 bits, porque yo tengo mi NetBeans de 64 bits pero de todas maneras puedo elegir el JDK con el que deseo trabajar para obtener mis aplicaciones. Osea puedo usar el JDK de 32 bits o de 64 bits a pesar que mi NetBeans es de 64 bits. En Eclipse supongo que debe ser algo parecido

alvifa

Hola theluigy13etv

Me podrias decir por favor donde cambio el jdk con el que quiero que compile mi programa. Tambien sabes porque aunque lo haya compilado en una maquina de 64bits me corre perfectamente en maquinas con XP de 32bits?

Gracias,