2.4 · Parcours d'enregistrements & tables fichier

Niveau 2 · Intermédiaire : données, requêtes & états

2.4Parcours d'enregistrements & tables fichier

Objectif : Parcourir les données (POUR TOUT), alimenter des champs Table et gérer le filtrage/tri selon le volume.
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

  • Le parcours passe en revue les enregistrements d'un fichier ou d'une requête ; deux approches : la boucle POUR TOUT (moderne, recommandée) et le parcours manuel (HLitPremier / HLitSuivant avec test HEnDehors).
  • Le champ Table affiche plusieurs enregistrements ; la table fichier est liée à un fichier ou une requête et se remplit automatiquement, ne chargeant que les lignes affichées.
  • La table mémoire se remplit par code (TableAjouteLigne) : liberté totale mais chargement à gérer — à réserver aux données construites ou de volume maîtrisé.

Mini-cas filé — Yacine affiche et parcourt le catalogue produits

Yacine, développeur WinDev dans une PME de négoce de matériel électrique à Oran, doit afficher le catalogue des produits et repérer ceux à réapprovisionner. Pour la liste affichée à l'écran, il choisit une table fichier liée à une requête filtrée : elle se remplit automatiquement et ne charge que les lignes visibles, même avec des milliers de références. Pour calculer les alertes de stock, il écrit un parcours avec la boucle POUR TOUT Produit, concise et recommandée, puis ajoute les lignes concernées à une seconde table. Il prend soin d'écrire aussi le parcours manuel (HLitPremier / HLitSuivant + test HEnDehors) pour comprendre le mécanisme sous-jacent. Enfin, il s'interdit de remplir une table mémoire en parcourant tout un gros fichier : sur les gros volumes, il préfère la table fichier avec un filtre et des requêtes plutôt qu'une boucle qui traite chaque enregistrement un par un.

Cas autonome de cette section : il revient dans le cours, le schéma, le script et le défi 48h de la section 2.4.

1. Deux formes de parcours

Après avoir manipulé un enregistrement, on traite des ensembles. Le parcours passe en revue les enregistrements d'un fichier ou d'une requête. (1) La boucle POUR TOUT : forme moderne et recommandée, concise et lisible — elle parcourt automatiquement tous les enregistrements et gère la fin du parcours. (2) La boucle manuelle avec HLitPremier puis HLitSuivant, en testant HEnDehors pour savoir quand s'arrêter : plus verbeuse mais indispensable à comprendre. Dans les deux cas, on peut parcourir selon un ordre (une clé/index) et avec un filtre.

2. Table fichier ou table mémoire

Le champ Table est le compagnon naturel du parcours : il affiche plusieurs enregistrements en lignes et colonnes. (1) La table fichier (dite « sur fichier/requête ») est liée à une source de données et se remplit automatiquement ; WinDev ne charge que les lignes nécessaires à l'affichage, ce qui la rend performante même sur de très gros volumes — le mode à privilégier en gestion. (2) La table mémoire se remplit par code (TableAjouteLigne) : liberté totale mais chargement à gérer — à réserver aux données construites ou de volume maîtrisé.

3. Vigilance performance

Sur de gros volumes, ne chargez pas tout en mémoire : préférez la table fichier avec un filtre. Et pour les traitements de masse, privilégiez les requêtes ou les fonctions ensemblistes plutôt qu'une boucle qui traite un million d'enregistrements un par un. Le piège classique — remplir une table mémoire en parcourant tout un gros fichier — se manifeste surtout en production, quand les données réelles arrivent.

Erreur d'interprétation fréquente : « La table mémoire est toujours plus rapide ; une table fichier ne peut pas être triée ; et POUR TOUT est juste une écriture plus courte du parcours manuel ». Non, triple erreur. La table fichier ne charge que les lignes affichées et reste performante sur de gros volumes, là où la table mémoire charge tout ; elle est donc souvent plus rapide pour de gros jeux de données venant de la base. Une table fichier se trie parfaitement (ordre de la source). Enfin, POUR TOUT est la forme recommandée qui gère automatiquement la progression et la fin du parcours, distincte du parcours manuel. Yacine privilégie donc la table fichier sur les données de la base.
Parcourir et afficher : deux choix Le parcours traite les ensembles ; la table affiche en choisissant fichier (automatique) ou mémoire (par code). POUR TOUTParcours moderne, gère la fin+Parcours manuelHLitPremier / HLitSuivant + HEnDehors+Table fichierLiée à fichier/requête, lignes affichées+Table mémoireRemplie par code (TableAjouteLigne) Sur gros volumes : table fichier + filtre, pas de tout charger en mémoire.
Le parcours traite les ensembles ; la table affiche en choisissant fichier (automatique) ou mémoire (par code).
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, apprend que le parcours passe en revue les enregistrements d'un fichier ou d'une requête, avec deux formes : la boucle POUR TOUT (moderne, recommandée) et le parcours manuel (HLitPremier / HLitSuivant + test HEnDehors). 2) Il retient que le champ Table affiche les enregistrements, que la table fichier liée à un fichier ou une requête se remplit automatiquement en ne chargeant que les lignes affichées, et que la table mémoire se remplit par code avec TableAjouteLigne. 3) Pour son catalogue, il affiche une table fichier basée sur une requête filtrée, utilise POUR TOUT pour calculer les alertes de stock, et évite de tout charger en mémoire. Leçon : privilégier la table fichier sur les données de la base et les requêtes pour les traitements de masse.

🔎 Exemple concret — 🔎 Exemple concret — POUR TOUT vs parcours manuel

Deux écritures du même parcours : Yacine repère les produits à réapprovisionner.

// Forme recommandee : POUR TOUT
POUR TOUT Produit
    SI Produit.Stock < 5 ALORS
        TableAjouteLigne(TABLE_Alerte, Produit.CodeProduit, Produit.Stock)
    FIN
FIN

// Forme manuelle (comprendre le mecanisme)
HLitPremier(Produit, hOrdreCroissant, "CodeProduit")
TANTQUE HEnDehors(Produit) = Faux
    // ... traiter Produit ...
    HLitSuivant(Produit)
FIN

Lecture   : POUR TOUT gere la progression et la fin ; le manuel montre le mecanisme
Reflexe   : table FICHIER pour afficher, pas de tout charger en memoire

Lecture : POUR TOUT parcourt tous les enregistrements et s'arrête seul ; le parcours manuel explicite HLitPremier / HLitSuivant et le test HEnDehors.

Leçon : pour l'affichage, préférer une table fichier liée à une requête plutôt que de tout charger en mémoire.

Vocabulaire de la section

Parcours
Passer en revue les enregistrements d'un fichier ou d'une requête, éventuellement selon un ordre (une clé) et avec un filtre.

Exemple simple : Yacine parcourt le fichier Produit pour repérer les stocks faibles.

Ce que ce n'est pas : lire un seul enregistrement identifié par sa clé.

Réflexe : traiter un ensemble d'enregistrements → un parcours.

POUR TOUT
La forme moderne et recommandée de parcours : concise, lisible, elle gère automatiquement la progression et la fin du parcours.

Exemple simple : Yacine écrit POUR TOUT Produit pour calculer les alertes.

Ce que ce n'est pas : une boucle manuelle avec HLitPremier / HLitSuivant.

Réflexe : parcours simple et lisible → POUR TOUT.

Parcours manuel
La forme classique : HLitPremier puis HLitSuivant, en testant HEnDehors pour détecter la fin.

Exemple simple : Yacine écrit la version manuelle pour comprendre le mécanisme.

Ce que ce n'est pas : la boucle POUR TOUT, qui masque ces étapes.

Réflexe : voir ce qui se passe réellement → parcours manuel.

Table fichier
Champ table lié directement à un fichier ou une requête : remplissage automatique, WinDev ne charge que les lignes affichées.

Exemple simple : Yacine affiche son catalogue dans une table fichier basée sur une requête.

Ce que ce n'est pas : une table remplie ligne à ligne par du code.

Réflexe : afficher de gros volumes → table fichier.

Table mémoire
Champ table rempli par code (TableAjouteLigne) : liberté totale mais chargement à gérer soi-même.

Exemple simple : Yacine remplit une table mémoire avec les seuls produits en alerte.

Ce que ce n'est pas : une table liée à une requête de la base.

Réflexe : données construites par code → table mémoire.

En pratique — En pratique — Parcourir et afficher des enregistrements

  1. Écrivez un parcours avec POUR TOUT (forme recommandée) pour traiter tous les enregistrements d'un fichier ou d'une requête, comme Yacine.
  2. Écrivez le même parcours en version manuelle (HLitPremier / HLitSuivant + test HEnDehors) pour bien comprendre le mécanisme sous-jacent.
  3. Pour l'affichage, utilisez de préférence une table fichier liée à un fichier ou une requête : elle se remplit automatiquement et reste performante sur gros volumes.
  4. Réservez la table mémoire (TableAjouteLigne) aux données construites par code, et sur les gros volumes filtrez plutôt que de tout charger.
Vous savez parcourir des ensembles d'enregistrements en code et les afficher efficacement, en choisissant le bon type de table selon le volume et l'origine des données.

Script pas-à-pas — parcourir le catalogue comme Yacine (5 min)

1) Créez une table fichier liée à une requête Produit filtrée (stock < seuil). 2) Écrivez un parcours POUR TOUT Produit qui teste Produit.Stock. 3) Ajoutez les produits en alerte dans une table mémoire via TableAjouteLigne. 4) Réécrivez le parcours en version manuelle (HLitPremier / HLitSuivant + HEnDehors) pour l'analyser. 5) Sur un gros volume, vérifiez que vous ne chargez pas tout en mémoire.

Réflexe par défaut en gestion : dès que les données viennent de la base, utilisez une table fichier basée sur une requête.

Modèle copier-coller — mon parcours & ma table

Parcours POUR TOUT : POUR TOUT Produit ... FIN   (recommande)
Parcours manuel    : HLitPremier(...) ; TANTQUE HEnDehors(...) = Faux ... HLitSuivant(...) ; FIN
Table FICHIER      : liee a un fichier/requete, remplissage AUTO, lignes affichees
Table MEMOIRE      : remplie par CODE (TableAjouteLigne)
Regles : (1) affichage sur base -> table FICHIER
         (2) gros traitements de masse -> REQUETES, pas une boucle ligne a ligne

Parcours POUR TOUT

Yacine parcourt tout le fichier Produit pour recalculer les alertes de stock.

Parcours manuel

Yacine écrit la version HLitPremier / HLitSuivant pour comprendre le déroulement.

Table fichier

Yacine affiche le catalogue via une table liée à une requête, chargée à la demande.

Table mémoire

Yacine remplit par code une petite table des seuls produits en rupture.

✓ Bonnes pratiques

  • Utiliser POUR TOUT par défaut, connaître le parcours manuel.
  • Afficher de la base avec une table fichier liée à une requête.
  • Ne pas tout charger en mémoire sur de gros volumes.

✗ Pièges fréquents

  • Remplir une table mémoire en parcourant un gros fichier.
  • Croire qu'une table fichier n'est pas triable.
  • Traiter un million d'enregistrements un par un plutôt que par requête.

Points clés à retenir

  • Deux formes de parcours : POUR TOUT (recommandée) et parcours manuel (HLitPremier / HLitSuivant + HEnDehors).
  • Le champ Table affiche les enregistrements ; la table fichier est liée à un fichier/requête et ne charge que les lignes affichées.
  • La table mémoire se remplit par code (TableAjouteLigne) — à réserver aux données construites.
  • Sur gros volumes : table fichier + filtre ; traitements de masse via requêtes.

Défi 48h — appliquez demain

Comme Yacine, écrivez un parcours POUR TOUT sur un fichier de votre application, puis réécrivez-le en version manuelle (HLitPremier / HLitSuivant + test HEnDehors). Affichez ensuite ces données dans une table fichier liée à une requête et vérifiez qu'elle ne charge que les lignes visibles. Expliquez en une phrase pourquoi il ne faut pas remplir une table mémoire en parcourant tout un gros fichier.

Checklist sortie de section
  • Je sais écrire un parcours en POUR TOUT et en version manuelle.
  • Je choisis entre table fichier et table mémoire selon l'origine et le volume des données.
  • Je sais ne pas tout charger en mémoire sur de gros volumes.
Auto-évaluation 1-5 : est-ce que je distingue POUR TOUT et le parcours manuel ?Auto-évaluation 1-5 : sais-je quand utiliser une table fichier plutôt qu'une table mémoire ?

Questions fréquentes

Quelle différence entre une table fichier et une table mémoire ?

La table fichier est liée à un fichier ou une requête et ne charge que les lignes affichées : elle est performante même sur de très gros volumes. La table mémoire est remplie par code et charge tout en mémoire : liberté totale mais inadaptée aux gros volumes. En gestion, on privilégie donc la table fichier.

Pourquoi apprendre le parcours manuel alors que POUR TOUT existe ?

Parce qu'il montre ce qui se passe réellement (avancer d'un enregistrement à l'autre, tester la fin) et reste utile dans des cas particuliers. POUR TOUT est la forme moderne et recommandée pour le quotidien ; comprendre le parcours manuel aide à diagnostiquer les situations délicates.

Vérifiez votre compréhension

Quelle différence entre une table fichier et une table mémoire ?

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

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