Problème d'affichage en cascade de données de tables Access
Bonjour,
Voici l'état actuel de mon projet d'utilisation de BD Access via VB.NEt :
Je dispose à présent de 3 tables Access :
- Manufacturing (N°,Manufacturing_Name)
- Rules (N°,Manufacturing_Name,Rule_Name)
- Features (N°,Rule_Name,Feature_Name)
avec les contraintes d'intégrité référentielles suivantes :
- 1 Manufacturing.Manufacturing_Name - Plusieurs Rules.Manufacturing_Name
- 1 Rules.Rule_Name - Plusieurs Features.Rule_Name
que je souhaite lier à 3 ListBox :
- ListManufacturing
- ListRules
- ListFeatures
Pour ListManufacturing, aucun problème, au chargement de la base, je parvient à la remplir.
Ensuite, à la sélection d'un item de ListManufacturing, je parviens à mettre à jour les items de ListRules avec le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Private Sub ListManufacturing_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListManufacturing.SelectedIndexChanged
'le DataReader permet une lecture la plus rapide mais en lecture seul
Me.ListRules.Items.Clear()
'Me.ListRules.Text = "Select the Rule..."
'Me.ListFeatures.Text = "Select the Feature..."
Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data source=H:\TX\[TX] IHM\Reverse_Engineering_Application.NET\Test.accdb")
Dim MyCommand As OleDbCommand = MyConnexion.CreateCommand()
MyCommand.CommandText = "SELECT Rules.Rule_Name FROM Rules WHERE Rules.Manufacturing_Name ='" & Me.ListManufacturing.SelectedItem & "';"
MyConnexion.Open()
'ajout des résultats de la requête dans ListRules
Dim MyReader As OleDbDataReader = MyCommand.ExecuteReader()
Do While MyReader.Read()
Me.ListRules.Items.Add(MyReader.GetString(0))
Loop
'fermeture du monopole de lecture
MyReader.Close()
MyConnexion.Close()
'fermeture dès la fin de la lecture
'Dim myReader As OleDbDataReader = Mycommand.ExecuteReader(CommandBehavior.CloseConnection)
End Sub |
Le problème survient avec ListFeatures : j'ai tenté de la remplir en procédant comme ListRules :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Private Sub ListRules_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListManufacturing.SelectedIndexChanged
'le DataReader permet une lecture la plus rapide mais en lecture seul
Me.ListFeatures.Items.Clear()
'Me.ListFeatures.Text = "Select the Feature..."
Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data source=H:\TX\[TX] IHM\Reverse_Engineering_Application.NET\Test.accdb")
Dim MyCommand As OleDbCommand = MyConnexion.CreateCommand()
MyCommand.CommandText = "SELECT Features.Feature_Name FROM Features,Rules WHERE Features.Rule_Name = Rules.Rule_Name AND Rules.Manufacturing_Name ='" & Me.ListManufacturing.SelectedItem & "' AND Features.Rule_Name ='" & Me.ListRules.SelectedItem & "';"
MyConnexion.Open()
'ajout des résultats de la requête dans ListFeatures
Dim MyReader As OleDbDataReader = MyCommand.ExecuteReader()
Do While MyReader.Read()
Me.ListFeatures.Items.Add(MyReader.GetString(0))
Loop
'fermeture du monopole de lecture
MyReader.Close()
MyConnexion.Close()
'fermeture dès la fin de la lecture
'Dim myReader As OleDbDataReader = Mycommand.ExecuteReader(CommandBehavior.CloseConnection)
End Sub |
mais rien n'y fait, je dois sélectionner à nouveau l'item sélectionné au tout début de ListManufacturing (la première ListBox) pour que le contenu de ListFeatures apparaisse. :evilred:
-> Quelqu'un a une idée de la source du problème ?
(je soupçonne ma requête SQL ou peut-être qu'il s'agit de l'évènement déclencheur...)
-> Par ailleurs, est-il possible de ne pas avoir à me reconnecter à la base comme je le fais à chaque fois, c'est-à-dire de garder la connexion ?
Merci beaucoup et bonne journée à tous ! ;)