Un meilleur job mieux payé ?

Deviens chef de projet, développeur, ingénieur, informaticien

Mets à jour ton profil pro

ça m'intéresse

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ésSQL

Soit la table suivante :

  • NumChauffeur : NuméroAuto
  • NomChauffeur : Texte(20)
  • PrenomChauffeur : Texte(20)
  • PermisChauffeur : Texte(1) - Liste de choix de valeurs : A;B;C;D;E - Valeurs multiples autorisées

Cette requête permet de compter le nombre de permis différents attribués :

 
Sélectionnez

SELECT Count(PermisDistinct) AS NombreDePermis
FROM
  (SELECT  DISTINCT(PermisChauffeur.Value)  AS PermisDistinct
    FROM  tbl_chauffeur)
Créé le 27 juin 2006  par Tofalu

Soit la table suivante :

  • NumChauffeur : NuméroAuto
  • NomChauffeur : Texte(20)
  • PrenomChauffeur : Texte(20)
  • PermisChauffeur : Texte(1) - Liste de choix de valeurs : A;B;C;D;E - Valeurs multiples autorisées

La requête suivante liste les chauffeurs ainsi que le nombre de permis qu'ils possèdent :

 
Sélectionnez

SELECT NomChauffeur, PrenomChauffeur, (SELECT Count(PermisChauffeur.Value) 
FROM tbl_chauffeur WHERE NumChauffeur=T.NumChauffeur)
FROM tbl_chauffeur AS T;
Créé le 27 juin 2006  par Tofalu

Lien : [Access 2007] Comment savoir si un champ multivalué est vide en SQL ?
Lien : [Access 2007] Comment compter le nombre de valeurs distinctes d'un champ multivalué sur l'ensemble la table en SQL ?
Lien : [Access 2007] Comment compter le nombre de valeurs d'un champ multivalué en VBA ?

Soit la table suivante :

  • NumChauffeur : NuméroAuto
  • NomChauffeur : Texte(20)
  • PrenomChauffeur : Texte(20)
  • PermisChauffeur : Texte(1) - Liste de choix de valeurs : A;B;C;D;E - Valeurs multiples autorisées

La requête suivante permet de lister les chauffeurs possédant le permis D :

 
Sélectionnez

SELECT NomChauffeur,PrenomChauffeur
FROM tbl_chauffeur
WHERE PermisChauffeur.Value="D"

Cette deuxième requête retourne les chauffeurs possédant à la fois le permis D et le permis E :

 
Sélectionnez

SELECT NomChauffeur, PrenomChauffeur
FROM tbl_chauffeur
WHERE PermisChauffeur.Value="D" AND PermisChauffeur.Value="E";

Enfin cette troisième requête permet de lister les chauffeurs titulaires des permis D ou E ou bien des deux :

 
Sélectionnez

SELECT NomChauffeur, PrenomChauffeur
FROM tbl_chauffeur
WHERE PermisChauffeur.Value="D" OR  PermisChauffeur.Value="E";

Pour cette dernière requête, il aurait été également possible d'utiliser un critère avec IN.

Créé le 27 juin 2006  par Tofalu

Soit la table suivante :

  • NumChauffeur : NuméroAuto
  • NomChauffeur : Texte(20)
  • PrenomChauffeur : Texte(20)
  • PermisChauffeur : Texte(1) - Liste de choix de valeurs : A;B;C;D;E - Valeurs multiples autorisées

Cette requête permet de lister les permis attribués :

 
Sélectionnez

SELECT  DISTINCT(PermisChauffeur.Value)
FROM  tbl_chauffeur
Créé le 27 juin 2006  par Tofalu

Lien : [Access 2007] Comment savoir si un champ multivalué est vide en SQL ?
Lien : [Access 2007] Comment compter le nombre de valeurs d'un champ multivalué en SQL ?

Soit la table suivante :

  • NumChauffeur : NuméroAuto
  • NomChauffeur : Texte(20)
  • PrenomChauffeur : Texte(20)
  • PermisChauffeur : Texte(1) - Liste de choix de valeurs : A;B;C;D;E - Valeurs multiples autorisées

Il existe trois méthodes pour lister les chauffeurs ne possédant aucun permis :

 
Sélectionnez

SELECT NomChauffeur, PrenomChauffeur
FROM tbl_chauffeur
WHERE PermisChauffeur.Value IS NULL;

Ou :

 
Sélectionnez

SELECT NomChauffeur, PrenomChauffeur
FROM tbl_chauffeur
WHERE IsNull(PermisChauffeur.Value);

Ou encore :

 
Sélectionnez

SELECT NomChauffeur, PrenomChauffeur
FROM tbl_chauffeur AS T
WHERE (SELECT Count(PermisChauffeur.Value) FROM tbl_chauffeur WHERE NumChauffeur=T.NumChauffeur)=0;
Créé le 27 juin 2006  par Tofalu

Lien : [Access 2007] Comment compter le nombre de valeurs distinctes d'un champ multivalué sur l'ensemble la table en SQL ?
Lien : [Access 2007] Comment compter le nombre de valeurs d'un champ multivalué en SQL ?

Soit la table suivante :

  • NumChauffeur : NuméroAuto
  • NomChauffeur : Texte(20)
  • PrenomChauffeur : Texte(20)
  • PermisChauffeur : Texte(1) - Liste de choix de valeurs : A;B;C;D;E - Valeurs multiples autorisées

Cet exemple permet de supprimer l'ensemble des permis du chauffeur n° 2 :

 
Sélectionnez

DELETE PermisChauffeur.Value 
FROM  tbl_chauffeur
WHERE numChauffeur=2
Créé le 27 juin 2006  par Tofalu

Lien : [Access 2007] Comment supprimer une valeur d'un champ multivalué ?
Lien : [Access 2007] Comment supprimer toutes les valeurs d'un champ multivalué en VBA ?
Lien : [Access 2007] Comment supprimer une valeur d'un champ multivalué en VBA ?

Soit la table suivante :

  • NumChauffeur : NuméroAuto
  • NomChauffeur : Texte(20)
  • PrenomChauffeur : Texte(20)
  • PermisChauffeur : Texte(1) - Liste de choix de valeurs : A;B;C;D;E - Valeurs multiples autorisées

Cet exemple permet de supprimer le permis D du chauffeur n° 1 :

 
Sélectionnez

DELETE PermisChauffeur.Value
FROM tbl_chauffeur
WHERE numChauffeur=1 AND PermisChauffeur.Value="D"
Créé le 27 juin 2006  par Tofalu

Lien : [Access 2007] Comment supprimer toutes les valeurs d'un champ multivalué ?
Lien : [Access 2007] Comment supprimer une valeur d'un champ multivalué en VBA ?
Lien : [Access 2007] Comment supprimer toutes les valeurs d'un champ multivalué en VBA ?

Non, il n'est pas possible de créer une requête INSERT INTO avec dans la liste des champs un champ de type multivalué.

Par exemple, cette requête n'est pas valide :

 
Sélectionnez

INSERT INTO tbl_chauffeur (NomChauffeur,PrenomChauffeur,PermisChauffeur)
VALUES ("HEUR","Marc",(SELECT PermisChauffeur FROM Chauffeur WHERE numChauffeur=2))

Elle aurait pourtant servi à dupliquer les permis du chauffeur n° 2.

La seule solution est de créer l'enregistrement sans le champ multivalué.

Créé le 27 juin 2006  par Tofalu

Lien : [Access 2007] Comment créer un champ à valeurs multiples de type 'Table/requête' ?
Lien : [Access 2007] Comment créer un champ à valeurs multiples de type 'Table/requête' ?

Tout comme il est impossible de créer un enregistrement en fixant le champ multivalué, il est impossible d'ajouter une valeur à ce champ. En effet les requêtes INSERT INTO refusent cette fonctionnalité.

Une solution à cette question est de passer par le VBA.

Créé le 27 juin 2006  par Tofalu

Lien : [Access 2007] Comment ajouter une valeur à un champ multivalué en VBA ?

  

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.