- Borne minimale et borne maximale sur une rubrique clé de type texte ou clé composée
- Filtre et parcours filtré
- Condition de sélection
- Activation/Désactivation d'un filtre
- Filtre sur une clé composée
- Fichiers de données non HFSQL
HFiltre (Fonction) En anglais : HFilter
Non disponible avec ce type de connexion
// Filtre simple avec une condition : // Rechercher les clients d'une ville
CléParcours est une chaîne maville est une chaîne
maville = "MONTPELLIER" CléParcours = HFiltre(Client, "VILLE='" + maville + "'") HLitPremier(Client, CléParcours) TANTQUE HEnDehors() = Faux // Traitement de l'enregistrement ... HLitSuivant(Client, CléParcours) FIN // Annule le filtre HDésactiveFiltre(Client)
// Filtre réalisé avec une clé de parcours bornée et une condition : // la clé de parcours est fixée
CléParcours est une chaîne // Filtre les factures comprises entre le 1/1/2005 et le // 31/12/2005 dont le total est supérieur à 1500 Euros TTC // avec une remise dont le type est passé en paramètres (rubrique texte) CléParcours = HFiltre(Facture, DateFacture, "20050101", "20051231", ... ChaîneConstruit("TotalTTC>1500 ET TypeRemise = '%1'" + , ... Remplace(sTypeRemise, "'", "\'"))) // La fonction Remplace permet de préfixer les apostrophes // que peut contenir sTypeRemise d'un antislash SI CléParcours <> "" ALORS HLitPremier(Facture, CléParcours) TANTQUE HEnDehors() = Faux // Traitement de l'enregistrement : envoi d'une lettre de remerciement Envoi_Lettre() HLitSuivant(Facture, CléParcours) FIN FIN ... // Annule le filtre HDésactiveFiltre(Facture)
Syntaxe
Filtre construit avec une clé de parcours bornée et une condition Masquer les détails
<Résultat> = HFiltre(<Fichier de données> , <Clé de parcours> , <Borne minimale> [, <Borne maximale> [, <Condition de sélection>]])
<Résultat> : Chaîne de caractères Rubrique de parcours. Correspond : - soit à la clé de parcours du fichier de données si le filtre est activé.
- soit à une chaîne vide ("") si le filtre ne peut pas être mis en place.
<Fichier de données> : Chaîne de caractères (avec ou sans guillemets) Nom du fichier de données, de la vue HFSQL ou de la requête manipulé. <Clé de parcours> : Chaîne de caractères (avec ou sans guillemets) Nom de la rubrique clé utilisée pour parcourir le fichier de données, la vue ou la requête. Cette rubrique doit être une clé de parcours du fichier de données, de la vue ou de la requête. C'est sur cette rubrique que s'appliquent les bornes minimales et maximales. <Borne minimale> : Type de la rubrique de parcours Valeur minimale incluse de la rubrique de parcours (si la clé de parcours est définie avec un sens de parcours ascendant dans l'analyse). Les enregistrements correspondant à cette valeur minimale seront inclus dans le filtre. Dans le cas d'un parcours descendant (c'est-à-dire si la clé de parcours est définie avec un sens de parcours descendant dans l'analyse), c'est la valeur maximale de la rubrique de parcours. Le type de ce paramètre doit correspondre au type de la rubrique de parcours. Par exemple, si la rubrique de parcours est une chaîne, la borne minimale doit être une chaîne. <Borne maximale> : Type de la rubrique de parcours, paramètre optionnel Valeur maximale incluse de la rubrique de parcours (cas d'un parcours ascendant). Les enregistrements correspondant à cette valeur maximale seront inclus dans le filtre. Le type de ce paramètre doit correspondre au type de la rubrique de parcours. Par exemple, si la rubrique de parcours est une chaîne, la borne maximale doit être une chaîne. Dans le cas d'un parcours descendant, c'est la valeur minimale de la rubrique de parcours. Si ce paramètre n'est pas précisé, la borne maximale du filtre correspond à la valeur du paramètre <Borne minimale>. <Condition de sélection> : Chaîne de caractères optionnelle (avec guillemets) Condition de sélection pour créer le filtre (voir Notes). Cette condition de sélection peut être une chaîne de caractères au format Ansi ou Unicode.
Filtre construit avec une condition Masquer les détails
<Résultat> = HFiltre(<Fichier de données> , <Condition de sélection>)
<Résultat> : Chaîne de caractères Rubrique de parcours. Correspond : - soit à la clé de parcours du fichier de données si le filtre est activé
- soit à une chaîne vide si le filtre ne peut pas être mis en place
<Fichier de données> : Chaîne de caractères (avec ou sans guillemets) Nom du fichier de données, de la vue HFSQL ou de la requête manipulé. <Condition de sélection> : Chaîne de caractères (avec guillemets) Condition de sélection pour créer le filtre (voir NOTES). Cette condition de sélection peut être une chaîne de caractères au format Ansi ou Unicode. Remarques Borne minimale et borne maximale sur une rubrique clé de type texte ou clé composée Si la borne minimale et la borne maximale sont identiques : - pour réaliser un filtre à l'identique sur une valeur, il suffit de préciser cette valeur dans le paramètre "Borne min".
Par exemple, pour sélectionner les clients dont le nom correspond à "Dupon" :
HFiltre(Client, Nom, "Dupon")
Le client "Dupontel" ne sera pas sélectionné. - pour réaliser un filtre générique sur une valeur, il suffit de :
- compléter la borne minimale avec la constante hValMin pour lui donner la valeur minimale.
- compléter la borne maximale avec la constante hValMax pour lui donner la valeur maximale.
Par exemple, pour sélectionner les clients dont le nom commence par "Dupon" :
HFiltre(Client, Nom, "Dupon" + hValMin, "Dupon" + hValMax)
Les clients "Dupon" et "Dupontel" seront sélectionnés.
Remarques : - La constante hValMin est équivalente à Caract(0).
- La constante hValMax est équivalente à Caract(255).
Filtre et parcours filtré Après l'exécution de la fonction HFiltre, le parcours du fichier de données doit obligatoirement être effectué sur la rubrique renvoyée par la fonction HFiltre. Si une autre rubrique est utilisée pour le parcours du fichier de données, le filtre ne sera pas pris en compte. Lorsqu'un filtre est défini et activé sur un fichier de données (une vue ou une requête), tout enregistrement lu correspond au filtre. Si il n'y a plus d'enregistrement correspondant au filtre lors du parcours : - la fonction HEnDehors renvoie Vrai.
- l'enregistrement en cours correspond au dernier enregistrement lu avec le filtre.
Par exemple : | | Sur un fichier de données filtré, après la fonction : | l'enregistrement en cours est : |
---|
HLitPremier | le premier enregistrement du fichier de données correspondant au filtre | HLitDernier | le dernier enregistrement du fichier de données correspondant au filtre | HLitSuivant (ou HAvance) | l'enregistrement suivant (ou le nième suivant) correspondant au filtre | HLitPrécédent (ou HRecule) | l'enregistrement précédent (ou le nième précédent) correspondant au filtre |
Condition de sélection La syntaxe générale d'une condition a la forme suivante : "NomCli>'Dupont' et (CodePos=34 ou CodePos=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 : ne tient pas compte des espaces à droite, ni des accents, ni de la casse des caractères | Valable pour les types chaîne uniquement | ~~ | Égalité très souple : ne différencie pas les caractères majuscules des caractères minuscules, ne tient pas compte des espaces situés avant et après la chaîne à tester, ne tient pas compte des caractères accentués minuscules, ne tient pas compte des espaces et des ponctuations à l'intérieur des chaînes. | Valable pour les types chaîne uniquement | ] | Contient : prend en compte la casse des caractères | Valable pour les types chaîne uniquement | ~] | Contient : ne prend pas en compte la casse des caractères | Valable pour les types chaîne uniquement | ]= | Commence par : prend en compte la casse des caractères | Valable pour les types chaîne uniquement |
Remarques sur la condition de sélection : - Les chaînes constantes doivent être encadrées de simples quotes.
- Si le nom de la rubrique contient des simples quotes, elles doivent être doublées.
Par exemple : Rubriqueavecquotes - Les comparaisons entre chaînes se font en fonction des paramètres spécifiés pour les index.
- Les mémos binaires et les clés composées ne peuvent pas faire partie d'une condition de sélection.
Pour les clés composées, il est conseillé d'utiliser la première syntaxe. Il n'est pas possible d'utiliser la syntaxe suivante :
HFiltre(NOMFICHIER, "CLECOMP~]'AAA' ET CLECOMP]='" + ... HConstruitValClé(NOMFICHIER, CLECOMP, 0) + "'")
- Si une chaîne de caractères (constante ou variable) contient une simple quote, il faut faire précéder cette simple quote par un anti-slash ( \ ).
- Pour optimiser le parcours du filtre, utilisez la fonction HStatCalcule sur le fichier de données avant de créer le filtre. En effet, le moteur HFSQL analyse la condition de sélection et s'appuie ensuite sur ces statistiques pour déterminer les rubriques les plus discriminantes qui permettront d'optimiser le parcours du fichier de données.
- Cette condition de sélection peut être une chaîne de caractères au format Ansi ou Unicode.
Activation/Désactivation d'un filtre La fonction HDésactiveFiltre permet de désactiver un filtre. Lorsque le fichier de données (la requête ou la vue) est fermé (fonction HFerme par exemple), le filtre est supprimé. A un même instant, il ne peut exister qu'un seul filtre sur un fichier de données (une requête ou une vue). Si la fonction HFiltre est utilisée plusieurs fois, seul le dernier filtre sera pris en compte : le(s) filtre(s) précédent(s) seront supprimés.
Documentation également disponible pour…
|
|
|
| |
| | Bonjour, Bien d'accord avec vous. La fonction HFiltre est très bien mais les exemples d'utilisations sont trop complexes. A chaque fois que j'en ai besoin avec des conditions un peu sophistiquées, j'y passe un temps fou... Actuellement, je veux faire un filtre avec comparaison de valeurs de rubriques dans un fichier, genre "X > (Y + Z)" Ça me paraissait simple : sParcoursPSF = HFiltre(Produit_Stock_FIFO,IDStockIDProduit,[COL_IDStock,COL_IDProduit],"Qte_Entree > (Qte_Sortie + Qte_Prepa_Sor)") Résultat : erreur de syntaxe... Bon courage à tous...
|
|
|
|
| |
| |
| |
|
| | Personnellement je ne cherche qu'à filtrer une colonne sur plusieurs valeurs... Pour le moment je ne peux que passer par des requêtes mais les temps de réponses sont alors bcp plus longs. Une solution ? |
|
|
|
| |
| |
| |
|
| | Galère de plusieurs heures pour trouver comment passer une condition à la fonction hfiltre. problème de quote et de guillemet
pourquoi ne pas proposer un assistant.
je n'ai toujours pas réglé le point ! obligé de passer par des requêtes mais gestion générales de l'application très compliquée derrière, notamment pour les fonctions suivant et précédent.
mon code serait
HFiltre(organisations, ID_dénomination, "ID_forme_juridique="Société à responsabilité limitée""
je veux simplement filtrer ce fichier organisations que je lis sur la dénomination sur les formes juridiques diverses, par exemple ici "Société à responsabilité limitée".
comment borner la chaine avec des apostrophes, des guillemets, un mélange des deux ? des crochets ???
Perdu deux bonnes heures pour abandonner. Les exemples sont archicompliqués pour rien. Faites simples ou du plus simples au plus compliqué
m.chernet@cyberex.fr
Marc |
|
|
|
| |
| |
| |
| |
| |
| |
| | |
|