FAQ MS-Access

FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
Sommaire→Spécificités d'Access 2007→Champs multivalués→SQL- [Access 2007] Comment compter le nombre de valeurs distinctes d'un champ multivalué sur l'ensemble la table en SQL ?
- [Access 2007] Comment compter le nombre de valeurs d'un champ multivalué en SQL ?
- [Access 2007] Comment filtrer les enregistrements en fonction des valeurs d'un champ multivalué ?
- [Access 2007] Comment lister les valeurs distinctes d'un champ multivalué sur l'ensemble de la table en SQL ?
- [Access 2007] Comment savoir si un champ multivalué est vide en SQL ?
- [Access 2007] Comment supprimer toutes les valeurs d'un champ multivalué ?
- [Access 2007] Comment supprimer une valeur d'un champ multivalué ?
- [Access 2007] Est-il possible de créer un nouvel enregistrement avec un champ multivalué en SQL ?
- [Access 2007] Est-il possible d'insérer une valeur dans 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
Cette requête permet de compter le nombre de permis différents attribués :
SELECT Count(PermisDistinct) AS NombreDePermis
FROM
(SELECT DISTINCT(PermisChauffeur.Value) AS PermisDistinct
FROM tbl_chauffeur)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 :
SELECT NomChauffeur, PrenomChauffeur, (SELECT Count(PermisChauffeur.Value)
FROM tbl_chauffeur WHERE NumChauffeur=T.NumChauffeur)
FROM tbl_chauffeur AS T;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 :
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 :
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 :
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.
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 :
SELECT DISTINCT(PermisChauffeur.Value)
FROM tbl_chauffeurLien : [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 :
SELECT NomChauffeur, PrenomChauffeur
FROM tbl_chauffeur
WHERE PermisChauffeur.Value IS NULL;Ou :
SELECT NomChauffeur, PrenomChauffeur
FROM tbl_chauffeur
WHERE IsNull(PermisChauffeur.Value);Ou encore :
SELECT NomChauffeur, PrenomChauffeur
FROM tbl_chauffeur AS T
WHERE (SELECT Count(PermisChauffeur.Value) FROM tbl_chauffeur WHERE NumChauffeur=T.NumChauffeur)=0;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 :
DELETE PermisChauffeur.Value
FROM tbl_chauffeur
WHERE numChauffeur=2Lien : [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 :
DELETE PermisChauffeur.Value
FROM tbl_chauffeur
WHERE numChauffeur=1 AND PermisChauffeur.Value="D"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 :
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é.
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.
Lien : [Access 2007] Comment ajouter une valeur à un champ multivalué en VBA ?



