PRB:"実行時エラー 3001" ADO コマンド オブジェクトと adCmdTableDirect

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:248076
サポート期間が終了した「サポート技術情報」資料に関する免責事項
この資料は、マイクロソフトでサポートされていない製品について記述したものです。そのため、この資料は現状ベースで提供されており、今後更新されることはありません。
現象
AdCmdTableDirect のレコード セットのオプションを指定するときに、ADO コマンド オブジェクトの Execute メソッドを使用して ADO レコード セットを開こうとする場合は、次のエラーが表示されます。
"実行時エラー '3001': アプリケーションが間違った型の許容範囲外、または競合している引数を使用しています」。
AdCmdTableDirect を ADO コマンド オブジェクトのCommandTypeプロパティを設定しようとする場合も、エラーが発生します。

AdCmdTable を指定する場合、エラーは発生しません。
原因
adCmdTableDirect は、ADO の Command オブジェクトとの互換性はありません。adCmdTableDirect は、 ADO が、ADO コマンド オブジェクトの代わりに、IOpenRowset と呼ばれるインタ フェースを使用するように指定します。
解決方法
2 つの考えられる回避策があります。
  • AdCmdTableDirect を ADORecordset の Open メソッドで指定します。
  • AdCmdText または adCmdTable コマンド タイプを指定します。

    ただし、この usingadCmdTableDirect がオプションの状況では機能が少なくなります。
状況
この動作は仕様です。
詳細
adCmdTableDirect に設計されたテーブルを開くをサポートする OLE DB プロバイダー名、プロバイダーのメソッドにより、IOpenRowset を使用して直接。adCmdTableDirect をビルドして、コマンド オブジェクトを実行する行セットを開こうとするとするのではなく、により、IOpenRowset を使用して、ADO を強制します。IOpenRowset は、結果としてパフォーマンスの向上と機能を開き、個々 のテーブルまたはインデックス内のデータ ソースを直接操作する消費者を有効にします。

一方、adCmdTable は、プロバイダーがテーブルからすべての行を返す SQL クエリを生成することを示します。adCmdTable の前に付加するだけで
SELECT * FROM
前面、指定されたテーブル名。

現象を再現する手順を実行します。

このサンプルでは、Visual Basic に付属している Nwind データベースを使用します。
  1. Visual Basic で、新しい標準 EXE プロジェクトを作成します。
    デフォルトで Form1 が作成されます。
  2. プロジェクトおよび Microsoft ActiveX DataObjects ライブラリへの参照を設定します。
  3. Form1 に次の 3 つのコマンド ボタンを配置します。

    Command1 と Command2、Command3 は、既定で作成されます。
  4. Form1 のコード ウィンドウの「宣言」セクションに次のコードを貼り付けます。
       Private Sub Command1_Click()              Dim cmd As ADODB.Command              Set cmd = New ADODB.Command       cmd.CommandType = adCmdTableDirect    End Sub   Private Sub Command2_Click()              Dim cmd As ADODB.Command       Dim rs As ADODB.Recordset              Set cmd = New ADODB.Command       cmd.CommandText = "Employees"       cmd.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _       "Data Source=c:\Program Files\Microsoft Visual Studio\VB98\NWind.mdb"              Set rs = cmd.Execute(, , adCmdTableDirect)         End Sub   Private Sub Command3_Click()       Dim cmd As ADODB.Command       Dim rs As ADODB.Recordset              Set cmd = New ADODB.Command       cmd.CommandText = "Employees"       cmd.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _       "Data Source=c:\Program Files\Microsoft Visual Studio\VB98\NWind.mdb"             Set rs = New ADODB.Recordset       rs.Open cmd, , adOpenKeyset, adLockOptimistic, adCmdTableDirect              MsgBox rs("Firstname").Value          End Sub					
  5. プロジェクトをテストします。

    いずれかをクリックすると Command1 または Command2 3001 のエラーが生成されます。
    クリックすると Command3 エラー 3001 は生成されません。
関連情報
Microsoft ActiveX データ オブジェクト ライブラリの完全なドキュメントについては、World Wide Web の次のサイトを参照してください。

Microsoft ActiveX データ オブジェクト ライブラリ

警告: この記事は自動翻訳されています

プロパティ

文書番号:248076 - 最終更新日: 11/01/2015 02:27:00 - リビジョン: 5.0

Microsoft ActiveX Data Objects 2.7

  • kbdatabase kbprb kbmt KB248076 KbMtja
フィードバック