DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / HFSQL / Fonctions HFSQL
  • Recherche générique/Recherche à l'identique
  • Recherche sur une rubrique clé ou non clé
  • Recherche sur une clé composée
  • Recherche sur une rubrique tableau
  • Recherche et filtre
  • Parcours des enregistrements correspondant à une condition
  • Recherche à l'identique sous Access
  • Blocages
  • Optimisation du temps de parcours
  • Connecteur Natif XML
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Positionne sur le premier enregistrement du fichier de données dont la valeur d'une rubrique spécifique est strictement é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 <Source>.LitRecherchePremier permet de se positionner dans le fichier de données pour effectuer une boucle de parcours parmi les enregistrements correspondant à une condition. La fonction <Source>.LitSuivant permet de lire l'enregistrement suivant correspondant à la condition.
Après l'exécution de la fonction <Source>.LitRecherchePremier, 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 <Source>.Trouve renvoie Vrai.
  • s'il n'existe pas d'enregistrement correspondant à la condition mais s'il existe un enregistrement de valeur supérieure : l'enregistrement est lu, la fonction <Source>.EnDehors renvoie Faux et la fonction <Source>.Trouve renvoie Faux.
  • le fichier de données est vide : aucune lecture n'est effectuée, la fonction <Source>.EnDehors renvoie Vrai et la fonction <Source>.Trouve renvoie Faux.
  • la fonction tente de bloquer un enregistrement déjà bloqué en lecture : aucune lecture n'est effectuée, la fonction HErreurBlocage renvoie Vrai et la fonction <Source>.EnDehors renvoie Vrai.
    Remarque : Par défaut, une gestion automatique des erreurs de blocages et des conflits de modification est effectuée (sauf dans le code des procédures stockées). A tout moment, il est possible de personnaliser ou de débrancher cette gestion automatique des erreurs avec la fonction <Source>.SurErreur.
La fonction <Source>.LitRecherchePremier 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 <Source>.AnnuleRecherche.
JavaPHP Cas particulier : gestion des blocages :
  • PHP En PHP, la gestion des blocages n'est pas disponible.
  • Java En Java, lors d'un accès par JDBC, la gestion des blocages n'est pas disponible sur les bases de données accédées par JDBC.
Exemple
// Recherche du premier enregistrement pour lequel 
// le nom du Client est DUPOND
Client.LitRecherchePremier(Nom, "DUPOND")
SI Client.Trouve() = Faux ALORS
	Erreur("Client non trouvé")
	RETOUR
SINON
	// Suite du traitement sur le client DUPOND
FIN
Syntaxe
<Résultat> = <Source>.LitRecherchePremier(<Rubrique> , <Valeur recherchée> [, <Options>])
<Résultat> : Booléen
  • Vrai si l'enregistrement a été trouvé (correspond à la valeur renvoyée par la fonction <Source>.Trouve).
  • Faux en cas de problème. Ce problème peut être dû :
    • soit à un problème de positionnement (fichier de données vide, ...) : la fonction <Source>.Trouve 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.
<Source> : Type correspondant à la source spécifiée
Nom du fichier de données HFSQL, de la vue ou de la requête manipulé.
<Rubrique> : Chaîne de caractères
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é.
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.
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.
hBlocageNonAucun blocage : 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.
hForwardOnly
Connecteurs Natifs (Accès Natifs) Constante utilisable uniquement avec les Connecteurs 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 un champ Table par programmation.
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 ou si aucune valeur ne correspond à la recherche.
L'enregistrement en cours correspondra à ce dernier enregistrement trouvé.
La fonction <Source>.Trouve renverra Faux et la fonction <Source>.EnDehors renverra Vrai.
Cette constante permet d'optimiser la vitesse de recherche en mode Client/Serveur et sur les bases externes (accédées via OLE DB ou via les Connecteurs Natifs).
hRespecteFiltreLe parcours prendra en compte le filtre mis en place avec la fonction <Source>.Filtre, même si la clé de parcours utilisée n'est pas optimisée pour le filtre. Rappel : la fonction <Source>.Filtre 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 <Source>.LitRecherchePremier ne prend pas en compte le filtre.
hSansRafraichir
OLE DBConnecteurs Natifs (Accès Natifs) La fonction <Source>.LitRecherchePremier 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.
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 DBConnecteurs Natifs (Accès Natifs) Si le provider OLE DB ou le Connecteur 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 <Source>.LitRecherchePremier restera effectif lors des appels aux fonctions <Source>.LitPrécédent et <Source>.LitSuivant.
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 <Source>.Trouve renvoie Vrai).
    Remarque : Pour compatibilité avec WINDEV 5.5, la recherche générique d'une chaîne vide ("") est équivalente à l'utilisation de la fonction <Source>.LitPremier.
  • 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 <Source>.Trouve renvoie Vrai uniquement pour les enregistrements dont la rubrique vaut exactement "Martin".
  • Exemples de recherches effectuées sur le fichier de données CLIENT trié par nom :
Valeur cherchéeOptions<Source>.LitRecherchePremier positionne sur l'enregistrement.<Source>.Trouve renvoie<Source>.EnDehors renvoieExplications
Durand1VraiFauxDurand existe.
La fin du fichier de données n'a pas encore été atteinte.
Dupuis1FauxFauxDupuis n'existe pas. Positionnement sur la première valeur supérieure (Durand).
La fin du fichier de données n'a pas encore été atteinte.
DuponhGénérique8VraiFauxDupon n'existe pas mais la recherche est générique et il existe un Dupond (entre autres).
La fin du fichier de données n'a pas encore été atteinte.
DuponL'enregistrement n'a pas été trouvé (pas de déplacement, l'enregistrement en cours ne change pas).FauxFauxDupon n'existe pas.
La fin du fichier de données n'a pas encore été atteinte.
NorbertL'enregistrement n'a pas été trouvé (pas de déplacement, l'enregistrement en cours ne change pas).FauxVraiNorbert n'existe pas.
Positionnement sur la première valeur supérieure (cette valeur n'existe pas) : la fin du fichier de données est donc atteinte.

Pour plus de détails, consultez le tableau récapitulatif Hyper File 5.5 et 7 : Comment sont gérés les espaces dans les recherches ?

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 <Source>.LitSuivant, les enregistrements suivants correspondront aux valeurs supérieures ou égales à la valeur recherchée. Il faut dans ce cas tester la fonction <Source>.EnDehors après chaque lecture, pour vérifier si la fin du fichier de données est atteinte.
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 "Erreurs de compilation".
    Remarque : La complétion automatique propose uniquement les rubriques clés.
  • si le parcours est poursuivi avec la fonction <Source>.LitSuivant, 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 :
HLitRecherchePremier(<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
Client.LitRecherchePremier(Nom_Prénom, ["MOULIN", "Françoise"])

2. Utilisation de la fonction <Source>.ConstruitValClé
Exemple :
bufValRech est un Buffer = Client.ConstruitValClé(Nom_Prénom, sNom, sPrénom)
Client.RecherchePremier(Nom_Prénom, bufValRech)
TANTQUE Client.Trouve()
	Client.Supprime()
	Client.Suivant(Nom_Prénom)
FIN
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 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.

Recherche et filtre

Si un filtre est actif (fonction <Source>.Filtre), 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.

Parcours des enregistrements correspondant à une condition

En général, la fonction <Source>.LitRecherchePremier permet de se positionner dans le fichier de données pour effectuer une boucle de parcours parmi les enregistrements correspondant à une condition. Les fonctions <Source>.LitSuivant et <Source>.LitPré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êtesCode Utilisateur (MCU)AjaxOLE DBConnecteurs Natifs (Accès Natifs)

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êtesUniversal Windows 10 AppiPhone/iPadWidget IOSMac CatalystCode Utilisateur (MCU)AjaxHFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBConnecteurs Natifs (Accè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é (constantes hBlocageEcriture ou hBlocageLectureEcriture), la lecture de l'enregistrement sera réalisée uniquement si cet enregistrement n'est pas déjà bloqué.
Rappel : Un enregistrement bloqué peut être débloqué avec la fonction <Source>.DébloqueNumEnr.
OLE DBConnecteurs Natifs (Accès Natifs) Si le provider OLE DB ou le Connecteur Natif (également appelé Accès Natif) utilisé ne gère pas les blocages, les options de blocage seront sans effet.
WINDEVWEBDEV - Code ServeurEtats et RequêtesUniversal Windows 10 AppiPhone/iPadWidget IOSMac CatalystCode Utilisateur (MCU)AjaxHFSQL ClassicHFSQL Client/ServeurHyper File 5.5OLE DBConnecteurs Natifs (Accès Natifs)

Optimisation du temps de parcours

Pour optimiser le temps des premiers parcours d'un fichier de données, utilisez la fonction <Source>.Optimise sur ce fichier de données.
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)Connecteurs Natifs (Accès Natifs)

Connecteur Natif XML

Le comportement de la fonction <Source>.LitRecherchePremier est lié aux fonctions <Source>.ActiveFiltreAuto et <Source>.DésactiveFiltreAuto.
Par défaut, la fonction <Source>.ActiveFiltreAuto est activée.
Ainsi, pour lire le contenu d'un document XML, il suffit de lire le contenu du fichier principal (le parent) puis des fichiers liés (les fils).
Par défaut, lors de la lecture dans un fichier, un filtre est automatiquement réalisé sur les fichiers reliés pour lire uniquement les enregistrements correspondant au fichier principal.
Par exemple :
Lors du parcours du fichier Person, il est possible de connaître l'email de cette personne.
Pour cela, il suffit de se positionner sur le fichier "Person", puis d'utiliser la fonction <Source>.LitRecherchePremier sur le fichier "email".
Dans ce cas, l'enregistrement lu dans le fichier "email" correspondra au premier email associé à l'enregistrement en cours dans le fichier "Person".
Si ce mécanisme est désactivé (fonction <Source>.DésactiveFiltreAuto), l'enregistrement lu dans le fichier "email" correspondra au premier enregistrement du fichier email (et non au fils de l'enregistrement lu dans le fichier "Person").
Composante : wd300hf.dll
Version minimum requise
  • Version 25
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 20/06/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale