“Общая ошибка Не удается открыть раздел реестра Временный (изменчивый) …” из Access ODBC

Я попробовал следующее:

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); } } 

Шрифт: http://www.jc-mouse.net/base-de-datos/consultas-con-parametros-en-access-y-java

И я получаю эту ошибку:

[Microsoft] [ODBC Microsoft Access Driver] Общая ошибка Не удается открыть раздел реестра Временный (изменчивый) Ace DSN для процесса 0x7f8 Thread 0x1174 DBC

конкретно

 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) 

Я использую eclipse IDE Luna и версию Java «1.7.0_45» (64 бит)

причины

Общая ошибка Не удается открыть раздел реестра Временный (неустойчивый) Ace DSN для процесса …

Это сообщение об ошибке верхнего уровня, созданное драйвером ODBC Access Database Engine (иначе ACE), когда текущий процесс не может открыть файл базы данных Access по одной из следующих причин:

  1. Некоторые другие процессы открыли базу данных «исключительно».

  2. Некоторые другие процессы первоначально открывали файл базы данных в Access как «общий» и имеют некоторые ожидающие структурные изменения, требующие «исключительного» доступа к файлу. Примерами таких ожидающих изменений являются изменения кода модуля, которые еще не были сохранены, или наличие формы или отчета в представлении дизайна.

  3. Учетная запись, на которой выполняется текущий процесс, не имеет достаточных разрешений файловой системы, чтобы открыть файл базы данных или папку, в которой он находится.

  4. Учетная запись, на которой выполняется текущий процесс, не имеет достаточных разрешений для доступа к значениям под ключом HKLM\SOFTWARE\ODBC .

  5. Файл базы данных просто не существует.

Когда сообщается только сообщение об ошибке верхнего уровня, более ранний драйвер ODBC «Jet» выпустил несколько более интуитивные сообщения об ошибках. Когда другой процесс выполнил «Open Exclusive» в файле, сообщение об ошибке было

Не удалось использовать «(неизвестно)»; файл уже используется.

и когда файл имел ожидающие изменения дизайна, сообщение об ошибке

База данных была помещена в состояние неизвестным пользователем, который предотвращает его открытие или блокировку.

Однако, когда мы видим только сообщение верхнего уровня, созданное драйвером ACE ODBC, все, что мы видим, это

Общая ошибка Не удается открыть раздел реестра Временный (неустойчивый) Ace DSN для процесса …

Это связано с тем, что оба драйвера возвращают несколько сообщений об ошибках, но они возвращают их в другом порядке. Сообщения Jet …

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] База данных была помещена в состояние неизвестным пользователем, который предотвращает его открытие или блокировку.

ОШИБКА [01000] [Microsoft] [ODBC Microsoft Access Driver] Общее предупреждение Не удается открыть раздел реестра «Временный (летучий) Jet DSN для процесса 0xed4 Thread 0x1204 DBC 0xab004 Jet».

ERROR [IM006] [Microsoft] [Менеджер драйверов ODBC] Ошибка SQLSetConnectAttr драйвера

ОШИБКА [01000] [Microsoft] [ODBC Microsoft Access Driver] Общее предупреждение Не удается открыть раздел реестра «Временный (летучий) Jet DSN для процесса 0xed4 Thread 0x1204 DBC 0xab004 Jet».

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] База данных была помещена в состояние неизвестным пользователем, который предотвращает его открытие или блокировку.

… в то время как сообщения ACE:

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] Общая ошибка Не удается открыть раздел реестра Временная (летучая) Ace DSN для процесса 0xf6c Thread 0x1568 DBC 0x6347fec Jet.

ERROR [IM006] [Microsoft] [Менеджер драйверов ODBC] Ошибка SQLSetConnectAttr драйвера

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] Общая ошибка Не удается открыть раздел реестра Временная (летучая) Ace DSN для процесса 0xf6c Thread 0x1568 DBC 0x6347fec Jet.

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] База данных была помещена в состояние неизвестным пользователем, который предотвращает его открытие или блокировку.

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] Общая ошибка Не удается открыть раздел реестра Временная (летучая) Ace DSN для процесса 0xf6c Thread 0x1568 DBC 0x6347fec Jet.

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] Общая ошибка Не удается открыть раздел реестра Временная (летучая) Ace DSN для процесса 0xf6c Thread 0x1568 DBC 0x6347fec Jet.

ERROR [HY000] [Microsoft] [ODBC Microsoft Access Driver] База данных была помещена в состояние неизвестным пользователем, который предотвращает его открытие или блокировку.

Решения

Сценарии 1 и 2 (у другого процесса есть «исключительная» блокировка файла):

Убедитесь, что файл базы данных не открывается каким-либо другим процессом – часто это означает просто закрытие самого приложения Access, а затем повторите попытку операции ODBC из внешнего приложения. Перезагрузка вашей машины является одним из способов гарантировать, что любые другие такие процессы были прекращены, и они отказались от своих требований к файлу базы данных.

Сценарий 3 (недостаточные разрешения файлов / папок):

Либо настройте разрешения, либо переместите файл в папку, где пользователь может открыть файл. Размещение файла базы данных в корневой папке диска является общей причиной такого типа проблем.

Сценарий 4 (недостаточные разрешения реестра):

Отрегулируйте разрешения реестра, чтобы разрешить учетной записи обращаться к ключу HKLM\SOFTWARE\ODBC . Наиболее распространенная причина в этом случае заключается в том, что процесс IIS выполняется под учетной записью, которая не имеет обычных «пользовательских» привилегий. В этом случае помните, что вы не должны использовать базы данных Access с IIS в любом случае .

Сценарий 5 (файл базы данных не существует):

Исправьте строку подключения так, чтобы она содержала допустимый путь к существующему файлу.

Причина 6 (в противном случае не распространяется) Забыв изменить имя файла, которое вы пытаетесь открыть, после того, как вы изменили имя файла. т.е. пытаться открыть несуществующий файл.

Причина 5 (не распространяется на отличное объяснение Горда)

Ошибка пользователя. Например, попытка использовать драйвер ACE для чтения того, что он не предназначен для обработки (например, файла Excel), который читается драйвером Jet ODBC в более ранней версии этой функции. Даже если сообщение неопределенно, оно правильно ломает ошибку в открытое время, а не после того, как вы считаете, что открытие было успешным. : /

В этом случае вам нужно указать весь путь к вашему db-файлу доступа. И в указанном ниже url пробел является обязательным между двумя расширениями (* .mdb, * .accdb)

например:

 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); } 

Я думаю, эта ссылка может помочь вам http://java2carrer.blogspot.in/2013/06/insert-data-into-ms-access-from-excel.html

Пожалуйста, попробуйте этот код. Я попробовал его на win 7 Ultimate 64 бит с 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(); } } 
  • в чем разница между OLE DB и источниками данных ODBC?
  • Указанный DSN содержит несоответствие архитектуры между Драйвером и Приложением. ЯВА
  • Ручная установка 64-разрядных драйверов ODBC для доступа к MS Access при наличии 32-разрядного Office
  • Давайте будем гением компьютера.