PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Comment savoir qu'un champ relié à une table a été modifié ?
Comment savoir qu'un champ relié à une table a été modifié ?
Iniciado por obtuli, 12,ago. 2019 09:44 - 15 respuestas
Miembro registrado
961 mensajes
Publicado el 12,agosto 2019 - 09:44
Bonjour,

Comment peut-on savoir si un champ de saisie relié à une table a été modifié ?

Dans une fenêtre il y a plusieurs tables en jeux et j'aimerais ne mettre à jour que la table dont les champs on été modifiés dans la fenêtre. Il y a bien la partie de code "A chaque modification" dans la fenêtre ou le champ lui même, mais y a t-il une fonction hyperfile ou autre ?

merci

OB
Miembro registrado
1.640 mensajes
Publicado el 12,agosto 2019 - 10:26
Hello,

Je ne suis pas sur que ça fonctionne, a tester.

Lorsque tu charge tes données, tu créé un enregistrement de cette table :
enrMonFichier est un Enregistrement de MonFichier
FichierVersMémoire(MonFichier,enrMonFichier)

Ainsi tu stock un copie de ton fichier initial

Ensuite, lors de la sauvegarde, tu fais :

EcranVersFichier(FEN_MaFenetre,MonFichier)
SI MonFichier <> enrMonFIchier ALORS HModifie(MonFichier)

C'est sur cette partie que je ne suis pas sur.. je ne sais pas si ont peut comparer aussi facilement un enregistrement et son fichier de données..

Il y a peu etre une autre maniere, mais la comme ca, je n'en vois pas.
Mensaje modificado, 12,agosto 2019 - 10:27
Miembro registrado
4.361 mensajes
Publicado el 12,agosto 2019 - 11:49
Bonjour,
La propriété ..Modifié devrait faire l'affaire. https://doc.pcsoft.fr/fr-FR/?2510080.

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
12 mensajes
Publicado el 12,agosto 2019 - 11:51
Bonjour,

Je suppose que vous voulez dire "un champ lié à une rubrique" (pas un champ table mais une rubrique de fichier)

Pour ce que vous souhaitez, il suffit d'utiliser la propriété modifié sur le champ :
https://doc.pcsoft.fr/fr-FR/?2510080
Miembro registrado
4.361 mensajes
Publicado el 12,agosto 2019 - 11:57
Dans le langage SGBD classique, une table est ce que Windev appelle un fichier...

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
1.640 mensajes
Publicado el 12,agosto 2019 - 12:19
L’inconvénient de ..modifié est qu'il faut lister champ par champ :(
Miembro registrado
4.361 mensajes
Publicado el 12,agosto 2019 - 13:28
En regroupant les champs à surveiller dans un SC, il n'y a que le SC à tester

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
909 mensajes
Publicado el 12,agosto 2019 - 13:51
et peut être en regroupant les saisies dans un groupe et en testant sur le groupe ;)

--
Christian - kick71
Miembro registrado
1.640 mensajes
Publicado el 12,agosto 2019 - 15:05
Et l'une ou l'autre méthode fonctionne vraiment ?
Les raccourcis de genre de chez PCsoft j'ai mis de coté depuis un moment. Suivi les cas, ça fonctionne.. ou pas !
Miembro registrado
12 mensajes
Publicado el 12,agosto 2019 - 16:25
La question était de savoir si un champ est modifié. Si l'idée est de savoir si plusieurs champs sont modifiés dans ce cas un groupe peut faire l'affaire.

Si c'est tous les champs de la fenêtre à ce moment :

MaFenêtre..modifiée


Quand j'utilise cette propriété, je fait aussi par sécurité je force la valeur

monchamp..modifié


Attention, une modification par programmation d'un champ ou de la fenêtre ne mettra pas la valeur à vrai. Il faut affecter la valeur vrai par programmation dans le traitement.
Miembro registrado
1.640 mensajes
Publicado el 12,agosto 2019 - 18:36
Oui mais il a dit que la fenêtre contenait plusieurs fichiers de données en même temps.
Donc MaFenetre..modifiée ne fonctionnera pas, car elle ne dira pas quel fichier est concerné.
Et puis si tous les champs ne sont pas liés a un fichier de données, pour XXX raisons.. çà ne fonctionnera pas non plus.

Après.... pourquoi ne vouloir mettre a jour QUE ce qui a été modifié ? Un champ horodatage a la modif a été défini peut être ?
Miembro registrado
46 mensajes
Publicado el 12,agosto 2019 - 21:33
Supposons les champs de saisie concernent 3 fichiers : Fichier_A, Fichier_B, Fichier_C.

1- je créé 3 variables : bModFichier_A, bModFichier_B, bModFichier_C sont des booléens
2- quand un champ est modifié, alors je mets sa variable à Vrai, exemple bModFichier_B=Vrai ...
3- à la fin, quand je décide de mettre à jour les fichiers :
SI bModFichier_A = Vrai ALORS
EcranVersFichier(MaFenêtre,Fichier_A)
HModifie(Fichier_A)
FIN

idem tester bModFichier_B
idem tester bModFichier_C ...
Miembro registrado
46 mensajes
Publicado el 12,agosto 2019 - 22:58
Autre solution, plus pratique.
supposons j'ai 3 fichiers : Fichier_A, Fichier_B, Fichier_C

sous l'éditeur, je créé 3 Groupes de champs : GR_Fichier_A, GR_Fichier_B, GR_Fichier_C
je prends les champs du Fichier_A et je les affecte (sous l'éditeur) au groupe GR_Fichier_A, idem champs Fichier_B et Fichier_C
à la fin, quand je décide de mettre à jour les fichiers :
SI GR_Fichier_A..Modifié=Vrai ALORS
EcranVersFichier(MaFenêtre,Fichier_A)
HModifie(Fichier_A)
FIN

idem tester GR_Fichier_B
idem tester GR_Fichier_C
Miembro registrado
12 mensajes
Publicado el 12,agosto 2019 - 23:14
Effectivement j'avais lu en diagonale... dans ce cas les groupes c'est parfait.
Miembro registrado
909 mensajes
Publicado el 13,agosto 2019 - 09:35
Lol
donc ma solution est opérationnelle :merci:

--
Christian - kick71
Miembro registrado
961 mensajes
Publicado el 13,agosto 2019 - 09:39
Bonjour,

Merci pour vos réponses.
D'habitude le lance une procédure dans la partie de code "A chaque modification" pour chaque champ de saisie ou au niveau de la fenêtre, mais comme il y a de nombreux champs de saisie sur plusieurs tables (fichiers) je cherchais un truc simple et plus rapide, sans être obligé de sauver
toutes les tables (fichiers) et de surveiller chaque saisie.

L'idée du "groupe" semble un bon compromis, j'ignorais que la propriété "Modifié" pouvait s'appliquer à un groupe (je me sert du groupe que pour changer l'état comme invisible, grisé ....) .

J'espérais une solution du style matable.modifié (pour indiquer qu'entre le dernier fichierversecran et les champs de saisie en cours, des modifications avaient été faites). Une nouvelle fonctionnalité pour la version 26 ? (j'imagine que la version 25 est déjà bouclée :))

Encore merci pour vos réponses.

OB