• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access パラメータクエリーをVBAで実行)

VBAでAccessのパラメータクエリを実行する方法

このQ&Aのポイント
  • Access2007でのPG開発を行っている際に、VBAを使用してパラメータクエリを実行する方法について質問です。
  • Insertのパラメータクエリを作成し、VBA側でパラメータをセットして実行するとエラーが出てしまいます。具体的には、実行時エラー3265が発生し、要求された名前、またはオブジェクトが見つかりませんというエラーメッセージが表示されます。
  • ADODB.Commandをあまり使ったことがなく、エラーの原因や対処方法が分からない状況です。今まではSELECTやINSERT、UPDATE文をdbCon.Execute(strSQL)で実行していました。エラーの対処方法についてご教授いただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

以下もみてください。 ADOでのパラメータクエリの使用例 http://www.accessclub.jp/ado/createparameter.html http://www.accessclub.jp/ado/refresh.html

kazuya-1980
質問者

お礼

ありがとうございます。 どのパターンも試してみたのですが 同じエラーで跳ね返されてしまうので VBE側でINSERT分をコツコツ書くことにしました。

その他の回答 (5)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

No3の続きで、 >dbCmd.Parameters.Refresh これをコメントアウトしてみてください。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

ローカルでの話になりますが、 > dbCmd.Parameters.Refresh この前に、 dbCmd.ActiveConnection = CurrentProject.Connection のような記述が必要かと思います。 ローカルの場合でも、上記をコメントにすると、 値を設定しようとした際に 3265 のエラーとなります。 また、dbCmd.Parameters で指定される文字列を一度確認されてみてはいかがでしょうか。   Dim prm As ADODB.Parameter を宣言しておいて、Refresh 後に   For Each prm In dbCmd.Parameters     Debug.Print prm.Name   Next 余談) クエリの抽出条件に ・・・ WHERE ID = [DAT1] ・・・ のように、 [DAT1] をパラメータにしている時、 ADOでは、dbCmd.Parameters("[DAT1]") = 1 のように記述します。 dbCmd.Parameters("DAT1") = 1 ではまた 3265 のエラーになったと思います。 なお、DAO では、"[DAT1]" / "DAT1" どちらでも大丈夫みたいです。 ※ adCmdStoredProc は使ったことが無いので、 VBE 側のヘルプで adCmdStoredProc を検索され、 「Command を使ってストアド プロシージャを呼び出す」部分を参照してみてください

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>dbCmd.CommandType = adCmdStoredProc を dbCmd.CommandType = adCmdText にしてみてください。 あるいは、上記に dbCmd.Prepared = True をついかしてみてください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。No1は他のパラメータの設定 も同様です。 >dbCmd.Parameters("[Name]") = TanakaTarou >dbCmd.Parameters("[Birth]") = "1980/12/01" たとえば、フィールドの順番が[ID]、[Name]、「Birth]ならば dbCmd.Parameters(1) = TanakaTarou dbCmd.Parameters(2) = "1980/12/01" あるいは、 dbCmd.Parameters("[Name]に設定したパラメータ名") = TanakaTarou dbCmd.Parameters("[Birth]に設定したパラメータ名") = "1980/12/01"

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

>dbCmd.Parameters("[ID]") = 1 ' ←ここでエラー において、 dbCmd.Parameters("パラメータクエリで設定しているパラメータ名") = 1 で、フィールド名を書き入れるのではありません。 たとえば、IDに[AAA]と設定しているならば、 dbCmd.Parameters("AAA") = 1 あるいは、フィールドが0から始まるので、 IDが一番最初のフィールドならば、 dbCmd.Parameters(0) = 1 のようにして設定します。

kazuya-1980
質問者

お礼

ご返答ありがとうございます。 dbCmd.Parameters(0) = 1 でも同じエラーがでます。 [ ]の中はフィールド名ではなく、クエリー内のパラメータで宣言した名前にしてあります。 dbCmdのParameters Countが0になっているのは関係ありますか・・・?

関連するQ&A