“Error general No se puede abrir la clave de registro Temporal (volátil) …” de Access ODBC

Intenté lo siguiente:

private String password = ""; private String dbName = "dataHC.accdb"; private String bd = dbName + ";PWD=" + password; String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+bd+";"; private Connection conn = null; //Connect public void connect() { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection(url); if (conn != null) System.out.println("Conexión a base de datos "+dbName+". listo"); }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } 

Fuente: http://www.jc-mouse.net/base-de-datos/consultas-con-parametros-en-access-y-java

Y obtengo este error:

[Microsoft] [Controlador ODBC de Microsoft Access] Error general No se puede abrir la clave de registro Temporal (volátil) Ace DSN para el proceso 0x7f8 Subproceso 0x1174 DBC

específicamente

 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x7f8 Thread 0x1174 DBC 0x8dc8d78 Jet'. Exception in thread "main" java.lang.NullPointerException at depuracionDB.consultap(depuracionDB.java:67) at depuracionDB.main(depuracionDB.java:103) 

Estoy usando eclipse IDE Luna y la versión de Java “1.7.0_45” (64 bits)

Causas

Error general No se puede abrir la clave de registro Temporal (volátil) Ace DSN para el proceso …

Este es el mensaje de error de nivel superior producido por el controlador ODBC de Access Database Engine (también conocido como “ACE”) cuando el proceso actual no puede abrir el archivo de base de datos de Access por alguno de los siguientes motivos:

  1. Algún otro proceso ha abierto la base de datos “exclusivamente”.

  2. Algún otro proceso abrió originalmente el archivo de la base de datos en Access como “compartido” y tiene alguna modificación estructural pendiente que requiere acceso “exclusivo” al archivo. Ejemplos de tales modificaciones pendientes son las ediciones del código del Módulo que aún no se han guardado, o tener un Formulario o Informe abierto en la Vista de Diseño.

  3. La cuenta en la que se ejecuta el proceso actual no tiene suficientes permisos del sistema de archivos para abrir el archivo de base de datos o la carpeta en la que reside.

  4. La cuenta en la que se ejecuta el proceso actual no tiene suficientes permisos de registro para acceder a los valores en la HKLM\SOFTWARE\ODBC .

  5. El archivo de la base de datos simplemente no existe.

Cuando solo se informa el mensaje de error de nivel superior, el controlador ODBC anterior “Jet” produjo mensajes de error algo más intuitivos. Cuando el otro proceso había hecho un “Open Exclusive” en el archivo, el mensaje de error era

No se pudo usar ‘(desconocido)’; archivo ya en uso.

y cuando el archivo tenía un diseño pendiente, el mensaje de error decía

La base de datos ha sido colocada en un estado por un usuario desconocido que impide que se abra o se bloquee.

Sin embargo, cuando solo vemos el mensaje de nivel superior producido por el controlador ACE ODBC, todo lo que vemos es

Error general No se puede abrir la clave de registro Temporal (volátil) Ace DSN para el proceso …

Esto se debe a que ambos controladores devuelven varios mensajes de error, pero los devuelven en un orden diferente. Los mensajes de Jet son …

ERROR [HY000] [Microsoft] [Controlador ODBC Microsoft Access] La base de datos ha sido colocada en un estado por un usuario desconocido que impide que se abra o se bloquee.

ERROR [01000] [Microsoft] [Controlador ODBC de Microsoft Access] Advertencia general No se puede abrir la clave de registro ‘DSN de Jet temporal (volátil) para el proceso 0xed4 Subproceso 0x1204 DBC 0xab004 Jet’.

ERROR [IM006] [Microsoft] [ODBC Driver Manager] Error SQLSetConnectAttr del controlador

ERROR [01000] [Microsoft] [Controlador ODBC de Microsoft Access] Advertencia general No se puede abrir la clave de registro ‘DSN de Jet temporal (volátil) para el proceso 0xed4 Subproceso 0x1204 DBC 0xab004 Jet’.

ERROR [HY000] [Microsoft] [Controlador ODBC Microsoft Access] La base de datos ha sido colocada en un estado por un usuario desconocido que impide que se abra o se bloquee.

… mientras que los mensajes de ACE son:

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] Error general No se puede abrir la clave de registro Temporal (volátil) Ace DSN para el proceso 0xf6c Subproceso 0x1568 DBC 0x6347fec Jet ‘.

ERROR [IM006] [Microsoft] [ODBC Driver Manager] Error SQLSetConnectAttr del controlador

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] Error general No se puede abrir la clave de registro Temporal (volátil) Ace DSN para el proceso 0xf6c Subproceso 0x1568 DBC 0x6347fec Jet ‘.

ERROR [HY000] [Microsoft] [Controlador ODBC Microsoft Access] La base de datos ha sido colocada en un estado por un usuario desconocido que impide que se abra o se bloquee.

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] Error general No se puede abrir la clave de registro Temporal (volátil) Ace DSN para el proceso 0xf6c Subproceso 0x1568 DBC 0x6347fec Jet ‘.

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] Error general No se puede abrir la clave de registro Temporal (volátil) Ace DSN para el proceso 0xf6c Subproceso 0x1568 DBC 0x6347fec Jet ‘.

ERROR [HY000] [Microsoft] [Controlador ODBC Microsoft Access] La base de datos ha sido colocada en un estado por un usuario desconocido que impide que se abra o se bloquee.

Soluciones

Escenarios 1 y 2 (otro proceso tiene un locking “exclusivo” en el archivo):

Asegúrese de que el archivo de la base de datos no esté abierto por ningún otro proceso, lo que a menudo significa simplemente cerrar la aplicación de Access, y luego vuelva a intentar la operación ODBC desde su aplicación externa. Reiniciar su máquina es una forma de asegurarse de que cualquier otro proceso haya finalizado y haya renunciado a su reclamo del archivo de la base de datos.

Escenario 3 (permisos insuficientes de archivo / carpeta):

Ajuste los permisos o mueva el archivo a una ubicación donde el usuario pueda abrir el archivo. Colocar el archivo de base de datos en la carpeta raíz de una unidad es una causa común de este tipo de problema.

Escenario 4 (permisos de registro insuficientes):

Ajuste los permisos de registro para permitir que la cuenta acceda a la HKLM\SOFTWARE\ODBC . La causa más común en este caso es que un proceso IIS se ejecuta bajo una cuenta que no tiene privilegios de “usuario” normales. En ese caso, recuerde que no debe utilizar bases de datos de Access con IIS de todos modos .

Escenario 5 (archivo de base de datos no existe):

Repare la cadena de conexión para que contenga una ruta válida a un archivo existente.

Causa 6 (de lo contrario no está cubierto) Olvidando cambiar el nombre de archivo que intenta abrir, después de haber cambiado el nombre del archivo. es decir, tratando de abrir un archivo inexistente.

Causa 5 (no cubierto por la excelente explicación de Gord)

Error de usuario: por ejemplo, intentar usar el controlador ACE para leer algo que no está diseñado para manejar (como un archivo Excel) que se estaba leyendo con el controlador Jet ODBC en una versión anterior de la función. Incluso si el mensaje es vago, es correcto detectar un error en el tiempo abierto en lugar de después de que piense que la apertura fue exitosa. : /

En este caso, debe mencionar la ruta completa de su archivo db de acceso. Y en la URL mencionada a continuación, un espacio es obligatorio entre dos extensiones (*. Mdb, * .accdb)

p.ej:

 String database="C:/Users/GIRI/Desktop/fdsfkdsfj/abc.accdb"; String url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + database + ";DriverID=22;READONLY=true"; 
  try { String conUrl = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + filepath; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection(conUrl); } catch(SQLException s) { System.out.println(s); } 

Creo que este enlace puede ayudarte http://java2carrer.blogspot.in/2013/06/insert-data-into-ms-access-from-excel.html

Por favor, pruebe este código Lo probé en win 7 ultimate 64 bit con office 2013 64bit

 package dbase.dbconnection; import java.sql.*; public class MSAccessDbConnect { public static void main(String args[]) throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String password = ""; String dbName = "D:/maven_ejb_train/DATA/EmpTest.accdb"; String bd = dbName; // + ";PWD=" + password; String connURL = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + dbName; System.out.println("connURL ===== " + connURL); String sql2 = "select * from Employees "; Connection conn = DriverManager.getConnection(connURL, "", ""); System.out.println("aaa 111"); ResultSet rs = conn.createStatement().executeQuery(sql2); System.out.println("aaa 222"); while (rs.next()) { System.out.println("Name: " + rs.getString("EMP_NA") + " ID: " + rs.getString("EMP_NO")); } rs.close(); conn.close(); } }