|
|
|
|
|
- Equivalence
- Filtre (syntaxe 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
Instruction POUR TOUT / POUR TOUS (parcours de fichiers) En anglais : FOR EACH / FOR ALL
Non disponible avec ce type de connexion
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.
// 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" À "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> [[SANSSAUVEPOSITION,] [<Sens>]] ... FIN 2. Parcours complet selon la clé passée en paramètre POUR TOUT <Fichier> SUR <Rubrique clé> [[SANSSAUVEPOSITION,] [<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. <SANSSAUVEPOSITION> : Mot-clé optionnel. Désactive la sauvegarde et la restauration de la position effectuée lors du parcours. En effet, l'instruction POUR TOUT sauve automatiquement la position au début de la boucle et restaure cette position en cas de sortie "normale" de la boucle (la position n'est pas restaurée en cas d'interruption de la boucle par les mot-clé SORTIR, RETOUR ou RENVOYER). Ces sauvegardes et restaurations de position peuvent être coûteuses (notamment en temps), en particulier si le code utilisant l'instruction POUR TOUT est lui-même appelé dans une boucle. <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. | DepuisFin | Parcours 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>]]" [[SANSSAUVEPOSITION,] [<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>]]" [[SANSSAUVEPOSITION,] [<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 Remarques. <ET/OU/PAS> : Opérateur logique (optionnel) délimitant les différentes conditions du filtre à appliquer. <SANSSAUVEPOSITION> : Mot-clé optionnel. Désactive la sauvegarde et la restauration de la position effectuée lors du parcours. En effet, l'instruction POUR TOUT sauve automatiquement la position au début de la boucle et restaure cette position en cas de sortie "normale" de la boucle (la position n'est pas restaurée en cas d'interruption de la boucle par les mot-clé SORTIR, RETOUR ou RENVOYER). Ces sauvegardes et restaurations de position peuvent être coûteuses (notamment en temps), en particulier si le code utilisant l'instruction POUR TOUT est lui-même appelé dans une boucle. <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. | DepuisFin | Parcours 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> [[SANSSAUVEPOSITION,] [<Sens>]] ... FIN 2. Filtre de comparaison par rapport à un intervalle de valeurs POUR TOUT <Fichier> AVEC <Rubrique Clé> = <Valeur minimale> A <Valeur maximale> [[SANSSAUVEPOSITION,] [<Sens>]] ... FIN
POUR TOUT <Fichier> AVEC <Valeur minimale> <= <Rubrique Clé> <= <Valeur maximale> [[SANSSAUVEPOSITION,] [<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é. <SANSSAUVEPOSITION> : Mot-clé optionnel. Désactive la sauvegarde et la restauration de la position effectuée lors du parcours. En effet, l'instruction POUR TOUT sauve automatiquement la position au début de la boucle et restaure cette position en cas de sortie "normale" de la boucle (la position n'est pas restaurée en cas d'interruption de la boucle par les mot-clé SORTIR, RETOUR ou RENVOYER). Ces sauvegardes et restaurations de position peuvent être coûteuses (notamment en temps), en particulier si le code utilisant l'instruction POUR TOUT est lui-même appelé dans une boucle. <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. | DepuisFin | Parcours 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> [[SANSSAUVEPOSITION,] [<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é. <SANSSAUVEPOSITION> : Mot-clé optionnel. Désactive la sauvegarde et la restauration de la position effectuée lors du parcours. En effet, l'instruction POUR TOUT sauve automatiquement la position au début de la boucle et restaure cette position en cas de sortie "normale" de la boucle (la position n'est pas restaurée en cas d'interruption de la boucle par les mot-clé SORTIR, RETOUR ou RENVOYER). Ces sauvegardes et restaurations de position peuvent être coûteuses (notamment en temps), en particulier si le code utilisant l'instruction POUR TOUT est lui-même appelé dans une boucle. <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. | DepuisFin | Parcours 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>] [[SANSSAUVEPOSITION,] [<Sens>]] ... FIN 2. Recherche générique (de type "Commence par") POUR TOUT <Fichier> AVEC <Clé composée> [= [<Valeur composante 1>, ..., <Valeur composante N>] [[SANSSAUVEPOSITION,] [<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. <SANSSAUVEPOSITION> : Mot-clé optionnel. Désactive la sauvegarde et la restauration de la position effectuée lors du parcours. En effet, l'instruction POUR TOUT sauve automatiquement la position au début de la boucle et restaure cette position en cas de sortie "normale" de la boucle (la position n'est pas restaurée en cas d'interruption de la boucle par les mot-clé SORTIR, RETOUR ou RENVOYER). Ces sauvegardes et restaurations de position peuvent être coûteuses (notamment en temps), en particulier si le code utilisant l'instruction POUR TOUT est lui-même appelé dans une boucle. <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. | DepuisFin | Parcours le fichier de données du dernier élément au premier. |
<FIN> : Signale la fin du bloc d'instructions.
6 - Parcours d'un fichier avec une condition sur un index spatial Masquer les détails
POUR TOUT <Fichier> AVEC Fonction_WLangage(Fichier.RubriqueSpatiale, variable_spatiale) ... 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 (contenant un index spatial). <AVEC> : Définit le type du parcours. <Fonction_WLangage> : Nom d'une fonction WLangage de manipulation des géométries. Les fonctions disponibles pour une conditions sur un index spatial sont les suivantes : GéométrieChevauche, GéométrieContient, GéométrieCouvre, GéométrieCroise, GéométrieDistance, GéométrieEgale, GéométrieEstContenu, GéométrieEstCouvert, GéométrieIntersecte. <RubriqueSpatiale> : Rubrique spatiale du fichier de données. Cette rubrique doit :- être de type "Données géographiques" ou de type "Données géométriques".
- être définie comme une "Clé spatiale".
<Variable_spatiale> : Variable spatiale utilisée pour la comparaison avec la rubrique spatiale. Cette variable est par exemple, une variable de type PolygoneGéo, Polygone2D, etc. <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.
remarque : Les enregistrements rayés sont pris en compte lors du parcours. - 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 (syntaxe 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érent | Valable pour tous les types | > | Plus grand | Valable pour tous les types | >= | Plus grand ou égal | Valable pour tous les types | < | Plus petit | Valable pour tous les types | <= | Plus petit ou égal | Valable pour tous les types | = | Strictement égal | Valable pour tous les types | ~= | Environ égal | Valable pour les types "chaîne" uniquement | ] | Contient | Valable pour les types "chaîne" uniquement | ]= | Commence par | Valable 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, etc.) :
- 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).
Si le mot-clé SANSSAUVEPOSITION a été utilisé, la sauvegarde et la restauration de la position effectuée lors du parcours sont désactivées. En effet, l'instruction POUR TOUT sauve automatiquement la position au début de la boucle et restaure cette position en cas de sortie "normale" de la boucle (la position n'est pas restaurée en cas d'interruption de la boucle par les mot-clé SORTIR, RETOUR ou RENVOYER). Ces sauvegardes et restaurations de position peuvent être coûteuses (notamment en temps), en particulier si le code utilisant l'instruction POUR TOUT est lui-même appelé dans une boucle. 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
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|