IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Fermeture d'un DataReader !


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 91
    Par défaut Fermeture d'un DataReader !
    Bonjouur,

    J'ai un problème avec mon combobox.
    Je vous explique !

    J'ai un formulaire qui contient une liste (listbox1), un combobox1 ..

    La listbox1 contient le numéro des bons de livraison ..
    Quand je clique dessus j'ai le numéro de la commande (liée a ce bon de livraison) sur le combobox1 & automatiquement j'obtient la date de la commande & le numéro du fournisseur (puisque j'ai l'id commande).

    Coté BD j'ai la table commande qui contient: l'id commande, la date de la commande, l'id fournisseur & qui est liée a la table BL qui contient: l'IDBL, la date du BL ainsi que l'IDcommande.. (je sais pas si ça vas vous être util ça !! mais pour comprendre un peu mes requetes ^^)

    Coté développement
    Mon code est le suivant:

    Quand je clic sur la listbox1 cad dans l'événement MouseDoubleClick j'ai mis le code suivant afin d'extraire le numéro de la commande que j'ai selectionné (qui est IDcommande lié au BL que j'ai cliqué dessus):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           com.CommandText = "select IDcommande from BL where IDBL = '" & ListBox1.SelectedItem & "'"
            dtr = com.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                ComboBox1.Text = dtr(0)
            End If
            dtr.Close()
    Et sur l'événement Textchanged du combobox1, j'ai mis le code qui me permet d'afficher automatiquement (a partir du changement du combobox) la date de la commande & le numéro du fournisseur. Ce qui donne:


    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
     com.Connection = Cnx
            com.CommandText = "select DateCommande from Commandes where IDcommande = '" & ComboBox1.Text & "'"
            dtr = com.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                Label11.Text = dtr(0)
            End If
            dtr.Close()
     
            com.Connection = Cnx
            com.CommandText = "select IDfournisseur from Commandes where IDcommande = '" & ComboBox1.Text & "'"
            dtr = com.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                Label22.Text = dtr(0)
            End If
            dtr.Close()
    Jusque là je pense que tout est clair.

    Maintenant, quand je veux ajouter un bon de livraison je lui associe une commande à partiir du combobox1. Ce dernier contient tous les numéros de la commande. Suivant ce code: (dans l'événement Load)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Cnx.Open()
                com.Connection = Cnx
                com.CommandText = "select IDcommande from Commandes"
                dtr = com.ExecuteReader
                If dtr.HasRows = True Then
                    While dtr.Read = True
                        ComboBox1.Items.Add(dtr(0))
                    End While
                End If
                dtr.Close()

    Mon problème se pose ici. Quand je séléctionne une valeur du combobox1, je suis cencé avoir la date & le nom du fournisseur.Mais puisque ce combobox1 est déjà utilisé dans l'événement Load je pense (enfin c'est ce que j'ai pu tiré comme remarque) j'obtient l'erreur suivante:


    Un DataReader associé à cette commande est déjà ouvert. Il doit d'abord être fermé.

    Je sais pas si quelqu'un pourra m'aider pour résoudre ce problème !!

    Mercii d'avance !

  2. #2
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Je ne voi pas trop ou le problème peut venir mais une chose est sur ton code est un peu brouillons

    Citation Envoyé par zouzou_18 Voir le message

    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
     com.Connection = Cnx
            com.CommandText = "select DateCommande from Commandes where IDcommande = '" & ComboBox1.Text & "'"
            dtr = com.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                Label11.Text = dtr(0)
            End If
            dtr.Close()
     
            com.Connection = Cnx
            com.CommandText = "select IDfournisseur from Commandes where IDcommande = '" & ComboBox1.Text & "'"
            dtr = com.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                Label22.Text = dtr(0)
            End If
            dtr.Close()
    au lieu de faire deux requêtes pour remplir les labels une seule est suffisante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     com.Connection = Cnx
            com.CommandText = "select DateCommande, IDfournisseur from Commandes where IDcommande = '" & ComboBox1.Text & "'"
            dtr = com.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                Label11.Text = dtr(0)
                Label22.Text = dtr(1)
            End If
            dtr.Close()
    Citation Envoyé par zouzou_18 Voir le message
    Quand je clic sur la listbox1 cad dans l'événement MouseDoubleClick j'ai mis le code suivant afin d'extraire le numéro de la commande que j'ai selectionné (qui est IDcommande lié au BL que j'ai cliqué dessus):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
           com.CommandText = "select IDcommande from BL where IDBL = '" & ListBox1.SelectedItem & "'"
            dtr = com.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                ComboBox1.Text = dtr(0)
            End If
            dtr.Close()
    A ce niveau le fait que tu modifie la propriété text du combobox sa execute le code de l'evenement TextChange hors le Reader n'est pas encore fermer tu pourrais procéder comme suit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    dim Idcommand as string
    com.CommandText = "select IDcommande from BL where IDBL = '" & ListBox1.SelectedItem & "'"
            dtr = com.ExecuteReader
            If dtr.HasRows = True Then
                dtr.Read()
                Idcommand = dtr(0)
            End If
            dtr.Close()
      ComboBox1.Text = idcommand
    Rectifie d'abord ces points avant de voir si le problème persiste.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 91
    Par défaut
    ça marche à merveiiille
    Merciii beaucoup !!

    Par contre, j'obtient un avertissement sur la dernière ligne du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.Text = Idcommand
    Disant que:

    La variable Idcommande est utilisée avant qu'une valeur ne lui ait été assignée. Une exception de référence null peut se produire au moment de l'exécution.
    Est-ce-grave ?!

  4. #4
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Oui faut initialiser cette variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim Idcommand as string = ""
    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 91
    Par défaut
    Okey !
    Mercii beaucoup !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de fermeture de DataReader
    Par sihammaster dans le forum Accès aux données
    Réponses: 1
    Dernier message: 04/03/2013, 17h09
  2. DataReader et fermeture Connection
    Par PatStan17 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 10/12/2009, 09h25
  3. Réponses: 0
    Dernier message: 30/08/2008, 04h18
  4. [VB6] [MDI] Signaler la fermeture d'une fille à la mère
    Par cpri1shoot dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2004, 08h57
  5. Resau local => ouverture et fermeture
    Par Nutcase dans le forum Développement
    Réponses: 8
    Dernier message: 17/11/2002, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo