PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2025 → copie de données de 3 tables différentes
copie de données de 3 tables différentes
Started by priv!zn4pMun4z10-r+s4, Jul., 31 2025 12:07 PM - 7 replies
Registered member
4 messages
Posted on July, 31 2025 - 12:07 PM
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
Registered member
21 messages
Posted on July, 31 2025 - 1:07 PM
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
Registered member
2,299 messages
Posted on July, 31 2025 - 2:56 PM
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 modified, July, 31 2025 - 3:00 PM
Registered member
21 messages
Posted on July, 31 2025 - 3:13 PM
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
Posted on July, 31 2025 - 3:36 PM
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


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!
Posted on July, 31 2025 - 3:59 PM
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




Registered member
2,299 messages
Posted on July, 31 2025 - 4:34 PM
Rebonjour,

POUR TOUT a été "inventé" dans WinDev après TANT QUE.
Il est beaucoup plus simple a utilisé :D
// Parcourir les enregistrements du fichier Candidat
POUR TOUT Candidats
// Vérifier si l'enregistrement existe déjà dans le fichier Personnes
HLitRecherchePremier(PERSONNE, "NOM", Candidats.NOM)
SI HTrouve(PERSONNE) = Faux ALORS
// L'enregistrement n'existe pas, copier
HCopieEnreg(PERSONNE, Candidats)
HAjoute(PERSONNE)
FIN
FIN

--
Bon dev,
Jean-Pierre
Message modified, July, 31 2025 - 4:37 PM
Posted on July, 31 2025 - 7:43 PM
Jean-Pierre BLOCH a écrit :
Rebonjour,

POUR TOUT a été "inventé" dans WinDev après TANT QUE.
Il est beaucoup plus simple a utilisé :D
// Parcourir les enregistrements du fichier Candidat
POUR TOUT Candidats
// Vérifier si l'enregistrement existe déjà dans le fichier Personnes
HLitRecherchePremier(PERSONNE, "NOM", Candidats.NOM)
SI HTrouve(PERSONNE) = Faux ALORS
// L'enregistrement n'existe pas, copier
HCopieEnreg(PERSONNE, Candidats)
HAjoute(PERSONNE)
FIN
FIN

--
Bon dev,
Jean-Pierre


Merci pour l'info !!