Frage

Ich habe Probleme auf meiner Form die Zeile Quelle eines bestimmten Kombinationsfeld-Einstellung (als kontinuierliche Form angesehen, obwohl ich scheine auch einige Probleme in Single-Form-Modus).

Die Combo-Box wird auf einem Feld namens supplierID gebunden und soll dem Anwender eine Liste aller möglichen Lieferanten für einen Artikel präsentieren. Die Zeilenquelle I für die Combo-Box verwende ist:

SELECT DISTINCT Suppliers.name, Suppliers.supplierID
FROM Suppliers
INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID 
WHERE PartsSuppliers.partID = partID;

Wenn ich diese Abfrage in dem Abfrage-Designer sehen (mit einem partid hartcodiert), es funktioniert gut - es werden alle möglichen Lieferanten für das gewählte Element auswählt, und zeigt keine andere Gegenstände. Aber wenn ich die Elemente in der Combo-Box aussehen, zeigt es alle die Lieferanten in der PartsSuppliers Tabelle (die nur zwei Spalten hat, die Abbildung der Teile zu den möglichen Lieferanten für sie).

Ich habe auch versucht die Combo-Box RowSource zu setzen einige VBA im OnFocus Ereignis mit (den partid Wert in hartzucodieren), aber es scheint nie die RowSource zu ändern. Der VBA-Code Ich verwende ist:

Private Sub supplierID_GotFocus()
    Dim query As String

    query = "SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID "
    query = query & "FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID "
    query = query & "WHERE (((PartsSuppliers.partID)=" & partID & "));"

    supplierDropDown.RowSource = query
    supplierDropDown.Requery
End Sub

Ich habe auch versucht die Abfrage in einem RecordSet öffnen und dann Einstellung mit, dass RecordSet als die RecordSet der Combo-Box, aber das hat nicht funktioniert entweder.

Was mache ich falsch, oder gibt es eine andere Art und Weise, die ich bei suchen sollte nach unten den richtigen Tropfen zu machen?

N. B. Ich habe Benutzerdefinierte Zeilenquelle für Kombinationsfeld gesehen in Endlosformular in Access , aber die akzeptierten Lösung auch nicht für mich arbeiten.

War es hilfreich?

Lösung

Mit den OnEnter und OnExit Ereignissen Ihre RowSource heraus ändern.

Private Sub supplierID_Enter()
    supplierDropDown.RowSource = _
        "SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID " & _
        "FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID " & _
        "WHERE PartsSuppliers.partID = " & partID & ";"
End Sub

Private Sub supplierID_Exit()
    supplierDropDown.RowSource = _
        "SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID " & _
        "FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID;"
End Sub

Andere Tipps

Ich habe zu kämpfen mit, wie die ‚Leerstellen‘ zu vermeiden hinter in einem Datenblatt links einmal Combo Elemente beschränkt sind und keine straight forward Option für eine lange Zeit .... bis jetzt!

finden konnten,

alle verfügbaren Optionen in der Combo-Box verlassen, sondern eine temporäre Gültigkeitsregel hinzufügen, mit OnCurrent, funktioniert der Trick perfekt.

Hoffnung, dies jemand hämmert auf dem Schreibtisch den Kopf verhindert, so lange wie ich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top