web-dev-qa-db-ja.com

アクセス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]一般エラーレジストリキーを開くことができませんプロセス0x7f8スレッド0x1174DBCの一時的(揮発性)エースDSN

具体的には

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 and Java version "1.7.0_45"(64ビット)

8

原因

一般エラーレジストリキーを開くことができませんプロセスの一時的(揮発性)エースDSN.。

これは、次のいずれかの理由で現在のプロセスがAccessデータベースファイルを開くことができない場合に、Accessデータベースエンジン(別名「ACE」)ODBCドライバーによって生成される最上位のエラーメッセージです。

  1. 他のいくつかのプロセスがデータベースを「排他的に」開いています。

  2. 他のプロセスは、もともとAccessでデータベースファイルを「共有」として開き、ファイルへの「排他的」アクセスを必要とする保留中の構造変更があります。このような保留中の変更の例としては、まだ保存されていないモジュールコードの編集や、フォームまたはレポートをデザインビューで開いていることがあります。

  3. 現在のプロセスが実行されているアカウントには、データベースファイルまたはそれが存在するフォルダーを開くための十分なファイルシステム権限がありません。

  4. 現在のプロセスが実行されているアカウントには、HKLM\SOFTWARE\ODBCキーの下の値にアクセスするための十分なレジストリ権限がありません。

  5. データベースファイルは単に存在しません。

トップレベルのエラーメッセージのみが報告された場合、以前の「Jet」ODBCドライバーは、より直感的なエラーメッセージを生成しました。他のプロセスがファイルに対して「OpenExclusive」を実行した場合、エラーが発生しました。メッセージは

'(不明)'を使用できませんでした;すでに使用中のファイル。

ファイルに保留中の設計変更があった場合、エラーメッセージに

データベースは、データベースを開いたりロックしたりできないように、不明なユーザーによって状態に置かれています。

ただし、ACE ODBCドライバーによって生成されたトップレベルのメッセージのみが表示される場合、表示されるのは

一般エラーレジストリキーを開くことができませんプロセスの一時的(揮発性)エースDSN.。

これは、両方のドライバーが複数のエラーメッセージを返しますが、それらを異なる順序で返すためです。 Jetメッセージは...

エラー[HY000] [Microsoft] [ODBC Microsoft Access Driver]データベースは、データベースを開いたりロックしたりできない状態になっています。

エラー[01000] [Microsoft] [ODBC Microsoft AccessDriver]一般的な警告レジストリキーを開くことができません 'プロセス0xed4スレッド0x1204DBC 0xab004 Jetの一時(揮発性)JetDSN'。

エラー[IM006] [Microsoft] [ODBC DriverManager]ドライバーのSQLSetConnectAttrが失敗しました

エラー[01000] [Microsoft] [ODBC Microsoft AccessDriver]一般的な警告レジストリキーを開くことができません 'プロセス0xed4スレッド0x1204DBC 0xab004 Jetの一時(揮発性)JetDSN'。

エラー[HY000] [Microsoft] [ODBC Microsoft Access Driver]データベースは、データベースを開いたりロックしたりできない状態になっています。

... ACEメッセージは次のとおりです。

エラー[HY000] [Microsoft] [ODBC Microsoft Access Driver]一般エラーレジストリキーを開くことができませんプロセス0xf6cスレッド0x1568DBC 0x6347fec Jet 'の一時的(揮発性)エースDSN。

エラー[IM006] [Microsoft] [ODBC DriverManager]ドライバーのSQLSetConnectAttrが失敗しました

エラー[HY000] [Microsoft] [ODBC Microsoft Access Driver]一般エラーレジストリキーを開くことができませんプロセス0xf6cスレッド0x1568DBC 0x6347fec Jet 'の一時的(揮発性)エースDSN。

エラー[HY000] [Microsoft] [ODBC Microsoft Access Driver]データベースは、データベースを開いたりロックしたりできない状態になっています。

エラー[HY000] [Microsoft] [ODBC Microsoft Access Driver]一般エラーレジストリキーを開くことができませんプロセス0xf6cスレッド0x1568DBC 0x6347fec Jet 'の一時的(揮発性)エースDSN。

エラー[HY000] [Microsoft] [ODBC Microsoft Access Driver]一般エラーレジストリキーを開くことができませんプロセス0xf6cスレッド0x1568DBC 0x6347fec Jet 'の一時的(揮発性)エースDSN。

エラー[HY000] [Microsoft] [ODBC Microsoft Access Driver]データベースは、データベースを開いたりロックしたりできない状態になっています。

ソリューション

シナリオ1および2(別のプロセスではファイルに「排他的」ロックがあります):

データベースファイルが他のプロセスによって開かれていないことを確認し(多くの場合、Accessアプリケーション自体を閉じることを意味します)、外部アプリケーションからODBC操作を再試行します。マシンの再起動は1つです。他のそのようなプロセスが終了し、データベースファイルへの要求を放棄したことを確認する方法。

シナリオ3(ファイル/フォルダーのアクセス許可が不十分):

権限を調整するか、ユーザーがファイルを開く場所にファイルを移動しますcan。ドライブのルートフォルダにデータベースファイルを配置することは、このタイプの問題の一般的な原因です。

シナリオ4(レジストリのアクセス許可が不十分):

アカウントがHKLM\SOFTWARE\ODBCキーにアクセスできるようにレジストリのアクセス許可を調整します。この場合の最も一般的な原因は、IISプロセスが、通常の「ユーザー」権限を持たないアカウントで実行されていることです。その場合は、使用しないでください)を覚えておいてください。 IISとにかくでデータベースにアクセスします。

シナリオ5(データベースファイルが存在しません):

既存のファイルへの有効なパスが含まれるように接続文字列を修正します。

22
Gord Thompson

原因6(それ以外の場合はカバーされていません)ファイルの名前を変更した後、開こうとしているファイル名を変更するのを忘れています。つまり、存在しないファイルを開こうとしています。

4
Marc

原因5(ゴードの他の優れた説明ではカバーされていません)

ユーザーエラー-たとえば、ACEドライバーを使用して、Jet ODBC以前のバージョンのドライバーで読み取られていた)を処理するように設計されていないもの(Excelファイルなど)を読み取ろうとした場合機能。メッセージがあいまいな場合でも、オープンが成功したと思った後ではなく、オープン時にエラーを正しくキャッチしています。:/

1
jam0

この場合、アクセスデータベースファイルのパス全体に言及する必要があります。また、以下のURLでは、2つの拡張子(* .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";
1