複数のサブフォームを含むタブ付きフォームを使用するSQL Serverへのアクセスクライアントがあります。基本的には、メインフォーム上で商品が選択され、タブは異なる関連テーブルに保存された商品のさまざまなプロパティ(オプション、色、目など)を編集/挿入するためのアクセス権を与えます。各サブフォームは独自のレコードソースを使用しますが、製品番号のメインフォームに同期されます。MS Accessタブ付きフォーム複数のOnCurrentの起動
サブフォームにコンボボックスがあり、「オプション」と呼ばれ、「where」句で製品番号を使用するクエリのデータを入力したいと考えています。それは私がする必要があるものです。どのように私はRowSourceをSQL文字列と同じに設定するために、オプションのサブフォームのOnCurrentイベントを使用することでした。それは動作しますが、OnCurrentイベントは、Optionsサブフォームにフォーカスがあるかどうかに関わらず、メインフォームで新製品が選択されるたびに発生します。オプションがフォーカスを取得すると、再び発生します。また、オプションではデータシートレイアウトが使用されるため、レコードソースを変更する必要がなくても、選択したすべてのレコードが起動されます。
これは機能しますが、非常に多くの不要なデータが(非常に)リモートSQL Serverに往復することになります。ですから、サブフォーム全体で動作する別のイベントがあります。サブフォーム内の各レコードではなく、1回だけ実行するのが理想です。私はGot Focusを試みましたが、それは決して解雇されませんでした。そして、新製品が選択されたとき(もちろん)、OpenイベントとLoadイベントは発生しません。または、オプションのサブフォームレコードソースを設定する必要がある別の場所がありますか?
はここでイベントコードです:任意の助け
Private Sub Form_Current()
Dim sql As String
sql = "SELECT O.[OptionID], O.[Caption] FROM ProductOptions AS O WHERE o.[OptionTypeID] in (1,2,8,9) AND o.ProductNumber = "
sql = sql & "'" & Nz(Forms![products main form]!ProductNumber, "99test") & "'"
oidSelect1.RowSource = sql
End Sub
感謝。
ジム
あなたは、物語に記載されているように、レコードソースではなくコンボボックスのRowSourceを設定していますか?なぜコードを使ってコンボボックスのRowSourceを設定するのですか? RowSourceプロパティにSQL文を入れてから、コンボボックスのGotFocusイベントをコーディングするだけで、RowSourceのRequeryが実行されるのはなぜですか? – June7
Hmmm、フィルタ(where句)は、現在編集中の製品ごとに変更されるため、動的に設定する必要があります。また、選択された各レコードのコンボボックスのクエリーにGotFocusを使用しないでください。 – user3091705
コンボボックスのRowSource SQL文のWHERE句は、ProductNumberへの参照を持つため、動的になります(これはグリッド表示なので、コンボボックスは各行に複製されます)。セスの答えは、私がコンボボックスGotFocusイベントを使用してクエリーをトリガーする以外は、これらの行に沿ったものです。彼はメインフォームへの依存について良い点を作っている。通常、主コンボボックスと従属コンボボックスは同じ形式です。また、エイリアス値を表示するルックアップ付きコンボボックスは、連続またはデータシートのフォームでうまく動作しません。 – June7