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 6 et antérieur Discussion :

Problème affichage données dans listview


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Par défaut Problème affichage données dans listview
    Alors voilà, j'ouvre une nouvelle discussion pour un problème que j'avais déjà cité aupravant mais comme le titre de ma précédente discussion ne correspondait pas à mon problème, je prefère reprendre la conversation ici...

    J'ai crée une listview, qui m'affiche très bien les données de ma table ACCESS si elle ne contient pas trop d'enregistrement. Mais lorsque j'essaye de faire la meme chose avec une table qui contient 200.000 enregistrements, ça prend un temps fou, pendant lequel mon pc est bloqué, je ne sais plus rien faire....

    Est-ce que qqu'un a déjà rencontré ce problème? Comment améliorer ça?


    Voilà mon code pour l'affichage de ma listview:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Public Sub RemplirListView(MaListview As ListView, Optional NomLigne As String, Optional NomColonne As String)
     
     
        Dim I       As Long
        Dim j       As Long
        Dim Itmx    As ListItem
     
        With MaListview
            .FullRowSelect = True
            .GridLines = False
            .HideSelection = False
            .LabelEdit = lvwManual
            .MultiSelect = False
            .AllowColumnReorder = False
            .ListItems.Clear
            .ColumnHeaders.Clear
            .Visible = False
        End With
     
        If rsADO.Fields.Count > 0 Then
                If MaListview.Tag > 0 Then
                    MaListview.ColumnHeaders.Add , , NomLigne & "/" & NomColonne
                    I = 1
                    MaListview.GridLines = True
                Else
                    I = 0
                End If
                For N = I To rsADO.Fields.Count - 1 
                     MaListview.ColumnHeaders.Add , , rsADO.Fields(N).Name
                Next N
     
                If rsADO.RecordCount > 0 Then
                     While Not rsADO.EOF
                        Set Itmx = MaListview.ListItems.Add(, , CStr(rsADO.Fields(0).Value))
                            For j = 1 To rsADO.Fields.Count - 1
                               Itmx.SubItems(j) = IIf(LenB(rsADO.Fields(j).Value) > 0, rsADO.Fields(j).Value, vbNullString)
                               DoEvents
                            Next j
     
                      rsADO.MoveNext
                      Wend
     
                    On Error GoTo Err
               End If
        End If
     
    MaListview.Visible = True
    Exit Sub
    Err:
        MsgBox ("Erreur: Impossible de charger les données")
     
    End Sub

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 137
    Par défaut
    200.000 enregistrements a mettre dans listview ?
    Blizard, blizad
    Si tu ne remplis pas tous ton listview avec chaque ligne de ta table, ouvres là avec un Where pour ne recuperer que les enregistrement utiles.

    Pour
    ça prend un temps fou, pendant lequel mon pc est bloqué
    Trois doevents
    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
                For N = I To rsADO.Fields.Count - 1
                     DoEvents '<--------------
                     MaListview.ColumnHeaders.Add , , rsADO.Fields(N).Name
                Next N
     
                If rsADO.RecordCount > 0 Then
                     While Not rsADO.EOF
                        DoEvents '<--------------
                        Set Itmx = MaListview.ListItems.Add(, , CStr(rsADO.Fields(0).Value))
                            For j = 1 To rsADO.Fields.Count - 1
                               DoEvents '<--------------
                               Itmx.SubItems(j) = IIf(LenB(rsADO.Fields(j).Value) > 0, rsADO.Fields(j).Value, vbNullString)
                               DoEvents
                            Next j
     
                      rsADO.MoveNext
                      Wend
    permetraient de laisser periodiquement la main a d'autre programme, c'est toujours sa de gagné.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Peut-être bloquer aussi le rafraichissement de la fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                                        (ByVal hWnd As Long, ByVal wMsg As Long, _
                                         ByVal wParam As Long, ByVal lParam As Any) As Long
    Public Const WM_SETREDRAW = &HB
     
            SendMessage ListView1.hWnd, WM_SETREDRAW, False, vbNullString    '-- Bloque le rafraichissement de la liste
     
    'le traitement ici
     
            SendMessage ListView1.hWnd, WM_SETREDRAW, True, vbNullString    '-- Redessine la liste
    Mais je suis comme ProgElecT, 200 000 items dans une listview, hummm...

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Par défaut
    Merci pour vos réponses....
    Je changerais bien de contrôle, ce serait p't plus facile :-)
    Est-ce que je risque d'avoir le meme problème avec une flexgrid ou pas?
    Pcque je n'ai jamais utilisé ça alors si je change tout pour une flexgrid et me retrouve au même point, je v peter un cable

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 137
    Par défaut
    Pas de reponse, mais 2 questions
    200 000 items, pas possible de n'en rapatrier moins ?
    ça prend un temps fou, en seconde, sa fait a peut pres combien ?

    Un Flexgrid ou un MSHFlexgrid est moins graphique il peuvent être alimentés directement par un RecordSource (pas de code a ecrire pour les remplire, donc plus direct), donc il est possible que le chargement soit un peu moins long.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Par défaut
    Et bien, j'ai justement fait le calcul avec un collègue, ça a pris 1min30 (90 secondes, quoi (pour répondre précisement à ta question )
    Quand on attend derrière que qque chose se passe, c'est trèèèès long... surtout que, ok c'est affiché mais une fois que je descens la scrollbar, pour voir la suite, c'est lent...

    Oui, je pourrais éventuellement n'afficher que les 100 premieres lignes par exemple et créer des boutons suivant et précédent, mais bon, je préfère une autre solution parce que par la suite, je donne une option d'exporter les données de la listviex vers excell...

Discussions similaires

  1. Problème Affichage données dans requete synthèse
    Par Sebastien1977 dans le forum Access
    Réponses: 1
    Dernier message: 21/02/2012, 12h06
  2. Réponses: 3
    Dernier message: 17/02/2012, 13h28
  3. Réponses: 4
    Dernier message: 25/11/2011, 10h12
  4. Réponses: 5
    Dernier message: 23/01/2009, 12h12
  5. [SQL] Moteur de recherche problème affichage donnée dans select
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/04/2006, 21h27

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