みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access パラメータクエリーをVBAで実行

初めての質問になります、宜しくお願いします。

Access2007でのPG開発を行っています。

Insertのパラメータクエリーを作成してました(以下Q_Inst)。

VBA側でパラメータをセットして実行するとエラーが出てしまいます。

実行時エラー3265
要求された名前、または・・・

dbCmd.CommandText = "Q_Inst"
dbCmd.CommandType = adCmdStoredProc
dbCmd.Parameters.Refresh
dbCmd.Parameters("[ID]") = 1 ' ←ここでエラー
dbCmd.Parameters("[Name]") = TanakaTarou
dbCmd.Parameters("[Birth]") = "1980/12/01"

ADODB.Command をあまり使わないので勝手がいまいち分かりません。
SELECT、INSERT、UPDATEは今までdbCon.Execute(strSQL)でstrSQLの中にべた書きしてました。

エラーの対処方法をご教授お願い致しますm( _ _ )m

投稿日時 - 2011-09-24 12:23:19

QNo.7031162

すぐに回答ほしいです

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

以下もみてください。

ADOでのパラメータクエリの使用例

http://www.accessclub.jp/ado/createparameter.html
http://www.accessclub.jp/ado/refresh.html

投稿日時 - 2011-09-24 15:32:55

お礼

ありがとうございます。

どのパターンも試してみたのですが
同じエラーで跳ね返されてしまうので

VBE側でINSERT分をコツコツ書くことにしました。

投稿日時 - 2011-09-24 16:29:47

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

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

投稿日時 - 2011-09-24 15:26:19

ANo.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 を使ってストアド プロシージャを呼び出す」部分を参照してみてください

投稿日時 - 2011-09-24 15:18:54

ANo.3

>dbCmd.CommandType = adCmdStoredProc

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

投稿日時 - 2011-09-24 15:09:11

ANo.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"

投稿日時 - 2011-09-24 13:10:18

ANo.1

>dbCmd.Parameters("[ID]") = 1 ' ←ここでエラー

において、

dbCmd.Parameters("パラメータクエリで設定しているパラメータ名") = 1

で、フィールド名を書き入れるのではありません。
たとえば、IDに[AAA]と設定しているならば、

dbCmd.Parameters("AAA") = 1

あるいは、フィールドが0から始まるので、
IDが一番最初のフィールドならば、

dbCmd.Parameters(0) = 1

のようにして設定します。

投稿日時 - 2011-09-24 12:59:26

お礼

ご返答ありがとうございます。

dbCmd.Parameters(0) = 1
でも同じエラーがでます。

[ ]の中はフィールド名ではなく、クエリー内のパラメータで宣言した名前にしてあります。

dbCmdのParameters Countが0になっているのは関係ありますか・・・?

投稿日時 - 2011-09-24 14:02:53

あなたにオススメの質問