- ベストアンサー
VBAでAccessのパラメータクエリを実行する方法
- Access2007でのPG開発を行っている際に、VBAを使用してパラメータクエリを実行する方法について質問です。
- Insertのパラメータクエリを作成し、VBA側でパラメータをセットして実行するとエラーが出てしまいます。具体的には、実行時エラー3265が発生し、要求された名前、またはオブジェクトが見つかりませんというエラーメッセージが表示されます。
- ADODB.Commandをあまり使ったことがなく、エラーの原因や対処方法が分からない状況です。今まではSELECTやINSERT、UPDATE文をdbCon.Execute(strSQL)で実行していました。エラーの対処方法についてご教授いただけると助かります。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
以下もみてください。 ADOでのパラメータクエリの使用例 http://www.accessclub.jp/ado/createparameter.html http://www.accessclub.jp/ado/refresh.html
その他の回答 (5)
- piroin654
- ベストアンサー率75% (692/917)
No3の続きで、 >dbCmd.Parameters.Refresh これをコメントアウトしてみてください。
- 30246kiku
- ベストアンサー率73% (370/504)
ローカルでの話になりますが、 > 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)
>dbCmd.CommandType = adCmdStoredProc を dbCmd.CommandType = adCmdText にしてみてください。 あるいは、上記に dbCmd.Prepared = True をついかしてみてください。
- piroin654
- ベストアンサー率75% (692/917)
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)
>dbCmd.Parameters("[ID]") = 1 ' ←ここでエラー において、 dbCmd.Parameters("パラメータクエリで設定しているパラメータ名") = 1 で、フィールド名を書き入れるのではありません。 たとえば、IDに[AAA]と設定しているならば、 dbCmd.Parameters("AAA") = 1 あるいは、フィールドが0から始まるので、 IDが一番最初のフィールドならば、 dbCmd.Parameters(0) = 1 のようにして設定します。
お礼
ご返答ありがとうございます。 dbCmd.Parameters(0) = 1 でも同じエラーがでます。 [ ]の中はフィールド名ではなく、クエリー内のパラメータで宣言した名前にしてあります。 dbCmdのParameters Countが0になっているのは関係ありますか・・・?
お礼
ありがとうございます。 どのパターンも試してみたのですが 同じエラーで跳ね返されてしまうので VBE側でINSERT分をコツコツ書くことにしました。