1 votes

boîte combo en cascade provoquant des champs vides dans l'enregistrement suivant

J'ai des problèmes avec une boîte combo en cascade. Tout fonctionne bien avec les boîtes combo et les valeurs sont remplies correctement.

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 boîte combo 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 très bien pour passer d'un enregistrement à l'autre et les cases affichent les champs corrects pour chaque enregistrement.

Lorsque j'utilise la première liste déroulante, puis que je sélectionne l'option appropriée dans la deuxième liste déroulante, tout fonctionne parfaitement sur l'enregistrement en question.

Cependant, lorsque je passe à l'enregistrement suivant, les valeurs de la deuxième boîte combo sont toutes vides. Si je ferme le formulaire et le rouvre, et que j'évite d'utiliser les boîtes combo en cascade, toutes les valeurs sont correctes lorsque je passe d'un enregistrement à l'autre.

L'utilisation de boîtes combo en cascade crée un conflit avec la source de ligne de la boîte combo secondaire.

J'espère que c'est clair ! J'ai cherché une réponse mais je n'ai rien trouvé.

toute aide serait grandement appréciée.

Merci

Noel

0voto

David-W-Fenton Points 16613

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

Pour résoudre ce problème, vous devez supprimer le filtre de la deuxième boîte combo. Pour ce faire, dans l'événement OnCurrent de votre formulaire, définissez la rowsource de la boîte combo filtrée comme étant 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 gère généralement cette situation en créant deux constantes en haut du module du formulaire, une pour l'instruction SELECT et une pour l'instruction ORDER BY :

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

Alors c'est beaucoup plus facile à gérer. Dans le OnCurrent, ça ressemble à ça :

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

...et dans le AfterUpdate de votre première boîte combo :

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

T

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X