FAQ MS-Access
FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
- [Access 2007] À quoi servent les champs multivalués ?
- [Access 2007] Combien de valeurs accepte un champ multivalué ?
- [Access 2007] Comment afficher les libellés à la place des valeurs dans un champ multivalué ?
- [Access 2007] Est-il possible d'utiliser les champs multivalués avec un grand volume de données ?
- [Access 2007] Où trouver des ressources sur les champs multivalués ?
- 12.3.1. SQL (9)
- 12.3.2. Champs multivalués VBA (9)
Les champs multivalués permettent de stocker plusieurs valeurs dans un seul champ. Ils remplacent ainsi les tables utilisées lors des relations plusieurs à plusieurs.
Prenons l'exemple d'une table de chauffeurs. Chacun d'eux possède un ou plusieurs permis de conduire.
Avant nous aurions eu cette structure :
Chauffeur(NumChauffeur,NomChauffeur,PrenomChauffeur)
Detenir(NumChauffeur,Permis)
Avec la table Detenir qui contenait :
1,C
1,B
2,C
2,E
3,B
Maintenant nous avons :
Chauffeur(NumChauffeur,NomChauffeur,PrenomChauffeur,Permis)
Avec la table Chauffeur qui contient
1,NORD,Paul,C;B
2,FERT,Lucy,C;E
Lien : [Access 2007] Où trouver des ressources sur les champs multivalués ?
Les champs multivalués étant représentés comme des sous-Recordsets, le nombre de valeurs ne semble donc pas limité. En tout cas, je suis parvenu à y insérer plus de 100 000 valeurs sans erreur. Attention toutefois, il est évident qu'un grand nombre de valeurs fera chuter rapidement les performances !
Dans une requête, un champ multivalué affiche uniquement la valeur de la colonne liée de sa zone de liste.
Exemple :
tbl_eleve(IDEleve,Nom,Prenom)
tbl_classe(IDClasse,nomClasse,Eleves)
Où Eleves est un champ multivalué dont la source de la zone de liste est :
SELECT
IDEleves, Nom,Prenom FROM
tbl_eleve
En toute logique, une requête basée sur la table tbl_classe affichera le numéro des élèves et non leur nom. Pour pallier ce phénomène, il faut utiliser une jointure entre les deux tables.
SELECT
tbl_classe.NomClasse, tbl_eleve.Nom, tbl_eleve.Prenom, tbl_classe.Annee
FROM
tbl_classe
INNER
JOIN
tbl_eleve
ON
tbl_classe.Eleves.Value
=
tbl_eleve.ID;
Un test de performance présenté dans le tutoriel de Christophe Warin indique que lorsque le volume de données atteint les 100 000 lignes, les performances sont médiocres. Le temps de traitement est environ 10 fois plus long qu'avec une relation 1-N.
Il est toutefois impossible de se limiter à un tel test sur si peu d'enregistrements. Aussi, sur un jeu beaucoup plus vaste (200 classes pour 10 000 élèves et en moyenne 10 élèves par classe), il s'avère que l'utilisation des champs multivalués devient réellement pénalisante. Pour preuve, un seul appel de la requête R03 est exécuté en 0.8 seconde, alors que l'appel de R02 demande plus de 10 secondes !
www.developpez.com vous propose :
À la découverte d'Access 2007 : les champs multivalués
Découvrez et jugez une nouveauté importante de la dernière version annoncée de Microsoft Access V12 (Access 2007). Cet article est aussi bien destiné au développeur débutant souhaitant se familiariser avec les possibilités d'Access qu'au développeur professionnel désirant se faire sa propre opinion sur le nouveau moteur de base de données Access.
[Access 2007 - Nouveautés] Les champs multivalués
Un débat sur les champs multivalués. Venez vous y exprimer, donner votre avis et partager vos conseils.