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 :

Arrêt de l'exécution d'une requête MySQL dans DELPHI.


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Arrêt de l'exécution d'une requête MySQL dans DELPHI.
    Salut,

    Je suis en plein dans l'implémentation d'une application Delphi utilisant comme base de donnée MySQL. Le problème auquel je suis confronté en ce moment se situe au niveau de l'exécution des requêtes MySQL à partir de DELPHI. En effet, il arrive que je requête sur des ensembles de données très importants et généralement après le lancement, il faut attendre 4 à 5 minutes pour avoir un résultat. Donc si l'on se trompe de requêtes, le temps nous paraît tout à coup très long. Ma question est de savoir s'il existe une méthode permettant de stopper une requête en cours d'exécution.

    Merci d'avance pour vos réactions.

    Ciao.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    en ce qui concerne l'arrêt de la requête je ne sais pas, mais par contre pour ta base de données je serais toi je mettrais des index dedans, ça te simplifiera la vie et traitera les données nettement plus rapidement... à moins que ce ne soit déjà fait, dans ce cas, ben bonne chance!!..

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    A ma connaissance je ne crois pas que tu ne peux stopper l'execution d'une requete SQL. Mais bon je suis qu'un jeune programmeur qui ne connait pas tout( loin de la).

    Tout ce que je sais c'est que tu peux utiliser l'evenement AfterScroll ou BeforeScroll pour gerrer ton probleme. Ces deux evenements permettent d'executer un code entre deux enregistrment(Avant ou apres qu'il passe a l'autre enregistrement).

    Donc a la rigeur tu peux faire ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.SQLQuery1AfterScroll(DataSet: TDataSet);
    begin
    if Stop=true then
      SQLQuery1.close;
    end;
    Voila en esperant t'avoir aider

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut,

    C'est vrai que j'ai encore énormement de doutes sur la possibilité de stopper une requête SQL en cours d'exécution mais je pars du principe que l'interrogation d'une base de données est un processus et que si l'on arrive à tuer(kill) le processus, on arrête du coup l'opération. Actuellement, j'utilise la bibliothèque de composants MySQLDAC (d'accès direct à MySQL) et son composant TMySQLDataBase fournit une méthode Kill prenant en paramètre un identifiant de processus. Maintenant, mon idée est de pouvoir déterminer quel numéro de processus correspond à la requête lancée.

    Voilà l'état actuel de non raisonnement.
    Merci d'avance pour vos interventions.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut euhhh
    Mais cette requete a moitie executer ne risque t'elle d'endommager ta base (Surtout si c'est un UPDATE ou un INSERT) : : : :

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    L'éventualité selon laquelle cette opération puisse endommager ma base de données n'est pas à négliger, et d'un autre côté je n'en ai aucune certitude d'où mon besoin d'effectuer des tests concluant de la pertinence de l'opération ou tout simplement de son rejet définitif.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 43
    Points : 52
    Points
    52
    Par défaut
    Et tu ne veux pas lancer ta requête dans un thread séparé ?

  8. #8
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Kuroro
    Donc a la rigeur tu peux faire ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.SQLQuery1AfterScroll(DataSet: TDataSet);
    begin
    if Stop=true then
      SQLQuery1.close;
    end;
    J'ai testé ton code, ca marche, mais uniquement une fois que la résultat de la requête est remonté. Malheureusement pendant l'exécution de la requête elle-même (lorsque le curseur se transforme en sablier SQL) il est, semble-t-il, impossible de reprendre la main avant que son exécution soit terminée.

    La solution de Nicolas.C semble être intéressante concernant l'utilisation des "Threads" séparés.
    Il serait bien d'ailleurs, Nicolas, que tu développes d'avantage ton idée. Voire que tu nous donnes un bout de code en exemple.

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    J'ai eu pas mal de problème de lenteur avec des affichages de données (oracle ou mysql).

    Je les ai résolu (diminué plutot) de troisfaçons:
    - en changeant la structure de la table (redondance d'informations)
    - en rendant les composants affichants les données invisibles pendant l'ouverture de la requete
    - passer par le remplissage d'un clientdataset intermédiaire

    Ce n'est peut-être pas applicable dans ton cas, mais si ça peut aider
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  10. #10
    Membre régulier
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par joelmarc
    Salut,

    C'est vrai que j'ai encore énormement de doutes sur la possibilité de stopper une requête SQL en cours d'exécution mais je pars du principe que l'interrogation d'une base de données est un processus et que si l'on arrive à tuer(kill) le processus, on arrête du coup l'opération. Actuellement, j'utilise la bibliothèque de composants MySQLDAC (d'accès direct à MySQL) et son composant TMySQLDataBase fournit une méthode Kill prenant en paramètre un identifiant de processus. Maintenant, mon idée est de pouvoir déterminer quel numéro de processus correspond à la requête lancée.

    Voilà l'état actuel de non raisonnement.
    Merci d'avance pour vos interventions.
    Je pense que c'est la meilleure piste.
    Pour retrouver l'id du process à tuer, essaye avec la commande SHOW PROCESSLISTde MySql.

    Je n'ai pas de MySql sous la main, donc je ne peux te dire sous quelle forme cette commande renvoie les infos, mais ça pourrait bien être la solution.

Discussions similaires

  1. unexpected character : erreur à l'exécution d'une requête MySQL avec PHP
    Par sub_zero dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 02/02/2015, 19h22
  2. Limiter le temps d'exécution d'une requête MySQL
    Par Ceubex dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/12/2014, 22h22
  3. exécution d'une requête mysql
    Par laurentSc dans le forum Langage
    Réponses: 7
    Dernier message: 08/10/2011, 11h41
  4. Exécution d'une requète MySQL
    Par Redg9 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/01/2009, 22h05
  5. [MySQL] Resultat d'une requête mysql dans un tableau.
    Par ns_deux dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/01/2009, 15h03

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