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 :

[Etat access 2000] Liste d'article provenant de tables différentes


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Etat access 2000] Liste d'article provenant de tables différentes
    Bonjour à tous,

    Me voici replongé dans access après un long long break. Il parait que c'est comme le vélo... mais bon la je sèche !

    Ici le schéma relationnel de la base de donnée pour plus de facilité.
    Nom : relation access copie.png
Affichages : 71
Taille : 84,7 Ko

    Ou je bloque :
    Je dois créer un état reprenant la liste des articles pour une commande précise.

    Le formulaire de commande permet de saisir soit un produit, soit un article. La différence entre les deux c'est un produit est une composition d'article.

    Exemple d'une commande:
    Produit:
    1 pause café (1 café + 1 sandwich + 1 dessert)

    Article:
    1 Sandwich

    Je doit avoir dans mon état
    1 café
    2 sandwich
    1 dessert

    J'ai tenté de créer une requête avec une jointure sur commande_article, commande_produit, composition_produit, commande. Ça me donne une erreur dans la jointure SQL.

    J'ai essayé avec une requête avec une condition IN, sans succès

    Reste peut-être la solution VBA dans l'état mais la je sèche !

    Merci d'avance pour vos réponses.

    JiBe914

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Montre nous ta requête.

    Sinon as-tu pensé aux sous-etats, cela te permettra d'afficher dans un état deux requêtes différentes, c'est comme un sous-formulaire.

    Starec

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Voici le code SQL généré par Access

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT article.nom, commande.commande_id
    FROM commande LEFT JOIN (commande_produit RIGHT JOIN ((article LEFT JOIN commande_article ON article.article_id = commande_article.article_id) LEFT JOIN composition_produit ON article.article_id = composition_produit.article_id) ON commande_produit.produit_id = composition_produit.produit_id) ON (commande.commande_id = commande_produit.commande_id) AND (commande.commande_id = commande_article.commande_id)
    WHERE (((commande.commande_id)=5));

    Ce code donne comme erreur :
    Instruction SQL non exécutée: des jointures externes ambigües. Pour forcer l'ordre d'éxécution d'une des jointures en premier, créez une requête dinstincte qui exécute la première jointure, puis insérerz cette requête dans votre instruction SQL.

    Je rappelle le but de la maneoeuvre :
    Obtenir la liste des articles repris dans une commande au travers de la sélection de l'article proprement dit et/ou d'un produit composé d'article.

    Au besoin je peux fournir la structure de la base de donnée.

    JiBe914

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    La réponse à été trouvée sur ce forum.

    En fait il "suffisait" de faire une requête UNION entre les tables commande_produit et commande_article.

    Dans un premier temps j'ai fait une requête affichant les articles qui composent les produits commandé

    Code :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT commande_produit.commande_id, composition_produit.article_id, Sum([commande_produit].[quantite]*[composition_produit].[quantite]) AS quantite_produit_article
    FROM commande_produit LEFT JOIN composition_produit ON commande_produit.produit_id = composition_produit.produit_id
    GROUP BY commande_produit.commande_id, composition_produit.article_id;

    ensuite j'ai fait la requête union

    Code :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT commande_id, article_id, Sum(quantite) AS quantite_article_commande
    FROM [SELECT commande_article.commande_id, commande_article.article_id, commande_article.quantite FROM commande_article UNION ALL
    SELECT [commande_produit_quantite_article requete].commande_id,  [commande_produit_quantite_article requete].article_id, [commande_produit_quantite_article requete].quantite_produit_article AS quantite FROM  [commande_produit_quantite_article requete]
    ]
    GROUP BY commande_id, article_id;

    Y a peut-être plus simple, mais je m'en contenterai pour le moment

    Merci encore pour ce forum

    JiBe914

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Créer un état Access de 22 colonnes à partir de 15 tables différentes
    Par fmailys dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/12/2012, 16h12
  2. Réponses: 2
    Dernier message: 03/12/2007, 10h57
  3. [Access 2000] Liste déroulante
    Par Brosseux dans le forum Access
    Réponses: 2
    Dernier message: 18/12/2006, 23h18
  4. Réponses: 1
    Dernier message: 18/08/2006, 17h20
  5. [Access] Combinatoire : Liste article dont la somme des prix
    Par enibris dans le forum Langage SQL
    Réponses: 14
    Dernier message: 17/03/2006, 11h03

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