ms-access - "General error Unable to open registry key Temporary (volatile) ..."来自 Access ODBC

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

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

我得到这个错误:

[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 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 位)

最佳答案

原因

General error Unable to open registry key Temporary (volatile) Ace DSN for process ...

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

  1. 一些其他进程“独占”地打开了数据库。

  2. 一些其他进程最初在 Access 中将数据库文件打开为“共享”并且 有一些悬而未决的结构修改,需要对文件进行“独占” Access 。此类待定修改的示例是对尚未保存的模块代码的编辑,或者在设计 View 中打开表单或报表。

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

  4. 运行当前进程的帐户没有足够的注册表权限来 Access HKLM\SOFTWARE\ODBC 项下的值。

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

  6. 您尝试打开的数据库需要较新版本的 Microsoft Access。

当仅报告顶级错误消息时,较早的“Jet”ODBC 驱动程序会产生更直观的错误消息。当其他进程对文件执行“独占打开”时,错误消息是

Could not use '(unknown)'; file already in use.

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

The database has been placed in a state by an unknown user that prevents it from being opened or locked.

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

General error Unable to open registry key Temporary (volatile) Ace DSN for process ...

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

ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] The database has been placed in a state by an unknown user that prevents it from being opened or locked.

ERROR [01000] [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0xed4 Thread 0x1204 DBC 0xab004 Jet'.

ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed

ERROR [01000] [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0xed4 Thread 0x1204 DBC 0xab004 Jet'.

ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] The database has been placed in a state by an unknown user that prevents it from being opened or locked.

...而 ACE 消息是:

ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xf6c Thread 0x1568 DBC 0x6347fec Jet'.

ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed

ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xf6c Thread 0x1568 DBC 0x6347fec Jet'.

ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] The database has been placed in a state by an unknown user that prevents it from being opened or locked.

ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xf6c Thread 0x1568 DBC 0x6347fec Jet'.

ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xf6c Thread 0x1568 DBC 0x6347fec Jet'.

ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] The database has been placed in a state by an unknown user that prevents it from being opened or locked.

解决方案

场景 1 和 2(另一个进程对该文件具有“独占”锁):

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

场景三(文件/文件夹权限不足):

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

场景四(注册表权限不足):

调整注册表权限以允许帐户 Access HKLM\SOFTWARE\ODBC 键。在这种情况下,最常见的原因是 IIS 进程在没有正常“用户”权限的帐户下运行。在那种情况下请记住,您无论如何都不应该将 Access 数据库与 IIS 一起使用

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

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

场景 6(数据库文件需要较新版本的 Access):

升级 Microsoft Access 或 Access Database Engine Redistributable(如果可用)。

关于ms-access - "General error Unable to open registry key Temporary (volatile) ..."来自 Access ODBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244425/

相关文章:

python - Access 和 pyodbc 的 INSERT 语句中的语法错误

python - 在 Python 中使用 pyodbc 时为 "Invalid character value for cast specification"

sql - 在 Access 中连接一个字段中的多行?

c++ - 无法通过ODBC连接到SQL Server

java - 如何在java odbc中编写 "select column name as "别名“来自表名”

.net - 从 .Net UI 在 Databricks 上运行 Spark SQL 查询

ms-access - 如何以编程方式修复(不仅仅是压缩)Access .mdb 文件?

excel - 报告连接到值的行和列名称 (Microsoft Access)

ms-access - 如何以显示/隐藏查询列的形式制作 vba 代码? (MS-Access)

python - Informix "load"命令在 Python pyodbc 中不起作用