PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Comparer et mettre à jour deux tables
Comparer et mettre à jour deux tables
Débuté par louisfalter, 04 nov. 2013 07:02 - 3 réponses
Posté le 04 novembre 2013 - 07:02
Bonjour,

Voici mon petit problème :

Je doit comparer deux tables (Table1 et Table2) remplie par programmation. Le but est de comparer les deux table afin qu'ils soit identique. En gros, Table1 doit être identique à Table2 et si non identique, copier la ligne de Table1 à Table2.

J'ai testé avec :
POUR TOUTE LIGNE SELECTIONNEE DE Table2

FIN


Mais je vous avoue que je ne sais pas trop quoi mettre.
J'ai tenté d'effectuer, avec POUR TOUTE LIGNE SELECTIONNEE de rechercher la ligne sélectionnée dans la ligne de Table2 et donc de copier la ligne dans Table2 et ainsi de suite. Mais rien de bien probant.

Avez vous une idée de la marche à suivre ?

Je vous remercie d'avance.
Membre enregistré
1 418 messages
Posté le 04 novembre 2013 - 21:39
Bonjour

1° les deux tables ont elles ma même structures

2° les lignes de données ont elles un identifiant unique
si oui on fera la comparaison sur cette identifiant, sinon on devra faire la comparaison sur les infos contenues dans chaque colonnes


nPositionLigne est un entier // position dans mon 1° tableau

nPosTrouvée est un entier // position trouvée dans mon 2° tableau

bEstTrouvé est un booléen


//1° posibilité j'ai une colonne avec un Identifiant unique
POUR TOUTE LIGNE nPositionLigne DE TABLE_SansNom1 // SELECTIONNEE je l'enlève pour passer sur toutes les lignes
nPosTrouvée = TableCherche(TABLE_SansNom2.COL_Col_a,TABLE_SansNom1.COL_Col_a[nPositionLigne])

SI nPosTrouvée < 1 ALORS
// je n'ai pas trouvé de correspondance donc j'ajoute dans le 2° tableau

TableAjouteLigne(TABLE_SansNom2,TABLE_SansNom1.COL_Col_a[nPositionLigne],TABLE_SansNom1.COL_Col_xx[nPositionLigne],TABLE_SansNom1.COL_MAcol[nPositionLigne])
// ou
// TableAjoute(TABLE_SansNom2,TABLE_SansNom1.COL_Col_a[nPositionLigne]+tab+TABLE_SansNom1.COL_Col_xx[nPositionLigne]+tab+TABLE_SansNom1.COL_MAcol[nPositionLigne])
FIN


FIN


//2° posibilité je n'ai pas d'identifiant unique et donc je dois comparer sur toutes les colonnes

POUR TOUTE LIGNE nPositionLigne DE TABLE_SansNom1 // SELECTIONNEE je l'enlève pour passer sur toutes les lignes
bEstTrouvé = Faux
POUR TOUTE LIGNE nPosTrouvée DE TABLE_SansNom2 // SELECTIONNEE je l'enlève pour passer sur toutes les lignes
SI TABLE_SansNom1.COL_Col_a[nPositionLigne] = TABLE_SansNom2.COL_Col_a[nPosTrouvée] ET TABLE_SansNom1.COL_Col_xx[nPositionLigne] = TABLE_SansNom2.COL_Col_xx[nPosTrouvée] ET TABLE_SansNom1.COL_MAcol[nPositionLigne]= TABLE_SansNom2.COL_MAcol[nPosTrouvée] ALORS
bEstTrouvé = Vrai
SORTIR // comme j'ai trouvé une correspondance je sors de ma boucle
FIN
FIN
SI PAS bEstTrouvé = Vrai ALORS
TableAjouteLigne(TABLE_SansNom2,TABLE_SansNom1.COL_Col_a[nPositionLigne],TABLE_SansNom1.COL_Col_xx[nPositionLigne],TABLE_SansNom1.COL_MAcol[nPositionLigne])
// ou
// TableAjoute(TABLE_SansNom2,TABLE_SansNom1.COL_Col_a[nPositionLigne]+tab+TABLE_SansNom1.COL_Col_xx[nPositionLigne]+tab+TABLE_SansNom1.COL_MAcol[nPositionLigne])


FIN

FIN



Après on peut optimisé, avec les fonctions tableenumere, et en utilisant des indirections, mais cela sera pour l'année prochaine

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Posté le 07 août 2019 - 06:49
Bonjour,

Merci Voroltinquo avec ton lien, j'ai pu me débrouiller :)
Membre enregistré
2 messages
Posté le 11 novembre 2022 - 21:53
Merci beaucoup pour ce code :)