Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireSpécificités d'Access 2007Champs multivalués

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

Créé le 27 juin 2006  par Tofalu

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 !

Créé le 27 juin 2006  par Tofalu

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 :

 
Sélectionnez

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.

 
Sélectionnez

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;
Créé le 27 juin 2006  par Tofalu

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 !

Créé le 27 juin 2006  par Tofalu

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.

Créé le 27 juin 2006  par Tofalu
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.