|
|
|
|
|
- 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
HLitRecherchePremier (Fonction) En anglais : HReadSeekFirst
Non disponible avec ce type de connexion
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 HLitRecherchePremier permet de se positionner dans le fichier de données pour effectuer une boucle de parcours parmi les enregistrements correspondant à une condition. La fonction HLitSuivant permet de lire l'enregistrement suivant correspondant à la condition. Après l'exécution de la fonction HLitRecherchePremier, 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.
- 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 HEnDehors renvoie Faux et la fonction HTrouve renvoie Faux.
- le fichier de données est vide : aucune lecture n'est effectuée, la fonction HEnDehors renvoie Vrai et la fonction HTrouve 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 HEnDehors 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 HSurErreur.
La fonction HLitRecherchePremier 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.
HLitRecherchePremier(CLIENT, NOM, "DUPOND")
SI HTrouve(CLIENT) = Faux ALORS
Erreur("Client non trouvé")
RETOUR
SINON
FIN
Syntaxe
<Résultat> = HLitRecherchePremier(<Fichier de données> , <Rubrique> , <Valeur recherchée> [, <Options>])
<Résultat> : Booléen - Vrai si l'enregistrement a été trouvé (correspond à la valeur renvoyée par 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, ...) : 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.
<Fichier de données> : Chaîne de caractères 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.
<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é.
| | hBlocageEcriture | Blocage 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é.
| hBlocageLectureEcriture | Blocage 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é.
| hBlocageNon | Aucun blocage : l'enregistrement pourra être lu ou modifié par une autre application pendant la lecture.
| hForwardOnly | | hGénérique | Recherche générique (voir Notes) Par défaut (constante non spécifiée), la recherche effectuée est une recherche à l'identique. | hLimiteParcours | Le 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 HTrouve renverra Faux et la fonction HEnDehors 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). | hRespecteFiltre | Le 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. Par défaut, le parcours suivant la fonction HLitRecherchePremier ne prend pas en compte le filtre. | hSansRafraichir | |
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 WINDEV 5.5, la recherche générique d'une chaîne vide ("") est équivalente à l'utilisation de la fonction HLitPremier. - 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 de données CLIENT trié par nom :
| | | | | | Valeur cherchée | Options | HLitRecherchePremier positionne sur l'enregistrement. | HTrouve renvoie | HEnDehors renvoie | Explications | Durand | | 1 | Vrai | Faux | Durand existe. La fin du fichier de données n'a pas encore été atteinte. | Dupuis | | 1 | Faux | Faux | Dupuis 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. | Dupon | hGénérique | 8 | Vrai | Faux | Dupon 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. | Dupon | | L'enregistrement n'a pas été trouvé (pas de déplacement, l'enregistrement en cours ne change pas). | Faux | Faux | Dupon n'existe pas. La fin du fichier de données n'a pas encore été atteinte. | Norbert | | L'enregistrement n'a pas été trouvé (pas de déplacement, l'enregistrement en cours ne change pas). | Faux | Vrai | Norbert 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 HLitSuivant, les enregistrements suivants correspondront aux valeurs supérieures ou égales à la valeur recherchée. Il faut dans ce cas tester la fonction HEnDehors 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 HLitSuivant, 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 :
HLitRecherchePremier(CLIENT, NOM_PRENOM, ["MOULIN", "Françoise"])
2. Utilisation de la fonction HConstruitValCléExemple :
bufValRech est un Buffer = HConstruitValClé(CLIENT, NOM_PRENOM, sNom, sPrénom)
HRecherchePremier(CLIENT, NOM_PRENOM, bufValRech)
TANTQUE HTrouve(CLIENT)
HSupprime(CLIENT)
HSuivant(CLIENT, NOM_PRENOM)
FIN
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 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.
Parcours des enregistrements correspondant à une condition En général, la fonction HLitRecherchePremier 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 :
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|