4

最近、データベースを .mdb (MS Access 2003) から .accdb (MS Access 2010) に更新しました。

この更新により、プロバイダーも次のように更新しましMicrosoft.Jet.OLEDB.4.0た。Microsoft.ACE.OLEDB.12.0

パスワードなしで .accdb ファイルを使用すると、接続は正常に機能しますが、一度選択すると

パスワードで暗号化

接続を開こうとすると、次のエラーが表示されます。

データベース '' を開けません。アプリケーションが認識できるデータベースではないか、ファイルが壊れている可能性があります。

使用された接続文字列:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\App\\Main\\bin\\Debug\\db.xxx;
Jet OLEDB:Database Password=MyPass;

注: 私は .accdb ファイルにカスタム拡張子を使用しています。これは問題なく .mdb ファイルに使用されており、問題にはならないと思います (テスト済み)。

4

1 に答える 1

1

接続文字列に問題はありません。それでも、VBA から試して、その努力が問題に光を当てるかどうかを確認します。

これは、ファイル拡張子が「accdb」または「xxx」のどちらでdbファイルに名前を付けたかに関係なく、Access 2007から機能しました。パスワードを一重引用符で囲む必要はありません。一重引用符を含めたかどうかに関係なく、コードは成功しました。

Public Sub OleDbToEncryptedAccdb()
    'Const cstrDb As String = "encryptd.accdb" '
    Const cstrDb As String = "encryptd.xxx"
    Const cstrFolder As String = "C:\share\Access"
    Const cstrPassWord As String = "letmein"
    Dim cn As Object
    Dim strConnect As String

    strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
        cstrFolder & Chr(92) & cstrDb & _
        ";Jet OLEDB:Database Password='" & cstrPassWord & "';"
    Debug.Print strConnect
    Set cn = CreateObject("ADODB.Connection")
    cn.ConnectionString = strConnect
    cn.Open
    cn.Close
    Set cn = Nothing
End Sub

編集: Access 2010 は、以前の Access バージョンよりも強力な暗号化方法を提供しているようです。Access 2010でdb.xxx開いて、どの ACE バージョンが として使用されているかを確認しProviderます。

? CurrentProject.Connection.Provider

のような応答があった場合Microsoft.ACE.OLEDB.14.0は、C# 接続文字列でそれを使用します。

于 2012-05-22T18:08:29.657 に答える