1.4 · Lier les champs aux données & manipuler les enregistrements

Niveau 1 · Débutant : première application

1.4Lier les champs aux données & manipuler les enregistrements

Objectif : Relier les champs aux rubriques et manipuler les enregistrements (HAjoute, HModifie…) en testant toujours HEnDehors.
Temps estimé : 11 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

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.

Erreur d'interprétation fréquente : « Une recherche qui ne trouve rien ne pose pas de problème : j'enchaîne quand même ». Non, c'est exactement le piège. Sans test de HEnDehors, le code exploite des valeurs résiduelles (le dernier enregistrement lu) et l'application affiche des données fausses sans planter ; pire, un HModifie après une recherche infructueuse peut modifier le mauvais enregistrement. Yacine teste systématiquement HEnDehors et traite le cas « non trouvé » avant toute exploitation.
Le cycle d'une fiche Vider, recopier, enregistrer — et toujours contrôler le résultat. HRAZ Vider lesrubriques en mémoireÉcranVersFichier Saisie→ rubriquesHAjoute / HModifie Enregistrerl'enregistrement
Vider, recopier, enregistrer — et toujours contrôler le résultat.
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Yacine, développeur WinDev dans une PME de négoce de matériel électrique à Oran, lie les champs de sa fenêtre commande aux rubriques (SAI_NomClient ↔ Client.Nom). 2) Pour créer une commande, il enchaîne HRAZ → saisie → ÉcranVersFichier → HAjoute ; pour modifier, il se positionne avec HLitRecherche, affiche avec FichierVersÉcran puis enregistre avec HModifie. 3) Après chaque recherche, il teste HEnDehors : si rien n'est trouvé, il affiche un message clair au lieu d'exploiter des données fantômes. Leçon : la liaison automatise l'échange écran/fichier, et tester HEnDehors est un réflexe obligatoire.

🔎 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

  1. LIEZ les champs de la fenêtre aux rubriques correspondantes de l'analyse (SAI_NomClient ↔ Client.Nom) via les propriétés du champ.
  2. Pour une CRÉATION : appelez HRAZ pour vider les rubriques, laissez l'utilisateur saisir, puis ÉcranVersFichier suivi de HAjoute.
  3. Pour une MODIFICATION : positionnez-vous sur le bon enregistrement (HLitRecherche), affichez-le avec FichierVersÉcran, puis après saisie ÉcranVersFichier et HModifie.
  4. TESTEZ SYSTÉMATIQUEMENT HEnDehors après toute lecture ou recherche, avant d'exploiter le résultat.
Vous savez enregistrer, relire et modifier des données en quelques lignes grâce aux champs liés et aux fonctions HFSQL, avec le réflexe de contrôle HEnDehors — le mécanisme que Yacine branche sur sa fiche commande.

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.

Checklist sortie de section
  • 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.
Auto-évaluation 1-5 : est-ce que je lie mes champs aux rubriques au lieu de tout affecter à la main ?Auto-évaluation 1-5 : est-ce que je teste HEnDehors après chaque 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.

Vérifiez votre compréhension

Comment enregistre-t-on les données saisies dans une fenêtre liée ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 1Questions inédites et durcies pour valider vos acquis