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

Langage Delphi Discussion :

[BDD] Interrompre l'exécution d'une requete


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut [BDD] Interrompre l'exécution d'une requete
    Bonjour.
    J'exécute une requete qui prend parfois beaucoup de temps.
    Je voudrais savoir s'il existe un moyen d'interrompre son exécution. J'utilise un TQuery, qui tape sur MSSQLServer
    Je compte mettre un bouton "Arreter la requete" sur ma form pour permettre a l'utilisateur d'interrompre la requete et de reprendre la main sur l'appli.
    Je pense que je devrais utiliser un thread. Je ne vous demande pas d'aide sur les threads, mais plutot la fonction a utiliser pour dire au query de s'interrompre...
    Est ce possible?

    Merci

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 096
    Par défaut
    tu n'aurais pas une commande "KILL" en MS SQL ?
    J'ai développé cela en MySQL, je récupère l'ID de connexion du nouveau Thread, et j'execute un "KILL id" depuis le Main ...
    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

  3. #3
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Salut,

    peut être q'un simple "Abort" ferais l'affaire

  4. #4
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Je vois deux façon de faire :
    - Tu as d'abord la solution suggérée par ShaiLeTroll : Tu exécutes la requête dans un thread séparé, mais également avec une connexion base de données dédiée à la requête. Lorsque tu veux arrêter l'exécution de la requête, tu fais un kill sur la connexion SQL Server (il faut pour celà que tu ais récupérer le spid de la connexion avant). (évidemment ensuite, ta connexion n'existe plus donc il faudra la fermer et la réouvrir).
    - Cependant, le mieux à mon avis serait d'utiliser ADO pour exécuter ta requête au lieu du BDE. Tu pourras alors demander une exécution asynchrône de la requête (donc pas besoin d'un thread distinct). Puis tu disposes d'une méthode Cancel sur l'objet Command pour annuler une requête en cours d'exécution.

    Attention cependant, si ta requête fait des modifications de données, lorsque tu vas l'arrêter, SQL va rollbacker la transaction. Ca peut prendre un certain temps et donner l'impression d'avoir des effets secondaires indésirables : Selon la façon dont tu gères la chose, la requête ne s'arrête pas immédiatement ou la requête suivante mais du temps avant de s'exécuter...

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

Discussions similaires

  1. [EXCEL] interrompre l'exécution d'une macro
    Par ustilago dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2006, 10h24
  2. Réponses: 2
    Dernier message: 05/07/2006, 11h07
  3. [VB6] exécution d'une requete Insert dans oracle 9.2
    Par krest dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/04/2006, 13h28
  4. Réponses: 6
    Dernier message: 26/07/2005, 10h20
  5. Réponses: 9
    Dernier message: 20/06/2005, 12h17

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