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 :

Gros ralentissement TADOQUERY


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut Gros ralentissement 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.

    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, les raisons pouvant causer ce ralentissement car je ne sais vraiment pas quoi faire.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Est ce que tu passes par un Adoconnection ou est ce que tous tes composants sont reliés directement à la base de données ?

    Ta base de données est elle en réseau ou sur le poste ?
    Si en réseau est ce que vous êtes plusieurs à travailler sur le réseau ?

    Est ce qu'il est possible de voir ce que tu fais dans le onClick de ta DBGrid ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut Plus de détails
    Pour te répondre :
    - Oui je passe par un AdoConnection
    - Non je ne suis pas en réseau mais directement sur le poste ou sera exécuté le programme.

    Dans un premier temps je ne vais pas t'envoyer le code que tu demandes car je t'assure il est très très très simple, comme dans l'exemple que j'ai donné. Mais voici plus d'informations sur mon code :

    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 (lorsque je fais un ->FindFirst(), je passe dans les évènements OnCalc). 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.

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Au lieu d'utiliser le OnCalField est ce que tu ne peux pas le remplacer par un calcul direct dans la requete ?

    Si tu fais des requetes sur le OnScroll et qu'elles prennent du temps ca va encore plus ralentir ton application.

    En gros plus tu vas rajouter d'événement sur ton composant, plus ca va prendre de temps, il faut voir si tu ne peux pas remplacer ces événements par d'autres choses.

    Fait voir le code de ces événements, je suis sûr qu'on peut les remplacer par autre chose.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut Une solution
    En fait, j'ai résolu mon pb de la façon suivante : j'ai tout simplement limité au maximum les évenements OnScroll et OnCalcField. Parcequ'à chaque fois que je fais une opération telle que Find(), Locate() Open(), je passe dans ces fonctions. Bref, en plus qu'une table à des champs calculés avec une autre table qui contient aussi des évènements cités...

    Voilà, merci beaucoup.

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

Discussions similaires

  1. Gros ralentissements pour requête HTTP
    Par bigwade dans le forum Android
    Réponses: 2
    Dernier message: 20/12/2013, 12h35
  2. Un langage pour lire, traiter et écrire de gros fichiers
    Par March' dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/04/2003, 15h26
  3. Gros Problème avec DirectShow et la méthode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 3
    Dernier message: 10/03/2003, 18h10
  4. Gros problème avec JB8 et appli J2EE
    Par patbier dans le forum JBuilder
    Réponses: 10
    Dernier message: 07/03/2003, 10h52

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