I. Description du contexte▲
On souhaite réaliser un formulaire permettant de choisir les candidats inscrits à un examen de formation (« Algorithmique - Programmation », « TP Programmation », etc.).
Ce formulaire affichera, en plus des informations relatives à l'examen, la liste des candidats inscrits, avec idéalement leur date d'inscription :
Nous allons voir comment mettre en place ce type d'interface en s'appuyant sur un bon schéma relationnel.
II. Les champs multivalués : la solution de facilité▲
Les champs multivaluésLes champs multivalués permettent d'afficher directement dans les tables, les requêtes ou les formulaires, des listes de choix avec des cases à cocher pour sélectionner des données provenant d'une autre source.
Par exemple, on peut choisir les candidats inscrits à l'examen « Algorithmique - Programmation » directement dans la table des examens :
Cependant, comme ces champs peuvent contenir plusieurs valeurs pour un même enregistrement, ils ne répondent pas à la première forme normale de la théorie de la normalisation, nécessaire pour concevoir un bon schéma d'une base de données. Leur utilisation dans les requêtes comme dans le code peut ainsi sembler déroutante.
En résumé, ils peuvent par la suite compliquer le développement et la maintenance de la base Access.
Ce type de champ ne permet pas non plus d'enregistrer d'autres informations relatives à l'inscription, comme la date d'inscription.
III. Concevoir d'abord un bon schéma relationnel▲
Pour éviter ces problèmes, on se basera pour réaliser notre exemple, sur le modèle entité-association suivant :
On a une relation plusieurs-à-plusieurs dans laquelle un candidat peut passer un ou plusieurs examens, de même un examen peut être passé par un ou plusieurs candidats.
On va donc devoir créer une table intermédiaire entre les tables Candidat et Examen nécessaire pour concevoir un bon schéma relationnel :
- Candidat(IdCandidat, NomCandidat, PrenomCandidat,...) ;
- Examen(IDExamen, IntituleExamen, DateExamen,...) ;
- Inscrire(IdCandidat, IdExamen, DateInscription).
IV. Tables nécessaires▲
En plus des deux tables principales, on en aura besoin d'une supplémentaire pour enregistrer les inscrits à chaque examen.
IV-A. T_Candidat▲
Elle permet d'enregistrer les données concernant les candidats.
Nom du champ |
Type de données |
Description du champ |
---|---|---|
IdCandidat |
NumeroAuto |
Identifiant du candidat |
NomCandidat |
Texte |
Nom du candidat |
PrenomCandidat |
Texte |
Prénom du candidat |
Cycle |
Texte |
Cycle de formation du candidat |
Annee |
Texte |
Année scolaire : 2020-2021 |
IV-B. T_Examen▲
Elle contient les informations relatives aux examens.
Nom du champ |
Type de données |
Description du champ |
---|---|---|
IdExamen |
NumeroAuto |
Identifiant de l'examen |
IntituleExamen |
Texte |
Intitulé de l'examen : « TP Programmation », etc.) |
Cycle |
Texte |
Cycle de formation : « A1 », « A2 », etc. |
DateExamen |
Date/Heure |
Date de l'examen |
HeureDebutExamen |
Date/Heure |
Heure de début de l'examen |
HeureFinExamen |
Date/Heure |
Heure de fin de l'examen |
Salle |
Texte |
Identifiant de la salle où a lieu l'épreuve |
DateFinInscription |
Date/Heure |
Date de fin des inscriptions à l'épreuve |
IV-C. T_Inscription_Examen▲
Cette table permet de faire le lien entre les 2 tables précédentes. Elle constitue la source de données du sous-formulaire destiné à afficher la liste des candidats inscrits à l'examen, avec pour chacun leur date d'inscription.
Nom du champ |
Type de données |
Description du champ |
---|---|---|
IdCandidat |
Entier long |
Identifiant du candidat : clé étrangère héritée de la table T_Candidat et composante de la clé primaire de T_Candidat_Examen |
IdExamen |
Entier long |
Identifiant de l'examen : clé étrangère héritée de la table T_Examen et composante de la clé primaire de T_Candidat_Examen |
DateInscription |
Date/Heure |
Date d'inscription du candidat à l'épreuve |
La clé primaire est composée des colonnes IdCandidat et IdExamen, elle permet ainsi d'identifier de manière unique l'enregistrement de la table. On est donc assuré de ne pas avoir deux fois le même candidat pour un examen donné.
V. Relations entre les tables▲
On définit :
- une relation 1 à plusieurs entre les tables T_Candidat et T_Inscription_Examen sur le champ IdCandidat ;
- une relation 1 à plusieurs entre les tables T_Examen et T_Inscription_Examen sur respectivement les colonnes IdExamen et IdExamen.
Access ne gère pas les relations 0 à plusieurs.
VI. Requête R_Candidats▲
Elle affiche la liste des candidats ordonnés suivant leur nom et prénom.
Elle alimente la liste déroulante permettant de choisir un inscrit dans le sous-formulaire.
VII. Sous-formulaire▲
Il est contenu dans le formulaire principal et est basé sur la table T_Inscription_Examen.
Il comporte :
- une liste déroulante pour choisir le candidat inscrit ;
- une zone de texte pour saisir sa date d'inscription.
Ce sous-formulaire est en mode feuille de données, avec ajout et suppression des données autorisés.
VII-A. Liste de choix du candidat▲
Elle est liée au champ IdCandidat de la table et permet de choisir un candidat inscrit à l'examen.
Elle a comme contenu la requête R_Candidats et affiche les noms complets des candidats, leur identifiant étant masqué :
- colonne n°1 : elle est masquée et liée au champ IdCandidat ;
- colonne n°2 : affiche les noms complets des inscrits.
Cette astuce permet d'afficher dans la liste le nom du candidat au lieu de son identifiant et d'alimenter en réalité la colonne IdCandidat de la table intermédiaire.
VIII. Formulaire principal▲
Il est basé sur la table T_Examen et contient les contrôles liés aux champs de cette table. Il comprend en plus le sous-formulaire permettant de choisir les inscrits.
VIII-A. Liaison entre le formulaire principal et le sous-formulaire▲
Pour les relier, on définit dans les propriétés du contrôle sous-formulaire, la colonne IdExamen de la table T_Examen comme champ père, et la colonne IdExamen de la table T_Inscription_Examen comme champ fils.
Celle liaison permet de synchroniser les données des deux objets.
IX. Rendu final▲
Affichage du formulaire principal avec son sous-formulaire permettant de choisir les candidats :
Une date de fin d'inscription permet de finaliser la saisie.
Cette méthode nécessite donc de remplir la liste des inscrits, contrairement au champs multivalués où il suffit juste de cocher les candidats.
En réalité, ce sont bien les colonnes de la table associative qui sont alimentées lors de la saisie des candidats.
X. Base de données à télécharger▲
La base jointegestion-examens est au format accdb
Le champ multivalué Inscrits de la table des examens n'est pas nécessaire dans notre exemple.
XI. Remerciements▲
Je tiens à remercier Jean-Philippe André et Pierre Fauconnier pour m'avoir conseillé pour la réalisation de cet article, ainsi que escartefigue pour sa relecture.