Leçon 27 : Requêtes : Les paramètres dans les critères avec les crochets [ et ]

Temps nécessaire pour suivre cette leçon : Entre une bonne demie heure et trois quarts d'heure

Pour suivre cette leçon, vous devez avoir suivi les leçons précédentes. Ou plus précisément, vous devez être en possession de la base de données ProFormation.mdb telle qu'elle était à la fin de la leçon précédente. Si vous n'êtes pas certain de l'avoir, vous pouvez la télécharger ici

Aperçu de cette leçon

Dans cette leçon, nous allons voir comment une seule requête peut contenir plusieurs résultats, en utilisant ce qu'on appelle un paramètre variable.

Sommaire

  1. Utilisation des crochets [ ]
  2. Utilisation de 2 paramètres variables avec OU dans un seul champ
  3. Signe plus petit que < associé à un paramètre variable entre crochets
  4. Mélange de paramètres variables et fixes
  5. Paramètres variables dans plusieurs champs différents
  6. Paramètres variables associé à l'étoile *
  7. Le paramètre entre crochets et l'étoile * aident à pallier aux problèmes d'orthographe

Admettons que je veuille une requête qui m'extrait tous les clients d'Allemagne : Je sais comment faire : Je demande Allemagne comme critère de Pays. Si je veux les clients Belges, je demande Belgique, etc. Mais si je voulais une requête par pays, je devrais créer 216 requêtes, soit une requête par pays ? Pas très pratique...


Utilisation des crochets [ ]

C'est justement le sujet de ce cours. Créez une nouvelle requête, comme d'habitude, avec le prénom, le nom et le pays. Comme critère de PaysOrigine, écrivez [Tralala] (Tralala entre crochets: le crochet s'obtient en appuyant sur la touche ALT GR (touche à droite de la barre d'espacement) et è : : (Pour refermer le crochet, c'est )

ATTENTION, donc, ce sont des CROCHETS, PAS des parenthèses !

C'est quoi, Tralala ?

Justement, ça ne veut rien dire.

Lancez la requête : . Effectivement, Access vous demande également : "C'est quoi, ça, Tralala ? Jamais entendu parler !". Mais il est plus poli : Il vous dit "Entrez la valeur du paramètre", Tralala. Dans la zone blanche, précisez que Tralala est égal à Suisse : . Cliquez sur OK.

Comme vous avez précisé que Tralala = Suisse (comme critère de Pays), la requête vous renvoie les suisses : . Revenez en mode création, et RELANCEZ immédiatement une deuxième fois la requête. A nouveau, cette boîte de dialogue apparaît. Cette fois, répondez france, et cliquez sur OK. Cette fois, ce sont tous les français qui apparaissent.

Ne fermez pas cette requête, mais Enregistrez-là sous R_CelebriteParametrePaysTralala

D'accord. Donc, à chaque lancement de la requête, il va m'être demandé quel pays je désire, et ce pays va être placé à la place de [Tralala], ce qui fait que je n'ai besoin que d'une requête au lieu d'une requête par pays, c'est génial ! Au dernier moment, je précise mon pays, et hop, l'affaire est bouclée...

Exactement. Tralala est ce qu'on appelle une variable, ou un paramètre.

Et entre crochets, finalement je met ce que je veux : [Tralala], [Boudin blanc] ou [Patin à roulettes], de toute façon, je vais devoir préciser le pays tout pareil...

Oui. D'ailleurs, [Tralala] ou [Boudin blanc], c'est pas terrible. Soyons plus élégant : Ecrivez plutôt : [Entrez le pays désiré] : . Lancez la requête, et essayez Etats-Unis :

Excellent ! Comme ça, on a vraiment l'impression qu'il nous pose la question... C'est évidemment plus convivial que [Tralala] !

Eh oui...

Par contre, il faut vraiment faire super-attention à l'orthographe... Si on oublie le trait d'union entre Etats et Unis, je suppose que ça ne marche plus ?

Effectivement ! C'est exactement comme si vous écriviez "Etats Unis" directement comme critère de PaysOrigine, ça ne marchera pas non plus parce que vous avez oublié le tiret.

On ne peut pas dans la boîte de dialogue "Entrez la valeur du paramètre" avoir la liste déroulante des pays possibles pour éviter les fautes ?

Non. Pas maintenant. C'est possible, mais c'est vraiment plus compliqué. Il faudra attendre d'être dans les formulaires très avancés pour ça !

Enregistrez cette requête sous R_CelebritePaysParametre


Utilisation de 2 paramètres variables avec OU dans un seul champ

Peut-on demander la liste de tous les gens de deux pays : Belgique et Suisse par exemple

Oui, puisque les paramètres entre crochets se comportent exactement comme des critères normaux : [Entrez le 1er pays] Ou [Entrez le 2ème pays] : . Lancez la requête. à la question "Entrez le 1er pays", répondez belgique, et cliquez sur OK. Il vous pose alors la 2ème question : "Entrez le 2ème pays", répondez suisse, et cliquez à nouveau sur OK. Le résultat comprend tous les gens de Belgique et de Suisse

Enregistrez cette requête sous R_CelebriteParametre2Pays, quittez cette requête, et placez les descriptions suivantes :

C'est vraiment exactement comme des critères normaux finalement, ces fameux paramètres ?


Signe plus petit que < associé à un paramètre variable entre crochets

Mais oui, exactement. Par exemple, admettons que notre table T_Celebrite soit en fait une table de candidats pour une agence de travail temporaire :Vous avez alors souvent des clients à la recherche de personnel qui vous téléphonent, et généralement vous demandent : "J'ai besoin de quelqu'un pour m'aider, mais mon budget maximum est de X francs". X francs étant variable... Vous n'allez tout de même pas vous amuser à créer 50 requêtes avec la liste des gens sont le salaire est au maximum de 10000 francs, de 12000 francs, de 15000 francs, etc. Non ! Vous allez créer une requête paramétrée avec comme paramètre de salaire : <[Quel plafond salarial ?].

Essayez, créez une nouvelle requête comme d'habitude, basée sur T_Celebrite, avec le prénom, le nom et le salaire, et comme critère de salaire : . Lancez la requête. à la question "Quel plafond salarial", répondez 6000, et cliquez sur OK : Voilà, vous avez la liste des gens dont le salaire demandé est inférieur à 6000 francs... Et donc, comme toujours, chaque fois que vous allez lancer la requête, vous pourrez entrer une valeurdifférente.

Enregistrez cette requête sous R_CelebriteParametreSalairePlafondVariable

Ca marche, par contre, il me donne toujours ces fameux salaires inconnus à 0 francs... On peut les éliminer ?


Mélange de paramètres variables et fixes

Bien sûr. Nous allons mélanger un critère fixe et un critère variable : essayez Pas 0 Et <[Quel plafond salarial ?] : . Lancez la requête, et écrivez encore 6000 : Vous obtenez la liste de tous les gens qui gagnent moins de 6000 francs par mois, mais en excluant les salaires inconnus. On peut d'ailleurs en plus les trier par ordre croissant pour clarifier la liste :

Faites Fichier/Enregistrer Sous : R_CelebriteParametreSalairePlafondVariableSans0

Et si le client dit "J'ai besoin d'un MENUISIER que je peux payer maximum 6000 francs par mois" ?

Bon, dans notre table des célébrités, nous n'avons pas tellement de menuisiers, mais nous avons un champ domaine qui va tout à fait convenir. Donc, si nous voulons l'ensemble des célébrités qui font de la chanson par exemple, avec un plafond salarial variable, il faudrait ajouter le champ Domaine, et lui mettre chanson comme critère : Essayez :


Paramètres variables dans plusieurs champs différents

AH OK ! Et évidemment, si à la place de chanson, le met [Entrez le métier voulu], il va me demander d'entrer quel métier je veux, et ensuite, il va me demander quel plafond salarial je désire, et alors j'aurai un résultat doublement personnalisé !

Vous avez tout compris. Essayez : . Lancez la requête : Il vous demande d'abord quel métier vous voulez (parce que c'est le plus à gauche des 2 critères), répondez chanson et cliquez sur OK. Il vous demande ensuite le plafond salarial, répondez 6000, et cliquez sur OK. Vous obtenez alors l'ensemble des 4 personnes qui font de la chanson et dont le salaire est connu et inférieur à 6000 francs.

Faites Fichier/Enregistrer sous : R_CelebriteParametreDomaineEtSalaire, et fermez-là. Donnez les descriptions adéquates à ces dernières requêtes :


Paramètres variables associé à l'étoile *

Dans le même ordre d'idée, peut-on avec une seule requête demander l'ensemble des gens dont le prénom commence par telle ou telle lettre ?

Bien sûr. Pour éviter d'avoir une requête avec tous les gens qui commencent par A, une autre requête pour tous les gens qui commencent par B, etc. jusqu'à Z, créez une nouvelle requête comme d'habitude avec le prénom et le nom. Comme critère de nom, si vous écrivez a*, Access va transformer ça en Comme "a*" (Leçon 24), et vous renvoyer les gens qui commencent par la lettre A... Donc, si vous écrivez [Quelle lettre de début ?]*, on pourrait s'attendre à ce qu'il nous demande une lettre, vous écrivez par exemple D, et il nous renvoie tous les gens qui commencent par D. Bon, il se trouve que ce n'est pas si simple : En fait, si vous écrivez [Quelle lettre de début ?]* ou même Comme "[Quelle lettre de début ?]"*, ça ne marche pas. En fait il faut écrire exactement ceci : Comme [Quelle lettre de début ?] & "*" pour que ça marche. Essayez : Lancez la requête, et lorsqu'il vous demande Quelle lettre de début ? répondez d, et cliquez sur OK. Vous voici avec la liste de tous les gens dont le nom commence par D.. En fait, vous auriez même pu écrire DE par exemple lors de la demande, et vous auriez obtenu la liste de tous les gens qui commencent par DE. Essayez.

Enregistrez cette requête sous R_CelebriteParametreNomCommenceParQuelqueChose

Et si on voulait que ça se TERMINE par une certaine lettre ?

Comme "*" & [Quelle lettre de fin ?]

D'accord. C'est quoi ce & ?

Nous verrons ça ultérieurement en détail. Juste pour résumer en un mot : c'est un signe de concaténation (pour mettre ensemble des textes bout à bout).


Le paramètre entre crochets et l'étoile * aident à pallier aux problèmes d'orthographe

Et si je voulais l'ensemble des gens qui CONTIENNENT telle ou telle lettre n'importe ou dans leur nom ?

Comme "*" & [Donnez une partie du nom] & "*". Essayez : . Lancez la requête, et lors de la demande de paramètre, écrivez DE, et OK. Le résultat donne tous les gens qui contiennent DE quelque part dans leur nom.

C'est une requête très intéressante si vous n'êtes pas certain de connaître l'orthographe du nom d'une personne : Par exemple, vous recherchez Louis De Funès, mais vous ne savez plus si De Funès s'écrit De Funès, ou Defunès, Defunes ou De Funés... Lancez cette requête, et à la question Donnez une partie du nom, répondez fun, et OK : Voici la liste de tous les gens qui contiennent fun dans leur nom, et donc De Funès (dans notre cas, c'est d'ailleurs le seul, ce qui facilite bien la tâche).

Faites Fichier/Enregistrer sous : R_CelebriteParametreNomContientTexte, et fermez-là. Donnez des descriptions à ces 2 nouvelles reqêtes :

Bon... Hem... On peut résumer ?

Les paramètres entre crochets [ et ] permettent de créer une seule requête qui renvoie une foule de résultats différents, puisque c'est l'utilisateur qui exécute la requête qui doit, au dernier moment, préciser sa demande. Cette astuce permet d'éviter la création de dizaines ou même de centaines de requêtes différentes.

Avez-vous bien compris ?

  1. Les crochets sont-ils l'équivalent des parenthèses dans le cadre de requêtes paramétrées ?
    a. Oui
    b. Non***

  2. Je crée une requête basée sur T_Celebrite avec le Prenom et le NomClient. Comme paramètre de NomClient, je voudrais que ce soit l'utilisateur qui précise quel nom il veut. Quelle est la meilleure solution ?:
    a. [NomClient]
    b. (NomClient)
    c. [Quel nom désirez-vous ?] ***
    d. (Quel nom désirez-vous)

  3. Je crée une requête basée sur T_Celebrite avec le Prenom, le NomClient et la date de naissance. Je voudrais l'ensemble des gens nés entre telle ou telle date de manière dynamique. Qu'est-ce que je met comme critère dans DateNaissance ?
    a. Entre [Date de début] Et [Date de fin] ***
    b. Entre Date de début Et Date de fin
    c. Entre >=DateNaissance et <=DateNaissance
    d. [Date de début] Et [Date de fin]

  4. Je crée une requête basée sur T_Celebrite avec le Prenom, le NomClient et la remarque. Je voudrais pouvoir entrer a chaque lancement de la requête une partie de remarque (par exemple, si j'écris président, il doit me renvoyer tous les gens qui possèdent le mot "président" dans la remarque). Que met-je comme critère de remarque ?
    a. [Entrez une partie de remarque]
    b. "*"[Entrez une partie de remarque]"*"
    c. *[Entrez une partie de remarque]*
    d. Comme "*" & [Entrez une partie de remarque] & "*" ***

    Pour voir les solutions, il vous suffit de sélectionner le questionnaire ci-dessus : 3 petites étoiles *** apparaîtront en face des bonnes réponses

Exercice

Encore une fois, il ne s'agit pas de créer une nouvelle base de données, mais vous allez devoir créer quelques requêtes dans votre base de données ProFormation. Toutes les requêtes seront basées sur T_Celebrite, et devront contenir au minimum le Prénom et le NomClient.

  1. Créez une requête qui demande dynamiquement l'état civil
    Enregistrez cette requête sous R_CelebriteDynamiqueEtatCivil
    Si vous demandez Célibataire, vous devriez obtenir 27 résultats
  2. Créez une requête qui demande dynamiquement une fourchette de salaire (le plus grand salaire et le plus petit afin d'afficher tous les salaires qui sont situés entre ces limites, limites incluses)
    Enregistrez cette requête sous R_CelebriteDynamiqueFourchetteSalaire
    Si vous demandez les salaires entre 10000 et 15000, vous devriez obtenir 24 résultats
  3. Créez une requête qui demande dynamiquement 2 domaines d'activité, ainsi que 2 pays d'origine (De façon à ce que si on lance la requête on obtienne par exemple tous les Politique et les Chanson qui sont soit Belges soit Allemands)
    Enregistrez cette requête sous R_CelebriteDynamique2Pays2Domaine
    Si vous demandez Belgique ou France et Politique ou chanson, vous devriez obtenir 15 résultats
  4. Créez une requête qui demande dynamiquement la (ou les) première(s) lettre(s) du prénom
    Enregistrez cette requête sous R_CelebriteDynamiquePrenomCommencePar
    Si vous demandez LI, vous devriez obtenir 1 résultat (Liane Foly)

Téléchargez la solution de l'exercice ici, qui n'est autre que ProFormation telle qu'elle devrait être à la fin de cette leçon

Si vous n'êtes pas tout à fait certain d'avoir suivi correctement toutes les étapes de cette leçon, vous avez la possibilité de télécharger ici la version de ProFormation.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Avez-vous une question technique concernant cette leçon ? Cliquez ici !
Une remarque sur cette leçon ? Un problème ? Une erreur ? une ambiguité ? Soyez gentil de m'en informer