|
| TRIGGER - Insert impossible |
| Iniciado por François BOULIER, 30,sep. 2019 13:18 - 10 respuestas |
| |
| | | |
|
| |
Miembro registrado 6 mensajes |
|
| Publicado el 30,septiembre 2019 - 13:18 |
Bonjour, j'ai un problème à vous soumettre. Mon application gère des dossiers contenant des documents. Un dossier à un type et chaque type de dossier contient des documents. Mon analyse est la suivante

Je souhaite par un trigger créer automatiquement les documents dés qu'un dossier est créé. Le trigger est déclenché après insertion dans la table TYPE_DOSSIER Ci dessous le code :
lReq est une Source dede Données lSql est une chaîne lIdEnreg est un entier
lIdEnreg=MonFichier.tdos_id
lSql =[ INSERT INTO PIECE_DOSSIER (DOS_ID, PIE_ID) SELECT %1, TYPE_PIECE.TPIE_ID FROM TYPE_PIECE ] lSql = ChaîneConstruit(lSql, lIdEnreg) HExécuteRequêteSQL(lReq,hRequêteDéfaut,lSql) HLibèreRequête(lReq)
Ce code ne marche pas et je ne comprends pas pourquoi. Par avance merci pour votre aide.
FrançoisMensaje modificado, 30,septiembre 2019 - 13:21 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 160 mensajes |
|
| Publicado el 30,septiembre 2019 - 14:13 |
INSERT INTO PIECE_DOSSIER (DOS_ID, PIE_ID) **VALUES** SELECT %1, TYPE_PIECE.TPIE_ID FROM TYPE_PIECE
Il manque 'Values' je crois |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 30,septiembre 2019 - 14:47 |
Bonjour,
Il manque 'Values' je crois Non il ne manque pas de values.
@François BOULIER As-tu un message d'erreur à nous communiquer car là à part la boule de cristal il ne reste pas grand chose...
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 69 mensajes |
|
| Publicado el 30,septiembre 2019 - 15:12 |
Bonjour François,
Pour facilité les tests, je te conseille d'utiliser un hajoute() qui sera plus bavard lors de son retour d'erreur.
J'ai aussi un doute sur la possibilité d'utilisation de HDécritTrigger avec un INSERT sur un HF classic.
Bon développement |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 6 mensajes |
|
| Publicado el 30,septiembre 2019 - 22:23 |
Bonjour freak per et merci pour ton aide
J'ai essayé de rajouter VALUES mais sans succès A noter que ce code fonctionne bien lorsqu'il est placé dans une procédure locale d'une fenêtre de mon application WINDEV 24 Mais par conter dans la procédure stockée de mon trigger, il ne fonctionne pas.
CI dessous la trace d'erreur
Erreur à la ligne 17 du traitement Procédure locale CréerTypeDossier. Vous avez appelé la fonction HExécuteRequêteSQL. Erreur renvoyée par le serveur <:4900> : Une erreur WLangage s'est produite pendant l'exécution de la procédure stockée <psWD_NOTFORGET.pTypeDossierCreer>.
----- Informations techniques -----
Projet : NOTFORGET
Appel WL : Traitement de 'Procédure locale CréerTypeDossier' (FEN_MAIN.PROCEDURE.CréerTypeDossier), ligne 17 Fonction 'HExécuteRequêteSQL', syntaxe 9
Que s'est-il passé ? Erreur renvoyée par le serveur <:4900> : Une erreur WLangage s'est produite pendant l'exécution de la procédure stockée <psWD_NOTFORGET.pTypeDossierCreer>.
Code erreur : 75003 Niveau : erreur non fatale Code erreur WD55 : 5003
Dump de l'erreur du module 'WDHFSRV64.DLL' (24.0.50.1). Identifiant des informations détaillées (.err) : 73407 Informations de débogage : IEWDHFSRV=118.27 Module=<WDHFSRV> Version=<24.0.50.1> Fonction (7,55) Informations supplémentaires : EIT_TYPE_WDFILE : <2> EIT_IDCODE : <458752> EIT_SERVEURCS : <:4900> EIT_LOGICALTABLENAME : <_SOURCE_lReq_7> EIT_PILEWL : Procédure locale CréerTypeDossier (FEN_MAIN.PROCEDURE.CréerTypeDossier), ligne 17 Procédure locale EnregistrerTypeDossier (FEN_MAIN.PROCEDURE.EnregistrerTypeDossier), ligne 6 Clic sur BTN_Sauver (FEN_MAIN.RUB_MAIN.BTN_Sauver), ligne 5 EIT_DATEHEURE : 30/09/2019 22:20:00
----- Sous-erreur n°1 -----
Code erreur : 0 Niveau : pas d'erreur
Informations supplémentaires : EIT_TYPE_WDFILE : <0> EIT_IDCODE : <-1>
J'espère que vous pourrez m'aider par avance merciMensaje modificado, 30,septiembre 2019 - 22:26 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 6 mensajes |
|
| Publicado el 30,septiembre 2019 - 22:25 |
Marret, Philippe, je n'avais pas vu vos message. Merci pour votre aide Dans le post précédent la trace d'erreur |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 30,septiembre 2019 - 23:06 |
Bonjour, A priori, tu utilises HF Classic. HF Classic n'autorise pas l'utilisation des procédures stockées cf https://doc.pcsoft.fr/?3044360. Pour utiliser les triggers, il faut se servir des fonctions HXXXTrigger. Ton code ressemblera alors à ça
HDécritTrigger("Type_Dossier","HAjoute","AjoutDossier",hTriggerAprès)
Procedure AjoutDossier PIECE_DOSSIER.ID_DOS=TYPE_DOSSIER.TDOS_ID HAjoute(PIECE_DOSSIER) ATTENTION, il faut bien utiliser HAjoute et non une requête SQL pour activer le déclenchement du trigger.
-- Il y a peut être plus simple, mais, ça tourneMensaje modificado, 30,septiembre 2019 - 23:25 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 6 mensajes |
|
| Publicado el 01,octubre 2019 - 23:29 |
Merci voroltinquo pour ta contribution. Je suis bien en HF client serveur; qu'est ce qui te fait dire que je suis en Classic ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 6 mensajes |
|
| Publicado el 02,octubre 2019 - 01:19 |
voroltinquo merci mercI merCI meRCI mERCI MERCI !!!!!!! Tu as raison le SQL n'est pas autorisé dans HF CLASSIC mais aussi dans HF CLIENT SERVEUR. J'ai supprimé le SQL au profit de HAJOUTE Et ça marche !!!
Ci dessous mon code de remplacement
lIdEnreg est un entier
lIdEnreg=MonFichier.tdos_id PIECE_DOSSIER.TDOS_ID = lIdEnreg PIECE_DOSSIER.TPIE_ID = 1 HAjoute(PIECE_DOSSIER) Je dois encore résoudre un problème. Dans mon code je ne créé que la pièce 1 du dossier lIdEnreg Moi je veux créer toutes les pièces du dossier lIdEnreg
En tout cas merci à tous pour votre aideMensaje modificado, 02,octubre 2019 - 01:19 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 6 mensajes |
|
| Publicado el 02,octubre 2019 - 02:05 |
It's done have a good night
lIdEnreg est un entier = MonFichier.tdos_id CléParcours est une chaîne = HFiltre(TYPE_PIECE, "TPIE_SUPPRIME<>1")
HLitPremier(TYPE_PIECE, CléParcours) TANTQUE HEnDehors() = Faux PIECE_DOSSIER.TDOS_ID = lIdEnreg PIECE_DOSSIER.TPIE_ID = TYPE_PIECE.TPIE_ID HAjoute(PIECE_DOSSIER) HLitSuivant(TYPE_PIECE, CléParcours) FIN
HDésactiveFiltre(TYPE_PIECE)
|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 02,octubre 2019 - 09:29 |
Bonjour,
tu dois pouvoir raccourcir ton code en mettant ceci
POUR TOUT TYPE_PIECE AVEC TPIE_SUPPRIME<>1 PIECE_DOSSIER.TDOS_ID = lIdEnreg PIECE_DOSSIER.TPIE_ID = TYPE_PIECE.TPIE_ID HAjoute(PIECE_DOSSIER) FIN
-- Cordialement,
Philippe SAINT-BERTINMensaje modificado, 02,octubre 2019 - 09:29 |
| |
| |
| | | |
|
| | | | |
| | |
|