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 :

Manipulation d'un ArrayList


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Manipulation d'un ArrayList
    Bonjour,

    Quand je fais une requête SQL , le résultat de chaque ligne je le stoque dans un tableau tableau statique de deux dimensions (matrice),le problème que j'avais, c'est que je ne sais pas au préalable le nombre exacte de ligne retournées pour préciser à mon tableau sa taille, alors, je suis obligée de travailler avec des tableaux dynamique tels que la collection ArrayList.

    Alors, pour ce ci, j'ai utilisé un tableau simple (d'une taille fixée car je sais combien de colone je vais selectioner), dans ce tableau je vais stocker un enregistrement de ma requête SQL, après j'insére ce tableau dans mon arraylist. (Donc ce array list sera une suite des tableaux)

    Pour se faire, voilà comment j'ai procédé :

    En fait pour Data, elle est toujours (pour mon usage) de 3 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim data(2) As String
    Dim L As New ArrayList()
    Dim  m_table (2) As String 
    cmd.CommandText = "select id_user,login_user,password_user from comptes_users"
                    dr = cmd.ExecuteReader()
                    Do While dr.Read()
                        data(0) = Convert.ToString(dr("id_user"))
                        data(1) = Convert.ToString(dr("login_user"))
                        data(2) = Convert.ToString(dr("password_user"))                
        L.Add(data)
                    Loop
    
                    dr.Close()
    Dans ma table comptes_users il y a 7 enregistrements, et effectivement quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox(L.count)  ' il m'affiche 7
    le problème c'est quand je veux lister le contenue de L (c'est à dire toutes les enregistrements que j'ai stoké) il m'affiche 7 fois le même enregisterement, donc j'estime que c'est à cause l'espace qui est coloré en Vert, car c'est comme si prend juste un enregistrement et il le duplique dans tout le reste de L.


    S'il vous plaît j'ai besoin de vos aides..

    Espérant que j'ai bien détaillé le poblème, Merci infiniment d'avoir lu mon message.

    Merci.


    Sisiniya.

  2. #2
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    tu doi pouvoir passer en "mode debogage"
    pour voir le contenu de data(2)

    si effectivement il ne change pas,
    c'est que Do While dr.Read() n'est pas suffisant,
    il faut que tu trouve un moyen de passer a l'autre enregistrement

    je t'aurais bien aidé a chercher mais je ne sais pas du tout ce qu'est dr ...

  3. #3
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Juste pour te dire que tu peux très bien utiliser un tableau normal même si tu n'en connaît pas la dimension :

    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
    Dim data(2) As String
    Dim  m_table (2) As String 
    'Par défaut le format des données sera de type string si non précisé
    Dim Table(0, 2)
    Dim i As Integer = 0
     
    cmd.CommandText = "select id_user,login_user,password_user from comptes_users"
    dr = cmd.ExecuteReader()
     
    Do While dr.Read()
     
         data(0) = Convert.ToString(dr("id_user"))
         data(1) = Convert.ToString(dr("login_user"))
         data(2) = Convert.ToString(dr("password_user"))
     
         Table(i , 0) = Data(0)
         Table(i , 1) = Data(1)
         Table(i , 2) = Data(2)
     
         i = i + 1
         Redim Preserve Table (i,3)
     
    Loop
     
    'Supprime la dernière ligne vide
    Redim Preserve Table (i-1,3)
    Ca reste à adapter.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 319
    Par défaut
    Bonjour

    Euh pour ton probleme de doublons, il fait faire comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim data(2) As String
    Dim L As New ArrayList()
    Dim  m_table (2) As String 
    cmd.CommandText = "select id_user,login_user,password_user from comptes_users"
     dr = cmd.ExecuteReader()
          Do While dr.Read()
                 data(2) = new String
                 data(0) = Convert.ToString(dr("id_user"))
                 data(1) = Convert.ToString(dr("login_user"))
                 data(2) = Convert.ToString(dr("password_user"))                
                  L.Add(data)
           Loop
     dr.Close()
    En esperant que ca soit bon

    Nasty

  5. #5
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Merci tous pour vos réponse :

    Pour methylene :

    Le message qui se déclenche c'est :
    'ReDim' ne peut changer que la dimension la plus à droit

    Pour nasty :

    Quand j'ajoute data(3) = new String il me souligne cette instruction comme syntaxe erreur. en fait, je ne sais pas pour quoi vous allouez à chaque itération le tableau, puisque on l'a déclaré au début ?


    Pour hunteshiva :

    Oui vous avez raison,j 'ai oublié d dire c'est quoi dr. Bon, le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'c'est celui qui contient les lignes retournées par la requête
    Dim dr As OracleDataReader
    dr = cmd.ExecuteReader()

    Ce qui est vraiement bizard, c'est que quand je j'affiche à chaque fois le contenu de L à l'interieur de cette boucle , il m'affiche exactement ce qui est dans ma table, mais dès que je fais la boucle d'affichage à l'extérieur de la boucle ça maaarche paaas.

    Voilà comment j'ai fait, et il m'a affiché les bon enregistrement, ce qui prouve que L prend à chaque itération un enregistrement :

    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
    cmd.Connection = conn
                    cmd.CommandText = "select id_user,login_user,password_user from comptes_users"
                    Dim dr As OracleDataReader
                    dr = cmd.ExecuteReader()
                    Dim k As Integer
                    Dim j As Integer
                    k = 0
                    Do While dr.Read()
                        data(0) = Convert.ToString(dr("id_user"))
                        data(1) = Convert.ToString(dr("login_user"))
                        data(2) = Convert.ToString(dr("password_user"))
                        'MsgBox(data(2))
                        L.Add(data)
                        If (k = 2) Then
                            m_table = L.Item(k)
                            For j = 0 To 2
                                ListBox1.Items.Add(m_table(j))
                            Next j
                        End If                    If (k = 5) Then
                            m_table = L.Item(k)
                            For j = 0 To 2
                                ListBox1.Items.Add(m_table(j))
                            Next j
                        End If                    k = k + 1
                    Loop
    
                    dr.Close()
    dans les deux bloc en rose, il m'affiche deux enregisteremnt différents, mais quand je fais par exemple à l'extérieur de la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    m_table = L.Item(2)
                            For j = 0 To 2
                                ListBox1.Items.Add(m_table(j))
                            Next j
    m_table = L.Item(5)
                            For j = 0 To 2
                                ListBox1.Items.Add(m_table(j))
                            Next j
    im m'affiche le même enregisteremnt deux fois qui est dans la position :
    l.Item(6). C'est comme si il prend toujours la dernière ligne retournée par la requête, mais ce problème n'existe pas lors de remplissage de L !!!



    J'ai vraiment besoin de vos aides.

    Merci

  6. #6
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Pour le Redim Preserve.

    Il suffit d'inverser dans toutes les tables les deux dimensions :

    Voilà ce que ca 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Dim data(2) As String
    Dim  m_table (2) As String 
    'Par défaut le format des données sera de type string si non précisé
    Dim Table(2, 0)
    Dim i As Integer = 0
     
    cmd.CommandText = "select id_user,login_user,password_user from comptes_users"
    dr = cmd.ExecuteReader()
     
    Do While dr.Read()
     
         data(0) = Convert.ToString(dr("id_user"))
         data(1) = Convert.ToString(dr("login_user"))
         data(2) = Convert.ToString(dr("password_user"))
     
         Table(0 , i) = Data(0)
         Table(1 , i) = Data(1)
         Table(2 , i) = Data(2)
     
         i = i + 1
         Redim Preserve Table (2,i)
     
    Loop
     
    'Supprime la dernière ligne vide
    Redim Preserve Table (2,i-1)
    J'avais fait une erreur en plus, je redimensionnais en effet les 2 dimensions, vu que je passais à 3 colonnes et non à 2, une etourderie.

    PS : un Redim peut changer toutes les dimensions, mais un Redim Preserve non

Discussions similaires

  1. Réponses: 10
    Dernier message: 29/10/2013, 16h24
  2. Manipulation d'une ArrayList
    Par satou16 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 10/05/2012, 18h05
  3. manipuler une variable arraylist dynamiquement
    Par Stephane_br dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/05/2011, 11h59
  4. [JAVA] manipulation Arraylist
    Par Katachana dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 23/05/2007, 12h58
  5. Manipulation d'une arraylist
    Par timbrochier dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 13/10/2006, 16h41

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