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

C++Builder Discussion :

Problème de lenteur TADOQUERY


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut Problème de lenteur TADOQUERY
    Bonjour,

    Voilà, j'utilise des composants TADOQUERY pour gérer ma bd Access. Je ne sais pas pourquoi mais dans certain cas, les opérations sur ces composants sont très très très lentes, 30sec pour réaliser un clic dans une colone d'un dbgrid par exemple ce qui rend le programme innutilisable.

    Ces opérations sont basiques :
    - Close(), Add("Select * Form Client Where ID=..."), Open()
    - dans la gestion des bookmark.

    Je ne sais pas comment faire car je n'ai aucun controle sur ces opérateurs. Est-ce que quelqu'un aurait une idée pour optimiser les opérations ? Jusqu'à présent j'avais 500 enregistrements dans ma table.

    Dans l'espoir d'une réponse, bonne journée à tous.

    Yvan

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut Plus de précision
    Ne voyant aucune réponse, je vous donne plus de détails au cas ou quelqu'un aurait une solution.

    En fait, dans certain cas, je prépare ma requete TADOQUERY et le temps d'attente est insignifiant. Mais dans d'autre cas (alors qu'il n'y a à priori que quelques enregistrement dans ma table) je peux attendre jusqu'à trente seconde pour exécuter (en pas à pas) la ligne adoQuery->Open().

    De même lors d'une insertion, le programme se fixe sur l'opérateur Post() mais dans d'autre cas, sur d'autre table, le Post() ne m'a jamais posé de problème.

    Une simple requête : Select count(idConso) from Conso where idClient = '43', écrite de la façon suivante:

    adoQuery->Close();
    adoQuery->SQL->Clear();
    adoQuery->SQL->ADD("Select ...='43');
    adoQuery->Open();

    J'attend 3sec pour exécuter le Open. D'un coté je n'ai qu'une poignée d'enregistrement dans ma table Conso.

    Bref, sur des requêtes Refresh() aussi je passe un temps fou. En clair mon programme est casi inutilisable, dés que je clique quelque part je dois boire un café et fumer 3 clopes et me frapper la tête sur tous les murs de mon bureau, revenir derrière mon écran et recommencer deux ou trois fois avant d'avoir un résultat.

    J'espère beaucoup sur vos conseils car je ne asis vraiment pas quoi faire.

  3. #3
    Membre expérimenté
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Par défaut
    Bonjour,
    Je sais pas si cela va ameliorer la rapidité d'execution mais il est conseillé de mettre la propriété Prepared à true avant l'execution de la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOQuery->Prepared = true;
    avant ton Open()

    Je crois que cela est indiqué dans l'aide du Builder

    lanonyme

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut Encore plus de précision
    J'essaie de décortiquer au mieux mon code. Alors voici ce que je rermarque, j'ai beaucoup d'évènement pour chaque composant TADOQuery : OnClose, OnOpen, OnScroll et OnCalcField.

    Il se trouve que je passe plusieurs fois dans ces champs lors d'un clic dans un grid par exemple. J'essaie d'éliminer le maximum de passage mais j'ai toujours des ralentissement sur les fonctions :

    Find, FindFirst, GotoBookmark,Locate.

    Voilà, en quête d'informations, à bientôt.

    Je vais essayer de mettre l'attribut Prépare, et voir une différence si sa change qq chose je le signalerai.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut Résolu
    Ok, j'ai bien analysé le progamme, le problème vient du fait des nombeuses fonctions calculés su chaque composant TQuery (qui ont appel à d'aute TQuery). En fait, j'ai relié un composant TQuery à une table Access (nécéssaire pour les champs calculés). Dorénavant, j'ai un composant TQuery qui effectue toutes les requêtes simples, qui n'a aucun évènement implémenté.

    A bientôt.

    PS: je ne trouve pas la balise résolu avec cette nouvelle version de forum, sorry.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/06/2006, 11h59
  2. [Applet] Problème de lenteur d'un JTree
    Par Frac10 dans le forum Composants
    Réponses: 3
    Dernier message: 22/05/2006, 16h49
  3. [CR10][ODBC][XML] problème de lenteur
    Par capitainerotel dans le forum Connectivité
    Réponses: 4
    Dernier message: 09/05/2005, 18h58
  4. Optimiser MS SQL2000 car j'ai des problèmes de lenteurs
    Par djavaux dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/04/2004, 10h50

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