OLE DB Provider for Jet 4.0 または Office 12.0 Access Database Engine OLE DB Provider を使用時にサブ クエリを持つパラメータ クエリを実行すると、予期しない結果を返す場合がある

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

現象
Microsoft OLE DB Provider for Jet 4.0 または Microsoft Office 12.0 Access Database Engine OLE DB Provider を使用時に、サブ クエリを持つパラメータ クエリを実行すると、レコード値が返されない、または誤ったレコード値が返されるなどの予期しない結果となる場合があります。
原因
この現象は、Microsoft Jet 4.0 データベース エンジン および Microsoft ACE データベース エンジンの問題により発生します。
回避策
この現象を回避するには、以下のいずれかの方法を実行してください。
  • OLE DB Provider for Jet 4.0 および Office 12.0 Access Database Engine OLE DB Provider を使用する代わりに、Microsoft Open Database Connectivity (以下 ODBC) Driver for Access を使用してください。

    注 : ODBC Driver for Access を使用した際に発生していたこの問題は、Microsoft Jet 4.0 データベース エンジン Service Pack 4 にて修正しました。詳細については、次の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

    244719 [ODBC] Access ODBC ドライバ使用時に、パラメータがサブ クエリと一致しない
  • パラメータ ステートメントを使用しパラメータを明示的に設定してください。

    Sub ParameterMisMatchDemo()Dim conn As New ADODB.ConnectionDim cmd As New ADODB.CommandDim rs As ADODB.RecordsetDim strSQL As String' このテストは、C:\ フォルダにある Microsoft Access のサンプル データベース  ' NorthWind.mdb のコピーを必要とします。  conn.Open "Provider=Microsoft.ACE.oledb.12.0;Data Source=C:\Northwind.mdb;"        ' パラメータステートメントを使用しパラメータを設定します。     'strSQL = "Select 得意先コード From 得意先 " & _             "Where 都道府県 =? And 得意先コード In " & _             "(Select 得意先コード From 受注 Where 受注コード =?)"    strSQL = "PARAMETERS p1 Text,p2 Long; Select 得意先コード From 得意先 " & _             "Where 都道府県 = p1 And 得意先コード In " & _             "(Select 得意先コード From 受注 Where 受注コード = p2)"    cmd.ActiveConnection = conn    cmd.CommandText = strSQL    cmd.CommandType = adCmdText    ' 手動で、"左から右" という通常の順番でパラメータを追加します。    cmd.Parameters.Append cmd.CreateParameter("都道府県", _           adVarChar, adParamInput, 15)    cmd.Parameters.Append cmd.CreateParameter("受注コード", _           adInteger, adParamInput)    ' パラメータを設定します。これらの値は結果セットから "37" の得意先コード    ' を持つ 1 つのレコードを選択する必要があります。    cmd.Parameters("都道府県").Value = "東京都"    cmd.Parameters("受注コード").Value = 3026    Set rs = cmd.Execute    ' これは得意先コード "37" を返されます。        MsgBox rs.Fields("得意先コード").ValueEnd Sub
パラメータ ステートメントを作成する方法については、次の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
142938 Data Access Objects を使用してパラメータ クエリの作成方法
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
プロパティ

文書番号:969850 - 最終更新日: 09/20/2016 14:10:00 - リビジョン: 3.0

Microsoft Access 2010, Microsoft Office Access 2007, Microsoft Office Access 2003, Microsoft Access 2002 Standard Edition, Microsoft Access 2000 Standard Edition

  • kbharmony kbexpertiseadvanced kbbug kbnofix kbtshoot KB969850
フィードバック