CHERCHER

4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant

version 11 (Modifiée)


CHERCHER ({table}{; critèreRecherche{; *}})

ParamètreTypeDescription
tableTableTable dans laquelle la sélection est créée ou
Table par défaut si ce paramètre est omis
critèreRechercheCritère de recherche
*Attente d'exécution de la recherche

Description

La commande CHERCHER recherche les enregistrements répondant au(x) critère(s) de recherche spécifié(s) dans critèreRecherche et retourne une sélection d'enregistrements de table. CHERCHER modifie la sélection courante de table pour le process courant. Le premier enregistrement de la nouvelle sélection devient l'enregistrement courant.

Si vous omettez le paramètre table, la commande s'applique à la table par défaut. Si aucune table par défaut n'a été définie, une erreur est générée.

Si vous ne passez ni le paramètre critèreRecherche ni le paramètre *, CHERCHER affiche la boîte de dialogue de l'Editeur de recherches de 4D pour table (sauf lorsqu'il s'agit de la dernière ligne d'une recherche complexe, cf. ci-dessous) :

Pour plus d'informations sur l'utilisation de cet éditeur, reportez-vous au manuel Mode Développement.

L'utilisateur construit la recherche puis clique sur le bouton Rechercher ou Chercher dans sélection. Si la recherche est correctement effectuée et n'est pas interrompue, la variable système OK prend la valeur 1. Si l'utilisateur clique sur Annuler, la commande CHERCHER est interrompue sans effectuer de recherche et la variable OK prend la valeur 0 (zéro).

Exemples

(1) L'exemple suivant affiche l'Editeur de recherches pour la table [Produits] :

   CHERCHER([Produits])

(2) L'exemple suivant affiche l'Editeur de recherches pour la table par défaut (si elle a été définie) :

   CHERCHER

Si vous spécifiez le paramètre critèreRecherche, l'Editeur de recherches ne s'affiche pas et la recherche est entièrement définie par programmation. Pour des recherches simples (recherches sur un seul champ), vous appelez CHERCHER une seule fois avec le paramètre critèreRecherche construit de la manière décrite plus bas. Pour des recherches complexes (recherches sur de multiples champs ou avec de multiples conditions), vous appelez CHERCHER autant de fois que nécessaire avec le paramètre critèreRecherche et le paramètre optionnel * sauf pour la dernière ligne CHERCHER (qui déclenche la recherche).

Exemples

(3) L'exemple suivant recherche les [Personnes] dont le nom commence par "a" :

   CHERCHER([Personnes];[Personnes]Nom="a@")

(4) L'exemple suivant recherche les [Personnes] dont le nom commence par "a" ou "b" :

   CHERCHER([Personnes];[Personnes]Nom="a@";*) ` * indique qu'il y a un autre critère de recherche
   CHERCHER([Personnes]; |;[Personnes]Nom="b@")  
      ` Pas de * : indique la fin de la définition des critères et lance l'exécution de la recherche

Note : Le mode d'interprétation du caractère @ dans les recherches peut être modifié via une option des préférences. Pour plus d'informations, reportez-vous à la section Opérateurs de comparaison.

Construction d'une ligne de recherche

Le paramètre critèreRecherche utilise la syntaxe suivante :

{opérateur ; } champ comparateur valeur

 L'opérateur est utilisé pour lier deux appels à CHERCHER lors d'une définition de recherche complexe. Les opérateurs disponibles sont les mêmes que ceux proposés dans l'Editeur de recherches :

OpérateurSymbole
ET&
OU|
Sauf#

L'opérateur est optionnel et n'est pas nécessaire pour le premier appel à CHERCHER lors d'une recherche complexe. Il est également inutile si votre recherche s'écrit sur une seule ligne. Si vous l'omettez à l'intérieur d'une recherche complexe, le ET (&) est utilisé par défaut.

Le champ est le champ sur lequel va porter la recherche. Il peut provenir d'une autre table si celle-ci est la table 1 d'une table liée à table par un lien automatique ou manuel.

Le comparateur est l'élément qui va permettre de confronter champ et critèreRecherche. Voici la liste des comparateurs possibles :

ComparateurSymbole à utiliser avec CHERCHER
Egal à =
Différent de #
Inférieur à <
Supérieur à >
Inférieur ou égal à<=
Supérieur ou égal à>=
Contient mot-clé%

Note : Il est possible de définir le comparateur sous la forme d'une expression alphanumérique au lieu d'un symbole. Dans ce cas, il est obligatoire d'utiliser des points-virgules pour dissocier les éléments de la chaîne de recherche. Ce principe permet par exemple de créer des séquences de recherches paramétrables en faisant varier le comparateur, ou de construire des interfaces de recherche utilisateur personnalisées. Reportez-vous à l'exemple 19.

La valeur représente ce qui va être confronté au contenu de champ. La valeur peut être toute expression du même type que champ. Le type de la valeur n'est évalué qu'une seule fois, au démarrage de la recherche, et ne l'est donc pas pour chaque enregistrement. Si la recherche porte sur le contenu d'une chaîne de caractères, utilisez dans 'valeur' le symbole "@" pour isoler le contenu à rechercher, par exemple "@Dupon@". Il est à noter, dans ce cas, que la recherche ne tire que partiellement parti de l'index (compacité du stockage des données).

La recherche par mots-clés n'est disponible qu'avec des champs de type alpha ou texte. Pour plus d'informations sur ce type de recherche, reportez-vous à la section Opérateurs de comparaison.

Voici les règles à observer pour la construction de séquences de recherche :

La première ligne ne doit pas contenir d'opérateur.

Les suivantes peuvent débuter par un opérateur de liaison. Si vous l'omettez, l'opérateur ET (&) est utilisé par défaut.

Toutes les lignes, à l'exception de la dernière, doivent s'achever par le symbole *.

Pour lancer la recherche, ne passez pas le paramètre * lors de la construction de votre dernière ligne. Autre solution : vous pouvez exécuter la commande CHERCHER sans autre paramètre que la table (l'Editeur de recherches ne s'affiche pas ; au lieu de cela, les lignes de recherche complexes définies auparavant sont exécutées).

Note : Chaque table maintient sa propre construction de recherche courante. Cela signifie que vous pouvez créer de multiples recherches simultanément, une pour chaque table. Dans ce cas, vous devez passer le paramètre table ou spécifier une table par défaut.

Quelle que soit la manière dont la recherche a été définie :

Si l'exécution d'une commande CHERCHER nécessite un certain temps, 4D affiche automatiquement un message contenant un thermomètre de progression. Ces thermomètres peuvent être cachés à l'aide des commandes SUPPRIMER MESSAGES et LAISSER MESSAGES. Si le thermomètre de progression est affiché, l'utilisateur peut cliquer sur le bouton Stop pour interrompre l'opération. Si la recherche s'est correctement déroulée, la variable système OK prend la valeur 1. Sinon, si la recherche est interrompue, OK prend la valeur 0 (zéro).

Si des champs indexés sont spécifiés, la recherche est optimisée à chaque fois que c'est possible (la recherche commence par les champs indexés), réduisant au maximum la durée de l'opération. La commande tire parti des index composites pour les recherches utilisant le ET (&).

Exemples

(5) Nous recherchons tous les enregistrements dont le nom correspond à "Dupont" :

   CHERCHER([Personnes]; [Personnes]Nom = "Dupont")

Note : Si le champ Nom est indexé, nous bénéficions donc d'une recherche accélérée tirant parti de l'index.

Rappel : Cette recherche trouvera les enregistrements tels que "Dupont", "dupont", "DUPONT", etc. Si vous voulez que la recherche tienne compte des majuscules/minuscules, définissez des critères supplémentaires utilisant les codes de caractères.

(6) Nous recherchons les personnes se nommant "Dupont" et se prénommant "Jean". Le champ Nom est indexé. En revanche, le champ Prénom ne l'est pas :

   CHERCHER ([Personnes]; [Personnes]Nom = "Dupont"; *) ` Chercher toute personne qui s'appelle Dupont 
   CHERCHER ([Personnes]; &;[Personnes]Prénom = "Jean")  ` dont le prénom est Jean 

Cet exemple effectue dans un premier temps une recherche rapide sur le champ indexé Nom, ce qui réduit la sélection d'enregistrements à ceux des personnes s'appelant Dupont. La recherche s'effectue ensuite séquentiellement sur le champ Prénom, mais nous serons peu pénalisés puisqu'elle s'exécute parmi une présélection d'enregistrements.

Note : Cette recherche est particulièrement optimisée si la base contient un index composite incluant les champs [Personnes]Nom+[Personnes]Prénom. Dans ce cas, la commande tire parti de l'index et la recherche est entièrement indexée.

(7) L'exemple suivant recherche les personnes se nommant Dupont ou Blanc. Le champ Nom est indexé :

       ` Chercher toute personne qui s'appelle Dupont…
   CHERCHER ([Personnes]; [Personnes]Nom = "Dupont"; *) 
   CHERCHER ([Personnes]; |;[Personnes]Nom = "Blanc")  ` ou Blanc 

La commande utilise l'index du champ Nom pour les deux recherches. Les deux recherches sont effectuées, et leurs résultats sont placés dans des ensembles internes qui sont finalement combinés par l'intermédiaire d'une opération Union.

(8) L'exemple suivant recherche des personnes qui ne travaillent pas pour une société. La recherche est effectuée en testant si le nom de la société est une chaîne vide.

   CHERCHER ([Personnes]; [Personnes]Société = "") ` Chercher les personnes sans société 

(9) L'exemple suivant recherche chaque personne se nommant "Dupont" et travaillant dans une société basée à Paris. La deuxième recherche utilise un champ venant d'une autre table. Cette recherche peut être effectuée parce que la table [Personnes] est liée à la table [Société] par un lien de N vers 1 :

   CHERCHER ([Personnes]; [Personnes]Nom = "Dupont"; *)  ` Chercher toute personne qui s'appelle Dupont… 
   CHERCHER ([Personnes]; &;[Société]Ville = "Paris")  ` ...qui travaille pour une société à Paris 

(10) L'exemple suivant recherche l'enregistrement de chaque personne dont l'initiale du nom est située entre les lettre A (incluse) et M (incluse) :

   CHERCHER ([Personnes]; [Personnes]Nom < "n")  ` Trouver toute personne entre A et M

(11) L'exemple suivant recherche les enregistrements des personnes habitant soit Paris soit Lyon :

   CHERCHER ([Personnes]; [Personnes]CodePostal = "75@"; *)  ` Trouver ceux qui habitent Paris… 
   CHERCHER ([Personnes]; |;[Personnes]CodePostal = "6900@")  ` ou Lyon 

(12) Recherche par mot-clé : l'exemple suivant recherche dans toute la table [Produits] les enregistrements dont le champ Description contient le mot "facile" :

   CHERCHER([Produits];[Produits]Description%"facile")
      ` Trouver les produits dont la description contient le mot-clé facile

(13) Nous recherchons les enregistrements correspondant à la réponse fournie dans une boîte de dialogue :

   vTrouvé := Demander ("Saisissez un code de facture :") `Demander un code de facture à l'utilisateur 
   Si (OK = 1)   ` Si l'utilisateur clique sur OK… 
      CHERCHER ([Factures]; [Factures]Code = vTrouvé)  `Trouver le code qui correspond à vTrouvé 
   Fin de si

(14) Cet exemple recherche tous les enregistrements des factures saisies en 1996. Nous recherchons les dates entre le 31/12/95 et le 1/1/97 :

   CHERCHER ([Factures]; [Factures]DateFacture > !31/12/95!; *)  ` Trouver des factures après le 31/12/95… 
   CHERCHER ([Factures]; &;[Factures]DateFacture < !1/1/97!) ` et avant 1/1/97 

(15) L'exemple suivant trouve les employés qui ont un salaire entre 20 000 et 40 000 Euros. La recherche inclut les employés qui gagnent 20 000 Euros et exclut ceux qui gagnent 40 000 Euros :

   CHERCHER ([Employés]; [Employés]Salaire >= 20000; *)  ` Trouver les employés qui ont un salaire entre… 
   CHERCHER ([Employés]; &;[Employés]Salaire < 40000)  ` 20 000 et 40 000 Euros

(16) L'exemple suivant cherche les employés du service Marketing qui ont un salaire supérieur à 30 000 Euros. Le champ Salaire est utilisé dans un premier temps car il est indexé. Notez que la seconde recherche utilise un champ venant d'une autre table. Le champ [Service]Nom est lié à la table [Employés] par un lien automatique de N vers 1.

   CHERCHER ([Employés]; [Employés]Salaire > 30000; *) 
      ` Trouver les employés qui ont un salaire supérieur à 30 000 Euros 
   CHERCHER ([Employés]; &;[Service]Nom = "marketing") ` et qui travaillent dans le service marketing

(17) Soient trois tables reliées par des liens de N vers 1 : [Ville] -> [Département] -> [Région] . La recherche suivante trouve toutes les régions comportant des villes dont le nom débute par "Saint" :

   CHERCHER ([Région]; [Ville]Nom="Saint@")  ` Trouver toutes les régions contenant des villes commençant par Saint

(18) La recherche suivante recherche les informations égales à la valeur de la variable mavar.

   CHERCHER ([Lois]; [Lois]Texte = mavar)  ` Trouver toutes les lois qui sont égales à la valeur de mavar

La recherche peut avoir des résultats différents selon la valeur de mavar. Elle sera également exécutée différement. Par exemple :

Si mavar est égale à "Copyright@", la sélection contient toutes les lois qui commencent par Copyright.

Si mavar est égale à "@Copyright@", la sélection contient toutes les lois qui contiennent au moins une occurrence de Copyright.

(19) L'exemple suivant ajoute ou non les lignes d'une recherche complexe en fonction de la valeur de variables. Ainsi, seuls les critères valides sont pris en compte pour la recherche :

   CHERCHER([Facture];[Facture]Payee=Faux;*)
   Si($ville#"") ` Si un nom de ville a été spécifié
      CHERCHER([Facture];[Facture]Ville_Livraison=$ville;*)
   Fin de si
   Si ($code_postal#"") ` Si un code postal a été spécifié
      CHERCHER([Facture];[Facture]Code_Postal=$code_postal;*)
   Fin de si
   CHERCHER([Facture])  ` Exécution de la recherche sur les critères 

(20) Cet exemple illustre l'utilisation d'un comparateur sous forme d'expression alphanumérique. La valeur du comparateur est définie via un pop up menu placé dans une boîte dialogue de recherche personnalisée :

   C_TEXTE($ope)
   $ope:=_pup_operateur{_pup_operateur}  `$ope vaut par exemple "#", ou "="
   Si (OK =1)
      CHERCHER([Facture];[Facture]Montant;$ope;$montant)
   Fin de si

Référence

CHERCHER DANS SELECTION, Opérateurs.

Variables et ensembles système

Si la recherche est correctement effectuée, la variable système OK prend la valeur 1.

La variable OK prend la valeur 0 si :

- l'utilisateur clique sur Annuler dans la boîte de dialogue de recherche,

- en mode 'recherche et verrouillage' (cf. commande FIXER RECHERCHE ET VERROUILLAGE), la recherche a trouvé au moins un enregistrement verrouillé. Dans ce cas également, l'ensemble système LockedSet est mis à jour.


4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant