2016-04-21 82 views
1

我在表單中創建了兩個從屬組合框。如果您在第一個框中選擇Category,它將過濾第二個中可用的Products列表。我已將類別產品選擇保存到名爲Test的表格中,其中類別每個都有一行。Access 2013中的重新組合框

如果您在測試中選擇了一個類別,我想要在產品組合框中顯示該產品。例如,如果您在表單中選擇了Category = Condiments和Product = Ketchup,則會將其添加到Test中。然後,下次在表單中選擇Category = Condiments時,Products組合框(您鍵入的框,而不是下拉列表)將立即顯示Ketchup。如果我在測試中有一行,這似乎工作。如果我添加更多行,則ProductComboBox不會更改。

下面是我的表單構建方式。

在行來源爲CategoryComboBox,我選擇一切

Select * From CategoryTable 

在行來源爲ProductComboBox,我基於所選

Select * From ProductTable Where ProductTable.CategoryID=[forms]![FormTest]![Category] 

類別過濾器產品的形式源產品left接合到類別在CategoryID上。

在爲CategoryComboBox開Change事件和形式在目前的情況下,我再次查詢ProductComboBox

ProductComboBox.Requery 

然而,使用ProductComboBox.Requery只有再次查詢在下拉菜單中可用的選項。在選擇類別之後但在選擇產品之前,它不會更改當前的組合框值。如何從鏈接到ControlSource的表中重新查詢數據?有沒有比Requery更好的VBA功能,還是我需要在宏中使用SQL?

+0

請注意,我仍然需要使用下拉框輸入數據的功能。 – jjjjjjjjjjj

回答

1

在第一個組合框的onChange事件,請執行以下操作:

Private Sub category_Change() 
     Dim myID As Long 
     Me.ProductComboBox.Requery 
     If Not IsNull(DLookup("ProductID", "tblTest", "CategoryID = " & me.Category)) Then 
      Me.ProductComboBox = DLookup("ProductID", "tblTest", "CategoryID = " & me.Category) 
     End If 
End Sub 

然後更新您的測試表中,要更新的「默認」選項的情況下,就把:

CurrentDb.Execute "UPDATE tblTest SET ProductID = " & Me.ProductComboBox & " WHERE CategoryID = " & Me.Category 

這假定「tblTest」已經有每個類別的記錄。如果沒有,您可以生成一些檢查並將該類別插入表中。

+0

將If語句添加到On Change事件中,謝謝。 – jjjjjjjjjjj