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 collection VB NET


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Par défaut Problème collection VB NET
    Bonjour tout le monde,

    Je suis actuellement bloqué sur un projet en VB.NET que l'on dit faire pour l'école.

    Le projet en quelques mots : Gestion de stocks d'une pharmacie.

    Mon problème : Je dois afficher les stocks disponibles dans un datagridview, on a la possibilité d'envoyer un lot de médicament à une personne. Une fenêtre s'affiche alors avec le choix de l'ID du lot, le visiteur et la date (récupération de l'id et du nom du visiteur dans la bdd)

    Mais j'aimerai supprimer le lot de ma collection (la modification sur la BDD marche bien) :
    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
    Public Sub SupprimeLot(ByVal unId As String, ByVal unVisiteur As String, ByVal laDate As Date)
     
     
            Dim laDateOffre As Date = Now
     
            'Modification
            sqlcom = "UPDATE lot_medicament SET LOT_DATEOFFRE = '" & laDateOffre & "' WHERE LOT_ID = '" & unId & "' "
            Me.openbdd()
            Dim cmd As New MySqlCommand(sqlcom, connexionSql)
            cmd.ExecuteNonQuery()
            MsgBox("Modification effectuée.")
     
            'Suppression dans la collection
            Me.mesLots.RemoveAt(Me.rechercheLot(unId))
     
            sqldr.Close()
        End Sub
    j'utilise une fonction qui renvoie l'indice correspondant à l'id dans la collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function rechercheLot(ByVal unId As String) As Integer
            Return Me.mesLots.FindIndex(Function(unLot As Lot)
                                            Return unLot.Lot_Id = unId
                                        End Function)
        End Function
    Lorsque j'exécute le programme, il fais les modifications mais me met une erreur pour la suppression dans la collection :

    L'exception ArgumentOutOfRangeException n'a pas été gérée, l'index était hors limites.


    Il trouve bien l'Id mais n'affiche rien dans la collection

    Et je bloque sur cette erreur depuis un bon moment, si quelqu'un peut m'apporter une solution je suis preneur

    Merci !

  2. #2
    Membre éclairé
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Par défaut
    salut,

    ton approche n'est pas mauvaise mais un conseil évite déjà de passer ta fonction rechercheLot en paramètre de la fonction removeAt.
    Si ton élément n'est pas trouvé, ta fonction va te retourner -1 et tu auras cette fameuse erreur.
    Commence par stockée le résultat de ta fonction dans une variable et test si l'index retourné est bien compris dans les bornes d'index de ta collection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dim index as integer = Me.rechercheLot(unId)
    if index >=0 and index < Me.mesLots.count then Me.mesLots.RemoveAt(index)
    essaie déjà avec ce bout de code et voit en pas à pas si tu passes dans le removeAt

  3. #3
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Supposant que vous êtes en framework 3.5 min, vous pouvez aussi utiliser .FirstOrDefaultEx :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mesLots.FirstOrDefault(Function(UnLot) UnLot.Lot_id= unId) 'retourne l'objet si trouvé, sinon retourne nothing.

  4. #4
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Par défaut
    J'ai essayé chacune de vos solutions,

    @strikel il passe bien dans le removeAt, il ne m'affiche plus l'erreur initiale mais ne supprime pas de la collection, lors du pas à pas il me met dans un petite fenêtre :


    Me.mesLots Count = 0

  5. #5
    Membre éclairé
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Par défaut
    ta collection est vide à ce niveau normale que ça plante sur un removeAt.
    mais pas évident de voir d’où vient le problème sans le code de ta classe.
    Ou est déclarée ta variable mesLots ?
    Comment la remplie tu ?

  6. #6
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Par défaut
    Ici je déclare 'mesLots' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private _mesLots As New List(Of Lot)

    Constructeur de la classe Lot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub New(ByVal IdInitial As Integer, ByVal codeMedicamentInitial As String, ByVal IdVisiteurInitial As String, ByVal IdContenirInitial As String,
                   ByVal NomLaboInitial As String, ByVal LibelleInitial As String, ByVal QuantiteInitial As String, ByVal DatePeremptionInitial As Date,
                   ByVal DateOffreInitial As Date, ByVal DateAjoutInitial As Date)
            Me.Lot_Id = IdInitial
            Me.Lot_Code_Medicament = codeMedicamentInitial
            Me.Lot_Id_Visiteur = IdVisiteurInitial
            Me.Lot_Id_Contenir = IdContenirInitial
            Me.Lot_Nom_Labo = NomLaboInitial
            Me.Lot_Libelle = LibelleInitial
            Me.Lot_Quantite = QuantiteInitial
            Me.Lot_DatePeremption = DatePeremptionInitial
            Me.Lot_DateOffre = DateOffreInitial
            Me.Lot_DateAjout = DateAjoutInitial
        End Sub

    Ici je remplie la collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sqlcom = "SELECT * FROM lot_medicament"
            Try
                Dim cmd As New MySqlCommand(sqlcom, connexionSql)
                sqldr = cmd.ExecuteReader
                While sqldr.Read()
                    mesLots.Add(New Lot(sqldr.GetString("LOT_ID"), sqldr.GetString("VIS_ID"), sqldr.GetString("REF_ID"), sqldr.GetString("TYC_CODE"), sqldr.GetString("LAB_NOM"), sqldr.GetString("LOT_LIBELLE"), sqldr.GetString("LOT_QUANTITE"), sqldr.GetString("LOT_DATEPEREMPTION"), sqldr.GetString("LOT_DATEOFFRE"), sqldr.GetString("LOT_DATEAJOUT")))
                End While
                sqldr.Close()
            Catch ex As Exception
            End Try

Discussions similaires

  1. Probléme avec asp.net et requete sql
    Par locs dans le forum Accès aux données
    Réponses: 3
    Dernier message: 22/02/2007, 19h26
  2. Problème configuration ASP.NET 2.0 avec serveur IIS
    Par pstarnaud dans le forum ASP.NET
    Réponses: 3
    Dernier message: 24/01/2007, 23h19
  3. Problème benchmark Microsoft .NET / Mono, et C#
    Par G-FACTION dans le forum Mono
    Réponses: 2
    Dernier message: 11/12/2006, 07h21
  4. Probléme collection d'objets
    Par Contrec dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 10h08
  5. problème collection TABLE
    Par venusiafalls dans le forum SQL
    Réponses: 6
    Dernier message: 28/04/2004, 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