|
| copie de données de 3 tables différentes |
| Débuté par priv!zn4pMun4z10-r+s4, 31 juil. 2025 12:07 - 7 réponses |
| |
| | | |
|
| |
Membre enregistré 4 messages |
|
| Posté le 31 juillet 2025 - 12:07 |
Bonjour à vous!! Dans ma bd j'ai trois tables depuis lesquelles je dois partager des infos, je m'explique : Une table Candidats, une table Personne, et une table groupes. Je dois copier dans la table Candidats les enregistrements "NOM" dans la table Personnes dans la colonne "NOM" si l'enregistrement n'existe pas et en même temps copier le premier enregistrement "LIBGROUPE" de mon fichier Groupes! J'ai créer ce code a cet effet :
// Ouvrir les fichiers HOuvre(Candidats) HOuvre(PERSONNE) HOuvre(GROUPES)
// Parcourir les enregistrements du fichier Candidat HLitPremier(Candidats, "NOM") TANTQUE PAS HEnDehors(Candidats) // Vérifier si l'enregistrement existe déjà dans le fichier Personnes HLitRecherche(PERSONNE, "NOM", Candidats.NOM) SI HErreur() = Non ALORS // L'enregistrement existe déjà, ne pas copier HLitSuivant(Candidats, "NOM") CONTINUER SINON // L'enregistrement n'existe pas, copier HCopieEnreg(PERSONNE, Candidats) HAjoute(PERSONNE) FIN // Ajouter le premier enregistrement du fichier Groupes HLitPremier(GROUPES, "LIBGROUPE") HCopieEnreg(PERSONNE, GROUPES) HAjoute(PERSONNE) // Passer à l'enregistrement suivant du fichier Candidat HLitSuivant(Candidats, "NOM") FIN
// Fermer les fichiers HFerme(Candidats) HFerme(PERSONNE) HFerme(GROUPES)
Là ou le bas blesse c'est qu'il ne se passe rien, pas de message d'erreur, pas de plantage rien du tout, donc voilà si une âme charitable veut bien aider un vieux machin qui a du mal a avancer ! Par avance Merci pour votre aide |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 21 messages |
|
| Posté le 31 juillet 2025 - 13:07 |
Bonjour, C'est assez ironique, le problème de votre code c'est qu' il ne fonctionnerait vaguement que s'il y avait une erreur.
Ormis cela, les structures de vos 3 tables sont les mêmes ? étonnant... Les hcopieenreg() me semblent assez risqués.
Pour le principe uniquement vous pouvez vous inspirer de ceci :
HLitPremier(GROUPE,"LIBGROUPE") Pour TOUT candidats SI PAS HLitRecherchePremier(PERSONNE,"NOM",candidats.nom",hidentique) ALORS
//vos traitements d'ajout dans la table PERSONNE ici
FIN FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 299 messages |
|
| Posté le 31 juillet 2025 - 14:56 |
Bonjour,
1. Pour simplifier la discussion, employez le terme WinDev fichier plutôt que table.
2. Le code :
HLitRecherche(PERSONNE, "NOM", Candidats.NOM) SI HErreur() = Non ALORS
est impropre ! Vous testez s'il y a une erreur ce qui ne dit rien de si la recherche a abouti ou non.
HLitPremier(Candidats, "NOM") TANTQUE PAS HEnDehors(Candidats)
HLitRecherchePremier(PERSONNE, "NOM", Candidats.NOM) SI HTrouve(PERSONNE) = Vrai ALORS HLitSuivant(Candidats, "NOM") SINON HCopieEnreg(PERSONNE, Candidats) HAjoute(PERSONNE) FIN FIN
-- Bon dev, Jean-PierreMessage modifié, 31 juillet 2025 - 15:00 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 21 messages |
|
| Posté le 31 juillet 2025 - 15:13 |
Hello Jean Pierre Manque le hlitSuivant si l'ajout est effectué, boucle infinie garantie.
Il vaut mieux inverser la condition du Htrouve() et mettre systematiquement le hlitsuivant en fin de boucle.
Bon dev.
Jean-Pierre BLOCH a écrit :
Bonjour,
1. Pour simplifier la discussion, employez le terme WinDev fichier plutôt que table.
2. Le code : // Vérifier si l'enregistrement existe déjà dans le fichier Personnes HLitRecherche(PERSONNE, "NOM", Candidats.NOM) SI HErreur() = Non ALORS
est impropre ! Vous testez s'il y a une erreur ce qui ne dit rien de si la recherche a abouti ou non. // Parcourir les enregistrements du fichier Candidat HLitPremier(Candidats, "NOM") TANTQUE PAS HEnDehors(Candidats) // Vérifier si l'enregistrement existe déjà dans le fichier Personnes HLitRecherchePremier(PERSONNE, "NOM", Candidats.NOM) SI HTrouve(PERSONNE) = Vrai ALORS // L'enregistrement existe déjà, ne pas copier HLitSuivant(Candidats, "NOM") SINON // L'enregistrement n'existe pas, copier HCopieEnreg(PERSONNE, Candidats) HAjoute(PERSONNE) FIN FIN
-- Bon dev, Jean-Pierre Message modifié, 31 juillet 2025 - 15:00
|
| |
| |
| | | |
|
| | |
| |
| Posté le 31 juillet 2025 - 15:36 |
Jean-Pierre BLOCH a écrit :
Bonjour, 1. Pour simplifier la discussion, employez le terme WinDev fichier plutôt que table. 2. Le code : HLitRecherche(PERSONNE, "NOM", Candidats.NOM) SI HErreur() = Non ALORS
est impropre ! Vous testez s'il y a une erreur ce qui ne dit rien de si la recherche a abouti ou non. HLitPremier(Candidats, "NOM") TANTQUE PAS HEnDehors(Candidats)
HLitRecherchePremier(PERSONNE, "NOM", Candidats.NOM) SI HTrouve(PERSONNE) = Vrai ALORS HLitSuivant(Candidats, "NOM") SINON HCopieEnreg(PERSONNE, Candidats) HAjoute(PERSONNE) FIN FIN
-- Bon dev, Jean-Pierre
Merci à vous !! Je suis un vieux machin qui n'a plus touché un clavier depuis quelques années, suite a la demande de ma fille je tente de lui développer un petit programme de gestion d'interim, ma mémoire est loin d'être vaillante mais je m'accroche, votre aide est tres précieuse pour moi, encore une fois merci! |
| |
| |
| | | |
|
| | |
| |
| Posté le 31 juillet 2025 - 15:59 |
Samir BOUCHETIBAT a écrit :
Bonjour, C'est assez ironique, le problème de votre code c'est qu' il ne fonctionnerait vaguement que s'il y avait une erreur. Ormis cela, les structures de vos 3 tables sont les mêmes ? étonnant... Les hcopieenreg() me semblent assez risqués. Pour le principe uniquement vous pouvez vous inspirer de ceci : HLitPremier(GROUPE,"LIBGROUPE") Pour TOUT candidats SI PAS HLitRecherchePremier(PERSONNE,"NOM",candidats.nom",hidentique) ALORS
//vos traitements d'ajout dans la table PERSONNE ici
FIN FIN
Dites moi POUR TOUT .... OU HLitpremier ne sont pas équivalents dans la lecture des données? je met ici une copie de partie de mon analyse pour plus de compréhension

|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 299 messages |
|
| Posté le 31 juillet 2025 - 16:34 |
Rebonjour,
POUR TOUT a été "inventé" dans WinDev après TANT QUE. Il est beaucoup plus simple a utilisé 
POUR TOUT Candidats
HLitRecherchePremier(PERSONNE, "NOM", Candidats.NOM) SI HTrouve(PERSONNE) = Faux ALORS HCopieEnreg(PERSONNE, Candidats) HAjoute(PERSONNE) FIN FIN
-- Bon dev, Jean-PierreMessage modifié, 31 juillet 2025 - 16:37 |
| |
| |
| | | |
|
| | |
| |
| Posté le 31 juillet 2025 - 19:43 |
Jean-Pierre BLOCH a écrit :
Rebonjour, POUR TOUT a été "inventé" dans WinDev après TANT QUE. Il est beaucoup plus simple a utilisé  POUR TOUT Candidats
HLitRecherchePremier(PERSONNE, "NOM", Candidats.NOM) SI HTrouve(PERSONNE) = Faux ALORS HCopieEnreg(PERSONNE, Candidats) HAjoute(PERSONNE) FIN FIN
-- Bon dev, Jean-Pierre
Merci pour l'info !! |
| |
| |
| | | |
|
| | | | |
| | |
|