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
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    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 771
    Points
    2 771
    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
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  3. #3
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    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 459
    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 459
    Points : 24 873
    Points
    24 873
    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 !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    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...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    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 : 57
    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
    Philippe.

  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 771
    Points
    2 771
    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
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    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é
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  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 771
    Points
    2 771
    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"
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

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