Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
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
Bonjour,
Ca serait plus propre de gérer cela directement dans le trigger. (surtout s'il y a des créations/duplications simultanément)
Hors ligne
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
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
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"
Hors ligne
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
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
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