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 :
Le problème survient avec ListFeatures : j'ai tenté de la remplir en procédant comme ListRules :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
-> 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 !
Partager