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

4D Discussion :

Arrêter Procédure Stockée


Sujet :

4D

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 51
    Points
    51
    Par défaut Arrêter Procédure Stockée
    Bonjour à tous,

    J'ai une procédure stockée sur le serveur qui s'éxécute toutes les 24h grâce à ENDORMIR PROCESS(Numero de process courant;$NbTicks)
    Pour pouvoir arrêter cette procédure, j'utilise ECRIRE VARIABLE PROCESS(Numero de process courant;vStopProcess;Vrai) mais cette procédure ne s'arrête que lorsque la période d'endormissement du process est terminée.
    Y'a-t-il un moyen de forcer le process à se réactiver pour ensuite arrêter ma procédure librement ?

    Merci de votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Bientôt retraité
    Inscrit en
    Juillet 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Bientôt retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 312
    Points : 385
    Points
    385
    Par défaut
    Bonjour,

    La réponse est pratiquement dans la question, il faut utiliser REACTIVER PROCESS(NumProcess).

    A +

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 51
    Points
    51
    Par défaut
    Merci pour cette réponse. C'est bien cette commande que je pensais utiliser mais apparement elle n'est pas utilisable en client/serveur.
    J'ai donc essayé de lancer une seconde procédure stockée sur le serveur dans laquelle je fais REACTIVER PROCESS mais ca ne fonctionne pas.

    Merci
    Maxime

  4. #4
    Membre averti
    Homme Profil pro
    Bientôt retraité
    Inscrit en
    Juillet 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Bientôt retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 312
    Points : 385
    Points
    385
    Par défaut
    Etrange que cela ne marche pas, j'ai un truc comme ca qui fonctionne.
    Au demarrage du serveur, je demarre un process.
    Le numéro de process est une variable interprocess.
    J'ai un booleen interprocess qui est égal à vrai.

    A partir d'un client je fais
    $MonProc:=Executer sur serveur("P_ArretProcStockee";64000;"ArretProc";*)
    je lance donc une nouvelle méthode stockée.
    Voici ce qu'elle fait.
    <>StopContr:=FAUX
    REACTIVER PROCESS(<>NumProcContr)
    Je mets donc la var à faux, puis je réactive le process.

    Je viens de faire un contrôle, cela fonctionne très bien chez moi.
    Il y a peut-être un souci dans le code de ta méthode initiale.
    Précision, cela fonctionnait en 4D 2003 et tout est Ok en V2004.

    A +

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 114
    Points
    114
    Par défaut
    Dans ton code (premier message), je pige pas cette ligne :

    ECRIRE VARIABLE PROCESS(Numero de process courant;vStopProcess;Vrai)

    Telle qu'elle est écrite, elle n'a pas d'intérêt et tu pourrais aussi bien écrire...

    vStopProcess:=Vrai

    ... puisque tu utilises "Numero du process courant" : ça veut dire que tu te parles à toi-même ;-)

    Pour arrêter une procédure stockée qui boucle jusqu'à ce que son flag - process - vStopProcess soit à vrai, tu dois :

    1/ Utiliser ECRIRE VARIABLE PROCESS depuis une autre procédure stockée (depuis un poste client, ça ne marchera *que* si le numéro de process est -1 et les variables interprocess : cf. doc.)

    2/ Passer le numéro de la procédure stockée.

    3/ Penser à REACTIVER PROCESS si celui-ci utilise une boucle du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    vStopProcess:=Faux
    Repeter
       ENDORMIR PROCESS(moi-même...un certain temps)
       Si(Non(vStopProcess))
          . . . faire qq chose
       Fin de si
    Jusque(vStopProcess)
    Par exemple, si ta procédure stockée a un nom de process "MaProcStockee", tu pourrais utiliser :

    $L_procNum:=Chercher process("MaProcStockee")
    ECRIRE VARIABLE PROCESS ($L_procNum;vStopProcess;Vrai)
    REACTIVER PROCESS($L_procNum)

    (ne marchera que si un seul process a ce nom)

    Mon habitude est d'encapsuler la chose dans 1-2 méthodes dédiées et d'utiliser, quand c'est possible, une variable interprocess pour le flag d'arrêt. Ca impose qu'il n'y ait qu'une seule proc. stockee de ce type. Schématiquement, et sans règle de nomenclature :

    [chaque ligne de commentaires entourée de `, c'est pour le formatage appliqué par developpez.net]

    ` MaProcStockee_Start
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ` Dernier parametre * => si un process de ce nom existe dejà, 4D n'en `
    ` crée pas un nouveau. 4D Mono/4D Server => revient à utiliser `
    ` Nouveau process `
    $L_Ignore:=Executer sur serveur("MaProcStockee_DoIt";256*1024;"MaProcStockee";*)
    ` MaProcStockee_DoIt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    C_ENTIER LONG(<>MaProcStockeeNum)
    C_BOOLEEN(<>MaProcStockeeStop)
    <>MaProcStockeeNum:=Numero du process courant
    <>MaProcStockeeStop:=Faux
    Repeter
       ENDORMIR PROCESS(moi-même...un certain temps)
       Si(Non(<>MaProcStockeeStop))
          . . . faire qq chose
       Fin de si
    Jusque(<>MaProcStockeeStop)
    <>MaProcStockeeStop:=Faux
    <>MaProcStockeeNum:=0

    ` MaProcStockee_Stop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
      C_ENTIER LONG(<>MaProcStockeeNum)
    Si(Type application = 4D Client)
      ` Verifier que la proc. stockee est lancee `
      LIRE VARIABLE PROCESS(-1;<>MaProcStockeeNum;<>MaProcStockeeNum)
      ` En interprété, si on appelle MaProcStockee_Stop depuis un poste client `
      ` alors que le serveur n'a jamais rencontréé <>MaProcStockeeNum `
       `on reçoit une variable indéfinie. Ca pourra correspondre au cas `
    `  où on appelle MaProcStockee_Stop depsuis un client sans que `
       ` MaProcStockee_Start ait été appelée `
    Si(Type(<>MaProcStockeeNum)=Est une variable indefinie)
         C_ENTIER LONG(<>MaProcStockeeNum)
         <>MaProcStockeeNum:=0
       Fin de si
      ` Lancer la chose sur le serveur, si besoin  `
      Si(<>MaProcStockeeNum#0)
          $L_ignore:=Executer sur serveur(Nom methode courante;192*1027;"StopLeTruc")
       Fin de si
       <>MaProcStockeeNum:=0
    Sinon
     ` 4D Server/4D Mono `
      C_ENTIER LONG(<>MaProcStockeeNum)
      Si(<>MaProcStockeeNum#0)
        <>MaProcStockeeStop :=Vrai
         REACTIVER PROCESS(<>MaProcStockeeNum)
      Fin de si
    Fin de si

    Voilà. Comme ça, c'est plus simple à utiliser (je trouve). On appelle MaProcStockee_Start un coup et MaProcStockee_ quand on veut qu'elle s'arrête.

    Thibaud

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 51
    Points
    51
    Par défaut
    Merci Thibaud,

    Le problème est résolu.

    Maxime

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Réponses: 4
    Dernier message: 02/11/2009, 16h22
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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