← Toutes les astuces

RecNo() ou RowNo() ? Entrée et sortie ne racontent pas la même chose

Les deux fonctions numérotent des lignes, mais pas au même endroit du chargement : RecNo() regarde les enregistrements lus, RowNo() les lignes produites.

La différence essentielle

RecNo() correspond à la position de l’enregistrement dans la source en cours de lecture. RowNo() correspond à la position de la ligne dans la table de sortie. Si toutes les lignes passent, les deux peuvent sembler identiques ; un filtre suffit à faire apparaître leur différence.

Le problème

Avec un WHERE, certaines lignes de la source sont lues puis rejetées. RecNo() peut alors présenter des trous tandis que RowNo() continue à numéroter les lignes réellement chargées.

À surveiller
// Ne pas supposer que les deux numéros seront toujours identiques.
LOAD
    ID_COMMANDE,
    RecNo() AS NumeroSource,
    RowNo() AS NumeroSortie
RESIDENT CommandesSource
WHERE Montant > 0;
Écriture conseillée
// Choisir selon le besoin :
// position dans la source lue
RecNo() AS NumeroSource

// position dans le résultat chargé
RowNo() AS NumeroSortie