Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2010, 17h43   #1
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : décembre 2010
Messages : 52
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 52
Points : 12
Points : 12
Par défaut Requete concernant les composants d'un matériel

Bonjour,

Je suis entrain de m'auto-former sur la création des bases de données, Access et SQL.
Je m'exerce notamment sur : http://mhubiche.developpez.com/Access/cours/bases/.

J'ai créé les tables suivantes sur Access avec les relations correspondantes :
INTERVENTION (Num_Inter, #ID_Clt, Type)
MATERIEL (Ref_Mat, Description_Mat, PU_Mat, Qte_Mat)
NECESSITER (#Num_Inter, #Ref_Mat, Qte_Necessaire)
COMPOSE_DE (#Ref_Compose, #Ref_Composant, Qte_Comp)

En gros, Une intervention est réalisée sur un matériel donné qui peut composer d'autres matériels.

Je souhaite savoir le nombre de composants réparés lors d'une intervention et je n'arrive pas à le faire sur Access ou via SQL.

Comment procéder s'il vous plaît ?
Mélodie_et_rythmes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 18h19   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 037
Points : 11 037
Bonjour,

Ne peux-tu poster une BDD compatible Access2000 avec un exemple concret?
J'essaierai bien volontiers.
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 30/12/2010, 18h46   #3
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

ou avec un exemple.
Admettons que l'intervention concerne une unité centrale d'ordinateur.

Cas 1, on remplace l'unité centrale.
Veux-tu compter les éléments qui composent cette unité centrale ?
Ou bien comptabiliser 0 composant car on a remplacé un produit fini.

Cas 2, on remplace un disque dur et deux barrettes mémoire.
Est-ce que tu veux compter le nombre de composants différents (2) ?
Ou bien simplement le nombre de composants (3) ?

Encore une question.
Dans NECESSITER (#Num_Inter, #Ref_Mat, Qte_Necessaire), quelle est la nature de Ref_Mat ?
Est-ce que c'est toujours un composant, ou bien ça peut aussi être un produit fini ?
Je pense que c'est la deuxième option, mais c'est pour être sûr.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/12/2010, 12h08   #4
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : décembre 2010
Messages : 52
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 52
Points : 12
Points : 12
Bonjour

En effet, dans la table NECESSITER, un matériel peut-être un composant ou un composé.

Pour le cas 2 :
Je souhaite avoir le détail.
Donc ma requête devrait m'afficher comme résultat :
Pour une intervention X :
Disque dur ----> 1
RAM ----------> 2

Pour le cas 1 :
Le résultat de ma requête devrait me donner :
Composants -------> 0 puisque on a remplacé un produit fini et non un composant en particulier.

Merci !!
Mélodie_et_rythmes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 14h53   #5
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Voici une requête ...
Code sql :
1
2
3
SELECT NECESSITER.Num_Inter, NECESSITER.Ref_Mat, NECESSITER.Qte_Necessaire
FROM   NECESSITER
WHERE (DCount("*", "COMPOSE_DE", "Ref_Composant=" & NECESSITER.Ref_Mat)>0)
...qui filtre les enregistrements de la table NECESSITER, en ne retenant que les composants.
Un composant est un Ref_Mat ayant au moins une correspondance avec le champ Ref_Composant
de la table COMPOSE_DE.
Je n'ai, volontairement, pas utilisé de requête avec une jointure sur la table COMPOSE_DE,
pour éviter la duplication des enregistrements de NECESSITER, dans le cas où un composant fait partie de plusieurs matériels.
L'utilisation de la fonction domaine DCount (propre à Access, ce n'est pas du SQL) est un moyen pratique
de vérifier l'existence d'un enregistrement dans une table.

Si on se trouve dans la situation du cas 1, la requête ne retourne aucun enregistrement.
Ce que l'on peut faire, c'est enregistrer cette requête, sous le nom R_NECESSITER_COMPOSANT,
et en construire une nouvelle, basée sur la table INTERVENTION et sur la requête R_NECESSITER_COMPOSANT.
En mettant une jointure gauche (LEFT JOIN) entre INTERVENTION et R_NECESSITER_COMPOSANT,
on est sûr d'avoir au moins un enregistrement en sortie.
Code sql :
1
2
SELECT INTERVENTION.Num_Inter, R_NECESSITER_COMPOSANT.Ref_Mat, R_NECESSITER_COMPOSANT.Qte_Necessaire
FROM   INTERVENTION LEFT JOIN R_NECESSITER_COMPOSANT ON INTERVENTION.Num_Inter = R_NECESSITER_COMPOSANT.Num_Inter
Cette nouvelle requête donne le même résultat que la première si l'intervention concernait au moins un composant.
Si l'intervention ne concernait aucun composant, elle retourne le numéro d'intervention
et des champs vides (Null) pour tout ce qui vient de R_NECESSITER_COMPOSANT, du au fait
de l'absence d'enregistrement correspondant dans R_NECESSITER_COMPOSANT.

Il existe une fonction dans Access qui permet de remplacer Null par ce que l'on veut.
Je m'en sers ici avoir 0 dans Qte_Necessaire :
Code sql :
1
2
3
SELECT INTERVENTION.Num_Inter, R_NECESSITER_COMPOSANT.Ref_Mat,
       CLng(Nz(R_NECESSITER_COMPOSANT.Qte_Necessaire, 0)) AS Qte_Necessaire
FROM   INTERVENTION LEFT JOIN R_NECESSITER_COMPOSANT ON INTERVENTION.Num_Inter = R_NECESSITER_COMPOSANT.Num_Inter
La fonction CLng() sert à convertit le résultat de Nz en entier long, car Nz a la fâcheuse tendance de convertir en texte.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/12/2010, 17h31   #6
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : décembre 2010
Messages : 52
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 52
Points : 12
Points : 12
Très intéressante ta réponse, mille merci !!
Je ne connaissais pas les fonctions que tu as citées.

Pour ma part, j'ai essayé avec du code SQL uniquement (je rappelle que je suis novice, donc pitié ).

Code :
1
2
SELECT INTERVENTION.Num_Inter, NECESSITER.Ref_Mat, Description_Mat, Qte_Nec, 
FROM MATERIEL INNER JOIN NECESSITER ON INTERVENTION.Num_Inter = NECESSITER.Num_Inter) ON MATERIEL.Ref_Mat = NECESSITER.Ref_Mat ;
Jusque là, Access m'affiche les matériels utilisés par intervention.
Mais, quand je rajoute les éléments de la table Compose_De, il m'affiche plus rien...
Mélodie_et_rythmes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 18h32   #7
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,
Citation:
Envoyé par Mélodie_et_rythmes Voir le message
Pour ma part, j'ai essayé avec du code SQL uniquement (je rappelle que je suis novice, donc pitié ).

Code :
1
2
SELECT INTERVENTION.Num_Inter, NECESSITER.Ref_Mat, Description_Mat, Qte_Nec, 
FROM MATERIEL INNER JOIN NECESSITER ON INTERVENTION.Num_Inter = NECESSITER.Num_Inter) ON MATERIEL.Ref_Mat = NECESSITER.Ref_Mat ;
Jusque là, Access m'affiche les matériels utilisés par intervention.
Mais, quand je rajoute les éléments de la table Compose_De, il m'affiche plus rien...
J'ai l'impression que le SQL que tu as posté n'est pas correct.
Tu peux vérifier s'il n'y a pas eu une erreur de copier/coller ?

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h50.


 
 
 
 
Partenaires

Hébergement Web