alexandreillusion
Messages postés37Date d'inscriptionlundi 7 juillet 2008StatutMembreDernière intervention14 mars 2011
-
21 nov. 2008 à 22:41
alexandreillusion
Messages postés37Date d'inscriptionlundi 7 juillet 2008StatutMembreDernière intervention14 mars 2011
-
22 nov. 2008 à 15:30
bonjours a toutes et a tous,
je suis en train de créer un programme de GMAO et dans une fenetre il y a deux listbox et deux radio box.
les radio box permettent de choisir les données que j'insère dans ma première list box a travers un datareader.
la seconde liste box se remplis lors du chois d'un item dans la première listbox qui fait office de filtre en quelque sorte.
mon problème est que lorsque lle programme cherche a remplir la seconde listbox, il me dit qu'un datareader associé à cette commande est déjà ouvert. Il doit d'abord être fermé. ce data reader et cette commande a été ouverte dans l'import des données dans la premiere list box (executer a traver la radiobox). seulement je pense bien avoir fermé cedatareader au bon moment. aurais-je oublier quelque chose mais quoi?
voici le bout de code:
d'abord pour remplir la premiere listbox:
Private Sub rbApprovisionnement_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles rbApprovisionnement.Click
Dim strConn As String 'déclare la connection et la requete sous string
Dim i As Integer 'declare le compteur pour l'incrémentation pour afficher l'enregistrement suivant dans le combo box
Dim a As String 'declare le string pour comparaison des deux requete ancienne et nouvelle (voir plus loin)
strConn = "provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=./base pour GMAO.mdb;" 'met les carac dans la var string
Dim connaccess As New OleDb.OleDbConnection(strConn) 'declare la connection la connection
connaccess.Open() 'execute la connection
'insertion des piece dans la listbox
Dim macommande As OleDbCommand = connaccess.CreateCommand
macommande.CommandText = "SELECT pièces FROM pièces"
Dim myreader As OleDbDataReader = macommande.ExecuteReader
Do While myreader.Read
If (myreader.GetValue(0)) Is DBNull.Value Then GoTo nex
If (myreader.GetValue(0)) = a Then
GoTo nex
Else
cbPieceApproConso.Items.Add(myreader.GetValue(0))
End If
a = myreader.GetValue(0)
nex:
Loop
myreader.Close() 'la ou je ferme mon sacré datareader ...
connaccess.Close()
End Sub
et pour remplir la seconde listbox:
Private Sub cbPieceApproConso_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbPieceApproConso.SelectedIndexChanged
Dim strConn, piece As String 'déclare la connection et la requete sous string
cbLibelleApproConso.Items.Clear() 'vide la liste pour éviter d'ajout lors de selection
strConn = "provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=./base pour GMAO.mdb;" 'met les carac dans la var string
Dim connaccess As New OleDb.OleDbConnection(strConn) 'declare la connection la connection
connaccess.Open() 'execute la connection
piece = cbPieceApproConso.Text 'affecte la combobox piece à la var piece
Dim macommande1 As OleDbCommand = connaccess.CreateCommand
macommande1.CommandText = "SELECT Libellé FROM base_liste_pièces WHERE pièces='" & piece & "'"
Dim myreader1 As OleDbDataReader = macommande1.ExecuteReader
Do While myreader1.Read
cbLibelleApproConso.Items.Add(macommande1.ExecuteReader(0)) 'là ou il me dit que le data est encore ouvert et qui ne doit pas l'être
Loop
myreader1.Close()
connaccess.Close()
End Sub
merci pour le temps que vous consacrerez pour que je puisse m'en sortir.
magicalement, a bientot?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 21 nov. 2008 à 23:15
Autant tu l'as bien fait dans la première fonction, autant tu le fais mal dans la seconde et tu ne vois pas le problème alors que les code sont quasiment identique.
.......
Else
cbPieceApproConso.Items.Add(myreader.GetValue(0))
End If
.......
Do While myreader1.Read
alexandreillusion
Messages postés37Date d'inscriptionlundi 7 juillet 2008StatutMembreDernière intervention14 mars 2011 22 nov. 2008 à 15:30
je vous remercie casy pour la précieuse aide que vous m'avez apportée. La prochaine fois, je ferais plus attention et pourtant je l'ai relu ce code plus d'une fois ....
merci encore et bonne continuation.