none
[AC-2013] Requête sur tables multiples RRS feed

  • Question

  • Bonjour,

    j'ai déjà ouvert un topic sur ce forum :

    http://www.developpez.net/forums/d1472651/logiciels/microsoft-office/access/requetes-sql/ac-2013-requete-tables-multiples/#post7982146

    mais pour le moment, je n'ai pas eu de solution.

    Voici les relations entre mes tables :

    Un élément de T_Animaux peut être défini par un T_Types (chat, chien...) et ensuite par une race spécifique à chaque animal (siamois pour les chats, husky pour les chiens...)

    Pour la combobox du champ T_Animaux.RaceFK, j'ai crée la requête :

    SELECT T_Races.IdPK, T_Races.Description FROM T_Types INNER JOIN T_Races ON T_Types.IdPK = T_Races.TypeFK INNER JOIN T_Animaux ON T_Animaux.TypeAnimalFK = T_Types.IdPK WHERE (((T_Animaux.TypeAnimalFK)=[T_Races].[TypeFK]));

    mais dans ma table, cela ne me donne que les races de chiens.

    Est ce que quelqu'un aurait une idée de si c'est faisable dans une table (donc sans formulaire, ni VBA) ?

    Merci,

    Vincent

    mercredi 1 octobre 2014 15:22

Réponses

Toutes les réponses

  • Bonjour

    J'ai lu en diagonale la discussion ouverte sur le lien que vous avez fourni et pour ma part je rejoint le commentaire de Claude.

    Dans mon idée une table "Types Animaux" une table "Races" et une table "Animaux"

    Avec les relations suivantes :

    • Types Animaux > Races
    • Races > Animaux

    Une première approche :

    Dans le formulaire de saisie deux combo box

    • le premier permet de définir le type d'animal (ne sera pas lier à un champ de la table "Animaux" mais servira de filtre pour le second)
    • Le second permet de sélectionner la race (lié à un champ clé étrangère de la table "Animaux", il sera filtré pour n'afficher que la liste des races correspondants au type d'animal sélectionné.
    • Voir ceci :  how to synchronize two combo boxes

    Une seconde approche :

    • Créer une requête qui renvois la liste de tout les races par types d'animaux.
    • utiliser cette requête comme source du combo box pour sélectionner la race.


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users

    mercredi 1 octobre 2014 15:55
  • Bonjour et merci de ta réponse rapide :).

    Je viens de mettre à jour le topic cité avec les requêtes SQL.  Donc, ces 2 requêtes là fonctionnent mais affichent tout :

    SELECT [T_Races].IdPK, [T_Races].Description FROM T_Races ORDER BY [T_Races].Description;
    SELECT T_Races.IdPK, T_Races.Description, T_Types.Description FROM T_Types INNER JOIN T_Races ON T_Types.IdPK = T_Races.TypeFK ORDER BY T_Races.Description;

    Le simple fait d'ajouter la table T_Animaux dans l'interface fait tout foirer :

    SELECT T_Races.IdPK, T_Races.Description, T_Types.Description FROM (T_Types INNER JOIN T_Races ON T_Types.IdPK = T_Races.TypeFK) INNER JOIN T_Animaux ON (T_Types.IdPK = T_Animaux.TypeAnimalFK) AND (T_Races.IdPK = T_Animaux.RaceFK) ORDER BY T_Races.Description;
    

    Effectivement, mon approche désirée est la 2ème.

    Merci.

    mercredi 1 octobre 2014 16:17
  • Bonjour,

    Je vous propose la lecture de ce tutoriel qui devrait vous aider dans cette démarche...



    Argy

    lundi 6 octobre 2014 14:23
    Modérateur
  • Super merci, je vais regarder cela :)

    Est ce que l'on est obligé de passer par du VB même si l'on veut remplir les champs en mode Table/Création de données ?

    lundi 6 octobre 2014 15:11
  • Humm, l'usage du remplissage auto dans une table en "mode feuille de données" ne peut pas se faire car la clause SELECT qui en découle est inscrite ne dur. Il faudrait modifier manuellement la clause WHERE dans la requête source à chaque fois et cela ne peut pas s'automatiser par autre chose que du code VBA.

    Ce tutoriel que j'ai écrit est très simple et le code VBA qui y est exploité est très accessible même pour quelqu'un qui n'a jamais "codé"...


    Argy

    mardi 7 octobre 2014 09:00
    Modérateur
  • J'ai fait comme ça et ça fonctionne merci :)

    (On n'aurait pas accès au 'Me' en mode édition de table par hasard ? Parce que, au final, la requête SQL, elle est bien là et le VB ne sert à qu'a mettre un chiffre dans la requête )

    jeudi 9 octobre 2014 12:54