OpenRecordset メソッドを実行すると "型が一致しません" というエラー メッセージが表示される


現象


オブジェクトを Recordset として宣言し、そのオブジェクトに databaseobject.OpenRecordset(source) を設定すると、次のエラー メッセージが表示されることがあります。
実行時エラー '13': 型が一致しません

原因


Data Access Objects (DAO) ライブラリと ActiveX Data Objects (ADO) ライブラリの両方に対する参照がプロジェクトに含まれている場合、Recordset オブジェクトを宣言すると、複数の Recordset エントリが一覧に表示されることがあります。 このエラーは、どちらの Recordset エントリを一覧から選択するかに関係なく、[参照設定] ダイアログ ボックスで ADO ライブラリの優先順位を DAO ライブラリよりも高くした場合に発生します。

解決方法


DAO の Recordset オブジェクトだけが必要な場合は、[参照設定] ダイアログ ボックスで DAO オブジェクト ライブラリに対する参照の優先順位を高くするか、Microsoft ActiveX Data Objects に対する参照を削除します。


DAO と ADO の両方の Recordset オブジェクトを参照および使用する必要がある場合は、各オブジェクトを次のように明示的に宣言します。
   Dim adoRS As ADODB.Recordset
Dim daoRS As DAO.Recordset

詳細情報


現象の再現手順

  1. Visual Studio を起動します。 [新しいプロジェクト] ダイアログ ボックスが表示されます。
  2. [開く] をクリックします。 Form1 フォームが表示されます。
  3. Form1 フォームを右クリックし、[コードの表示] をクリックします。 [Project1 - Form1 (コード)] ウィンドウが表示されます。
  4. 以下のコードを Project1 のコード ページに貼り付けます。
    Dim dbs AS Database
    Dim rs AS Recordset ' When you press the spacebar after "AS," the
    ' list box includes multiple Recordset entries.
    ' Pick any Recordset item, or type "Recordset."
    Private Sub Form_Load()
    Set dbs=OpenDatabase(dbname)
    Set rs=dbs.OpenRecordset(source) ' The error occurs when this line
    ' of code executes.
    End Sub
  5. [プロジェクト] メニューの [参照設定] をクリックします。 [参照設定 - Project1] ダイアログ ボックスが表示されます。
  6. [Microsoft DAO 3.x Object Library]、[Microsoft ActiveX Data Objects 2.x Library] を順にクリックし、[OK] をクリックします。

    注: [参照設定] ダイアログ ボックスの一覧で ADO ライブラリの優先順位が DAO ライブラリよりも高くなっていることを確認します。
  7. [実行] メニューの [開始] をクリックして、プログラムを実行します。 「現象」に記載されているエラー メッセージが表示されます。