私が構築しているデータベースで取るべきアプローチに関する一般的な質問。DB ビジネス ユーザーが条件を入力したり、ラジオ ボタンなどで検索を制限したり、選択内容に基づいてクエリを実行したりできるフォームをいくつか用意する予定です。
1 つまたは 2 つのフィルターがある単純なクエリの場合、クエリ デザイン ビューでデータ フィールドの条件をそれぞれのフォーム要素に関連付けるのは簡単に思えますが、ネストされたものを扱う場合、このアプローチは失敗します (また、読み取り/編集が非常に難しいようです)。 if ステートメント (例: If A の場合 x、if B の場合 y、if C の場合 z、Else q)。
onClick イベントまたは何らかのフォームベースのトリガーの後に実行される VBA で作成された、クエリ名と対応する SQL 文字列を格納する DB に別のテーブルを作成することを説明した記事に出くわしました。クエリ条件を決定するロジックはすべて VBA にあり、コードが実行されると、システムにはクリーンな SQL ステートメントが残されます。これは前述のテーブルに格納され、クエリの実行に使用されます。フォームがアクセス/変更され、クエリが要求されるたびに、テーブル内の SQL 文字列が上書きされると思います。
これは私が取り組んだ最初の本格的な DB であるため、取るべきアプローチに関するガイダンスを探しています。今説明したことは正しいですか、それとも状況を処理するためのかなり標準的/一般的な方法ですか? 大きな懸念事項はありますか?すぐに思い浮かぶのは、2 人の DB ユーザーが異なる条件で同じクエリを同時に実行しようとするとどうなるかということです。私のユーザーベースは小さいことに注意してください.おそらく5人のユーザーは、アドホックレポートなどのために、DBにアクセスするだけです.
前もって感謝します!
編集: これは、私が参照していたフォーラムの投稿です: 別のテーブルの SQL 文字列
編集 2: 一般的な例として、私の DB に次のようなテーブルがあるとします。
ID......Sale_Date......カテゴリ
1....... 2013 年 1 月 1 日.................Foo
2....... 2013 年 1 月 3 日........バー
3..... .. 2013 年 1 月 1 日.................バー
4........2013 年 1 月 7 日........バー
今私のフォームでは、ユーザーが日付範囲を指定できるテキスト ボックスがあり、これはクエリで次のようにフィルター処理されます。
[Forms]![myFrm]![FromDate] と [Forms]![myFrm]![ToDate] の間
これは問題なく動作します。
カテゴリに関しては、ユーザーが包含/除外のカテゴリを指定できるチェックボックスまたはその他のフォーム要素が必要です。ここで問題が発生しました。私は試した:
IIf([Forms]![myFrm]![Cat]=1,([tbl_data].[Category]) In ("Foo","Bar"),IIf([Forms]![myFrm]![Cat]= 2,"フー","バー"))
...Cat=1 は 'All' を表し、2 と 3 はそれぞれ Foo と Bar を表します。Access は、クエリが複雑すぎるというエラーを表示しますが、ネストされた if を削除すると (したがって、両方のカテゴリを検索するオプションを無視します)、機能します。
さて、明らかにこれは非常に単純化された例ですが、DB が成長し、より多くの定型クエリが組み込まれるにつれて、フォーム駆動型クエリを処理する方法について考えるようになりました.VBA での考えは、コードが実行され、フォームデータを作成し、次のように SQL を構築します。
SELECT...
FROM...
WHERE IN("Foo", "Bar")
うまくいけば、これが物事を少し明確にするのに役立ちます。私の無知を許してください...私は、私が進むにつれて、まだ多くのことを学んでいます。ありがとう。