1.4Lier les champs aux données & manipuler les enregistrements
L'essentiel en 30 secondes
- La liaison champ ↔ rubrique est très productive : ÉcranVersFichier() recopie la saisie vers les rubriques, FichierVersÉcran() fait l'inverse pour l'affichage.
- Les fonctions HFSQL (préfixe H) manipulent les données : HAjoute, HModifie, HSupprime, HLitPremier/Suivant, HLitRecherche, HRAZ.
- Toujours tester HEnDehors après une lecture ou une recherche : sinon on travaille sur des données inexistantes — voire on modifie le mauvais enregistrement.
Mini-cas filé — Yacine branche sa fiche commande sur les données
Yacine a dessiné sa fenêtre « Fiche commande ». Il la branche maintenant sur les données. D'abord il lie chaque champ à sa rubrique : SAI_NomClient ↔ Client.Nom, SAI_Ville ↔ Client.Ville. Ensuite il écrit le code de gestion. Pour créer une commande : il appelle HRAZ pour vider les rubriques, laisse l'utilisateur saisir, puis ÉcranVersFichier() recopie d'un coup la saisie et HAjoute enregistre. Pour rechercher un client par son code, il utilise HLitRecherche puis teste HEnDehors : si rien n'est trouvé, il affiche un message clair au lieu d'exploiter des données fantômes. Grâce aux champs liés, la modification d'une fiche tient en quelques lignes. Yacine retient : la liaison automatise l'échange écran/fichier, et le test HEnDehors est un réflexe obligatoire.
Cas autonome de cette section : il revient dans le cours, le schéma, le script et le défi 48h de la section 1.4.
1. La liaison champ ↔ rubrique
Voici l'un des mécanismes les plus productifs de WinDev : la LIAISON entre les champs d'une fenêtre et les rubriques de l'analyse. Quand un champ est lié à une rubrique (SAI_NomClient ↔ Client.Nom), WinDev sait où prendre et où ranger la valeur.
Deux fonctions font alors tout le travail : ÉcranVersFichier() (recopie la saisie de l'écran vers les rubriques, avant enregistrement) et FichierVersÉcran() (recopie les valeurs du fichier vers les champs, pour l'affichage). Fini les dizaines d'affectations manuelles — et une source d'erreurs en moins.
2. Les fonctions HFSQL
Pour manipuler les données, le WLangage fournit les fonctions HFSQL, toutes préfixées par H : HAjoute (ajouter), HModifie (mettre à jour l'enregistrement en cours), HSupprime, HLitPremier / HLitDernier / HLitSuivant / HLitPrécédent (se déplacer), HLitRecherche (chercher sur une clé) et HRAZ (vider les rubriques en mémoire avant une saisie).
Notion clé : l'ENREGISTREMENT EN COURS. À un instant donné, un enregistrement est « courant » en mémoire, et c'est lui que HModifie ou HSupprime affecteront. Se tromper d'enregistrement courant est une erreur classique.
3. Le réflexe HEnDehors
Après une lecture ou une recherche, HEnDehors indique si l'on est en dehors du fichier : rien trouvé, ou fin atteinte. Il faut toujours la tester avant d'exploiter le résultat.
Le cycle typique d'une fiche est donc : HRAZ → saisie → ÉcranVersFichier → HAjoute (ou HModifie). Oublier le test HEnDehors, c'est afficher des données résiduelles, voire modifier le mauvais enregistrement — une corruption silencieuse qu'il faut absolument éviter.
🔎 Exemple concret — 🔎 Exemple concret — Enregistrer et rechercher une fiche
Le cycle de Yacine pour sa fiche commande :
// Créer une nouvelle commande (champs liés)
HRAZ(Commande) // vider les rubriques en mémoire
// ... l'utilisateur saisit dans les champs liés ...
ÉcranVersFichier(Commande) // recopier la saisie vers les rubriques
HAjoute(Commande) // enregistrer le nouvel enregistrement
// Rechercher un client, puis TOUJOURS tester HEnDehors
HLitRecherche(Client, IDClient, 1042)
SI HEnDehors(Client) ALORS
Info("Client introuvable : vérifiez le code.")
SINON
FichierVersÉcran(Client) // afficher la fiche trouvée
FIN
Lecture : deux appels (ÉcranVersFichier / FichierVersÉcran) remplacent des dizaines d'affectations ; le test HEnDehors protège contre une recherche vide.
Réflexe : HEnDehors se teste immédiatement après la lecture ou la recherche, avant toute exploitation.
Vocabulaire de la section
- Champ lié à une rubrique
- Champ d'écran associé à une rubrique (SAI_NomClient ↔ Client.Nom) : WinDev sait lire et enregistrer la valeur automatiquement.
Exemple simple : Yacine lie SAI_Ville à Client.Ville dans sa fenêtre.
Ce que ce n'est pas : recopier chaque valeur à la main dans le code, champ par champ.
Réflexe : un champ d'écran ↔ une rubrique → les lier.
- ÉcranVersFichier / FichierVersÉcran
- Les deux fonctions clés de la liaison : ÉcranVersFichier recopie la saisie vers les rubriques ; FichierVersÉcran recopie les valeurs du fichier vers les champs.
Exemple simple : Yacine appelle ÉcranVersFichier juste avant HAjoute.
Ce que ce n'est pas : affecter manuellement trente rubriques et en oublier une.
Réflexe : transfert écran ↔ fichier → ces deux fonctions.
- Fonctions HFSQL (préfixe H)
- Fonctions de manipulation des données : HAjoute, HModifie, HSupprime, HLitPremier/Suivant/Précédent/Dernier, HLitRecherche, HRAZ.
Exemple simple : Yacine ajoute une commande avec HAjoute et la relit avec HLitRecherche.
Ce que ce n'est pas : modifier un enregistrement en écrivant directement dans le fichier.
Réflexe : données → fonctions préfixées par H.
- Enregistrement en cours
- Enregistrement « courant » en mémoire : c'est lui que HModifie ou HSupprime affecteront.
Exemple simple : Yacine se positionne sur le bon client avant d'appeler HModifie.
Ce que ce n'est pas : appeler HModifie sans s'être positionné sur le bon enregistrement.
Réflexe : modifier/supprimer → vérifier l'enregistrement en cours.
- HEnDehors (à tester)
- Indique qu'on est en dehors du fichier après une lecture ou une recherche (rien trouvé, ou fin atteinte) ; à tester systématiquement.
Exemple simple : Yacine affiche « Client introuvable » quand HEnDehors est vrai.
Ce que ce n'est pas : exploiter le résultat d'une recherche sans tester HEnDehors.
Réflexe : après lecture/recherche → tester HEnDehors.
En pratique — En pratique — Enregistrer et relire une fiche
- LIEZ les champs de la fenêtre aux rubriques correspondantes de l'analyse (SAI_NomClient ↔ Client.Nom) via les propriétés du champ.
- Pour une CRÉATION : appelez HRAZ pour vider les rubriques, laissez l'utilisateur saisir, puis ÉcranVersFichier suivi de HAjoute.
- Pour une MODIFICATION : positionnez-vous sur le bon enregistrement (HLitRecherche), affichez-le avec FichierVersÉcran, puis après saisie ÉcranVersFichier et HModifie.
- TESTEZ SYSTÉMATIQUEMENT HEnDehors après toute lecture ou recherche, avant d'exploiter le résultat.
Script pas-à-pas — brancher la fiche comme Yacine (4 min)
1) Liez chaque champ à sa rubrique (SAI_NomClient ↔ Client.Nom) dans les propriétés du champ. 2) Création : HRAZ, saisie de l'utilisateur, ÉcranVersFichier, HAjoute. 3) Modification : HLitRecherche pour se positionner, FichierVersÉcran pour afficher, puis ÉcranVersFichier et HModifie. 4) Après chaque lecture ou recherche, testez HEnDehors et traitez le cas « non trouvé ». 5) Suppression : positionnez-vous puis HSupprime.
Ne jamais enchaîner une écriture après une recherche sans avoir testé HEnDehors.
Modèle copier-coller — le cycle de fiche de Yacine
// Création
HRAZ(Fichier)
< saisie de l'utilisateur >
ÉcranVersFichier(Fichier)
HAjoute(Fichier)
// Recherche + contrôle
HLitRecherche(Fichier, Clé, valeur)
SI HEnDehors(Fichier) ALORS
< cas non trouvé >
SINON
FichierVersÉcran(Fichier)
FIN
// Modification / Suppression (enregistrement en cours)
ÉcranVersFichier(Fichier)
HModifie(Fichier) // ou HSupprime(Fichier)
Consultation en lecture seule
Yacine n'utilise que HLitRecherche puis FichierVersÉcran pour afficher une commande, sans enregistrer.
Ajout depuis une table
Depuis la table des commandes, Yacine ouvre la fiche d'ajout, HRAZ, ÉcranVersFichier, HAjoute, puis rafraîchit la table.
Recherche infructueuse
Quand HEnDehors est vrai, Yacine propose de créer un nouveau client au lieu d'afficher une fiche vide.
Transfert manuel
Pour un champ calculé (le total TTC), Yacine calcule la valeur puis l'affecte à la main, sans champ lié.
✓ Bonnes pratiques
- Lier les champs aux rubriques plutôt que d'affecter à la main.
- Utiliser ÉcranVersFichier / FichierVersÉcran avant d'enregistrer ou d'afficher.
- Tester HEnDehors après toute lecture ou recherche.
✗ Pièges fréquents
- Oublier le test HEnDehors après une recherche.
- Modifier le mauvais enregistrement (enregistrement en cours).
- Réécrire à la main des dizaines d'affectations au lieu des champs liés.
Points clés à retenir
- La liaison champ ↔ rubrique est très productive : ÉcranVersFichier recopie la saisie, FichierVersÉcran affiche les valeurs.
- Les fonctions HFSQL (préfixe H) manipulent les données : HAjoute, HModifie, HSupprime, HLit…, HLitRecherche, HRAZ.
- L'enregistrement en cours est celui que HModifie ou HSupprime affectent : se tromper est une erreur classique.
- Réflexe obligatoire : tester HEnDehors après toute lecture ou recherche avant d'exploiter le résultat.
Défi 48h — appliquez demain
Prenez un fichier de votre analyse et écrivez, comme Yacine, le cycle complet d'une fiche : HRAZ → ÉcranVersFichier → HAjoute, puis une recherche HLitRecherche suivie du test HEnDehors. Écrivez en une phrase ce qui se passe si on oublie de tester HEnDehors.
- Je sais lier les champs d'une fenêtre aux rubriques de l'analyse.
- Je sais ajouter, rechercher et modifier un enregistrement avec les fonctions HFSQL.
- J'ai le réflexe de tester HEnDehors après chaque lecture ou recherche.
Questions fréquentes
Pourquoi faut-il systématiquement tester HEnDehors après une recherche ?
Parce qu'une recherche peut ne rien trouver. Sans ce test, le code continue en exploitant les valeurs résiduelles de la mémoire — souvent le dernier enregistrement lu — et l'application affiche des données fausses sans planter. Pire : enchaîner un HModifie après une recherche infructueuse peut modifier un enregistrement qui n'était pas celui visé. On teste donc HEnDehors immédiatement après la lecture ou la recherche, avant toute exploitation.
Quelle différence entre les champs liés et le code manuel ?
Les champs liés automatisent le transfert écran ↔ fichier via ÉcranVersFichier / FichierVersÉcran : c'est rapide, sûr et à privilégier. Le code manuel (affectations une par une) reste utile pour les cas particuliers : données transformées à l'affichage (calcul, conversion) ou champs non liés (filtres, totaux, indicateurs). Sur une fiche de trente champs, les champs liés font gagner un temps considérable et évitent bien des oublis.
Comment enregistre-t-on les données saisies dans une fenêtre liée ?