Relation plusieurs-à-plusieurs dans Access

Objectif : créer une relation plusieurs-à-plusieurs, puis réaliser un formulaire Access pour la saisie et la consultation des données.

Niveau requis : débutant.

Commentez cet article : 4 commentaires Donner une note  l'article (5)

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Description du contexte

On souhaite réaliser un formulaire permettant de choisir les étudiants inscrits à un examen de formation (« Algorithmique - Programmation », « TP Programmation », etc.).

Ce formulaire affichera, en plus des informations relatives à l'examen, la liste des étudiants inscrits, avec idéalement leur date d'inscription :

Formulaire Examen
Formulaire Examen

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 étudiants inscrits à l'examen « Algorithmique - Programmation » directement dans la table des examens :

Champs multivalués
Champs multivalués

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 aux puristes.

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 :

Modèle entité-association
Modèle entité-association

On a une relation plusieurs-à-plusieurs dans laquelle un étudiant peut passer un ou plusieurs examens, de même un examen peut être passé par un ou plusieurs étudiants.

On va donc devoir créer une table intermédiaire entre les tables Etudiant et Examen nécessaire pour concevoir un bon schéma relationnel :

  • Etudiant(IDEtudiant, NomEtudiant, PrenomEtudiant,...) ;
  • Examen(IDExamen, IntituleExamen, DateExamen,...) ;
  • Inscrire(IDEtudiant, 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_Etudiant

Elle permet d'enregistrer les données concernant les étudiants.

Nom du champ

Type de données

Description du champ

IdEtudiant

NumeroAuto

Identifiant de l'étudiant

NomEtudiant

Texte

Nom de l'étudiant

PrenomEtudiant

Texte

Prénom de l'étudiant

Cycle

Texte

Cycle de formation de l'étudiant

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

HeureDebutEvent

Date/Heure

Heure de début de l'examen

HeureFinEvent

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 étudiants inscrits à l'examen, avec pour chacun leur date d'inscription.

Nom du champ

Type de données

Description du champ

IdEtudiant

Entier long

Identifiant de l'étudiant : clé étrangère héritée de la table T_Etudiant et composante de la clé primaire de T_Etudiant_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_Etudiant_Examen

DateInscription

Date/Heure

Date d'inscription de l'étudiant à l'épreuve

La clé primaire est composée des colonnes IdEtudiant 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 étudiant pour un examen donné.

V. Relations entre les tables

On définit :

  • une relation 1 à plusieurs entre les tables T_Etudiant et T_Etudiant_Examen sur le champ IdEtudiant ;
  • une relation 1 à plusieurs entre les tables T_Examen et T_Etudiant_Examen sur respectivement les colonnes IdExamen et IdExamen.
Relations entre les tables
Relations entre les tables

Access ne gère pas les relations 0 à plusieurs.

VI. Requête R_Etudiants

Elle affiche la liste des étudiants ordonnés suivant leur nom et prénom.

Requête R_Etudiants
Requête R_Etudiants

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 l'étudiant 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.

Sous-formulaire en mode création
Sous-formulaire en mode création

VII-A. Liste de choix de l'étudiant

Elle est liée au champ IdEtudiant de la table et permet de choisir un étudiant inscrit à l'examen.

Liste de choix cmbEtudiant
Liste de choix cmbEtudiant

Elle a comme contenu la requête R_Etudiants et affiche les noms complets des étudiants, leur identifiant étant masqué :

  • colonne n°1 : elle est masquée et liée au champ IdEtudiant ;
  • colonne n°2 : affiche les noms complets des inscrits.

Cette astuce permet d'afficher dans la liste le nom de l'étudiant au lieu de son identifiant et d'alimenter en réalité la colonne IdEtudiant 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.

Fomulaire principal en mode création
Fomulaire principal en mode création

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.

Liaison entre le formulaire principal et le sous-formulaire
Liaison entre le formulaire principal et le sous-formulaire

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 :

Formulaire Examen
Formulaire Examen

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 étudiants.

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.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2020 Denis Hulo. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.