I. INTRODUCTION▲
Souvent à la source des formulaires, des listes déroulantes, des zones de listes, des états, la requête est un outil indispensable à connaître.
Je vais donc, dans cette série d'articles, montrer comment générer des requêtes et les manipuler.
Voici les titres des différents articles qui composent cette série :
- Créer des requêtes simples ;
- Utiliser des opérateurs dans les champs calculés et dans les critères ;
- Manipuler les jointures ;
- Créer des requêtes paramétrées ;
- Manipuler les différents types de requêtes.
Je ne parlerai pas des assistants de création de requêtes, l'objectif étant de comprendre comment s'articule une requête et comment on la manipule.
II. VOCABULAIRE▲
Une requête est une instruction SQL permettant de sélectionner un ensemble de données, répondant à un ou plusieurs critères, les données sont issues d'une ou plusieurs tables. La requête peut afficher tout ou partie de l'ensemble des champs dans une structure totalement différente de la structure de l'enregistrement des tables « source » et en y appliquant une règle de tri (contenant de une à dix clés).
La requête est créée par l'intermédiaire d'une interface conviviale que l'on appelle QBE
Expression |
Définition |
---|---|
Base de données |
Ensemble d'informations concernant une population, organisées en table. |
Table |
Ensemble des données organisées en enregistrements. Chaque table stocke les données se rapportant à un objet. |
Enregistrements |
Ensemble des données organisées suivant une structure concernant un individu de la population. |
Structure de l'enregistrement |
Ensemble des champs décrivant un individu de la population. |
Champ |
Information élémentaire générique concernant un individu de la population. |
SQL |
Structured Query Language : langage d'interrogation des bases de données. |
Critère |
Valeur de sélection appliquée à un champ. |
Clé |
Nom du champ sur lequel sera exécuté le tri. |
QBE |
Sigle de l'expression Query by Example |
III. L'ENVIRONNEMENT▲
Pour créer une nouvelle requête (version antérieure à Access 2007) :
|
|
Pour créer une nouvelle requête (version 2007) :
|
III-A. L'écran QBE▲
QBE (Query by example) : interface graphique facilitant la création des requêtes et la génération de la syntaxe SQL
Lors de l'appel à la création de la nouvelle requête, Access nous demande de sélectionner une ou plusieurs tables (voire une ou plusieurs requêtes). |
III-A-1. Les zones de travail▲
Nous allons identifier les différents éléments avec lesquels nous travaillerons lors de la création d'une requête.
Nous pouvons maintenant passer à l'identification de notre écran de travail :
|
III-A-2. La barre d'outils▲
Nous allons identifier les outils avec lesquels nous allons principalement travailler :
|
En cliquant sur la partie liste déroulante des boutons (1) et (2), Access ouvre des sous-menus découvrant d'autres outils.
Dans le sous-menu « Affichage », nous trouvons dans l'ordre :
|
|
Dans le sous-menu « Type de requête », nous trouvons dans l'ordre :
|
III-B. Création de la structure de la requête▲
La structure de la requête est composée des différents champs sélectionnés dans les tables « source ».
Voyons ci-dessous les différentes méthodes permettant d'insérer ou d'ajouter des champs à la structure.
Utiliser le caractère * |
Sélectionner tous les champs |
Sélections multiples |
---|---|---|
|
|
|
Double-clic sur l'étoile en haut des champs, |
Double-clic sur le nom de la table. |
Sélectionnez les champs comme on sélectionne les fichiers dans l'explorateur de fichiers. (Utilisation des touches SHIFT et CTRL.) |
Insérer un champ |
Ajouter un champ |
---|---|
|
Il suffit de double-cliquer sur le nom du champ à ajouter. Celui-ci vient s'implanter après le dernier champ de la structure. |
Clic maintenu sur le champ à insérer dans la structure et glisser sur le nom du champ qui doit se décaler. |
Déplacer un champ - Étape 1 |
Déplacer un champ - Étape 2 |
---|---|
|
|
Cliquez sur le sélecteur de champ, petite barre grise, placé au-dessus du champ concerné. |
Sans bouger la souris, cliquez à nouveau sur la sélection (le pointeur change de forme (cf. la loupe sur l'image)) et glissez pour amener la ligne d'insertion à l'endroit souhaité puis lâchez la souris. |
IV. CRÉATION DE REQUÊTES SIMPLES▲
Dans ce chapitre nous allons créer quelques exemples de requêtes simples.
- Requête monotable ;
- Requête multitable avec tri.
IV-A. Requête monotable▲
Il s'agit en fait d'une requête sur une seule table. Couramment utilisée comme source pour les listes déroulantes, elle permet de ne sélectionner qu'une partie des champs de la table en changeant l'ordre de ceux-ci ou en appliquant des règles de tris.
Avant de créer la structure de la requête, définissons notre objectif :
nous voudrions extraire de la table T_Auteurs, le Nom et le Prénom de celui-ci, mais seulement ceux ayant vécu au XIXe siècle.
IV-A-1. Création de la requête▲
Suivant la version, procédez comme suit :
Version antérieure à 2007 |
Version 2007 |
---|---|
|
|
|
|
Access ouvre l'écran QBE et une boîte de dialogue affichant l'ensemble des tables disponibles.
|
|
|
IV-A-2. Enregistrement de la requête▲
Quelle que soit la version d'Access, la génération d'une requête engendre l'ajout d'un nouvel objet qui pourra être mémorisé pour une réutilisation. Ainsi, lorsque notre nouvelle requête est mise au point, il suffit de fermer celle-ci pour qu'Access nous propose d'enregistrer notre travail.
Le nom de la requête sera limité à 64 caractères (espaces compris) et sera toujours précédé du préfixe « R_ » ou « req » ou « qry ».
Enregistrer votre première requête sous le nom : R_AuteursDu19eme.
Deux remarques sur l'enregistrement de la requête
1. Le fait de donner un préfixe permet par la suite de retrouver par ordre les tables, les requêtes et les états.
1. On sait ainsi toujours quel type d'objet on manipule.
2. Remarquez que dans le nom, j'ai fait abstraction des espaces, mais pour un confort de lecture j'ai mis des majuscules à chaque mot.
2. Cela me facilitera la tâche plus tard lorsqu'il faudra faire appel au nom d'objet dans les macros ou dans la programmation.
2. Je serai ainsi dispensé de frapper les [] avant et après le nom.
IV-A-3. La syntaxe SQL▲
Quelle que soit la version, Access génère en arrière-plan le code SQL qui sera enregistré lors de la phase précédente.
L'objectif, pour nous, ne sera pas de manipuler celui-ci, mais de :
1. Savoir le visualiser ;
2. Savoir le récupérer pour le coller dans un post lors d'une demande de soutien dans un forum tel que Développez.com.
IV-A-3-a. Retrouver le code SQL▲
Passez en mode création de la requête. En cliquant bouton droit de la souris dans la zone de tables, choisissez dans le menu contextuel Mode SQL.
L'image ci-dessus nous montre l'instruction qui sera enregistrée. J'y ai mis 3 repères :
- Représente la clause SELECT.
Ce sont les champs sélectionnés qui seront affichés dans le résultat de la requête ; - Représente la clause FROM.
Contient le nom de la ou des tables « source » ; - Représente la clause WHERE.
Partie contenant les critères de sélection.
IV-A-3-b. Récupérer le code pour le coller▲
Sélectionnez par un cliquer-glisser l'ensemble du texte affiché dans la fenêtre.
Appliquez le raccourci : Ctrl C (correspond à la commande Copier).
À partir de maintenant, cette récupération du texte peut être replacée dans n'importe quelle application.
Voyons comment la placer dans un post en cours de composition sur DVP. Connectez-vous sur le Forum ACCESS de DVP et à condition d'être inscrit, vous pouvez ouvrir votre discussion.
Dans un premier temps, vous choisissez le bon sous-forum (en l'occurrence ici : Requêtes et SQL).
Cliquez sur le bouton : Nouvelle discussion.
Vous découvrez l'image ci-dessus sur laquelle je ferai quatre remarques :
- Choisissez dans la liste déroulante la version d'Access avec laquelle vous travaillez ;
- Saisissez un intitulé pour la discussion. Que celui-ci soit clair et explicite ;
- Commencez et finissez toujours par un petit mot gentil ;
- Dans le corps de votre texte, cliquez sur le bouton # (marqué par la loupe en haut dans la barre d'outils).
Deux balises [CODE][/CODE] apparaissent. Faites alors CTRL V (correspond à la commande Coller).
Votre syntaxe s'affiche. Vous pouvez ajouter dans la première balise la mention =SQL (voir la seconde loupe sur l'image).
Relisez votre message et validez-le.
IV-A-3-c. Coller du code SQL dans une requête▲
Après avoir demandé de l'aide ou des explications sur votre forum préféré, une réponse vous aura été très vraisemblablement donnée.
Une version corrigée de votre code pourra même faire partie de la réponse. Afin d'éviter toute erreur de transcription, je vous conseille de Copier/Coller la solution proposée.
Voici ci-dessous les différentes étapes de la manipulation :
- Sélectionnez la partie de code qui vous intéresse ;
- Appliquez le raccourci Ctrl C (correspond à la commande Copier) ;
- Revenez dans votre fenêtre Access ;
- Créez une nouvelle requête (cela préservera votre requête originale) ;
- Au moment de sélectionner les tables, fermez la boîte de dialogue (l'interface QBE est affichée sans table) ;
- Cliquez le bouton droit de la souris dans la zone de tables et choisissez Mode SQL dans le menu contextuel : une fenêtre s'affiche avec le mot SELECT sélectionné ;
- Appliquez le raccourci Ctrl V (correspond à la commande Coller) : vous retrouvez le code issu de la réponse du Forum ;
-
Réaffichez votre requête en mode Création.
Vous retrouvez votre environnement de travail habituel dans l'interface QBE c'est-à-dire :- Tables ;
- Jointures ;
- Champs ;
- Critères.
IV-B. Requête multitable▲
On peut remarquer dans notre modèle relationnel que certaines tables contiennent des informations complémentaires.
Exemple
La table T_Auteurs contient une information dont le détail se trouve dans la table T_Nationalité.
La table T_Emprunts contient des informations dont le détail se trouve dans la table T_Livres et dans T_Adherents.
La requête multitable va nous permettre de recréer une information complète en récupérant les données de chacune des tables.
Avant de créer la structure de la requête, définissons notre objectif :
Nous voudrions obtenir la liste de nos auteurs avec le libellé de leur nationalité. Cette requête affichera :
- le prénom de l'auteur ;
- le nom de l'auteur ;
- l'époque ;
- la nationalité.
IV-B-1. Création de la requête▲
Comme précédemment, créez une nouvelle requête et affichez les différentes tables qui seront nécessaires pour la création du travail demandé.
|
IV-B-2. Remarques sur la requête▲
Je voudrais attirer votre attention sur la « liaison » entre les deux tables sélectionnées pour la requête. On pourra distinguer trois cas :
-
La relation est établie dans la fenêtre du Modèle relationnel en paramétrant l'intégrité référentielle qui est un garant de la cohérence des données.
Ce qui signifie que :- Tout enregistrement Fils doit avoir un enregistrement Père ;
- l est impossible de supprimer un enregistrement Père sans supprimer le ou les enregistrements Fils attachés.
On retrouvera alors la relation affichée avec les symboles indiquant les cardinalités de la relation.
-
La jointure sera automatique à condition que dans les deux tables :
- Il y ait un champ identique ayant le même nom ;
- Le même type ;
- La même taille ;
- L'un des deux est une clé primaire.
- Access ne gère pas automatiquement la jointure.
La jointure se fera manuellement. Dans ce cas, il faudra cliquer maintenu sur le premier champ de la jointure de la première table et le glisser sur le champ correspondant dans la seconde table. Access ne vérifie rien dans ce cas (on pourrait ainsi joindre un champ numérique avec un champ de type Texte).
Nous reviendrons plus en détail sur la manipulation des jointures dans les requêtes dans un autre article. Pour patienter, je vous encourage à vous plonger dans le tuto de :
V. TRIER LES DONNÉES D'UNE REQUÊTE▲
Cette partie de l'article s'attachera à montrer comment générer des tris à partir de la structure de la requête :
- Tri monoclé ;
- Tri multiclé.
V-A. Tri monoclé▲
Afin d'illustrer la méthode, nous allons créer une requête qui nous affichera le Nom et le Prénom de l'auteur trié par ORDRE CROISSANT sur le champ Epoque.
Pour générer un tri sur une seule clé dans une requête, il suffit :
1. D'implanter les champs nécessaires ;
2. Dans la ligne tri, cliquer sous le champ clé ;
3. Dans la liste déroulante, choisir l'ordre de tri à appliquer.
On peut aussi changer l'ordre de tri en double-cliquant dans la ligne tri sous le champ concerné.
V-B. Tri multiclé▲
Comme précédemment, l'exemple nous permettra de bien saisir la manipulation.
On se propose donc de créer un catalogue pour notre bibliothèque. Il nous faut faire apparaître dans notre structure les champs suivants :
- le CodeLivre (table : T_Ouvrages) ;
- le titre du livre (table : T_Ouvrages) ;
- le nom de l'auteur (table : T_Auteur) ;
- le prénom de l'auteur (table : T_Auteur) ;
- l'époque (table : T_Auteur) ;
- la nationalité de l'auteur (table : T_Nationalite) ;
- le genre du livre (table : T_Genre) ;
- la catégorie de lecteur (table : T_Categorie).
Ce catalogue sera trié par catégorie, genre, nom de l'auteur, titre.
Cette requête sera enregistrée sous le nom : R_CatalogueGeneral
Dans l'image ci-dessus, nous retrouvons les différents champs que nous souhaitons intégrer dans notre requête.
- Nous remarquerons au passage les jointures qui nous indiquent qu'une intégrité référentielle a été appliquée lors de la création des relations. (Voir ci-dessus : Les remarques sur la requête.)
- Nous affectons les clés de tri comme indiqué précédemment.
Voyons ci-dessous le résultat obtenu :
Bien que nous ayons appliqué les contraintes de tri, il semblerait que le résultat ne soit pas très probant.
En effet, la première règle imposée était : trier par catégorie. En observant le résultat, la requête retourne les enregistrements triés sur le titre.
En fait, Access lit les clés de tri de la gauche vers la droite. Ainsi les clés sont appliquées dans l'ordre suivant :
- Titre ;
- Nom de l'auteur ;
- Genre ;
- Catégorie.
Or nous avons une organisation à respecter : Ce catalogue sera trié par catégorie, genre, nom de l'auteur, titre
Il faut donc mettre les champs dans l'ordre des clés que l'on souhaite appliquer, mais cela va bouleverser l'ordre des champs dans la requête. Pour éviter ce souci, nous allons redessiner notre requête.
Voyons ci-dessous la nouvelle organisation :
Je ferai trois remarques à propos de la structure de la requête ci-dessus :
- Les champs correspondant aux clés de tri ont été doublés à la fin de la structure de la requête en respectant l'ordre hiérarchique souhaité ;
- La mention Croissant a été retirée sous les trois champs précédents ;
- La mention Croissant a été ajoutée sous les nouveaux champs insérés et j'ai désactivé l'option Affichage.
Voyons le résultat obtenu dans l'image ci-dessous :
Ainsi pour trier suivant un ordre particulier tout en préservant une structure de requête, il suffira de répéter les champs clés dans l'ordre hiérarchique souhaité et de désactiver l'affichage de ceux-ci.
VI. IMPRIMER LE RÉSULTAT DE LA REQUÊTE▲
VI-A. Un peu de mise en forme▲
Attention !!!
Quelle que soit la version, toute application de mise en forme s'appliquera à l'ensemble de la feuille de données.
Néanmoins, un petit progrès avec Access 2007, nous pourrons faire une mise en forme par requête.
VI-A-1. Version antérieure à 2007▲
Boîte de dialogue |
Résultat obtenu |
---|---|
|
|
Après avoir exécuté la requête, cliquez dans le menu FORMAT, puis sur la commande Feuille de données… |
VI-A-2. Version Access 2007▲
Dans l'onglet Accueil, on découvre deux outils qui vont nous permettre de mettre en forme rapidement le résultat afin de faire une impression correcte sans devoir se lancer dans la conception d'un état.
Menu |
Résultat obtenu |
---|---|
|
|
Dans le groupe Police, cliquez sur l'outil Quadrillage et choisissez le type de bordures à appliquer |
|
|
Dans le groupe Police, cliquez sur l'outil Autre couleur d'arrière-plan/remplissage et choisissez dans la palette la couleur à appliquer. Cet outil va faciliter la mise en évidence des lignes en appliquant une couleur alternée sur deux lignes. |
VI-B. Mise en page et impression▲
Après avoir préparé la mise en forme, nous allons faire un peu de mise en page.
VI-B-1. Version antérieure à 2007▲
Cliquez sur le menu FICHIER puis sur la commande Mise en Page …
Une boîte de dialogue à deux onglets s'affiche.
Tout d'abord l'onglet « Marges ».
Ceci ne nous préoccupe pas pour l'instant. |
|
Puis l'onglet « Pages ».
|
Nous ne pourrons pas alterner deux couleurs comme dans Access 2007.
VI-B-2. Version Access 2007▲
Pour avoir accès à l'aperçu avant impression, il faut cliquer sur le bouton Office.
|
Access affiche alors la fenêtre ci-dessous qui nous permettra en quelques clics de mettre en page notre document.
Cette image nous indique cinq repères :
- Permet de changer l'orientation du document à l'impression (le logo nous indique la signification des expressions Portrait ou Paysage) ;
- Permet de choisir la façon dont l'aperçu doit afficher les pages à imprimer à l'écran (donne une vue d'ensemble du résultat imprimé) ;
- Permet de choisir des marges prédéfinies ;
-
Affiche la boîte de dialogue de mise en page afin de personnaliser les marges (attention, les marges sont indiquées en millimètres) :
- Lance l'impression
Dans la loupe, vous pouvez remarquer que le curseur s'est transformé en loupe contenant un signe +.
Il vous suffit de cliquer sur un point de l'aperçu pour provoquer un zoom avant à partir de ce point. Vous remarquerez alors que le signe + se transforme en signe -. Il suffit alors de cliquer pour faire un zoom arrière.
VII. CONCLUSION▲
Ce premier volet vous permet donc de créer vos requêtes, de les trier et d'imprimer le résultat sans vous lancer dans la génération d'un état. Dans le second volet, nous aborderons l'utilisation des opérateurs dans les critères de sélection.
VIII. TÉLÉCHARGEMENT▲
Vous pouvez télécharger la base Bouquins afin de vous amuser à faire quelques requêtes sans risque.
IX. REMERCIEMENTS▲
Je voudrais remercier l'ensemble de l'équipe DVP qui fait un travail énorme qui a fait de Développez.com ce qu'il est aujourd'hui et qui nous tire toujours vers le haut.
Merci beaucoup également à : Philippe JOCHMANS et LedZeppII pour leurs conseils toujours très judicieux
Merci beaucoup également à : jacques-jean pour sa relecture attentive.