2010-04-01 7 views
1

Je rencontre des problèmes avec une zone de liste déroulante en cascade. Tout fonctionne correctement avec les zones de liste déroulante et les valeurs sont correctement renseignées.Zone de liste déroulante en cascade entraînant des champs vides dans le prochain enregistrement

Private Sub cmbAdjComp_AfterUpdate() 
Me.cboAdjOff.RowSource = "SELECT AdjusterCompanyOffice.ID, 
AdjusterCompanyOffice.Address1, 
AdjusterCompanyOffice.Address2, 
AdjusterCompanyOffice.Address3, 
AdjusterCompanyOffice.Address4, 
AdjusterCompanyOffice.Address5 FROM" & _ 
" AdjusterCompanyOffice WHERE 
AdjusterCompanyOffice.AdjCompID = " & Me.cmbAdjComp.Column(1) & _ 
" ORDER BY AdjusterCompanyOffice.Address1" 
Me.cboAdjOff = Me.cboAdjOff.ItemData(0) 
End Sub 

La zone de liste déroulante secondaire a une requête de source de ligne:

SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1,  
AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3, 
AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM 
AdjusterCompanyOffice ORDER BY AdjusterCompanyOffice.Address1; 

Les deux comboboxes ont le même controlsource. Tout fonctionne bien et dandy se déplace entre les enregistrements et les cases affichent les champs corrects pour chaque enregistrement. Lorsque j'utilise la première zone de liste déroulante, puis sélectionnez l'option appropriée dans la deuxième zone de liste déroulante, tout fonctionne parfaitement sur l'enregistrement spécifique. Cependant, lorsque je passe à l'enregistrement suivant, les valeurs de la deuxième zone de liste déroulante sont toutes vides. Si je ferme le formulaire et le rouvre, et que j'évite d'utiliser les listes déroulantes en cascade, toutes les valeurs sont correctes lorsque je me déplace entre les enregistrements. D'une manière ou d'une autre, l'utilisation des zones de liste déroulante en cascade crée un conflit avec la source de ligne de la zone de liste déroulante secondaire.

Espérons que c'est clair! J'ai fouillé autour pour une réponse mais ne peux rien trouver.

toute aide serait grandement appréciée.

Merci

Noel

+0

Etes-vous sûr que les deux zones de liste déroulante sont liées au même ControlSource? Cela n'a vraiment aucun sens. –

+0

Salut David, j'avais les deux combos utilisant la même source de contrôle. À l'époque au sens logique! Maintenant, avec plus de compréhension, je pouvais voir où je me trompais. – noelmcg

Répondre

0

La raison pour laquelle la zone de liste déroulante est vide lorsque vous accédez à l'enregistrement suivant est parce que vous avez NotInList réglé sur TRUE (qui est ce que vous voulez), mais quand vous arrivez l'enregistrement, la source de lignes a été filtrée pour ne pas inclure la valeur stockée dans le champ auquel la zone de liste déroulante est liée. Ainsi, il est vide - la valeur est là, mais elle ne peut pas être affichée, car elle n'est pas dans la liste.

Pour résoudre ce problème, vous devez effacer le filtre de la deuxième zone de liste déroulante. Pour ce faire, en cas OnCurrent de votre formulaire, définissez la rowsource de la zone de liste déroulante filtrée pour être non filtrée:

Me!cboAdjOff.RowSource = "SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1, AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3, AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM AdjusterCompanyOffice ORDER BY AdjusterCompanyOffice.Address1" 

Je poignée généralement en créant deux constantes dans la partie supérieure du module de la forme, l'un pour la SELECT instruction et un pour le ORDER BY:

cstrRecordsourceSelect = "SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1, AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3, AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM AdjusterCompanyOffice" 
    cstrRecordsourceOrderBy = "ORDER BY AdjusterCompanyOffice.Address1" 

Ensuite, c'est beaucoup plus facile à gérer. Dans le OnCurrent il ressemble à ceci:

Me!cboAdjOff.RowSource = cstrRecordsourceSelect & " " & cstrRecordsourceSelect 

... et dans la AprèsMAJ de votre première zone de liste déroulante:

Me!cboAdjOff.RowSource = cstrRecordsourceSelect & _ 
    "WHERE AdjusterCompanyOffice.AdjCompID = " & Me!cmbAdjComp.Column(1) & _ 
    " " & cstrRecordsourceSelect 

Cela rend le code plus facile à lire, et il est également plus facile de modifiez la rowsource si vous en avez besoin, car vous ne devez éditer que la constante.

+0

Salut David, c'est exactement ce que j'essayais de comprendre. Je ne pensais pas que cela exigerait autant d'efforts, pour ainsi dire, mais avec votre aide, je l'ai fait fonctionner. Merci beaucoup d'avoir pris le temps de répondre, grandement apprécié. Noel – noelmcg

Questions connexes