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

Bases de données Delphi Discussion :

accélérer l'affichage des donnée dans un Dbgrid.


Sujet :

Bases de données Delphi

  1. #1
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    403
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 403
    Points : 295
    Points
    295
    Par défaut accélérer l'affichage des donnée dans un Dbgrid.
    Bonjour a tous,
    je veut afficher tous les donnée issu d'une procédure stockée , dans un DBGRID , mais tellement j'ai plus de 200000 lignes , l'affichage des donnée est un peut lourd
    SVP y a t il un moyen d'accélérer l'affichage des donnée dans un Dbgrid ?
    j'utilise Delphi 7 entreprise + Interbase 7.5 server + les composants IBX.
    cordialement.

  2. #2
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    je dirais, c'est une mauvaise idée
    si c'est pour imprimer aprés; utilise une transaction en lecture seul+un TQuery

  3. #3
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    403
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 403
    Points : 295
    Points
    295
    Par défaut
    Citation Envoyé par edam Voir le message
    je dirais, c'est une mauvaise idée
    si c'est pour imprimer aprés; utilise une transaction en lecture seul+un TQuery
    Merci pour ta repense edam ,
    mais comment faire pour afficher les 200000 dans un DBGRID?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Faudra regarder si les composants IBX propose une gestion de packet pour qu'il ne récupère qu'une partie des données

    FetchRows en ODAC et aussi en IBDAC, faudra connaitre le mécanisme utilisée pour le reproduire en IBX
    PacketRecords en DBX, un TClientDataSet pourra être utiliser dans ce cas

    Voir si InterBase propose un équivalent de LIMIT pour coder ta propre gestion de pagination

    Regarde la propriété RecordCount dans l'aide pour le TIBQuery :

    Citation Envoyé par Aide de Delphi
    RecordCount est héritée par des ensembles de données de type requête, tel que TIBQuery. Pour les ensembles de données de type requête, RecordCount contient le nombre total d'enregistrements obtenus actuellement. Afin de déterminer RecordCount à rapporter le nombre total d'enregistrements dans un ensemble de données de type requête, appelez la méthode Last d'abord.
    On peut penser qu'il y a un systéme de récupération partielle !
    je crois que l'on peut affecter une limite des enregistrements récupérés à chaque paquet, Est-ce que RecordCount est affectable ???
    voir si BlockReadSize est utile ?

    D'ailleurs, utilse ton TIBQuery en mode UNIDIRECTIONNAL
    Ajoute un TDataSetProvider et un TClientDataSet, c'est ce dernier qui tu fourniras le découpage via PacketRecords


    ensuite, un etre humain normal est incapable de digérer 200 000 lignes dans une grille !

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 874
    Points : 11 363
    Points
    11 363
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    ensuite, un être humain normal est incapable de digérer 200 000 lignes dans une grille !

    Livre de Poche : 33 lignes par page pour celui qui traînait sur le bureau, soit l'équivalent de plus de 6 000 pages...

  6. #6
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    403
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 403
    Points : 295
    Points
    295
    Par défaut
    Citation Envoyé par tourlourou Voir le message

    Livre de Poche : 33 lignes par page pour celui qui traînait sur le bureau, soit l'équivalent de plus de 6 000 pages...
    Merci ShaiLeTroll , tourlourou pour la réponse ,
    justement je veut afficher les données dans une DBGRID par page.

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par aimer_Delphi Voir le message
    je veut afficher tous les donnée issu d'une procédure stockée , dans un DBGRID , mais tellement j'ai plus de 200000 lignes , l'affichage des donnée est un peut lourd
    En echo aux intervenants précédents, quel est l'intérêt de vouloir rapatrier 200000 lignes ?
    En admettant 1 seconde de lecture par ligne, l'utilisateur passera plus de 55 heures à parcourir cet ensemble !!!
    Citation Envoyé par aimer_Delphi Voir le message
    SVP y a t il un moyen d'accélérer l'affichage des donnée dans un Dbgrid ?
    j'utilise Delphi 7 entreprise + Interbase 7.5 server + les composants IBX.
    Au préalable, il faudrait identifier l'origine des lenteurs, l'exécution de la procédure stockée ou l'envoi à la grille.
    S'il s'agit de l'exécution de la procédure stockée, revoir son fonctionnement est la piste à suivre.
    S'il s'agit de l'envoi à la grille, avec Interbase, une procédure stockée peut être "limitée" à la manière d'une requête select col1, ..., coln from MaProcedure where coli = vali

  8. #8
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    tous vont me dire que c'est pas vrais,
    j'utilise FB depuis 1.5, j'ai jamais voulus utiliser les procédures Stocker , seulement il y a un ans, j'ai eu l'idée de les utilisés, pour des calcul sur le serveur sur des cetaines de ligne et plus de 20 colonnes et plus de 6 jointure et j'avais crus que sa seras plus rapide, j'ai crée plus de 6 PS, après je me suis aperçu que j'ai fais une belle con-ris
    il seras mieux de faire les calcule en local, delphi prend bien en charge les champs calculer, rapatrier le minime des colons, dbgrid ne fitch à peut prés que les lignes nécessaire, mais il ne faut pas exagérée sur le nombre des colonnes

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 105
    Points : 41 195
    Points
    41 195
    Billets dans le blog
    63
    Par défaut
    Bonjour,
    Citation Envoyé par edam Voir le message
    tous vont me dire que c'est pas vrai,
    j'utilise FB depuis 1.5, j'ai jamais voulus utiliser les procédures Stocker , seulement il y a un ans, j'ai eu l'idée de les utilisés, pour des calcul sur le serveur sur des centaines de lignes et plus de 20 colonnes et plus de 6 jointures et j'avais cru que ce serait plus rapide, j'ai crée plus de 6 PS, après je me suis aperçu que j'avais fait une belle con-ris
    Tous peut être pas, en tout cas moi je dirais que cela dépend beaucoup des traitements à faire. J'ai vu des logiciels avec une utilisation intensives de procédures pas forcément utiles et d'autres sans mais en méritant quelques unes. De plus es-tu sur que tes procédures/jointures soient optimales ?

    Toujours est-il que je te dirais que FB1.5 est maintenant obsolète

    pour en revenir à la question initiale comme les autres je dirait qu'il est insensé* de vouloir chargé 200000 lignes dans une DBGrid la première chose à faire AMHA est de modifier la procédure afin de limiter le nombre de lignes à récupérer.
    Soit selon la méthode proposée par Ph.B.
    S'il s'agit de l'envoi à la grille, avec Interbase, une procédure stockée peut être "limitée" à la manière d'une requête select col1, ..., coln from MaProcedure where coli = vali
    soit en ajoutant quelques paramètres d'entrées à la procédure
    Je privilégierai la dernière solution qui, AMHA, réduira le temps/Espace disque coté serveur
    Enfin il existe le mot clé ROWS permettant de réduire le nombre de ligne (toujours en utilisant un SELECT * FROM UNEPROCEDURE) voir ici les différentes utilisation de ROWS


    Parlons du DBGrid
    récupérer 200000 lignes en mémoire juste pour avoir une bonne gestion de la scrollbar verticale : je ne pense pas que cela soit nécessaire !
    Tout comportement supplémentaire (couleur de cellules etc...) ajoutera encore du temps


    *insensé pour plusieurs raisons : trafic réseau trop important, l'utilisateur n'a certainement pas la nécessité de tout lire et sans oublier qu'un résultat de procédure n'est pas indexé

  10. #10
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    j'utilise FB 2.5 depuis sa sortie "je suit la mode ", j'attend FB3 final
    mes PS sont optimal, car les même requêtes sont exécuter rapidement sur flamerebin ou en utlisant un composant delphi ,
    dans tout les cas; la création d'une procédure et ennuyeux surtout avec les déclarations des variables, et faire attention à leur position dans la requêtes surtout après "into"

Discussions similaires

  1. Accélérer l'affichage des données dans un datagridview
    Par jerada dans le forum Ext JS / Sencha
    Réponses: 6
    Dernier message: 13/03/2014, 12h55
  2. Accélérer l'affichage des données dans un datagridview
    Par GCAccess dans le forum Windows Forms
    Réponses: 5
    Dernier message: 30/11/2009, 11h11
  3. limite de l'affichage des donnés dans une Bdgrid
    Par helmis dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2006, 09h15
  4. Réponses: 6
    Dernier message: 17/07/2006, 15h07
  5. Affichage des données dans un état
    Par puppusse79 dans le forum Access
    Réponses: 8
    Dernier message: 07/04/2006, 16h36

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