IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requete concernant les composants d'un matériel


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    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 : 63
    Points : 40
    Points
    40
    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 ?

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Ne peux-tu poster une BDD compatible Access2000 avec un exemple concret?
    J'essaierai bien volontiers.

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    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+

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    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 : 63
    Points : 40
    Points
    40
    Par défaut
    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 !!

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Voici une requête ...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    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 : 63
    Points : 40
    Points
    40
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/08/2014, 16h35
  2. Probleme basique concernant les requetes SQL sous BCB
    Par PhEnOmX dans le forum C++Builder
    Réponses: 8
    Dernier message: 29/02/2008, 16h06
  3. concernant les requetes
    Par iturria64 dans le forum Access
    Réponses: 3
    Dernier message: 07/12/2007, 09h37
  4. requete SQL sous Access concernant les tranches
    Par Hamadokh dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/01/2007, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo