4D v16.3

FIXER DESTINATION RECHERCHE

Accueil

 
4D v16.3
FIXER DESTINATION RECHERCHE

FIXER DESTINATION RECHERCHE 


 

FIXER DESTINATION RECHERCHE ( destinationType {; destinationObjet {; destinationPtr}} ) 
Paramètre Type   Description
destinationType  Entier long in 0=sélection courante, 1=ensemble, 2=sélection temporaire, 3=variable
destinationObjet  Chaîne, Variable in Nom de l'ensemble ou Nom de la sélection temporaire ou Variable
destinationPtr  Pointeur in Pointeur vers la variable locale si destinationType=3

La commande FIXER DESTINATION RECHERCHE vous permet d'indiquer à 4D où placer les résultats de toutes les recherches qui suivent l'appel de cette commande dans le process courant.

Vous spécifiez le type de la destination dans le paramètre destinationType. 4D fournit les constantes prédéfinies suivantes, placées dans le thème Recherches :

Constante Type Valeur
Vers ensemble Entier long 1
Vers sélection courante Entier long 0
Vers sélection temporaire Entier long 2
Vers variable Entier long 3

Vous spécifiez le nom de la destination de la recherche dans le paramètre optionnel destinationObjet en fonction du tableau suivant :

Paramètre destinationTypeParamètre destinationObjet
0 (sélection courante)Vous ne passez pas de paramètre.
1 (ensemble)Vous passez le nom de l'ensemble (existant ou à créer)
2 (sélection temporaire)Vous passez le nom de la sélection temporaire (existante ou à créer)
3 (variable)Vous passez soit une variable numérique (existante ou à créer), soit une chaîne vide "" pour utiliser le paramètre destinationPtr

Avec

 FIXER DESTINATION RECHERCHE(Vers sélection courante)

Les enregistrements trouvés par la recherche seront placés dans la sélection courante de la table dans laquelle la recherche est effectuée.

Avec

 FIXER DESTINATION RECHERCHE(Vers ensemble;"monEnsem")

Les enregistrements trouvés par la recherche seront placés dans l'ensemble monEnsem. La sélection courante et l'enregistrement courant de la table dans laquelle vous recherchez restent inchangés.

Avec

 FIXER DESTINATION RECHERCHE(Vers sélection temporaire;"maTemp")

Les enregistrements trouvés par la recherche seront placés dans la sélection temporaire maTemp. La sélection courante et l'enregistrement courant pour la table sur laquelle vous effectuez la recherche restent inchangés.

Notes :

  • Si la sélection temporaire n'existe pas avant l'appel, elle est automatiquement créée une fois la recherche effectuée. 
  • Cette commande gère les sélections temporaires comme la commande [#cmd id="334"/] : seules des références sont conservées. Une fois la sélection temporaire utilisée, elle n'existe plus.

Avec

 FIXER DESTINATION RECHERCHE(Vers variable;$vlRésultatRech)

Ou

 FIXER DESTINATION RECHERCHE(Vers variable;"";->$vlRésultatRech)

Note : Cette seconde syntaxe facilite l'utilisation conjointe de la commande avec LIRE DESTINATION RECHERCHE.

Le nombre d'enregistrements trouvés par la recherche sera placé dans la variable $vlRésultatRech. La sélection courante et l'enregistrement courant de la table dans laquelle vous effectuez la recherche restent inchangés.

Attention : FIXER DESTINATION RECHERCHE affecte toutes les recherches suivantes dans le process courant. N'oubliez pas d'associer toujours un appel à FIXER DESTINATION RECHERCHE (lorsque destinationType#0) à un appel à FIXER DESTINATION RECHERCHE(0) ultérieur pour rétablir le mode standard de recherche.

FIXER DESTINATION RECHERCHE modifie uniquement le comportement des commandes de recherche, c'est-à-dire :

En revanche, FIXER DESTINATION RECHERCHE n'affecte pas les autres commandes qui modifient la sélection courante telles que TOUT SELECTIONNER, LIEN RETOUR , etc.

Vous créez un formulaire qui affiche les enregistrements de la table [Annuaire]. Vous créez un objet de type onglet nommé asRolodex (avec un onglet pour chaque lettre de l'alphabet) et un sous-formulaire qui affiche les enregistrements de la table [Annuaire]. En choisissant un onglet, vous affichez les enregistrements qui correspondent à cette lettre. Puisque, dans cet exemple, la table [Annuaire] contient des données statiques, vous ne voulez pas effectuer une recherche chaque fois que vous cliquez sur un onglet et donc vous dépensez moins de temps précieux à exécuter ces recherches. Pour faire ceci, vous pouvez placer vos recherches dans les sélections temporaires pour les réutiliser quand il le faut. Vous écrivez la méthode objet de l'onglet asRolodex comme indiquée ci-dessous :

  ` Méthode objet de l'onglet asRolodex
 Au cas ou
 
    :(Evenement formulaire=Sur chargement)
  ` Avant que le formulaire s'affiche à l'écran,
  ` initialiser l'onglet et le tableau de booléens qui nous indiquent
  ` si une recherche pour la lettre sur laquelle vous avez cliqué
  ` a été exécutée ou pas
       TABLEAU ALPHA(1;asRolodex;26)
       TABLEAU BOOLEEN(abRechFini;26)
       Boucle($vlElém;1;26)
          asRolodex{$vlElém}:=Caractere(64+$vlElém)
          abRechFini{$vlElém}:=Faux
       Fin de boucle
 
    :(Evenement formulaire=Sur clic)
  ` Lorsque l'utilisateur clique sur un onglet, vérifier si une recherche pour cette lettre
  ` a été exécutée ou pas
       Si(Non(abRechFini{asRolodex}))
  ` Sinon, fixer la destination de la recherche vers une sélection temporaire
          FIXER DESTINATION RECHERCHE(Vers sélection temporaire;"temp")
  ` Effectuer la recherche
          CHERCHER([Phone Book];[Phone Book]Last name=asRolodex{asRolodex}+"@")
  ` Restituer le mode standard de recherche
          FIXER DESTINATION RECHERCHE(Vers sélection courante)
  ` Utiliser les enregistrements trouvés
          UTILISER SELECTION("temp")
          COPIER SELECTION([Phone Book];"Rolodex"+asRolodex{asRolodex})
  ` La prochaine fois que cette lettre est choisie, la recherche ne sera pas exécutée
          abRechFini{asRolodex}:=Vrai
       Sinon
  ` Utiliser la sélection temporaire existante pour l'affichage des enregistrements qui correspondent à cette lettre
          UTILISER SELECTION("Rolodex"+asRolodex{asRolodex})
       Fin de si
 
    :(Evenement formulaire=Sur libération)
  ` Après que le formulaire disparaît de l 'écran
  ` Effacer les sélections temporaires de la mémoire
       Boucle($vlElem;1;26)
          Si(abRechFini{$vlElém})
             EFFACER SELECTION("Rolodex"+asRolodex{$vlElém})
          Fin de si
       Fin de boucle
  ` Effacer les deux tableaux dont nous n'avons pas besoin
       EFFACER VARIABLE(asRolodex)
       EFFACER VARIABLE(abRechFini)
 
 Fin de cas

La méthode ValeursUniques suivante vérifie si les valeurs sont uniques pour des champs dans une table de votre choix. L'enregistrement courant peut déjà exister ou vient d'être créé.

  ` Méthode projet ValeursUniques
  ` ValeursUniques ( Pointeur ; Pointeur { ; Pointeur... } ) -> Booléen
  ` ValeursUniques ( ->Table ; ->Champ { ; ->Champ2... } ) -> Oui ou non
 
 C_BOOLEEN($0)
 C_POINTEUR(${1})
 C_ENTIER LONG($vlChamp;$vlNmbChamps;$vlTrouvé;$vlEnregCour)
 $vlNmbChamps:=Nombre de paramètres-1
 $vlEnregCour:=Numero enregistrement($1->)
 Si($vlNmbChamps>0)
    Si($vlEnregCour#-1)
       Si($vlEnregCour<0)
  ` Il s'agit d'un nouvel enregistrement qui n'a pas été sauvegardé (numéro d'enregistrement est
  ` égal à -3)
  ` donc nous pouvons arrêter la recherche dès que nous avons trouvé un enregistrement
          FIXER LIMITE RECHERCHE(1)
       Sinon
  ` Il s'agit d'un enregistrement existant, donc nous pouvons arrêter
  ` la recherche dès que nous avons trouvé au moins deux enregistrements
          FIXER LIMITE RECHERCHE(2)
       Fin de si
  ` La recherche retournera le résultat dans la variable $vlTrouvé
  ` sans changer l'enregistrement courant ni la sélection courante
       FIXER DESTINATION RECHERCHE(Vers variable;$vlTrouvé)
  ` Construire la recherche selon le nombre de champs spécifiés
       Au cas ou
          :($vlNmbChamps=1)
             CHERCHER($1->;$2->=$2->)
          :($vlNmbChamps=2)
             CHERCHER($1->;$2->=$2->;*)
             CHERCHER($1->; & ;$3->=$3->)
          Sinon
             CHERCHER($1->;$2->=$2->;*)
             Boucle($vlChamp;2;$vlNmbChamps-1)
                CHERCHER($1->; & ;${1+$vlChamp}->=${1+$vlChamp}->;*)
             Fin de boucle
             CHERCHER($1->; & ;${1+$vlNmbChamps}->=${1+$vlNmbChamps}->)
       Fin de cas
       FIXER DESTINATION RECHERCHE(0) ` Rétablir le mode standard de recherche
       FIXER LIMITE RECHERCHE(0) ` Enlever la limite sur la recherche
  ` Traiter le résultat de la recherche
       Au cas ou
          :($vlTrouvé=0)
             $0:=Vrai  ` Pas de valeurs dupliquées
          :($vlTrouvé=1)
             Si($vlEnregCour<0)
                $0:=Faux ` Trouvé un enregistrement existant avec les mêmes valeurs que le nouveau
             Sinon
                $0:=Vrai  ` Pas de valeurs dupliquées, nous avons trouvé le même enregistrement
             Fin de si
          :($vlTrouvé=2)
             $0:=Faux   ` Quoi que ce soit, les valeurs sont dupliquées
       Fin de cas
    Sinon
       Si(◊Débogage)   ` Cela n'a aucun sens, signalez-le pendant le développement de la base
          TRACE   ` ATTENTION ! Cette méthode a été appelée sans enregistrement courant
       Fin de si
       $0:=Faux   ` Ne peut pas garantir le résultat
    Fin de si
 Sinon
    Si(◊Débogage)   ` Cela n'a aucun sens, signalez-le pendant le développement de la base
       TRACE   ` ATTENTION ! Cette méthode a été appelée sans conditions de recherche
    Fin de si
    $0:=Faux   ` Ne peut pas garantir le résultat
 Fin de si

Lorsque cette méthode est implémentée dans votre application, vous pouvez écrire le code suivant :

  ` ...
 Si(ValeursUniques(->[Contacts];->[Contacts]Société;->[Contacts]Nom;->[Contacts]Prénom))
  ` Traitement de l'enregistrement qui a les valeurs uniques
 Sinon
    ALERTE("Il existe déjà un contact avec ce nom pour cette société.")
 Fin de si
  ` ...



Voir aussi  

CHERCHER
CHERCHER DANS SELECTION
CHERCHER PAR EXEMPLE
CHERCHER PAR FORMULE
CHERCHER PAR FORMULE DANS SELECTION
CHERCHER PAR SQL
CHERCHER PAR TABLEAU
FIXER LIMITE RECHERCHE
LIRE DESTINATION RECHERCHE

 
PROPRIÉTÉS 

Produit : 4D
Thème : Recherches et tris
Numéro : 396
Nom intl. : SET QUERY DESTINATION

Commande(s) éligible(s) à l'exécution dans un process préemptif

 
HISTORIQUE 

Modifié : 4D v11 SQL
Modifié : 4D v13

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)