2012-10-10 61 views
1

注意:我正在處理大型複雜數據庫,因此爲了清晰起見,我簡化了下面的設置。根據第二個表格從一個表格中過濾數據,無重複

我在如何標題的問題上掙扎了一下,因爲這是一個複雜的問題。我希望這是不夠準確....

一點背景知識第一:

我有一個Access 2010數據庫包含一個名爲「產品」表和表之間存在一個一對多的關係所謂的「數據集」(即我有一堆產品,每個產品有多個數據集)。每個都有一個自動編號鍵字段(分別爲p_ID和d_ID)以及許多其他字段。

我有一個窗體(讓我們稱之爲frm_Main),它有兩個子窗體:sub_Products(基於「Products」表)和sub_Datasets(基於「Datasets」表)。在主窗體上,我有一個控件ctrl_SelectedProduct,它鏈接到[sub_Products]![p_ID]以查看sub_Products中的哪個記錄被選中/具有焦點,並且sub_Datasets子窗體鏈接到此控件,以便它僅顯示數據集記錄屬於選定的產品記錄。

在主窗體上,我也有一些控件用於過濾子窗體中的數據。例如,我有一個控件ctrl_Category。我有這種控制編碼,以便當用戶更改控件的值時,應用過濾器將sub_Products中的記錄限制爲僅具有與ctrl_Category中所選內容相等的p_Category值的記錄。如果控件是空白的,它將顯示所有記錄。當基於Products表中的字段進行過濾時,所有這些都很有用。

現在的問題:

我的問題是,我也希望能夠基於數據集表中的字段進行篩選。例如,數據集有一個名爲d_Status的字段。我希望用戶能夠選擇的控制(ctrl_Status)的狀態,並在此基礎上:

1) sub_Products將被過濾,只顯示有assotiated數據集記錄這些產品的記錄(或記錄),其具有d_Status等於任何被選擇在ctrl_Status

然後

2)當在此過濾sub_Products選擇一個產品記錄,sub_Datasets將只顯示具有d_Status等於被選擇的任何給數據集的記錄在ctrl_Status

我知道如何做part2。但我不知道如何獲得part1的工作。由於sub_Products當前基於沒有d_Status字段的Products表,因此我無法根據該字段對其進行過濾。因此,我假設我的第一步是更改我的設置,以便sub_Products基於組合這兩個表的查詢(或者至少添加d_Status字段)。

但是,如果我這樣做,我會得到重複的產品記錄。我無法使用查詢的唯一值屬性,因爲如果我的產品有兩個數據集,一個狀態爲「Current」,另一個狀態爲「Archived」,那麼這些數據集不會被視爲重複項,並且產品信息在那裏兩次。如果我沒有顯示狀態字段,它最初只顯示唯一的產品,但隨後我無法應用基於該非顯示字段的過濾器。

我也嘗試在總計查詢基礎上的sub_Products爲了利用Group By功能,但我仍然無法讓它正常工作。即使我可以,我也不認爲這是最好的解決方案,因爲您只能使用分組方式創建10個字段,而我的產品表中有10個以上的字段需要在sub_Products中顯示。

我覺得我現在只是圍着圈子走,並且在這裏試着去嘗試。請幫忙!

回答

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 
+0

謝謝丹尼爾!它看起來像改變記錄源而不是應用過濾器是關鍵。當然,這意味着我現在必須更改我的Audit Trail編碼(它通過查看Recordsource來獲取源表),但這比完成對子表單的重新設計要好! – ribs

相關問題