0

この奇妙なエラーは、大きなクエリ (つまり、多くの結合) の後にのみ発生し、単一のテーブルに対する小さなクエリでは発生しないようです。

これが私のセットアップです:

  1. VB .NET 3.5 アプリケーション
  2. 次の接続ステートメントを使用して Access データベースに接続します。

    Me.connection = "Provider=Microsoft.Ace.OLEDB.12.0;" & _ "User ID=Admin;" & _ "Data Source=" & ACCESS07_CONNECTION_STRING & ";" & _ "Mode=Read|Write;Extended Properties="""";Jet OLEDB:System Database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"

  3. (コードの全行は一番下にあります)

  4. データベースは、共有ネットワーク ドライブ上の Access ファイルです (全員が同じドライブを使用しています)。
  5. Windows XP、7 32 および 64 ビット Office 2007 または 2010 で動作します。

ただし、私のマシンでのみ、「大きな」クエリの後にコードがクラッシュします。大きなとは、多くの結合が関係していることを意味します。小規模な単一のテーブル選択クエリは正常に実行されます。

さらにややこしいことに、db.Close()回線上でクラッシュが発生します。結果セットが返され、エラー メッセージは表示されません。Visual StudioはJITデバッグさえできません...

私の現在の理論は、特定のアクセス ドライバーに何か問題があるということですか? もしそうなら、どうすればそれらを交換できますか?私のチームには、Windows 7 64 ビットで Office 2010 を使用している他の誰かがいます。ドライバー DLL を彼と交換できると思います (これが問題であると仮定しても)。

これは私のマシン以外のすべてのマシンで機能するため、コードを変更するのは気が進まない.


Dim db As New ADODB.Connection
Me.connection = "Provider=Microsoft.Ace.OLEDB.12.0;" & _
        "User ID=Admin;" & _
        "Data Source=" & ACCESS07_CONNECTION_STRING & ";" & _
        "Mode=Read|Write;Extended Properties="""";Jet OLEDB:System Database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"
Try
    db.Open(Me.connection)
Catch ex As Exception

    receivedCOMException()
    Return Nothing
    Exit Function

End Try



Dim rs As New ADODB.Recordset
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
rs.Open(p_sql_query, db)
'Debug.Print(Me.sql_query)
mpet_rs = New DBRecordSet(rs)
rs.Close()
db.Close()
rs = Nothing
db = Nothing
4

1 に答える 1