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 :

[VB6 / SQL SEVER2000] Conseilssur table avec 80 000 enr ?


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Par défaut [VB6 / SQL SEVER2000] Conseilssur table avec 80 000 enr ?
    Bonjour,

    Je dois initialiser une combox à partir des enregistrements contenuent dans une table (80 000 enregistrements :/ ) . Mon code fonctionne mais alors c'est HYPER long a charger, sachant que j'appel souvent le procédure pour remplir ces listes box, j'aimerais avoir vottre avis sur mon code (optimiser la rapdité de traitement) ou alors si vous connaissez une ptite astuce pour charger cette box le plus vite possible..

    Merci,

    MA sub :

    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
     
     
    Public Sub InitCmbPiece(Frm As Form)
     
            Call OpenCnx
            cmd.ActiveConnection = cnx
            rs.CursorLocation = adUseClient
            rs.CursorType = adOpenForwardOnly
            rs.LockType = adLockOptimistic
     
            sql = "Select * "
            sql = sql & "From T_PIECE "
            sql = sql & "ORDER BY idPiece"
     
            cmd.CommandText = sql
            rs.Open cmd
     
            If rs.RecordCount <> 0 Then
                rs.MoveFirst
                Frm.cmbPiece.Clear
                'Boucle qui remplit
                While Not rs.EOF
                    Frm.cmbPiece.AddItem rs.Fields!idPiece
                    rs.MoveNext
                Wend
     
            End If
     
            rs.Close
            Set cmd = Nothing
            Set cnx = Nothing
     
            Call CloseCnx

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 36
    Par défaut
    Bonjour,

    Une combo avec 80 000 enregistrements ça doit ramer au niveau interface.ç a c sur.

    mais bon.

    Si tu veux optimiser créer toi un objet Global ComboBox dans un module
    Que tu remplit une fois


    et ensuite tu fais : SET TaCbo = VgCboGlobal
    et voilà tu la chargeras pas plusieurs fois.

    Mais sinon trouve une autre solution pour ta combo c'est beaucoup trop..

    Bon courage.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Par défaut
    Merci pour ton aide, disons qu'il est impératif de pouvoir présenter toutes les informations de cette table, donc Listbox, cmbbox ...
    Aurais tu un ex de code pour le global combobox, je ne connais pas ...

    Merci

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Je te conseille de faire une collection d'objets.

    Classe Piece
    PieceID
    Nom
    Prix

    Classe ColPieces
    (collection de classes Piece)

    Au lieu de remplir le combobox dans ton loop, a chaque iteration tu intancies un nouvel objet Piece, tu le remplis et tu le mets dans la collection.

    Une fois la collection remplie, tu peux travailler avec les informations en memoire, ce qui est autrement plus rapide.

    Pour ce qui est des combobox, ca n'est pas un bon choix. Je te conseille plutot un combobox avec intellisense.

    Genre, tu veux avoir la piece "Moteur", le combobox est vide, tu tapes la lettre "M" et ca lance une fonction qui recherche tous les noms de pieces dans la collection colPieces qui commencent par la lettre "M" et alors tu remplis le combobox. Ca devrait etre 100 fois plus vite.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Par défaut
    Super idée pour tes solutions ! N'ayant pas l'habitude d'utiliser les classes en VB je n'avais pas pensé a utiliser cette méthode qui sera autrement plus rapide !

    De plus j'ai discuté avec une des personnes qui utilisera le programme et j'avais pensé créer une textbox et une combobox avec intellisense.

    Merci pour votre aide à tous les deux

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

Discussions similaires

  1. [VB6][SQL] Ouvrir mon application avec 2 profils différents
    Par angus9 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 24/12/2010, 16h21
  2. Réponses: 10
    Dernier message: 11/08/2009, 14h43
  3. [SQL] Jointure de table avec SUM et GROUP BY
    Par waterjetmedia dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/09/2007, 13h17
  4. Réponses: 2
    Dernier message: 26/05/2007, 21h22
  5. [Access] Nom d'une table avec un espace dans SQL
    Par Corsaire dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2006, 15h50

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