Leçon 25 : Requêtes : Dates, Null, case à cocher, invisibilité des colonnes

Temps nécessaire pour suivre cette leçon : Une bonne demie 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 extraire des dates ou des plages de dates. Nous verrons qu'il ne faut pas confondre les dates et les années. Nous aborderons également la possibilité d'extraire des enregistrements qui ne contiennent rien, ainsi que la possibilité d'extraire les gens décédés (Oui ou Non). Enfin, nous verrons qu'il est possible de masquer certaines colonnes si besoin est.

Sommaire

  1. Critères de requête : Utilisation de dates
  2. Critères de requête : Utilisation de Null
  3. Critères de requête : Utilisation de Pas avec Null
  4. Critères de requête : Extraction d'une valeur de case à cocher Oui/Non
  5. Critères de requête : Critères incorrects donnant une erreur
  6. Masquage des colonnes dans une requête

Critères de requête : Utilisation de dates

Comment puis-je faire pour extraire les gens nés avant 1960 ? Je met <1960 dans le champ DateNaissance ?

Non. Il s'agit d'une date, donc, vous ne pouvez pas simplement indiquer l'année. Vous êtes obligé d'écrire comme critère <1.1.1960. Essayez : Créez une nouvelle requête comme d'habitude, et demandez le Prénom, le Nom et la date de naissance. Comme critère de la date de naissance, écrivez <1.1.1960. Lorsque vous appuyez sur ENTER, ou que vous cliquez dans une autre case, Access transforme cette date comme ceci : <#01.01.1960#.C'est normal :

Lancez la requête. Vous obtenez 55 résultats, tous antérieurs au premier janvier 1960. Enregistrez cette requête sous R_CelebriteVieille, avec la description DateNaissance : < #01.01.1960#.

Et donc, si je voulais les célébrités nées dans les années 30...

Le critère serait : Entre 1.1.1930 et 31.12.1939. Et PAS Entre 1930 et 1939, donc ! Essayez : Créez cette requête extrayant toutes les célébrités nées dans les années 30. Vous devriez en obtenir 10. Enregistrez cette requête sous R_CelebriteAnnee30, avec la description DateNaissance Entre #01.01.1930# Et #31.12.1939#.

Y a-t-il une astuce pour débusquer les dates de naissances erronées ?

C'est assez difficile... La preuve est que toutes les dates de naissance que j'ai mis sont fictives, donc fausses.

Par contre, on peut essayer de filtrer les dates de naissances vraissemblablement fausses, comme par exemple les dates de naissances postérieures à l'an 2000 et antérieures à l'an 1900...

Le critère serait : <#01.01.1900# Et >#31.12.1999# ?

Ah non ! Personne n'est né à la fois avant 1900 et après 1999 ! Ce serait <#01.01.1900# OU >#31.12.1999#. Mais ne serait-ce pas encore plus élégant d'écrire Pas Entre #01.01.1900# Et #31.12.2000#. Essayez : Créez une nouvelle requête comme d'habitude, avec le critère de la date de naissance : pas entre 1.1.1900 et 31.12.1999. Vous obtenez ce résultat : . On voit d'un coup d'oeil que Napoléon, Walt Disney et Sacha Guitry ont des dates de naissance vraissemblables... Par contre Michel Simon, Johnny Weissmuller et Cathy Zeta-Jones ont des dates de naissances fatalement erronées puisque si on en croit notre résultat, ces personnes ne seraient pas encore nées... L'erreur de saisie provient vraissemblablement du fait que la personne qui a saisit la date de Michel Simon par exemple a écrit 15.12.20 au lieu de 15.12.1920... Et Access à compris 2020 au lieu de 1920... Vous vous rappelez ? C'était dans la leçon 7.

Ne corrigez pas ces erreurs de dates, et fermez cette requête en l'enregistrant sous le nom R_CelebriteDateNaissanceIncorrecte. Description : DateNaissance : Pas Entre #01.01.1900# Et #31.12.1999#

Et si maintenant, je voulais extraire les gens dont la date de naissance n'est pas connue.. Je met quoi ? 0 dans la date de naissance comme critère ?

Non. ça ne marchera pas.

Ah oui ! je met 0, comme ça, je suis certain que personne n'étant né avant cette date, et il va me donner toutes les dates vides !

Non plus. En fait, 0 n'est pas la même chose que rien en informatique... C'est comme ça.


Critères de requête : Utilisation de Null

Pour obtenir les gens dont la date de naissance n'est pas connue, vous devez écrire null comme critère de la date de naissance : . Lorsque vous appuyez sur Enter, ou que vous cliquez dans une autre case, null se transforme en Est Null.

ATTENTION : Il faut bien écrire NULL. Pas NUL ni NULLE ! Créez cette nouvelle requête avec null comme date de naissance, et Lancez-là : Vous obtener 14 enregistrements, dont la date est chaque fois inconnue.

Enregsitrez cette requête sous R_CelebriteDateNaissanceInconnue, et mettez la description "DateNaissance : Est Null"


Critères de requête : Utilisation de Pas avec Null

D'accord. Pareil pour les remarques je suppose : Si je voulais l'ensemble des gens qui ont une remarque, j'écrirais pas null dans remarque ?

Exactement, oui, et, par opposition, si vous vouliez l'ensemble des gens qui ONT UNE remarque, vous écririez Pas Null. Essayez : Créez une nouvelle requête comme d'habitude, avec le nom, le prénom et la remarque, mettez Pas Null comme critère de Remarque, lancez la requête pour constater que vous avez bien 50 enregistrements, tous avec une remarque (par déduction, vous pouvez dire qu'il y a une personne sur deux qui a une remarque, puisque nous avons exactement 100 enregistrementsen tout). Le Pas Null se transforme automatiquement en Est Pas Null, c'est normal. Enregistrez cette nouvelle requête sous R_CelebriteAvecRemarque, avec la description : "Remarque : Est Pas Null".


Critères de requête : Extraction d'une valeur de case à cocher Oui/Non

Maintenant, autre chose : Comment faire pour extraire les célébrités qui sont décédées ? C'est un peu délicat, parce qu'il s'agit d'une case à cocher...

Essayons : Créez une nouvelle requête comme d'habitude, toujours basée sur T_Celebrite, et installez les champs Prenom, NomClient, et Decede.

Lancez la requête telle quelle pour simplement constater que ça reste une case à cocher, même dans une requête. Revenez en mode création. Le critère de Decede est soit Vrai, ou Oui, ou même -1.

Donc, que j'écrive Vrai, oui ou -1, il va toujours me sortir les gens qui ne sont plus de ce monde ?

Oui. Essayez :

Vrai et oui, je peux comprendre, mais pourquoi -1 ?

En fait, c'est lié à la structure interne de la mémoire de votre ordinateur. Sur tous les PC, quelque soit le contexte, Vrai (Oui) est représenté par -1, et Faux (Non) est représenté par 0. Mais pour que la vie nous soit plus facile, Access permet de modifier ce -1 par Oui, ou Vrai, et 0 par Non ou Faux.

Donc si je voulais l'ensemble des célébrités encore vivantes, j'écrirais indifféremment Faux, Non ou 0 comme critère de Decede ?

Parfaitement. Bon, nous n'allons pas le faire car c'est vraiment la même chose.

Fermez votre requête, et vous êtes maintenant en possession de 3 nouvelles requêtes : R_CelebriteDecedeeVrai, R_CelebriteDecedeeOui et R_CelebriteDecedee-1. Je pense que maintenant, vous avez bien compris l'histoire des descriptions : Je vous laisse leur injecter des descriptions appropriées.


Critères de requête : Critères incorrects donnant une erreur

ATTENTION DONC : Si vous mettez quelque chose d'idiot comme critère de Decede, Par exemple "Vivant", non seulement ça ne veut rien dire, mais vous allez carrément avoir cette erreur : . Vous pouvez essayer juste pour voir. (ne Enregistrez pas cette requête, c'est juste pour montrer l'erreur)


Masquage des colonnes dans une requête

Passons maintenant à un autre sujet, mais en restant toutefois dans l'histoire des cases à cocher. Créez une requête toute simple qui extrait les sportifs (Le prénom, le nom, le domaine, avec comme critère de domaine : "sport"). Lancez cette requête toute bête : Vous avez la liste de tous les sportifs. C'est normal, c'est ce qu'on a demandé.

D'ailleurs, dans la colonne Domaine, il est indiqué chaque fois Sport, Sport, Sport, Sport... Bon ben oui, on sait, c'est ce qu'on a demandé ! Inutile de le répéter comme un perroquet sur toute la colonne !

Nous allons masquer cette colonne. Nous aurons toujours la liste des sportifs, mais seuleemnt le prénom et le nom. Revenez en mode création de cette requête. Décochez cette case : . Relancez la requête : Cette fois, vous avez les mêmes 17 personnes, mais, la colonne Domaine n'est plus représenté. Enregistrez cette requête sous R_CelebriteSportiveDomaineInvisible, avec la description : Domaine : "sport", pas de coche

ATTENTION donc : Il est fort possible que vous cliquiez par mégarde sur cette coche, et que vous vous demandiez pourquoi tel ou tel champ n'apparait pas : Vous savez maintenant pourquoi !

On utilise donc cette case à cocher dans le cas ou on a besoin d'une colonne pour lui mettre un critère de sélection, mais qu'il n'est pas nécessaire de la visualiser ?

Exactement.

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

Lorsqu'il s'agit d'extraire des plages de dates, il ne faut pas utiliser simplement l'année, mais des dates complètes (entre 1.1.1980 et 31.12.1989). Les dates s'encadrent automatiquement de dièses #. Lorsqu'il s'agit de récupérer les enregistrements dont certains champs sont vides (non renseignés), il ne faut pas indiquer 0 comme critère, mais Null, ou Pas Null. Les cases à cocher représentent Oui ou Non, Vrai ou Faux, -1 ou 0. Ce sont donc ces mots-clés qu'il faut utiliser lors qu'on veut extraire par exemple les gens décédés. Enfin, en mode création de la requête, la case àcocher se trouvant juste au dessus du critère permet de masquer telle ou telle colonne, alors qu'on lui a pourtant attribué un critère.

Avez-vous bien compris ?

Toutes les questions sont simplement basées sur un critère placé sur le champ DateNaissance

  1. Je crée une requête basée sur T_Celebrite. J'y installe les champs Prénom, Nom, et DateNaissance, avec le critère Entre #1.3.1960# Et #1.3.1960#
    a. J'obtiens la liste des gens nés le premier mars 1960, s'il y en a évidemment ***
    b. Je n'obtiens forcément personne puisque le mot clé Entre exclut les valeurs limites
    c. J'obtiens les gens nés en Mars 1960
    d. J'obtiens les gens nés en 1960

  2. Je crée une requête basée sur T_Celebrite. J'y installe les champs Prénom, Nom, et DateNaissance, avec le critère Entre 1950 et 1959
    a. J'obtiens les gens nés entre 1950 et 1959
    b. J'obtiens les gens nés entre 1951 et 1959
    c. Je n'obtiens personne *** (C'était Entre #1.1.1950# Et #31.12.1959# qu'il fallait écrire)

  3. Je crée une requête basée sur T_Celebrite. J'y installe les champs Prénom, Nom, et Decede, avec comme critère de Decede -1 Et Oui
    a. Je n'obtiens personne
    b. J'obtiens les gens décédés *** (car -1 et Oui veulent dire la même chose, comme si on avait écrit Oui Et Oui)
    c. Je n'obtiens personne car il fallait écrire -1 Ou Oui
    d. Je n'obtiens personne car il fallait écrire soit -1 soit Oui, mais pas les deux

  4. Je crée une requête basée sur T_Celebrite. J'y installe les champs Prénom, Nom, et Decede, avec comme critère de Decede Pas Non
    a. J'obtiens les gens décédés ***
    b. J'obtiens les gens vivants
    c. Je n'obtiens rien du tout
    d. Je reçois carrément une erreur de syntaxe

  5. Je crée une requête basée sur T_Celebrite. J'y installe les champs Prénom, Nom, et Decede, avec comme critère de Decede "Mort"
    a. J'ai carrément une erreur, et je ne peux pas lancer la requête ***
    b. J'obtiens les gens Décédés
    c. J'obtiens les gens Pas Décédés
    d. Je n'obtiens personne

  6. Je crée une requête basée sur T_Celebrite. J'y installe les champs Prénom, Nom et EtatCivil. Je demande comme critère d'EtatCivil  Cél* , et j'enlève la case à cocher qui se trouve juste au dessus de ce critère en mode création
    a. J'obtiens la liste des gens dont le champ Célibataire est égal à Oui
    b. J'obtiens la liste de tous les célibataires, comme si de rien n'était
    c. J'obtiens la liste de tous les célibataires, sans toutefois voir qu'ils sont célibataires explicitement ***
    d. Je n'obtiens personne, forcément

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

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. Extrayez la liste des gens qui ne sont PAS nés pendant la première guerre mondiale (1914-1918) NI pendant la 2ème (1940-1945)
    Enregistrez cette requête sous R_CelebritePansePendantGuerre
    Vous devriez obtenir 80 enregistrements
  2. Extrayez la liste des gens vivants qui n'ont pas de remarque particulière
    Enregistrez cette requête sous R_CelebriteVivanteSansRemarque
    Vous devriez obtenir 41 enregistrements
  3. Extrayez la liste des chanteuses vivantes nées avant 1970
    Enregistrez cette requête sous R_CelebriteChanteuseVivanteNeeAvant1970
    Vous devriez obtenir 2 enregistrements (Céline Dion et Yvette Horner)
  4. Extrayez la liste de tous les hommes politiques, en montrant à l'écran UNIQUEMENT le prénom et le nom
    Enregistrez cette requête sous R_CelebriteHommePolitiqueInvisible
    Vous devriez obtenir 7 enregistrements

Téléchargez la solution de l'exercice ici, qui n'est autre que ProFormation tel qu'il 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