2016-04-21 9 views
1

Ich habe zwei abhängige Kombinationsfelder in einem Formular erstellt. Wenn Sie in der ersten Box eine Category auswählen, wird die Liste der verfügbaren Products in der zweiten gefiltert. Ich habe die Category-Product-Auswahlen in einer Tabelle mit dem Namen Test gespeichert, wobei Kategorien jeweils eine Zeile erhalten.Requery-Kombinationsfelder in Access 2013

Was ich tun möchte, ist, das Produkt in der Produkt-Kombinationsfeld anzuzeigen, wenn Sie eine Kategorie bereits in Test auswählen. Wenn Sie beispielsweise Kategorie = Gewürze und Produkt = Ketchup im Formular auswählen, wird es Test hinzugefügt. Wenn Sie dann das nächste Mal Kategorie = Gewürze im Formular auswählen, zeigt das Kombinationsfeld Produkte (das Feld, in das Sie eingeben, nicht das Dropdown) sofort Ketchup an. Das scheint nur zu funktionieren, wenn ich eine Zeile in Test habe. Wenn ich weitere Zeilen hinzufüge, wird ProductComboBox nicht geändert.

Hier ist, wie mein Formular aufgebaut ist.

Im RowSource für CategoryComboBox ich alles wählen

Select * From CategoryTable 

Im RowSource für ProductComboBox, I Produkte filtern basierend auf der

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

Die Form Quelle ausgewählt Kategorie ist es, Produkte Kategorie verbunden links auf KategorieID.

Im On Change-Ereignisse für CategoryComboBox und die On Current-Ereignis für das Formular requery ich die ProductComboBox

ProductComboBox.Requery 

jedoch nur mit ProductComboBox.Requery die verfügbaren Optionen in der Dropdown-Liste erneut abfragt. Nach Auswahl einer Kategorie, aber vor der Auswahl eines Produkts ändert sich der Wert des aktuellen Kombinationsfelds nicht. Wie wiederhole ich Daten aus der Tabelle, die mit der ControlSource verknüpft ist? Gibt es eine bessere VBA-Funktion als Requery oder muss ich SQL in einem Makro verwenden?

+0

Beachten Sie, dass ich weiterhin die Möglichkeit zur Eingabe von Daten über die Dropdown-Box benötigen. – jjjjjjjjjjj

Antwort

1

Im OnChange-Ereignis des ersten Combobox, gehen Sie wie folgt vor:

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 

dann auf Ihre Test-Tabelle zu aktualisieren, im Falle, wo Sie aktualisieren möchten, die „Standard“ Option setzen:

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

Dies setzt voraus, dass "tblTest" bereits einen Datensatz für jede Kategorie enthält. Wenn nicht, können Sie einige Prüfungen generieren und die Kategorie in die Tabelle einfügen.

+0

Das Hinzufügen der If-Anweisung zum Ereignis On Change hat funktioniert, danke. – jjjjjjjjjjj