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 :

Problème avec une collection qui se vide toute seule


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut Problème avec une collection qui se vide toute seule
    Bonjour,

    J'ai un problème qui me bloque depuis quelques heures. Mon application est développé avec des objets et je dois instancier une collection d'objets à partir de ma bdd. Le soucis c'est qu'aucun message d'erreur ne s'affiche alors que la collection n'est pas correctement instanciée : l'objet (qui lui s'est correctement créé) s'y ajoute bien mais disparait tout de suite après (je suis dans une boucle if quand j'ajoute l'objet dans la collection et j'ai testé; l'objet s'ajoute dans la collection mais dès qu'on sort de cette boucle la collection redevient vide c'est à devenir chèvre )...

    Concernant mon code je l'ai vérifié et revérifier il est bon la collection est bien déclarée etc d'ailleurs ce n'est pas la 1ère collection que je gère dans cette application et les autres fonctionnent très bien donc si quelqu'un avait une idée ou une piste pour savoir d'où cela peut venir... Je ne peut pas vous mettre mon code surtout que c'est de l'objet donc ce serait très long et difficile à comprendre sans avoir la totalité de l'appli sous les yeux.

    Donc voilà je lance un grand appel à l'aide j'ai déjà contacté tous mes potes et même mon prof ne peut pas m'aider, je dois présenter ce programme lundi pour un exam donc ce serait cool que quelqu'un sache un peu m'aiguiller ^^

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si tu ne peux pas donner de code tu admettras qu'il est très difficile de pouvoir te donner une réponse en l'état

    Si tu ne vides pas la liste explicitement, pourrais-tu comparer la valeur retournée par la méthode GetHashCode de ta liste lorsqu'elle est bien remplie et ensuite lorsqu'elle ne l'est plus ? Histoire de voir s'il s'agit bien de la même liste dans les deux cas.
    Pas de questions techniques par MP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Je ne connais pas cette méthode mais j'ai essayer de l'afficher dans une msgbox qui m'a affiché une série de 8 chiffres différents entre le moment où la collection est remplie et le moment ou elle est vide. C'était bien ça qu'il fallait faire?? (code : msgbox(laParcelle.getLesTraitements().GetHashCode()) où laParcelle est mon objet parcelle qui contient la fameuse collection de traitements)

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si la valeur est différente alors c'est que ton objet, la liste en l'occurrence, n'est pas le même. Reste à trouver pourquoi tu n'as pas les mêmes listes.
    En tout cas ça pourrait expliquer pourquoi tu rencontres ce problème de liste vide, mais sans code difficile d'affirmer quelque chose
    Pas de questions techniques par MP

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Je me demande comment c'est possible et d'où le problème peut venir!! Bon c'est bon je lâche mon code en essayant de faire que ce soit clair...

    Ma procédure qui charge les traitements depuis ma bdd et les ajoute dans ma collection :
    (à savoir que TraitementPhytosanitaires est une classe qui a pour classes dérivées TraitementEnChamp et TraitementSemence d'où le if pour savoir de quel type est le traitement...)

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     Public Sub chargerTraitements()
            Try
                ' Charge tous les objets traitements et les ajoute à la collection de traitements dans Passerelle
                texteReq = "SELECT * FROM traitement"
                ouvrirConnexion()
     
                maDT.Clear()
                maCom.Connection = connexion
                maCom.CommandText = texteReq
                monDA.SelectCommand = maCom
                monDA.Fill(maDT)
     
                Dim données As MySqlDataReader
                données = maCom.ExecuteReader
     
                While données.Read
                    If données("typeTraitement") = "s" Then
                        Dim dosageTraitementSemence As Integer = données("dosageTraitementSemence")
                        Dim laParcelle As New Parcelle
                        laParcelle = getParcelle(données("idParcelle"))
     
                        Dim leTraitementS As TraitementSemence = New TraitementSemence(données("idTraitement"), données("typeTraitement").ToString(), laParcelle, dosageTraitementSemence)
                        laParcelle.getLesTraitementsPhytosanitaires().Add(leTraitementS)
                    Else
                        Dim datePulv As Date = données("datePulv")
                        Dim dosagePulv As Integer = données("dosagePulv")
                        Dim laParcelle As New Parcelle
                        laParcelle = getParcelle(données("idParcelle"))
     
                        Dim leTraitementC As TraitementEnChamp = New TraitementEnChamp(données("idTraitement"), données("typeTraitement").ToString(), laParcelle, dosagePulv, datePulv)
                        laParcelle.getLesTraitementsPhytosanitaires().Add(leTraitementC)
     
                    End If
                End While
    Le début de ma classe passerelle qui contient la collection de traitements :

    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
    Public Class Parcelle
     
        Private id As Integer
        Private dateSemis As Date
        Private dateRécoltePrévue As Date
        Private surface As Double
        Private lesTraitementsPhytosanitaires As Collection
     
        Public Sub New(ByVal lId As String, ByVal uneDateSemis As Date, ByVal uneDateRécoltePrévue As Date, ByVal uneSurface As Double)
            id = lId
            dateSemis = uneDateSemis
            dateRécoltePrévue = uneDateRécoltePrévue
            surface = uneSurface
            lesTraitementsPhytosanitaires = New Collection
        End Sub
     
     Public Function getLesTraitementsPhytosanitaires() As Collection
            Return lesTraitementsPhytosanitaires
        End Function
    Si vous avez besoin d'autres bouts de codes ou que j'explique certains trucs dites moi...

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Tu pourrais regarder le hashcode de l'objet Parcelle utilisé pour récupérer la liste ? Histoire de voir si c'est le même code lorsque ça fonctionne et que cela ne fonctionne plus.
    Pas de questions techniques par MP

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    C'est encore des chiffres différents...

  8. #8
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Tu fais quoi dans getParcelle ?
    Pas de questions techniques par MP

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Lol justement c'est ce que je regardais... je récupère une parcelle dans la bdd par rapport à son id passé en paramètre, et je créé un nouvel objet parcelle que je retourne.

  10. #10
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par elaene Voir le message
    ... et je créé un nouvel objet parcelle que je retourne.
    Il faut que tu les gardes de côté si tu les as déjà récupérés en base, pas que tu les recrées. Normal que ta liste soit vide à ce moment
    Pas de questions techniques par MP

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Oki donc dans mon getParcelle, au lieux de récupéré les parcelles dans la bdd faut que je les récupère dans ma collection de parcelles? parce que je m'en sert pas mal de cette fonction ^^
    Ah franchement si c'est ça le problème je te suis redevable à mort!!!

  12. #12
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Oui. Après à voir si cela s'intègre bien à ton système.

    Le plus simple serait d'utiliser un dictionnaire avec comme clé l'identifiant de la parcelle et comme valeur l'objet parcelle. Dans ta méthode getParcelle tu commences par regarder si tu retrouves l'identifiant dans le dictionnaire. Si oui alors tu renvoies l'objet associé sinon, tu le récupères en base et tu l'ajoutes alors au dictionnaire avant de le retourner.

    A la fin, toutes tes parcelles seront dans le dictionnaire et tes listes devraient être bien remplies
    Pas de questions techniques par MP

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Ouais ça j'y avais pas pensé, en fait c'est une application tirée d'une étude de cas où ils utilisent pas de dico donc voilà quoi... si j'ai le temps d'ici mon exam je l'intègrerais. J'ai quand même réussit à faire fonctionner mon getParcelle avec ma collection de parcelles et ça marche!!! bon à voir si ça me créé pas d'autres bugs à d'autres endroits mais normalement non ^^
    Un grand merci à toi en tout cas, une aide rapide et efficace c'est tout ce dont j'avais besoin

  14. #14
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    N'oublie pas de cliquer sur le bouton alors
    Pas de questions techniques par MP

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/04/2013, 18h10
  2. Réponses: 5
    Dernier message: 29/05/2008, 11h05
  3. Problème avec une fonction qui supprime un dossier
    Par Mo_Poly dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2008, 19h39
  4. Réponses: 15
    Dernier message: 31/01/2007, 23h03
  5. Réponses: 6
    Dernier message: 04/09/2006, 16h48

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