• ベストアンサー

VBAからクエリのパラメータを設定したいです。

いつもお世話になっております。 クエリーは全く同じ内容ですが、 複数のフォームにパラメータを入力するユーザーインターフェースのため、ク エリーを複数用意して、それぞれに [forms]![F_TEST]![テキスト名]というパラメータを設定し、フォームの帳票やレポートの帳票に出力していま した。 このクエリを一本にして、VBAから動的にパラメータを参照するフォームを指定 できないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

再びmaruru01です。 既存のクエリもVBAのSQLステートメント化をお奨めします。 それを標準モジュールに、 Public Sub myRunSQL(Para As String)   Dim SQL As String   SQL = "(SQL文の前の方)" & Para & "(SQL文の後ろの方)"   DoCmd.RunSQL SQL End Sub という風にそれぞれのクエリを各プロシージャにしておけば、どこからでも呼び出せるわけです。 すでに作ってあるクエリを書き直すのは面倒ですが、一度書いてしまえばあとは楽です。 また、まったく同じじゃないんだけど結構似てるというクエリは、プロシージャをコピーして名前と中身をかえてやればすぐ出来るわけです。 ちなみに私は、基本的には、クエリもマクロも使用せず、すべてVBAで書いています。 では。

kyoukorumi
質問者

お礼

お礼遅くなって申し訳ございません。 なるほど、これならコードが煩雑にならなくてすみますね。 勉強になりました。 本当にどうもありがとうございます。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 クエリというのは、要はSQLステートメントの実行ですから、VBAでSQLステートメントを記述して実行してやればいいと思います。 例えば、フォーム上にコマンドボタンでも置いて、そのクリックイベントに Dim Para As String Dim SQL As String Para = [forms]![F_TEST]![テキスト名] SQL = "(SQL文の前の方)" & Para & "(SQL文の後ろの方)" DoCmd.RunSQL SQL こんな感じです ちなみにSQLステートメントは、クエリをデザインモードで開き、上部(テーブルが表示されているエリア)の何もないところで右クリックし、メニューの中の[SQLビュー]を選ぶと見られます。 そのSQL文では、適当に改行してありますが、VBAで書く場合は半角スペースでつなげればOKです。 また、最後の";"は要りません。 それと、VBAで変数をSQL文中に入れる場合は、例のように変数の前後でSQL文を切って、"&"でつなげてやらないといけません。 では。

kyoukorumi
質問者

お礼

とっても分かりやすい文で、どうもありがとうございました。 この他に、既存のクエリーに、パラメータだけを渡すようなことはできないのでしょうか。 クエリーの内容はまったく同じで、パラメータだけが異なるので。。。 すみませんが、もしお分かりになればご教授願いたいのですが。 よろしくお願いいたします。

関連するQ&A

  • アクセス97のVBAでパラメータを指定する方法

    いつもたいへんお世話になっております。 アクセス97で、フォームを複数作りました。フォーム1、フォーム2、フォーム3。 それぞれのフォームのコマンドボタンでフォーム4を呼び出します。 フォーム4のレコードソースにクエリを使用しますが(クエリ1)、 このクエリにの抽出条件に、最初のフォームのコントロールの値(部門)を設定したいのですが、抽出条件に、「FORMS!フォーム1!部門」とすると、同じクエリを他のフォームには使えませんよね?パラメータを作成して、それぞれのフォームのコマンドボタンのなかで指定できてしまえば、クエリ1と、フォーム4を共有できますよね。現在は、それぞれのフォームに対応するフォーム4とクエリ1を作成しています。なんとかなりませんか? 説明が難しくなってきちゃった・・・ ・・・パラメータの入力要求をVBAで処理したいのですが、いい方法を教えてください。

  • レポート クエリパラメータ

    Access2003についてお教えください。 フォームでテキストボックスとボタンを1つづつ配置します。 ユーザーにテキストボックスに何らかの値を入力してもらいます。 テキストボックスに入力したデータを検索条件として、レポートを印刷したいと思います。 クエリパラメーターみたいに、レポートに検索条件を渡したいのですが、どのようにすれが解決できるでしょうか? 宜しくお願いします

  • アクセス2000VBA ADO パラメータクエリについて

    アクセス2000VBA ADO パラメータクエリについて フォーム1で得たデータをモジュールで定義した[hensu](String)に代入して、クエリ1(選択クエリ)の抽出条件として[hensu]を使用して、それによって得たデータをフォーム1で使用したいです。 フォーム1で[hensu]をパラメータクエリ?として定義するような文章(プログラム)が必要なだと思いますが、その例文(プログラム)を教えてください。 シロウト用に分かりやすくお願いします。

  • Access2000でVBAからパラメータクエリを実行

    Access2000でフォームからの値を参照して実行するクエリを作りました。 SQLで表すと、以下のようなものです。 クエリ名:test SELECT TEST.HAKKODTE FROM TEST WHERE (((TEST.HAKKODTE)=Format([Forms]![F_メニュー]![txtNyukinDate],"yyyymmdd"))); このクエリをダブルクリックで実行すると問題なく実行できます。 これを、VBAからレコードを参照したいと思い、 以下のように記述しました。 Dim cn As ADODB.Connection Set cn = CurrentProject.Connection Dim rs1 As ADODB.Recordset Set rs1 = New ADODB.Recordset Dim sqlstr As String sqlstr = "SELECT * FROM test;" rs1.Open sqlstr, cn, adOpenKeyset, adLockOptimistic しかし、Open処理で、「1つ以上の必要なパラメータの値が設定されていません」 というエラーになってしまいます。 VBAを実行するときに、[Forms]![F_メニュー]![txtNyukinDate]に きちんと値は入力されています。 これを実行する方法はあるでしょうか?

  • パラメータクエリを一つにまとめたい

    クエリ1を基にフォーム1を作成、 クエリ2を基にフォーム2を作成、 クエリ1も2もパラメータクエリを使用していて フィールド名は「番号」データ型はテキスト型です。 そして新規にフォーム3を作成しフォーム1とフォーム2をドラッグしました。 この状態でフォーム3をダブルクリックすると パラメータの入力を2回求められますがどちらも同じ番号を入力しています。 (「001」などを2回入力) これを1回にすることは可能でしょうか? ・番号フィールドの基テーブルはクエリ1と2は違うテーブルです。 ・クエリ1と2は一つにまとめたくありません。 フォーム3上に別々に表示させたいです。 ・クエリ1には全ての番号がありますがクエリ2には抜けている番号があります。 「クエリ1の全レコードとクエリ2の同じ結合フィールドのレコードだけを含める。」で全ての番号を表示できる状態です。 説明が下手ですいません。 アドバイスお願い致します。

  • AccessのVBAでパラメータクエリー設定

    お世話になります。 AccessのVBAで質問させてください。 「クエリーA」に設定している「ID1」のパラメータを 「テーブルA」の「IDX」の値を設定したいと思っております。 「ID1」にパラメータ2を設定する方法は分かったのですが、 下記の2つの方法がわかりませんでした。 ・「ID1」のパラメータを「テーブルA」の「IDX」の値を設定する方法 ・「テーブルA」は複数レコードあるので、その数だけfor文的なループで回したい お手数で申し訳ございませんが、 「クエリーA」に設定している「ID1」のパラメータを 「テーブルA」の「IDX」の値を設定する方法VBAコードを 教えて頂ければと思います。 本当に勝手いいますが、コードを記載して頂ければと思います。 宜しくお願い致します。 -----「ID1」にパラメータ2を設定する方法----- Set qdf = dbs.QueryDefs("クエリーA") With qdf .Parameters("ID") = 2 Set rst = .OpenRecordset End With

  • Access ADO パラメータークエリー

    Access ADOでフォームのコントロールを参照するパラメータークエリーを開こうとすると、どうしても「SQLステートメントが正しくありません・・・」のエラーが発生してしまいます。 もちろん、クエリー単体では正常に動作しますが、クエリーのパラメーターに参照するコントロールを登録してもADOでは開けません。 現在はパラメータークエリーの抽出結果を一時テーブルに書き込んで、これをADOで開くという非効率極まりない方法で凌いでいますが、どうすれば良いのでしょうか。

  • Accessのパラメータクエリについて

    Accessのパラメータクエリがうまく動かなくて困ってます。 実はODBC経由でリンクテーブルを作っておりまして、そこからパラメータクエリで抽出を試みたのですが、パラメータは聞いてきますが抽出できません。 選択クエリ状態で直接抽出条件を入れてやれば何の問題もなく通常のテーブルと同様に抽出できるのですが、パラメータクエリにする、または同じ事ですが他のフォームのコントロールを参照させる状態ですと、エラーも出ずにノンデータとなります。 これって何故なんでしょうか?対処方法はありますか? ちなみにリンク元のテーブルはオラクルですがデータ型とかが関係あるのでしょうか?

  • Access クエリの条件の参照先

    お世話になります。 ローカルのクエリの抽出結果をExcelファイルに出力しようとしてます。 クエリの条件としてはフォーム上にあるテキストボックスの文字列を参照する ようにしてます。 ※当該クエリを開くと問題なく抽出されてます。 このクエリの抽出結果を出力しようとすると、「実行時エラー3061 パラメータ が少なすぎます。1を指定してください。」と表示されます。 なお、出力は以下のようにしてます。  Set MyRs = CurrentDb.OpenRecordset("クエリ名") ローカルクエリの条件をフォーム上のテキストボックスではなく、固定で 文字列を指定してやると、当該エラーは出なくなります。 なので、フォーム上のテキストボックスを参照できないのか、そもそも 上記のOpenRecordsetで何か(パラメタ)足りないのか。。よくわかりません。 勉強不足で大変恐縮ですが、ご教授の程、宜しくお願い致します。

  • アクセスのパラメータクエリをフォームからレポートに表示するには

    どなたかわかる方、教えてください! アクセスで、サブフォームにパラメータクエリ設置し、パラメータに抽出条件を入れるとサブフォームに一覧が表示するように設定しました。 この、いったんサブフォームに抽出したものを今度はそのままレポートにしてプリントアウトしたいと思っています。 同じパラメータクエリをフォームに設定すると、もう一回パラメータを入れなければならなくなってしまいます。 すぐにフォームからレポート表示に切り替えてプリントアウトする方法はありますか? よろしくお願いします。