Bonjour,
Merci à vous pour toutes ces informations ! Grâce à cela j'ai pu mettre en place un système qui me convient bien.
Je suis passé par un trigger serveur et une procédure stockée dans le serveur HFSQL C/S.
Voici ce que je fais :
Au moment de l'initialisation de mon programme (après les fameurs HChangeConnexion et HOuvreConnexion) j'implémente une ligne pour créer le trigger serveur si celui-ci n'existe pas avec la fonction suivante :
HDécritTriggerServeur(oConnexionHFSQL,"NOM_DU_TRIGGER",ps_SynchronisationClients,hTriggerAprès,"CLIENT","HAjoute,HModifie,HSupprime")
Dans l'analyse du programme, je créé une procéduré stockée nommée ps_SynchronisationClients :
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
| HDéclareExterne("CLIENT_SYNC.FIC","CLIENT_SYNC","MonMotDePasseFichiersHFSQL")
Merci à vous ! Je passe en résolu
SELON H.FonctionTrigger
CAS "HModifie"
HLitRecherche(CLIENT_SYNC,IDCLIENT,MonFichier.IDCLIENT)
SI HTrouve(CLIENT_SYNC) ALORS
HCopieEnreg(CLIENT_SYNC, MonFichier,hCopieIdAuto)
HModifie(CLIENT_SYNC)
FIN
CAS "HAjoute"
HRAZ(CLIENT_SYNC)
HCopieEnreg(CLIENT_SYNC, MonFichier,hCopieIdAuto)
HAjoute(CLIENT_SYNC,hForceIdAuto)
CAS "HSupprime"
HLitRecherche(CLIENT_SYNC,IDCLIENT,MonFichier.IDCLIENT)
SI HTrouve(CLIENT_SYNC) ALORS
HSupprime(CLIENT_SYNC)
FIN
AUTRE CAS
// Rien à faire
FIN |
Il faut savoir que les fichiers de données ne sont pas positionnés lors de l’exécution d'une procédure stockée appelé par un trigger serveur. Il faut les déclarer par le HDéclareExterne(). Seul le mot-clé MonFichier permet d'être positionné sur le fichier (à l'enregistrement concerné).
J'ai choisi cette solution car il arrive qu'on doivent modifier à la main via le centre de controle HFSQL les données contenues dans le fichier CLIENT (Oui je sais, c'est pas bien ).
Partager