1

注: 私は大規模で複雑なデータベースを扱っているため、わかりやすくするために、以下の設定を簡略化しています。

少し複雑な質問なので、質問にタイトルを付ける方法に少し苦労しました。それが十分に正確であることを願っています....

最初に少し背景を説明します。

"Products" というテーブルと "Datasets" というテーブルの間に 1 対多の関係を含む Access 2010 データベースがあります (つまり、多数の製品があり、各製品には複数のデータセットがあります)。それぞれに自動採番キー フィールド (それぞれ p_ID と d_ID) とその他の多数のフィールドがあります。

sub_Products (「Products」テーブルに基づく) と sub_Datasets (「Datasets」テーブルに基づく) の 2 つのサブフォームを持つフォーム (frm_Main と呼びましょう) があります。メイン フォームには、[sub_Products]![p_ID] にリンクされたコントロール ctrl_SelectedProduct があり、sub_Products のどのレコードが選択されているか、フォーカスがあるかを確認します。sub_Datasets サブフォームはこのコントロールにリンクされているため、Datasets レコードのみが表示されます。選択した Products レコードに属します。

メイン フォームには、サブフォームのデータをフィルター処理するために使用しているコントロールもいくつかあります。たとえば、コントロール ctrl_Category があります。このコントロールをコーディングして、ユーザーがコントロールの値を変更すると、sub_Products のレコードを、ctrl_Category で選択されたものと等しい p_Category 値を持つレコードのみに制限するフィルターが適用されるようにします。コントロールが空白の場合、すべてのレコードが表示されます。Products テーブルのフィールドに基づいてフィルタリングする場合、これらすべてがうまく機能します。

今問題:

私の問題は、Datasets テーブルのフィールドに基づいてフィルター処理できるようにしたいということです。たとえば、Datasets には d_Status というフィールドがあります。ユーザーがコントロール (ctrl_Status) でステータスを選択できるようにして、これに基づいて:

1) sub_Products はフィルター処理され、ctrl_Status で選択されたものと等しい d_Status を持つ関連付けられた Datasets レコード (または複数のレコード) を持つ Products レコードのみが表示されます。

それから

2)このフィルタリングされた sub_Products で Products レコードが選択されると、sub_Datasets は、ctrl_Status で選択されたものと等しい d_Status を持つ Datasets レコードのみを表示します。

part2のやり方はわかった。しかし、part1を機能させる方法がわかりません。sub_Products は現在、d_Status フィールドを持たない Products テーブルに基づいているため、そのフィールドに基づいてフィルター処理する方法がありません。したがって、最初のステップは、sub_Products が 2 つのテーブルを結合する (または少なくとも d_Status フィールドを追加する) クエリに基づくようにセットアップを変更することであると想定しています。

ただし、これを行うと、重複した Product レコードが取得されます。ステータスが「現在」のデータセットとステータスが「アーカイブ済み」のデータセットの 2 つのデータセットを持つ製品がある場合、それらは重複とは見なされず、製品情報が存在するため、クエリの Unique Values プロパティを使用できません。二回。ステータス フィールドが表示されていない場合、最初は一意の製品のみが表示されますが、その後、その非表示フィールドに基づいてフィルターを適用することはできません。

また、Group By 機能を利用するために、Sub_Products を Totals クエリに基づいて作成しようとしましたが、それでも正しく機能しませんでした。Group By では 10 個のフィールドしか持てず、Products テーブルには sub_Products に表示する必要がある 10 個を超えるフィールドがあるため、それが最善の解決策だとは思いません。

私は今、ぐるぐる回っているだけで、ここから何をしようか途方に暮れているような気がします。助けてください!

4

1 に答える 1

0

このようなものを追加できませんでしたか?

Private Sub ctrl_Category_AfterUpdate()
    Form_frm_Main.Recordsource = "Select * from Products where p_ID IN(" & _
                                 "Select p_ID from Datasets where d_Status = " & _
                                 Me!ctrl_Category.Value & ")"
End Sub

または、他の子フォームの親を介して子フォームにアクセスできます。これは、アイデアを提供するための機能しないスニペットです。

Me.Parent.otherChildFormName.Form.Recordsource = whatever
于 2012-10-10T19:39:53.033 に答える