2011-01-08 17 views
0

同じフォームに表示され、そのフォームによって提供される複数のパラメータを使用する2つの非常に複雑なクエリがあります。 VBA関数および/または別のフォームでクエリを再利用したいと思います。そのため、私は2つの質問がある:MS Access:クエリの再利用/ VBAを使用したクエリパラメータの提供

  1. クエリが動的にフォームの名前を指定するのではなくからそのパラメータを読み込むためのフォームを決定するようなSQL文を書くための方法はありますか?例:Forms!myForm!startDateではなく、私の行に沿って何かstartDate?

  2. DAO RecordSetとして開くときに、クエリにパラメータを指定する方法はありますか?ほとんどの部分について

+1

はいとはい............. –

+1

ハハ!私が単にイエスかノーの質問を出したという事実にもかかわらず、私は確かにイエス/ノーの答えよりも多くを望んでいます。 :) – Adam

答えて

3

それがVBAを使用してSQLを書くために合うとどちらかの新しいSQLでクエリを更新することができて、ジェット(アクセス)は、他のデータベースの経験と同じインジェクションの問題の影響を受けない、またはフォームのレコードソースを設定します。

非常に大まか:

sSQL = "SELECT f1, f2 FROM tbl WHERE f3 = '" & Me.txt3 & "'" 

CurrentDB.QueryDefs("aquery").SQL = sSQL 

また、あなたはパラメータを使用することができます。

問合せ:

PARAMETERS txtCompany Text(150); 

SELECT <...> 
WHERE Company = txtCompany 

はコード:

Set qdf = db.QueryDefs("QueryName") 

qdf.Parameters!txtCompany = Trim(frm!txtCompany) 
+0

提案していただきありがとうございます。これは確かに可能ですが、私はこの特殊なケースでうまくいくかどうかはわかりません。 「非常に複雑」とは、* VERY *複雑なクエリを意味します。現在、いくつかのより小さい(そしてまだ複雑な)クエリに分類されています。私は、(1)これらのクエリーをすべて1つにまとめ、(2)クエリーオブジェクト(ユーザーインターフェイスから表示可能)からvba関数に移動するためのメンテナンスの観点から少し醜いと思う背後にあり、1つの巨大な文字列を作成する必要があります)。 – Adam

+1

その場合は、おそらくパラメータを追加するのに適していますか? – Fionnuala

3

私は、パラメータまたはストアを定義することはほとんどありませんfへの参照orm /保存されたQueryDefのレポートコントロール。私には、それらは実行時に、保存されたQueryDefを使うところで供給されるべきです。

一般に、保存されたQueryDefを使用するのではなく、コードを使ってSQLを書いています。

また、OnOpenイベントでフォームのRecordsourceを設定できることに注意してください。つまり、特定の目的にどのようなフィルタリングを行うかを決定するための条件を使用できます。これは、外部フォームに基づいて、またはDoCmd.OpenFormのOpenArgsパラメータを使用して判断できます。

関連する問題