Question

Je ne parviens pas à régler la source de ligne d'une certaine zone de liste déroulante sur mon formulaire (considéré comme une forme continue, bien que je semble aussi avoir des problèmes en mode forme unique).

Le combo-box est lié à un champ appelé supplierID, et vise à présenter à l'utilisateur une liste de tous les fournisseurs possibles pour un élément. La ligne source J'utilise pour la zone de liste déroulante est:

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

Quand je regarde cette requête dans le concepteur de requêtes (avec un PARTID codé en dur), il fonctionne très bien - il sélectionne tous les fournisseurs possibles pour l'élément choisi, et ne montre pas d'autres éléments. Mais quand je regarde les articles dans la liste déroulante, il montre tous les fournisseurs présents dans le tableau de PartsSuppliers (qui a seulement deux colonnes, la cartographie des parties aux fournisseurs possibles pour eux).

J'ai aussi essayé de régler la RowSource de combo-box en utilisant une VBA en cas OnFocus (hardcoding la valeur PARTID in), mais il ne semble jamais changer RowSource. Le code VBA J'utilise est:

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

J'ai aussi essayé d'ouvrir cette requête dans un RecordSet, puis en utilisant la mise en RecordSet comme ce Recordset de combo-box, mais cela ne fonctionne pas non plus.

Qu'est-ce que je fais mal, ou est-il d'une autre façon que je devrais regarder pour faire tomber correcte vers le bas?

N.B.. Je l'ai vu source de ligne personnalisée pour zone de liste déroulante forme continue dans Access , mais cette solution acceptée ne fonctionnait pas pour moi non plus.

Était-ce utile?

La solution

Les événements OnEnter et OnExit changer votre RowSource.

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

Autres conseils

J'ai été aux prises avec la façon d'éviter les « blancs » laissés dans une feuille de données une fois les éléments Combo sont limités et ne pouvaient trouver aucune option avant droit depuis longtemps .... jusqu'à maintenant!

Laissant toutes les options disponibles dans la zone de liste déroulante, mais en ajoutant une règle de validation temporaire, en utilisant OnCurrent, fait parfaitement l'affaire.

En espérant cela empêche quelqu'un se cogner la tête sur le bureau aussi longtemps que moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top