PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

  • Equivalence
  • Filtre (syntaxes 2)
  • Sortir d'une boucle de type POUR TOUT
  • Influence du mode de sortie de la boucle sur le parcours automatique des fichiers de données
  • Exécution de l'itération suivante
  • Modification de la clé utilisée pour le parcours automatique des fichiers de données ou des requêtes
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
L'instruction POUR TOUT permet d'effectuer différents types de parcours HFSQL :
  • Parcours complet (selon une clé spécifiée ou non)
  • Parcours avec filtre (filtre simple, filtre selon une clé ou filtre sur la clé de parcours). Les filtres acceptent alors les opérateurs de la fonction HFiltre.
Les parcours peuvent être réalisés sur un fichier de données, une vue, une requête ou une source de données. Les enregistrements bloqués en lecture/écriture ne sont pas lus.
Remarques :
  • Si la clé donnée au POUR TOUT est la clé renvoyée précédemment par la fonction HFiltre, le filtre sera respecté.
  • Les instructions POUR TOUT, POUR TOUS, POUR CHAQUE sont acceptées. Dans cette documentation, seule l'instruction POUR TOUT est utilisée et peut être remplacée par POUR TOUS ou POUR CHAQUE.
Remarque : A partir de la version 19, HFSQL est le nouveau nom de HyperFileSQL.
Exemple
// Syntaxe 1
POUR TOUT Client
// Ajout des clients dans le champ Liste
ListeAjoute(LISTE_ListeClient, Client.NumClient)
FIN
// Syntaxe 1
POUR TOUT Client sur NumClient
// Ajout des clients dans le champ Liste
ListeAjoute(LISTE_ListeClient, Client.NumClient)
FIN
// Syntaxe 2
// Parcours avec filtre
POUR TOUT Client AVEC "VilleClient = 'Montpellier'"
// Ajout des clients dans le champ Liste
ListeAjoute(LISTE_ListeClient, Client.NumClient)
FIN

Ville = "Lyon"
POUR TOUT Client AVEC "VilleClient = '"+Ville+"' et AgeClient >= 21"
// Ajout des clients dans le champ Liste
ListeAjoute(LISTE_ListeClient, Client.NumClient)
FIN
// Syntaxe 2
// Parcours avec filtre sur une clé spécifique
POUR TOUT Client AVEC "VilleClient = 'Montpellier'" sur NumClient
// Ajout des clients dans le champ Liste
ListeAjoute(LISTE_ListeClient, Client.NumClient)
FIN

Ville = "Lyon"
POUR TOUT Client AVEC "VilleClient = '" + Ville + "' ET " + ...
 "AgeClient >= 21" sur NumClient
// Ajout des clients dans le champ Liste
ListeAjoute(LISTE_ListeClient, Client.NumClient)
FIN
// Syntaxe 3
// Comparaison par rapport à une valeur
POUR TOUT Client AVEC NomClient = "Dupont"
// Ajout des clients dans le champ Liste
ListeAjoute(LISTE_ListeClient, Client.NumClient)
FIN

// Comparaison par rapport à une valeur
POUR TOUT Commande AVEC DateCommande = "20031231"
// Ajout des commandes dans le champ Liste
ListeAjoute(LISTE_ListeCommande, Commande.NumCommande)
FIN
// Syntaxe 3
// Comparaison par rapport à un intervalle de valeurs
POUR TOUT Commande AVEC DateCommande = "20030101" A "20031231"
// Ajout des commandes dans le champ Liste
ListeAjoute(LISTE_ListeCommande, Commande.NumCommande)
FIN

// Comparaison par rapport à un intervalle de valeurs
POUR TOUT Commande AVEC "20030101" <= DateCommande <= "20031231"
// Ajout des commandes dans le champ Liste
ListeAjoute(LISTE_ListeCommande, Commande.NumCommande)
FIN
// Syntaxe 4
// Parcours avec filtre sur une clé spécifique
POUR TOUT Client AVEC VilleClient [= "Mont" DEPUISFIN
// Ajout des clients dans le champ Liste
ListeAjoute(LISTE_ListeClient, Client.NumClient)
FIN
// Syntaxe 5
// Parcours avec filtre sur une clé composée
POUR TOUT FicContact AVEC CCDepartement = ["Prospect", 69]
// Ajout des contacts dans le champ Liste
ListeAjoute(LISTE_ListeContact, FicContact.NumContact)
FIN

// Parcours avec filtre sur une clé composée
POUR TOUT FicContact AVEC CCodePostal [= ["Prospect", 69]
// Ajout des contacts dans le champ Liste
ListeAjoute(LISTE_ListeContact, FicContact.NumContact)
FIN
Syntaxe

1 - Parcours complet Masquer les détails

1. Parcours complet selon la meilleure clé de parcours

Attention : Une modification du fichier dans l'analyse (ajout d'une rubrique clé par exemple) peut modifier la clé de parcours utilisée.

POUR TOUT <Fichier> [<Sens>]
...
FIN

2. Parcours complet selon la clé passée en paramètre

POUR TOUT <Fichier> SUR <Rubrique clé> [<Sens>]
...
FIN
<POUR TOUT> :
Signale le début du bloc d'instructions.
<Fichier> :
Nom du fichier de données, de la vue ou de la requête HFSQL à parcourir.
<SUR> :
Définit le type du parcours.
<Rubrique clé> :
Nom de la rubrique clé utilisée pour parcourir le fichier de données (la vue ou la requête) HFSQL.
<Sens> :
Indicateur optionnel du sens de parcours :
DepuisDébut
(valeur par défaut)
Parcours le fichier de données du premier élément au dernier.
DepuisFinParcours le fichier de données du dernier élément au premier.
<FIN> :
Signale la fin du bloc d'instructions.

2 - Parcours avec filtre Masquer les détails

1. Parcours avec filtre (la meilleure clé de parcours est automatiquement déterminée)

Attention : Une modification du fichier dans l'analyse (ajout d'une rubrique clé par exemple) peut modifier la clé de parcours utilisée.

POUR TOUT <Fichier> AVEC "<1ère Condition>
               [ET/OU/PAS <2ème Condition>
               [ET/OU/PAS...<Nième Condition>]]" [<Sens>]
...
FIN

2. Parcours avec filtre selon la clé spécifiée

POUR TOUT <Fichier> AVEC "<1ère Condition>
               [ET/OU/PAS <2ème Condition>
               [ET/OU/PAS...<Nième Condition>]]" [<Sens>]
...
SUR <Rubrique Clé>
FIN
<POUR TOUT> :
Signale le début du bloc d'instructions.
<Fichier> :
Nom du fichier de données, de la vue ou de la requête HFSQL à parcourir.
<AVEC> :
Définit le type du parcours.
<Nième condition> :
Nième condition du filtre de parcours HFSQL. Pour plus de détails, consultez les notes.
<ET/OU/PAS> :
Opérateur logique (optionnel) délimitant les différentes conditions du filtre à appliquer.
<Sens> :
Indicateur optionnel du sens de parcours :
DepuisDébut
(valeur par défaut)
Parcours le fichier de données du premier élément au dernier.
DepuisFinParcours le fichier de données du dernier élément au premier.
<Rubrique clé> :
Rubrique correspondant à une clé du fichier de données. Le filtre sera effectué sur cette clé.
<FIN> :
Signale la fin du bloc d'instructions.

3 - Parcours avec filtre de sélection sur la clé de parcours Masquer les détails

1. Filtre de comparaison par rapport à une valeur

POUR TOUT <Fichier> AVEC <Rubrique Clé> [ = / <= / >= ] <Valeur> [<Sens>]
...
FIN

2. Filtre de comparaison par rapport à un intervalle de valeurs

POUR TOUT <Fichier> AVEC <Rubrique Clé> = <Valeur minimale> A <Valeur maximale> [<Sens>]
...
FIN

POUR TOUT <Fichier> AVEC <Valeur minimale> <= <Rubrique Clé> <= <Valeur maximale> [<Sens>]
...
FIN
<POUR TOUT> :
Signale le début du bloc d'instructions.
<Fichier> :
Nom du fichier de données, de la vue ou de la requête HFSQL à parcourir.
<AVEC> :
Définit le type du parcours.
<Rubrique clé> :
Rubrique de type clé du fichier de données à parcourir.
<Valeur> :
Valeur de comparaison de la rubrique clé.
<Valeur minimale>, <Valeur maximale> :
Valeur de comparaison de la rubrique clé.
<Sens> :
Indicateur optionnel du sens de parcours :
DepuisDébut
(valeur par défaut)
Parcours le fichier de données du premier élément au dernier.
DepuisFinParcours le fichier de données du dernier élément au premier.
<FIN> :
Signale la fin du bloc d'instructions.

4 - Parcours avec recherche générique "Commence par", ascendante ou descendante Masquer les détails

POUR TOUT <Fichier> AVEC <Rubrique Clé> [= <Début de la valeur recherchée> [<Sens>]
...
FIN
<POUR TOUT> :
Signale le début du bloc d'instructions.
<Fichier> :
Nom du fichier de données, de la vue ou de la requête HFSQL à parcourir.
<AVEC> :
Définit le type du parcours.
<Rubrique clé> :
Rubrique de type clé du fichier de données à parcourir.
<Début de la valeur recherchée> :
Valeur de comparaison de la rubrique clé.
<Sens> :
Indicateur optionnel du sens de parcours :
DepuisDébut
(valeur par défaut)
Parcours le fichier de données du premier élément au dernier.
DepuisFinParcours le fichier de données du dernier élément au premier.
<FIN> :
Signale la fin du bloc d'instructions.

5 - Parcours avec filtre sur une clé composée Masquer les détails

1. Recherche à l'identique

POUR TOUT <Fichier> AVEC <Clé composée> = [<Valeur composante 1>, ..., <Valeur composante N>] [<Sens>]
...
FIN

2. Recherche générique (de type "Commence par")

POUR TOUT <Fichier> AVEC <Clé composée> [= [<Valeur composante 1>, ..., <Valeur composante N>] [<Sens>]

...
FIN
<POUR TOUT> :
Signale le début du bloc d'instructions.
<Fichier> :
Nom du fichier de données ou de la vue HFSQL à parcourir.
<AVEC> :
Définit le type du parcours.
<Clé composée> :
Clé composée du fichier de données à parcourir.
<Valeur composante N> :
Valeur de la composante.
<Sens> :
Indicateur optionnel du sens de parcours :
DepuisDébut
(valeur par défaut)
Parcours le fichier de données du premier élément au dernier.
DepuisFinParcours le fichier de données du dernier élément au premier.
<FIN> :
Signale la fin du bloc d'instructions.
Remarques

Equivalence

  • La syntaxe POUR TOUT <Fichier> AVEC <Rubrique> = <Valeur> est équivalente à un parcours du fichier de données avec la fonction HLitRecherche. Ce parcours tient compte des filtres précédemment effectués sur le fichier de données.
  • La syntaxe POUR TOUT <Fichier> AVEC <Condition> permet de définir un filtre puis réalise un parcours du fichier de données. Ce parcours ne tient pas compte des autres filtres précédemment effectués.
  • Lors de l'utilisation des requêtes, la syntaxe "POUR TOUT" peut être plus lente que la syntaxe "TANTQUE PAS HEndehors". En effet, lors de l'utilisation de POUR TOUT, une sauvegarde/restauration de contexte est automatiquement réalisée (équivalent aux fonctions HSauvePosition/HRetourPosition).

Filtre (syntaxes 2)

La syntaxe générale d'un filtre a la forme suivante :
"<Nom de la rubrique> <Opérateurs> <Valeur de la rubrique>"
Par exemple :
"NomClient > 'Dupont' et CodePos = 34 ou AgeClient >= 32"
Les opérateurs acceptés sont variables en fonction du type des rubriques utilisées dans la condition :
<>DifférentValable pour tous les types
>Plus grandValable pour tous les types
>=Plus grand ou égalValable pour tous les types
<Plus petitValable pour tous les types
<=Plus petit ou égalValable pour tous les types
=Strictement égalValable pour tous les types
~=Environ égalValable pour les types "chaîne" uniquement
]ContientValable pour les types "chaîne" uniquement
]=Commence parValable pour les types "chaîne" uniquement
Remarques :
  • Les chaînes constantes doivent être encadrées de simples quotes. Par exemple : "NomClient = '"+Client+"'"
  • Le <Nom de la rubrique> ne doit comporter que des lettres, des chiffres et des caractères soulignés ("_"). Si le <Nom de la rubrique> contient d'autres caractères (apostrophe, ...), le nom de la rubrique doit être entouré de doubles quotes. Par exemple : "e_mail@"]'fr'
  • Les comparaisons entre chaînes se font en fonction de la valeur ASCII des caractères et non pas d'une façon lexicographique ('a' > 'Z').
  • Les mémos binaires et les clés composées ne peuvent pas faire partie d'une <Valeur de la rubrique>.
  • Si une <Valeur de la rubrique> contient une simple quote (ou une double quote), il faut faire précéder cette simple quote (ou double quote) par un anti-slash.

Sortir d'une boucle de type POUR TOUT

Plusieurs instructions sont possibles :
  • RETOUR : Sortie de la boucle POUR TOUT et sortie du traitement (ou de la procédure) en cours.
  • RENVOYER : Renvoi d'un compte-rendu au traitement appelant. Sortie de la boucle POUR TOUT et sortie du traitement (ou de la procédure) en cours.
  • SORTIR : Sortie de la boucle POUR TOUT et exécution de la suite du traitement en cours.
La fonction Ferme permet de sortir de la boucle POUR TOUT et de fermer la fenêtre en cours.
Attention : Il n'est pas possible d'utiliser les instructions RETOUR et RENVOYER dans un même traitement.

Influence du mode de sortie de la boucle sur le parcours automatique des fichiers de données

  • Si le parcours se termine automatiquement :
    • La position dans le fichier de données avant le parcours est restaurée.
    • L'éventuel filtre nécessaire au parcours est désactivé.
  • Si le parcours est interrompu (instructions SORTIR, RETOUR, RENVOYER, Ferme, ...) :
    • La position dans le fichier de données avant le parcours n'est pas restaurée.
    • L'éventuel filtre nécessaire au parcours n'est pas désactivé. Il doit être désactivé manuellement (fonction HDésactiveFiltre).

Exécution de l'itération suivante

Pour exécuter directement l'itération suivante sans terminer le code de l'itération en cours, utilisez l'instruction Continuer :
// Parcours de NomFichier dans l'ordre de la rubrique RubriqueClé
POUR TOUT NomFichier sur RubriqueClé
...
SI Condition = Vrai ALORS CONTINUER   // Retour au mot-clé POUR TOUT
// et passage à l'enregistrement suivant
...
FIN

Modification de la clé utilisée pour le parcours automatique des fichiers de données ou des requêtes

Lors du parcours d'un fichier de données (ou d'une requête), si la valeur de la rubrique de parcours est modifiée, certains enregistrements peuvent être parcourus plusieurs fois.
En effet, la modification de la rubrique de parcours met à jour la clé d'index du fichier. Lors de la lecture automatique des enregistrements suivants, cette modification est prise en compte.
Cette remarque est également valable pour un parcours automatique d'une requête triée (ORDER BY) sans clé de parcours.
// Parcours de NomFichier sur la rubrique RubriqueClé
POUR TOUT NomFichier sur RubriqueClé
...
SI Condition = Vrai ALORS
// Modification de la valeur de la clé de parcours
NomFichier.RubriqueClé = "Nouvelle valeur"
HModifie(NomFichier)

FIN
// Si la nouvelle valeur de la clé de parcours
// positionne sur l'enregistrement après dans l'ordre de parcours
// l'enregistrement sera relu durant le parcours.
...
FIN
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire