"常规错误无法从Access ODBC打开注册表项临时(volatile)..."

Eri*_*dez 8 ms-access odbc pyodbc jdbc-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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我得到了这个错误:

[Microsoft] [ODBC Microsoft Access驱动程序]常规错误无法打开注册表项临时(易失性)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)
Run Code Online (Sandbox Code Playgroud)

我使用的是eclipse IDE Luna和Java版"1.7.0_45"(64位)

Gor*_*son 22

原因

一般错误无法打开注册表项临时(易失性)Ace DSN进程...

这是由于以下原因之一,当前进程无法打开Access数据库文件时,Access数据库引擎(也称为"ACE")ODBC驱动程序生成的顶级错误消息:

  1. 其他一些进程"专门"打开了数据库.

  2. 其他一些进程最初在Access中以"共享"方式打开数据库文件,并且有一些待定的结构修改需要对文件进行"独占"访问.此类待处理修改的示例是对尚未保存的模块代码的编辑,或者在设计视图中打开表单或报表.

  3. 当前进程正在运行的帐户没有足够的文件系统权限来打开数据库文件或其所在的文件夹.

  4. 当前进程正在运行的帐户没有足够的注册表权限来访问HKLM\SOFTWARE\ODBC密钥下的值.

  5. 数据库文件根本不存在.

当仅报告顶级错误消息时,较早的"Jet"ODBC驱动程序产生更直观的错误消息.当另一个进程在文件上执行"Open Exclusive"时,出现错误消息

不能使用'(未知)'; 文件已在使用中.

当文件有未决的设计更改时,错误消息说

数据库已被未知用户置于某种状态,阻止其被打开或锁定.

但是,当我们只看到ACE ODBC驱动程序生成的顶级消息时,我们看到的是

一般错误无法打开注册表项临时(易失性)Ace DSN进程...

这是因为两个驱动程序都返回多个错误消息,但它们以不同的顺序返回它们.Jet消息是......

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]数据库已被未知用户置于某种状态,阻止其被打开或锁定.

错误[01000] [Microsoft] [ODBC Microsoft Access驱动程序]常规警告无法打开注册表项'临时(易失性)Jet DSN进程0xed4线程0x1204 DBC 0xab004 Jet'.

错误[IM006] [Microsoft] [ODBC驱动程序管理器]驱动程序的SQLSetConnectAttr失败

错误[01000] [Microsoft] [ODBC Microsoft Access驱动程序]常规警告无法打开注册表项'临时(易失性)Jet DSN进程0xed4线程0x1204 DBC 0xab004 Jet'.

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]数据库已被未知用户置于某种状态,阻止其被打开或锁定.

...... ACE消息是:

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]常规错误无法打开注册表项临时(易失性)Ace DSN进程0xf6c线程0x1568 DBC 0x6347fec Jet'.

错误[IM006] [Microsoft] [ODBC驱动程序管理器]驱动程序的SQLSetConnectAttr失败

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]常规错误无法打开注册表项临时(易失性)Ace DSN进程0xf6c线程0x1568 DBC 0x6347fec Jet'.

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]数据库已被未知用户置于某种状态,阻止其被打开或锁定.

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]常规错误无法打开注册表项临时(易失性)Ace DSN进程0xf6c线程0x1568 DBC 0x6347fec Jet'.

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]常规错误无法打开注册表项临时(易失性)Ace DSN进程0xf6c线程0x1568 DBC 0x6347fec Jet'.

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]数据库已被未知用户置于某种状态,阻止其被打开或锁定.

解决方案

方案1和方案2(另一个进程对文件具有"独占"锁定):

确保数据库文件未被任何其他进程打开 - 通常这意味着只关闭Access应用程序本身 - 然后从外部应用程序重新尝试ODBC操作.重新启动计算机是确保终止任何其他此类进程并放弃对数据库文件的声明的一种方法.

方案3(文件/文件夹权限不足):

调整权限或将文件移动到用户可以打开文件的位置.将数据库文件放在驱动器的根文件夹中是导致此类问题的常见原因.

方案4(注册表权限不足):

调整注册表权限以允许帐户访问HKLM\SOFTWARE\ODBC密钥.在这种情况下,最常见的原因是IIS进程在没有正常"用户"权限的帐户下运行.在这种情况下,请记住您不应该使用带有IIS的Access数据库.

场景5(数据库文件不存在):

修复连接字符串,使其包含现有文件的有效路径.