Microsoft Access で特定のフィールドのみで検索可能なデータベースを作成する

StackOverflow https://stackoverflow.com/questions/72528

  •  09-06-2019
  •  | 
  •  

質問

Microsoft Access で、特定のフィールドでのみ検索可能で、フォーム上の少数の (必要な) テキスト ボックスとチェック ボックスだけで制御され、難しいクエリを必要とせずに使いやすいデータベースを作成するにはどうすればよいでしょうか?

例:フォーム上に複数のテキスト ボックスとそれに対応する複数のチェック ボックスがあり、テキスト ボックスの横のチェック ボックスがオンになると、テキスト ボックスが有効になり、そのテキスト ボックスに入力された内容で検索できるようになります。

(実際、私はこれをすでに知っています。単に stackoverflow の危険を冒して遊んでいるだけです。私が質問する場合、私は答えを知っています。ただ、世界のコーディング知識を増やすためです。回答は5分ほどで届きます)

役に立ちましたか?

解決

これは実際にはかなり大きなトピックであり、あらゆる種類の潜在的な問題をはらんでいます。Access に関する中級から上級の書籍のほとんどには、「フォームによるクエリ」について説明する何らかのセクションがあり、ユーザーが特定の条件を選択できる非バインド フォームがあり、実行時にその場で SQL を記述してクエリを返します。マッチングデータ。

フラットな単一テーブル データ構造以外では、SQL の FROM 句が WHERE 句でクエリされるテーブルに依存するため、これは簡単な作業ではありません。

私がクライアント向けに作成したアプリの QBF フォームの例をいくつか示します。

  1. 4 つの基礎となるテーブルのクエリ
  2. フラットな単一テーブルのクエリ
  3. 3 つの基礎となるテーブルのクエリ
  4. 6 つの基礎となるテーブルのクエリ
  5. 2 つの基になるテーブルのクエリ

1 つ目は、このフォームで選択された条件を反映するプロパティと、FROM 句と WHERE 句を記述するメソッドを持つクラス モジュールによって駆動されます。これにより、他のフィールドを追加するのが非常に簡単になります (それらのフィールドが既に含まれているテーブル以外のテーブルからのものでない限り)。

プロセスの最も複雑な部分は、FROM 句の記述です。適切な結合タイプを使用し、SELECT 句または WHERE 句のいずれかに含まれるテーブルのみを含める必要があるためです。他に何かを含めると、クエリが大幅に遅くなります (特に外部結合がある場合)。

しかし、これは大きなテーマであり、特効薬的な解決策はありません。代わりに、特定のアプリケーションごとにこのようなものを作成する必要があります。また、開発者であるあなたにとって完全に明確で理解できるものでも、エンド ユーザーにとっては非常に不可解であることがよくあるため、ユーザーに対して徹底的にテストすることも重要です。

しかし、これは QBF だけに当てはまる原則ではありません。

他のヒント

私自身の解決策は、フィルタリングできる各列 (通常はすべて ...) のフォームのヘッダー部分に「フィルタ」コントロールを追加することです。このような「フィルター」コントロールが更新されるたびに、Access VBA で使用できる「BuildCriteria」関数を使用して、フォームのアクティブなフィルターを更新するプロシージャが実行されます。

したがって、「」と入力すると、*cable*発注書の説明列の上部にある「フィルター」の「WHERE PODescription IS LIKE」*cable*" が MyForm.filter プロパティに自動的に追加されます。

複数の基礎となるテーブルで構成されるレコード ソースのフィルタリングが非常に困難になる可能性があることに反対する人もいます。それは正しい。したがって、私が考える最良の解決策は、フォームのレコード ソースとして常にフラット テーブルまたはビュー (Access の "SELECT" クエリ) を使用することです (本気でそう思っています)。これであなたの人生はずっと楽になりますよ!

これを確信したら、フォームへの「フィルター」コントロールと関連手順の追加を自動化する小さなモジュールを考えることもできます。あなたは、真のユーザーフレンドリーなクライアントインターフェイスへの正しい道を進んでいます。

起動時にフォームを表示し、他のメニューなどを無効にする必要があります。そうすれば、ユーザーは限定された機能のみを参照し、テーブルなどを直接開くことができなくなります。

この本の抜粋ですが、 現実世界の Microsoft Access データベースの保護とセキュリティ, 、啓発されるはずです。

このような漠然とした質問に対して、私が答えることができるのは、MS Access を開いてマウスを数回クリックすることだけです。

よく考えてみると:
「OpenForm」メソッドの「WhereCondition」引数を使用します。

機能が非常に制限されている、または特殊化されている場合、SQL データベースはおそらく過剰になるでしょう。データのすべての組み合わせをローカルにキャッシュし、メモリ内にもキャッシュし、フォーム上のチェックボックスに従って 1 つを表示します。以前は、テーブルから権限を取り消し、所定の方法でデータをクエリする VIEW/PROC にのみ権限を付与することができましたが、MS Access 2007 からセキュリティが削除されたため、次のような方法を使用して単純なアプリをバイパスするユーザーを実際に阻止できるようになりました。 、Excel を使用し、好きな方法でデータをクエリする ...しかし、それがエンタープライズ データベースのポイントではないでしょうか?;-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top