2012-02-05 2 views
1

2つのテーブルtblAtblBが1対nの関係を持っているとしましょう。すなわち、tblA内の特定のレコードに対して、tblB内に多数のレコードが存在する可能性があります。MS Access:現在のレコードに基づいてコマンドボタン経由でフォームを開くには?

今私はtblAに基づいてフォームfrmAを持っています。このフォームには、tblBに基づいて、frmBの2番目のフォームを開くコマンドボタンがあります。現在、frmBの2番目のフォームには、tblBのレコードが、現在のレコードと一致するものがtblAからのみ表示されます。 tblBのデータをフィルタリングする組み込みの方法(私はAccess 2010を使用しています)が見つかりました。しかし、frmBの中で、私は現在のレコードに基づいてさらにいくつかのことをする必要があるので、これでは十分ではありません。 どうすればいいですか?

内部結合を行い、tblAから特定のレコードを選択するためのパラメータを持つクエリqryABを作成すると考えました。しかし、どのように私のコマンドボタンのオンクリックマクロ(またはVBA)からパラメータとして使用するために、このクエリに何かを渡すだろうか?

答えて

2

OpenForm methodのWhere引数を使用すると、OpenArgsをOpenFormに追加できます。また、コード内ですでに開いているフォームを参照できます。それはあなたが次にやりたいことに依存します。

+0

さらに詳しい説明をします。表Aには、ビジネスパートナに関するデータが含まれています。フォームAはこれらを(コンタクト担当者のサブフォームと一緒に)表示します。テーブルAIからの各レコードについて、Aからの現在のレコードに対応するテーブルBからのエントリ(契約)のみをリストアップする新しいフォーム(ポップアップ)を開くコマンドボタンが必要になります。このフォームでは、フォームBに表示されているレコードのナビゲーションに使用されます(たとえば、ビジネスパートナとの契約が存在するすべての年のコンボボックスなど)。 – janitor048

+0

formBが常にformAから開かれている場合は、コンボのrowsourceを 'SELECT FROM Table WHERE AField = Forms!formA!SomeControl'に設定することができます。しかし、フォームを参照する必要は全くないかもしれません。結局のところ、フォームはidがformAと一致するレコードのみを表示するので、rowsourceはformB IDを参照できます。最後に、OpenArgとして参照を渡し、コードでコンボを構築することができます。原則として、私はスタンドアローンとして動作しないフォームを回避しようとし、現在のフォームで利用可能な情報に基づいて動作するコンボを構築しようとします。 – Fionnuala

+0

OpenFormメソッドと適切なselectステートメントを併用すると、その作業が完了したようです。そして、フォームBのコンボボックスを、そのフォームで利用可能な情報に基づいて作成することができます。私はAccessに精通しておらず、時には、どのようなことをするのが最善に機能するのか分からない...あなたの助けてくれてありがとう! – janitor048

1

あなたはfrmbをfrmaのサブフォームとし、親子関係を使用することを検討しましたか?

+0

私はそれを考えましたが、私のシナリオでは(私のコメントをRemouの答えを参照してください)これは私が望むものとは思えません。 – janitor048

関連する問題