Pas de problème (pb), que du PowerBuilder (PB) ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 21-09-2016 12:54:38

ben147  
Membre Geek
Lieu: Paris
Date d'inscription: 20-06-2008
Messages: 66
Pépites: 303
Banque: 0
Site web

Désactiver temporairement un trigger depuis PB

Bonjour !
alors , je voudrais savoir : existe-t-il une methode pour désactiver / réactiver un trigger, depuis du code PB ?

sur l'appli sur laquelle je bosse, en gros on a des contrats (table contrat), et à chaque création / modification d'un contrat, on a du texte qui s'ecrit dans une table d'historique.
et on passe par des triggers pour ecrire cet historique.

MAIS il existe un cas, qui est celui d'une duplication de contrat , ou il ne faudrait pas que du texte soit inséré dans l'historique ... du coup j'ai besoin de bloquer ce trigger le temps de cette opération, et le réactiver ensuite.

est-ce que c'est possible ?

Hors ligne

 

#2 21-09-2016 13:47:40

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Désactiver temporairement un trigger depuis PB

Bonjour,
Ca serait plus propre de gérer cela directement dans le trigger. (surtout s'il y a des créations/duplications simultanément)


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 21-09-2016 14:28:56

ben147  
Membre Geek
Lieu: Paris
Date d'inscription: 20-06-2008
Messages: 66
Pépites: 303
Banque: 0
Site web

Re: Désactiver temporairement un trigger depuis PB

oui mais dans le trigger c'est compliqué, vu que ça va dépendre du clic sur un bouton, et qu'il n'y a rien en base qui indique une duplication

Hors ligne

 

#4 21-09-2016 14:30:50

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Désactiver temporairement un trigger depuis PB

Bonjour,

Il suffit juste que tu trouves l'instruction SQL permettant de désactiver les "triggers" correspondant à ton type de base de données (ex : DISABLE TRIGGER ... en TRANSACT-SQL).

Tu l'invoques dans PB avec l'instruction EXECUTE IMMEDIATE, cela devrait faire l'affaire.

Hors ligne

 

#5 21-09-2016 14:35:21

ben147  
Membre Geek
Lieu: Paris
Date d'inscription: 20-06-2008
Messages: 66
Pépites: 303
Banque: 0
Site web

Re: Désactiver temporairement un trigger depuis PB

ah ben oui ça me parait pas mal, ça ....
c'est sur sybase, mais ça doit être la même syntaxe ...
merci !

Hors ligne

 

#6 21-09-2016 14:57:41

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Désactiver temporairement un trigger depuis PB

ben147 a écrit:

oui mais dans le trigger c'est compliqué, vu que ça va dépendre du clic sur un bouton, et qu'il n'y a rien en base qui indique une duplication

Imagine le cas d'une duplication et une création quasi simultanée : le trigger ne sera peut-être pas réactivé à temps.
Il suffit d'ajouter un flag qui sera renseigné lors d'une duplication et de tester ce flag dans le trigger.

Si tu veux vraiment le désactiver/réactiver : un execute immediate avec la syntaxe de ta BDD "disable trigger yyyy"


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#7 22-09-2016 06:39:12

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Désactiver temporairement un trigger depuis PB

Effectivement, je suis d'accord, il serait plus propre d'adapté le trigger (en détournant temporairement le contenu d'une colonne pour indiquer la duplication si tu ne peux pas modifier le schéma de la table)

Sinon, on peut essayer d'éliminer les effets de bord en désactivant le trigger uniquement pour l'utilisateur et la connexion courante.
Sur ASE on a la procédure stockée sp_DisableTriggers pour cela, à voir avec la documentation de ta base pour trouver la commande équivalente.

Hors ligne

 

#8 22-09-2016 09:25:00

ben147  
Membre Geek
Lieu: Paris
Date d'inscription: 20-06-2008
Messages: 66
Pépites: 303
Banque: 0
Site web

Re: Désactiver temporairement un trigger depuis PB

erasorz a écrit:

ben147 a écrit:

oui mais dans le trigger c'est compliqué, vu que ça va dépendre du clic sur un bouton, et qu'il n'y a rien en base qui indique une duplication

Imagine le cas d'une duplication et une création quasi simultanée : le trigger ne sera peut-être pas réactivé à temps.
Il suffit d'ajouter un flag qui sera renseigné lors d'une duplication et de tester ce flag dans le trigger.

Si tu veux vraiment le désactiver/réactiver : un execute immediate avec la syntaxe de ta BDD "disable trigger yyyy"

creer une nouvelle colonne dans ma table pour le flag ?
ah oui non mais ici pour ajouter des colonnes dans les tables, c'est toute une histoire.
non mais je vais faire un execute immediate avec la commande sybase pour désactiver le trigger, c'est moins propre mais ça devrait marcher.
je ferme pas le sujet , là tout de suite, parce que je peux pas commencer le dev avant la semaine prochaine
(oui les branches, ici, ils connaissent pas)

Hors ligne

 

#9 22-09-2016 09:38:55

ben147  
Membre Geek
Lieu: Paris
Date d'inscription: 20-06-2008
Messages: 66
Pépites: 303
Banque: 0
Site web

Re: Désactiver temporairement un trigger depuis PB

ah ben non en fait , l'arrêt temporaire des triggers ça plait pas à ma chef, donc ça va être ajout d'une colonne flag et modif des triggers
voilà !
désolé pour le dérangement
(enfin du coup si j'ai à désactiver des triggers depuis pb, un jour, je saurai faire !

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22