4D v14.3CHERCHER |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
CHERCHER
|
CHERCHER ( {laTable }{;}{ critère {; *}} ) | ||||||||
Paramètre | Type | Description | ||||||
laTable | Table |
![]() |
Table dans laquelle la sélection est créée ou Table par défaut si ce paramètre est omis | |||||
critère | Expression |
![]() |
Critère de recherche | |||||
* | Opérateur |
![]() |
Attente d'exécution de la recherche | |||||
La commande CHERCHER recherche les enregistrements répondant au(x) critère(s) de recherche spécifié(s) dans critère et retourne une sélection d'enregistrements de laTable. CHERCHER modifie la sélection courante de laTable pour le process courant. Le premier enregistrement de la nouvelle sélection devient l'enregistrement courant.
Si vous omettez le paramètre laTable, 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ère 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).
L'exemple suivant affiche l'Editeur de recherches pour la table [Produits] :
CHERCHER([Produits])
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ère, 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ère 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ère et le paramètre optionnel * sauf pour la dernière ligne CHERCHER (qui déclenche la recherche).
L'exemple suivant recherche les [Personnes] dont le nom commence par "a" :
CHERCHER([Personnes];[Personnes]Nom="a@")
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.
Le paramètre critère utilise la syntaxe suivante :
{opérateur ; } champ comparateur valeur
Opérateur | Symbole |
ET | & |
OU | | |
Sauf | # |
Comparateur | Symbole à 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.
Voici les règles à observer pour la construction de séquences de recherche :
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 :
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.
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.
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.
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é
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
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
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
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
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
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
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
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
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
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 :
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
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
L’utilisation des index de mots-clés d’image peut accélérer de façon importante vos applications.
CHERCHER([IMAGES];[IMAGES]Photos %"cats") // cherche les photos contenant le mot-clé cats
Si la recherche est correctement effectuée, la variable système OK prend la valeur 1.
La variable OK prend la valeur 0 si :
Produit : 4D
Thème : Recherches et tris
Numéro :
277
Nom intl. : QUERY
Modifié : 4D v11 SQL
CHERCHER DANS SELECTION
Opérateurs
4D - Langage ( 4D v14 R3)
4D - Langage ( 4D v14 R2)
4D - Langage ( 4D v14.3)
4D - Langage ( 4D v14 R4)
Hérité de :
CHERCHER ( 4D v12.4)
Parent de :
CHERCHER ( 4D v13.5)