PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE


  • Recherche générique/Recherche à l'identique
  • Recherche sur une rubrique clé ou non clé
  • Recherche sur une clé composée
  • Recherche et filtre
  • Recherche sur une rubrique tableau
  • Parcours des enregistrements correspondant à une condition
  • Recherche à l'identique sous Access
  • Blocages
  • Optimisation du temps de parcours
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
Positionne sur le dernier enregistrement du fichier de données dont la valeur d'une rubrique spécifique est inférieure ou égale à une valeur recherchée (recherche à l'identique). L'enregistrement est lu et les variables HFSQL correspondantes sont mises à jour.
En général, la fonction HLitRechercheDernier permet de se positionner dans le fichier de données pour effectuer une boucle de parcours parmi les enregistrements correspondant à une condition. La fonction HLitPrécédent permet de lire l'enregistrement précédent correspondant à la condition.
Après l'exécution de la fonction HLitRechercheDernier, plusieurs cas peuvent se présenter :
  • un enregistrement correspondant à la condition a été trouvé, bloqué (si nécessaire) et chargé en mémoire : la fonction HTrouve renvoie Vrai.
    Windows Mobile La gestion des blocages est réalisée uniquement sur les fichiers de données HFSQL Client/Serveur ou manipulés par un Accès Natif. Il n'est pas possible de bloquer un enregistrement HFSQL Mobile. En effet, le système d'exploitation du Pocket PC ne permet pas de bloquer des enregistrements.
    PHP La gestion des blocages n'est pas disponible.
    Java Accès par JDBC : La gestion des blocages n'est pas disponible sur les bases de données accédées par JDBC.
  • le fichier de données est vide ou il n'existe pas d'enregistrement correspondant à la condition : aucune lecture n'est effectuée et la fonction HEnDehors renvoie Vrai.
  • la fonction tente de bloquer un enregistrement déjà bloqué en lecture : aucune lecture n'est effectuée, la fonction HErreurBlocage vaut Vrai et la fonction HEnDehors renvoie Vrai.
    Windows Mobile La gestion des blocages est réalisée uniquement sur les fichiers de données HFSQL Client/Serveur ou manipulés par un accès natif. Il n'est pas possible de bloquer un enregistrement HFSQL Mobile. En effet, le système d'exploitation du Pocket PC ne permet pas de bloquer des enregistrements.
    PHP La gestion des blocages n'est pas disponible.
    Java Accès par JDBC : La gestion des blocages n'est pas disponible sur les bases de données accédées par JDBC.
Cette fonction peut être utilisée indifféremment avec les fichiers de données, les vues HFSQL ou les requêtes.
Remarque : la recherche peut être annulée grâce à la fonction HAnnuleRecherche.
Versions 15 et supérieures
Android Cette fonction est désormais disponible pour les applications Android.
Nouveauté 15
Android Cette fonction est désormais disponible pour les applications Android.
Android Cette fonction est désormais disponible pour les applications Android.
Versions 17 et supérieures
iPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad.
Nouveauté 17
iPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad.
iPhone/iPad Cette fonction est désormais disponible pour les applications iPhone/iPad.
Versions 18 et supérieures
Widget Android Cette fonction est désormais disponible en mode Widget Android.
Universal Windows 10 App Cette fonction est désormais disponible en mode Windows Store apps.
Nouveauté 18
Widget Android Cette fonction est désormais disponible en mode Widget Android.
Universal Windows 10 App Cette fonction est désormais disponible en mode Windows Store apps.
Widget Android Cette fonction est désormais disponible en mode Widget Android.
Universal Windows 10 App Cette fonction est désormais disponible en mode Windows Store apps.
Remarque : A partir de la version 19, HFSQL est le nouveau nom de HyperFileSQL.
Versions 21 et supérieures
Universal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
Nouveauté 21
Universal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
Universal Windows 10 App Cette fonction est désormais disponible en mode Universal Windows 10 App.
Exemple
// Recherche du dernier enregistrement pour lequel
// le nom du CLIENT est DUPOND
HLitRechercheDernier(CLIENT, NOM, "DUPOND")
// Recherche de tous les clients ayant un chiffre d'affaires inférieur à une valeur donnée
HLitRechercheDernier(CLIENT, ChiffreAffaires, X)
TANTQUE PAS HEnDehors(CLIENT)
        AjouterClientListe()
        HLitPrécédent(CLIENT, ChiffreAffaires)
FIN
Syntaxe
<Résultat> = HLitRechercheDernier(<Nom du fichier> , <Nom de la rubrique> , <Valeur recherchée> [, <Options>])
<Résultat> : Booléen
  • Vrai si l'enregistrement a été trouvé (correspond à la valeur de la fonction HTrouve).
  • Faux en cas de problème. Ce problème peut être dû :
    • soit à un problème de positionnement (fichier de données vide, etc.) : la fonction HTrouve renvoie Faux et la fonction HErreur renvoie 0.
    • soit à une erreur : la fonction HErreur renvoie un entier différent de 0. La fonction HErreurInfo permet d'obtenir plus de détails.
<Nom du fichier> : 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é.
<Nom de la rubrique> : Chaîne de caractères (avec ou sans guillemets)
Nom de la rubrique sur laquelle la recherche doit être effectuée. Cette rubrique peut être une clé de parcours ou non.
Hyper File 5.5 La recherche ne peut être effectuée que sur une rubrique clé.
<Valeur recherchée> : Type correspondant à la valeur
Valeur de la rubrique recherchée.
<Options> : Constante ou combinaison de constantes optionnelle
Permet de paramétrer :
  • le mode de blocage de l'enregistrement recherché.
  • le type de recherche effectué.
hBlocageLectureEcritureBlocage en lecture/écriture : l'enregistrement en cours de lecture ne pourra ni être lu ni être modifié par une autre application.
Si une requête est manipulée, le mode de blocage est ignoré.
OLE DB Blocage en écriture seulement. Fonctionnement équivalent à la constante hBlocageEcriture.
PHP Cette constante n'est pas disponible.
Java Accès par JDBC : Cette constante n'est pas disponible.
hBlocageEcritureBlocage en écriture : l'enregistrement en cours de lecture pourra être lu par une autre application mais ne pourra pas être modifié par une autre application.
Si une requête est manipulée, le mode de blocage est ignoré.
PHP Cette constante n'est pas disponible.
Java Accès par JDBC : Cette constante n'est pas disponible.
hBlocageNonAucun blocage (même si la fonction HDébutVerrou a été appelée) : l'enregistrement pourra être lu ou modifié par une autre application pendant la lecture.
PHP Cette constante n'est pas disponible.
Java Accès par JDBC : Cette constante n'est pas disponible.
Versions 17 et supérieures
hForwardOnly
Nouveauté 17
hForwardOnly
hForwardOnly
Accès Natifs Constante utilisable uniquement avec les Accès Natifs.
Permet d'accélérer le parcours des données lors d'un parcours simple qui n'utilise pas les fonctionnalités suivantes :
  • Lecture de l'enregistrement précédent.
  • Modification d'un enregistrement.
  • Sauvegarde de position.
Si une de ces fonctionnalités est utilisée, le résultat peut être différent de celui attendu.
Cette constante peut par exemple être utilisée lors d'un parcours permettant de remplir une table mémoire.
hGénériqueRecherche générique (voir Notes)
Par défaut (constante non spécifiée), la recherche effectuée est une recherche à l'identique.
hLimiteParcoursLe parcours s'arrêtera dès que la dernière valeur recherchée sera trouvée. L'enregistrement en cours correspondra à ce dernier enregistrement trouvé.
La fonction HTrouve renverra Faux et la fonction HEnDehors renverra Vrai.
Cette constante permet d'optimiser la vitesse de recherche en mode Client/Serveur.
hRespecteFiltreLe parcours prendra en compte le filtre mis en place avec la fonction HFiltre, même si la clé de parcours utilisée n'est pas optimisée pour le filtre. Rappel : la fonction HFiltre renvoie la clé de parcours optimisée pour le filtre.
Attention : dans ce cas, sur des fichiers de données de taille importante, des problèmes de performances peuvent survenir.
Hyper File 5.5 Cette variable ne peut pas être utilisée.
Par défaut, le parcours suivant la fonction HLitRechercheDernier ne prend pas en compte le filtre.
hSansRafraichir
OLE DBAccès Natifs La fonction HLitRechercheDernier ne rafraîchit pas le contenu de la table ou de la requête. Dans la mesure du possible, la requête n'est pas ré-exécutée. Toutes les positions sauvegardées sont conservées.
Windows Mobile La gestion des blocages est réalisée uniquement sur les fichiers de données HFSQL Client/Serveur ou manipulés par un Accès Natif. Il n'est pas possible de bloquer un enregistrement HFSQL Mobile. En effet, le système d'exploitation du Pocket PC ne permet pas de bloquer des enregistrements.
PHP La gestion des blocages n'est pas disponible.
Java Accès par JDBC : La gestion des blocages n'est pas disponible sur les bases de données accédées par JDBC.
OLE DBAccès Natifs Si le provider OLE DB ou l'Accès Natif utilisé ne gère pas les blocages, les options de blocage seront sans effet.
OLE DB Le mode de blocage spécifié avec la fonction HLitRechercheDernier restera effectif lors des appels aux fonctions HLitPrécédent et HLitSuivant.
Pour modifier le mode de blocage, il est nécessaire d'utiliser :
Remarques

Recherche générique/Recherche à l'identique

  • Recherche générique (essentiellement sur les rubriques de type Chaîne de caractères) : Recherche tous les enregistrements commençant par la valeur indiquée.
    Par exemple : Lors d'une recherche générique de la chaîne "Martin" pour la rubrique NOM, tous les enregistrements dont la rubrique Nom commence par "Martin" correspondront à la recherche. Ainsi, l'enregistrement contenant "Martinez" correspondra à la recherche (la fonction HTrouve renvoie Vrai).
    Remarque : Pour compatibilité avec la version 5.5, la recherche générique d'une chaîne vide ("") est équivalente à l'utilisation de la fonction HLitDernier.
  • Recherche à l'identique : Recherche tous les enregistrements correspondant exactement à la valeur indiquée.
    Par exemple : Lors d'une recherche à l'identique sur la chaîne "Martin" pour la rubrique NOM, la fonction HTrouve renvoie Vrai uniquement pour les enregistrements dont la rubrique vaut exactement "Martin".
  • Exemples de recherches effectuées sur le fichier CLIENT trié par nom :
Valeur cherchéeOptionsLa fonction HLitRechercheDernier positionne sur l'enregistrement.La fonction HTrouve renvoieLa fonction HEnDehors renvoieExplications
Durand6VraiFauxDurand existe.
Le début du fichier de données n'a pas encore été atteint.
Dupuis5FauxFauxDupuis n'existe pas. Positionnement sur la première valeur inférieure (Dupont).
Le début du fichier de données n'a pas encore été atteint.
DuponhGénérique5VraiFauxDupon n'existe pas mais la recherche est générique et il existe un Dupont (entre autres).
Le début du fichier de données n'a pas encore été atteint.
DuponL'enregistrement n'a pas été trouvé (pas de déplacement).FauxFauxDupon n'existe pas.
Le début du fichier de données n'a pas encore été atteint.
BernardL'enregistrement n'a pas été trouvé (pas de déplacement).FauxVraiBernard n'existe pas.
Positionnement sur la première valeur inférieure (cette valeur n'existe pas) : le début du fichier de données est donc atteint.

Recherche sur une rubrique clé ou non clé

La recherche peut être effectuée sur une rubrique clé ou non.
Si la recherche est effectuée sur une rubrique clé :
  • la recherche est rapide et le résultat est trié.
  • si le parcours est poursuivi avec la fonction HLitPrécédent, les enregistrements suivants correspondront aux valeurs inférieures ou égales à la valeur recherchée. Il faut dans ce cas tester la fonction HEnDehors après chaque lecture, pour vérifier si le début du fichier de données est atteint.
Si la recherche est effectuée sur une rubrique non clé :
  • la rubrique sélectionnée apparaîtra en rouge sous l'éditeur de code et un warning sera affiché dans le volet "Erreur de compilation".
    Remarque : La complétion automatique propose uniquement les rubriques clés.
  • si le parcours est poursuivi avec la fonction HLitPrécédent, les enregistrements suivants correspondront aux valeurs égales à la valeur recherchée.

Recherche sur une clé composée

Plusieurs méthodes permettent de faire une recherche sur une clé composée :
1. Utilisation d'une liste de valeurs
Pour faire une recherche sur une clé composée, il est possible d'utiliser la syntaxe suivante :
HLitRechercheDernier(<Nom du fichier>, <Nom de la clé composée>,
[<Valeur de recherche du premier élément de la clé composée>,
<Valeur de recherche du deuxième élément de la clé>, ...])
Exemple :
// Recherche de l'enregistrement
HLitRechercheDernier(CLIENT, NOM_PRENOM, ["MOULIN","Françoise"])
2. Utilisation de la fonction HConstruitValClé
Exemple :
bufValRech est un Buffer= HConstruitValClé(CLIENT, NOM_PRENOM, sNom, sPrénom)
HLitRechercheDernier(CLIENT, NOM_PRENOM, bufValRech)
TANTQUE HTrouve(CLIENT)
        HSupprime(CLIENT)
        HPrécédent(CLIENT, NOM_PRENOM)
FIN
3. Utilisation de la fonction HConvert
Pour construire la valeur d'une clé composée sans utiliser la fonction HConstruitValClé, il est nécessaire de :
  • compléter les composantes texte sur toute leur taille avec le caractère Caract(0).
  • convertir les composantes numériques grâce à la fonction HConvert.
Exemple :
MaClécomposée = Complète(Client.NomClient, Dimension(Client.Nom), Caract(0)) + ...
Complète(Client.Prénom, Dimension(Client.Prénom), Caract(0))
Hyper File 5.5 Les recherches génériques sur les clés composées fonctionnent uniquement si toutes les composantes de la clé composée sont de type Texte. Dans le cas contraire, une recherche à l'identique est effectuée.

Recherche et filtre

Si un filtre est actif (fonction HFiltre), la recherche tient compte du filtre uniquement si la clé utilisée est identique.
Pour prendre en compte ce filtre dans la suite du parcours (même si la clé de parcours n'est pas optimisée pour le filtre), utilisez la constante hRespecteFiltre.
Hyper File 5.5 Si un filtre est actif, la recherche ne tient pas compte du filtre.

Recherche sur une rubrique tableau

La recherche se fait uniquement sur le premier élément du tableau (élément d'indice 1). Pour effectuer une recherche sur les autres éléments du tableau, utilisez des filtres ou des requêtes.

Parcours des enregistrements correspondant à une condition

En général, la fonction HLitRechercheDernier permet de se positionner dans le fichier de données pour effectuer une boucle de parcours parmi les enregistrements correspondant à une condition. Les fonctions HLitSuivant et HLitPrécédent permettent de lire l'enregistrement suivant et précédent correspondant à la condition.
Pour ne plus tenir compte de la recherche lors du passage à l'enregistrement suivant ou précédent, il suffit d'utiliser une des fonctions suivantes :
WINDEVWEBDEV - Code ServeurEtats et RequêtesAjaxCode Utilisateur (MCU)Langage ExterneProcédures stockéesOLE DB

Recherche à l'identique sous Access

Pour effectuer une recherche à l'identique sur une base de données ACCESS, il est conseillé d'utiliser la fonction SansEspace si des espaces sont présents à la fin de la valeur recherchée.
WINDEVWEBDEV - Code ServeurEtats et RequêtesiPhone/iPadWindows MobileUniversal Windows 10 AppAjaxCode Utilisateur (MCU)Langage ExterneHFSQLHFSQL Client/ServeurProcédures stockéesHyper File 5.5OLE DBAccès Natifs

Blocages

Les blocages ne s'appliquent que lorsque un enregistrement a été trouvé.
Par défaut (pas de mode de blocage spécifié dans le paramètre <Options>), aucun blocage de l'enregistrement n'est réalisé.
Si un blocage est demandé (constante hBlocageEcriture ou hBlocageLectureEcriture), la lecture de l'enregistrement sera réalisée uniquement si cet enregistrement n'est pas déjà bloqué.
Si le fichier de données est verrouillé par la fonction HDébutVerrou, il est inutile de spécifier un paramètre de blocage : le blocage spécifié avec la fonction HDébutVerrou est automatiquement pris en compte. Pour ne pas prendre en compte le blocage réalisé avec la fonction HDébutVerrou, utilisez la constante hBlocageNon.
Rappel : Un enregistrement bloqué peut être débloqué avec la fonction HDébloqueNumEnr.
OLE DBAccès Natifs Si le provider OLE DB ou l'Accès Natif utilisé ne gère pas les blocages, les options de blocage seront sans effet.
WINDEVWEBDEV - Code ServeurEtats et RequêtesiPhone/iPadUniversal Windows 10 AppAjaxCode Utilisateur (MCU)HFSQLProcédures stockées

Optimisation du temps de parcours

Pour optimiser le temps des premiers parcours d'un fichier de données, utilisez la fonction HOptimise sur ce fichier de données.
Composante : wd240hf.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Clée composée avec des Dates
Bonjour,
Il faut éviter d'utiliser le type date dans les clés composées surtout avec HLitRechercheDernier avec l'option "hGénérique".
Exemple :
// cle_fichier est une clée composée : chaine[13], date
HLitRechercheDernier(Fichier,cle_fichier,['DUPONT'],hGénérique)
TantQue Htrouve()
trace(Fichier.date)
HLitPrecedent(fichier,cle_fichier)
FIN
// La date qui s'affiche n'est pas toujours la dernière date.
// hGénérique n'est que pour les chaines.
Olivier DUCTEIL
17 juil. 2014