2つのテーブルtblA
とtblB
が1対nの関係を持っているとしましょう。すなわち、tblA内の特定のレコードに対して、tblB内に多数のレコードが存在する可能性があります。MS Access:現在のレコードに基づいてコマンドボタン経由でフォームを開くには?
今私はtblAに基づいてフォームfrmA
を持っています。このフォームには、tblB
に基づいて、frmB
の2番目のフォームを開くコマンドボタンがあります。現在、frmB
の2番目のフォームには、tblB
のレコードが、現在のレコードと一致するものがtblA
からのみ表示されます。 tblB
のデータをフィルタリングする組み込みの方法(私はAccess 2010を使用しています)が見つかりました。しかし、frmB
の中で、私は現在のレコードに基づいてさらにいくつかのことをする必要があるので、これでは十分ではありません。 どうすればいいですか?
内部結合を行い、tblA
から特定のレコードを選択するためのパラメータを持つクエリqryAB
を作成すると考えました。しかし、どのように私のコマンドボタンのオンクリックマクロ(またはVBA)からパラメータとして使用するために、このクエリに何かを渡すだろうか?
さらに詳しい説明をします。表Aには、ビジネスパートナに関するデータが含まれています。フォームAはこれらを(コンタクト担当者のサブフォームと一緒に)表示します。テーブルAIからの各レコードについて、Aからの現在のレコードに対応するテーブルBからのエントリ(契約)のみをリストアップする新しいフォーム(ポップアップ)を開くコマンドボタンが必要になります。このフォームでは、フォームBに表示されているレコードのナビゲーションに使用されます(たとえば、ビジネスパートナとの契約が存在するすべての年のコンボボックスなど)。 – janitor048
formBが常にformAから開かれている場合は、コンボのrowsourceを 'SELECT FROM Table WHERE AField = Forms!formA!SomeControl'に設定することができます。しかし、フォームを参照する必要は全くないかもしれません。結局のところ、フォームはidがformAと一致するレコードのみを表示するので、rowsourceはformB IDを参照できます。最後に、OpenArgとして参照を渡し、コードでコンボを構築することができます。原則として、私はスタンドアローンとして動作しないフォームを回避しようとし、現在のフォームで利用可能な情報に基づいて動作するコンボを構築しようとします。 – Fionnuala
OpenFormメソッドと適切なselectステートメントを併用すると、その作業が完了したようです。そして、フォームBのコンボボックスを、そのフォームで利用可能な情報に基づいて作成することができます。私はAccessに精通しておらず、時には、どのようなことをするのが最善に機能するのか分からない...あなたの助けてくれてありがとう! – janitor048