none
Excel 2010からAccess2010(accdb)へ接続する際に正しいパスワードを使っていても「パスワードが正しくありません」(コード3031)が発生することがある

    Question

  • 環境:
     Windows 7 Pro (64bit)
     Office 2010 SP1 +KB2760386 (14.0.6129.5000) (32bit)

    問題の発生するコード:

    Private Sub CommandButton2_Click()
      With ThisWorkbook.Sheets("DB設定")
        path = .Range("DB接続先").Value  				' 取得できる文字列は\\FileServer\accdbstore\target.accdb ネットワークドライブ上にあり
        pass = StrConv(.Range("パスワード").Value, vbLowerCase) 	' 取得できる文字列はpasswd
      End With
    
      Set con = New ADODB.Connection
      con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                             "Data Source = " & path & ";" & _
                             "Jet OLEDB:Database Password= " & pass
      On Error GoTo DB接続エラー
      con.Open							'★接続1回目
      Call メッセージ表示1						'「データベースの認証を確認しました。」のPopup表示を行う
      con.Close
      Set con = Nothing
      Dim v As String
      v = GetParameterTableInfo("バージョン", path, pass)
      If v <> "" Then
    	:
    	:
    
    Public Function GetParameterTableInfo(key As String, Optional path As String = "", Optional pass As String = "") As String
    On Error GoTo パラメータテーブル検索エラー
        Set con = New Connection
        con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                               "Data Source = " & path & ";" & _
                               "Jet OLEDB:Database Password= " & pass
        Call 標準メッセージ(con.ConnectionString, "", True)			' ここでConectionStringの内容を確認
        con.Open								' ★接続2回目 ここでエラー
        SQL指定 = "select パラメータ.* from パラメータ where キー='" & key & "'"
        Set Rst = New Recordset
    	:
    	:
    

    問題の概要:

     上述のコードのように,Excelの特定のシート内に設定されているAccdbへのファイルパスとパスワードを使ってDB接続を行う処理があります。
     値の確認のために一度con.Open/con.Closeを行い(★接続1回目),子Function内では値を取得するために二度目のcon.Openを行います。(★接続2回目)
     同じ値を使ってDB接続しているにもかかわらず,2回目の接続にてエラーが発生しパラメータテーブル検索エラーでErr.Descrptionに「パスワードが正しくありません。」と出力されるエラーが稀に発生します。
     この現象が発生するトリガーは特定できておらず,
      ・直前まで利用できていた接続が,突然利用できなくなる
      ・一度発生するとExcelを停止起動しても解消せず,PCを再起動するまで発生する
      ・特定のPCだけではない
     という傾向があるところまでは特定できています。

     様々な営業所に置かれている数十台あるPCのどこかで週に1回程度起き,再現させるパターンが分からないため手元で詳細なデバッグはできておりません。

     当初,変数の値が失われている可能性もあると考え,標準メッセージ(con.ConnectionString, "", True)としてStringの確認をしましたが,ConnectionStringには以下のように正しい値がセットされていることも確認しています。
      Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\FileServer\accdbstore\target.accdb;Jet OLEDB:Database Password= passwd


    質問事項:
     質問1.
      こちらでは問題が起きる直前のcon.ConnectionStringに誤りがあるのではないかと考えてデバッグ用に中身を表示させるポップアップを付けました。
      このような現象の調査・問題判別にあたって,他に調べるとしたらどのような値をチェックするのが適当でしょうか?
      アプローチについてアドバイスをお願いします。

     質問2.
      Excel/Access2010の不具合の可能性も疑っているのですが,Office2010 SP1より後に提供されている不具合修正のリストを入手するにはどうしたらよいでしょうか?SP2はまとまっているようですが,このほかSP2以降でKBとして提供されているもののリストアップ方法などを教えてください。
       Office2010 SP2の説明
        http://support.microsoft.com/kb/2687455/ja

    よろしくお願いいたします。

    Monday, March 3, 2014 11:16 AM