"Общая ошибка не удается открыть временный (изменчивый) раздел реестра ..." из 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 поток 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 бит)

6 ответов


причины

общая ошибка не удается открыть временный (изменчивый) ключ реестра ACE DSN для процесса ...

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

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

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

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

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

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

когда сообщается только сообщение об ошибке верхнего уровня, более ранний драйвер ODBC" Jet " произвел несколько более интуитивные сообщения об ошибках. Когда другой процесс сделал "открытый эксклюзив" в файле, сообщение об ошибке

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

и когда файл был до изменения дизайна сообщение об ошибке говорит

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

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

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

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

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

ошибка [01000] [Microsoft][драйвер ODBC Microsoft Access] общее предупреждение Не удалось открыть раздел реестра "временный (изменчивый) Jet DSN для процесса 0xed4 поток 0x1204 DBC 0xab004 Jet".

ошибка [IM006] [Microsoft] [ODBC Driver Manager] драйвер SQLSetConnectAttr не удалось

ошибка [01000][Microsoft] [ODBC Microsoft Access Driver] общее предупреждение невозможно открыть раздел реестра "временный (изменчивый) Jet DSN для процесса 0xed4 поток 0x1204 DBC 0xab004 Jet".

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

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

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

ошибка [IM006] [Microsoft][диспетчер драйверов ODBC] Ошибка драйвера SQLSetConnectAttr

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

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

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

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

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

решений

сценарии 1 и 2 (другой процесс имеет" эксклюзивную " блокировку файла):

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

Сценарий 3 (недостаточно прав доступа к файлам / папкам):

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

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

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

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

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


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


Причина 5 (не охваченная отличным объяснением горда)

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


в этом случае вам нужно указать весь путь к вашему файлу access 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();
    }
}