“常规错误无法从Access ODBC打开注册表项临时(易失性)….”

2024-09-27 07:33:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了以下方法:

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)

我正在使用EclipseIDELuna和Java版本“1.7.0_45”(64位)


Tags: stringaccessdriverpasswordjavaprivateoutconn
3条回答

原因

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

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

  1. 其他进程已“独占”打开数据库。

  2. 另一个进程最初在Access中将数据库文件作为“共享”打开,然后 有一些挂起的结构修改需要“独占”访问该文件。此类挂起修改的示例包括尚未保存的模块代码的编辑,或在“设计”视图中打开窗体或报表。

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

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

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

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

当只报告顶级错误消息时,早期的“Jet”ODBC驱动程序会生成一些更直观的错误消息。当另一个进程对文件执行“Open Exclusive”时,错误消息是

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 ...

这是因为两个驱动程序都返回多个错误消息,但返回顺序不同。喷气式飞机的信息是。。。

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操作。重新启动计算机是确保任何其他此类进程已终止并放弃对数据库文件的声明的一种方法。

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

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

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

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

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

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

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

升级Microsoft Access或可再发行的Access数据库引擎(如果可用)。

原因5(不包括在戈尔的精彩解释中)

用户错误-例如,试图使用ACE驱动程序读取它不用于处理(如Excel文件)的内容,而在函数的早期版本中,Jet ODBC驱动程序正在读取这些内容。即使消息很含糊,但它在打开时正确地捕捉到错误,而不是在您认为打开成功之后。:/

原因6(否则不包括在内) 更改文件名后,忘记更改要打开的文件名。i、 试图打开一个不存在的文件。

相关问题 更多 >

    热门问题