ACCESS 2007 Relations plusieurs à plusieurs

Fermé
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 - 21 sept. 2011 à 11:26
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 - 17 juil. 2012 à 16:10
Bonjour,

J'apprends acces
J'ai crée une table de jonction avec deux clés pour gérer une relation plusieurs à plusieurs.
Mon problème est de savoir comment utiliser cette table pour entrer des données dans un formulaire de type plusieurs à plusieurs. Autrement dit comment exploiter tout cela. Un formulaire crée par access automatiquement m'affiche les numéros des clés. Or c'est pas ces numéros qu'il me fait mais les champs qu'ils ouvrent. Je sais pas si je me fais bien comprendre.Je suppose qu'il faut une requête sur laquelle créer un formulaire. Comment créer une telle requête ?

J'ai utilisé une base d'exemple du livre access 2007 le guide complet de chez micro application

Merci de votre aide

A voir également:

19 réponses

castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
Modifié par castours le 21/09/2011 à 17:37
Bonjour
Donc si je comprends bien , tu as 3 tables dont une table intermediaire.
Table1, table intermediaire, table3.
2 solutions:
_ faire un formulaire et sous formulaire avec la table 1 et la table intermediare.
Puis faire une liste deroulante avec la table 3
_ faire un formulaire et sous formulaire avec la table 3 et la table intermediare.
Puis faire une liste deroulante avec la table 1
Le sous formulaire sera toujours la table intermediaire.
Maintenant tout depend des données que tu veux enregistrer
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
Modifié par Plameninfo le 22/09/2011 à 10:26
Merci pour les explications que je vais essayer.
En attendant je m'explique plus en détail
J'ai créé pour cet exercice 3 tables
Table 1 que j'ai appelé "disque" avec :
un champ clé
un champ disque
un champ chanson
d'ailleurs je ne suis pas certain que le champ chanson soit utile

Table 2 idem mais appelé "chanson"

Table 3 intermédiaire contenant les deux clés primaires de la table 1 et 2

Ce que je veux c'est créer un formulaire où je peux entrer pour chaque disque plusieurs chansons

Merci pour d'autres suggestions. Pour ma part je vais tester l'idée de Permalink
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
22 sept. 2011 à 11:27
Je viens d'essayer, mais j'y arrive pas car l'insertion dans le formulaire d'une liste déroulante ne permet d'entrer qu'une seule chanson pour un disque donné et non plusieurs.
Par ailleurs le sous formulaire affichant la table de jonction n'affiche que des clés et non les champs que ces clés ouvrent.
J'ai simplifié à l'extrème les tables de mon exercice dont les champs se présentent à présent ainsi :

Table 1 :
N°_Disque
Disque

Table 2 :
N°_Chanson
Chanson

Table 3 jonction :
N°_Disque
N°_Chanson

J'aimerais construire un formulaire où l'on puisse saisir :

Disque 1 => Chanson 4
=> Chanson 7
=> Chanson 12

Disque 2 => Chanson 3
=> Chanson7

Disque .... etc

Le tout permettant d'afficher aussi bien les disques que les chansons sur un seul et unique formulaire afin de pouvoir saisir plusieurs chansons pour chaque disque éventuellement en choisissant parmi les chansons disponibles dans la table 2 ou en rajoutant des chansons non encore entrées dans la table 2 et qui vont s'ajouter automatiquement à la table 2.

Merci
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
22 sept. 2011 à 11:35
Salut,

si c'est pour gérer une discothèque, je crains que tu ne fasses fausse route.

Je m'explique :

une relation n-n n'est utile que si on trouve effectivement les données des deux tables dans des enregistrements différents, cas typique : appareil et pièces détachées. Une pièce détachée peut faire partie de plusieurs appareils (une vis simple est dans ce cas).

Dans ton cas, la relation n-n ne s'impose que si une chanson est présente sur plusieurs disques à la fois, ce qui n'est généralement pas le cas, sauf compilations.

Je dirais que dans ton cas, tu ne devrais avoir que la table 'disque' et la table 'chanson', la relation entre les deux se faisant grâce au champ 'identifiant disque' mis dans la table 'chanson'.

Ai-je compris ton problème ?
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
22 sept. 2011 à 12:09
Bonjour

Ce n'est pas une base pour gérer vraiment des disques c'est un exemple pour apprendre en réalité ce que je veux gérer est d'ordre médical.

Un antibiotique que l'on préscrit aussi bien à un enfant qu'à un adulte sous différentes présentations et posologies et pour des poids différents. Là ça se complique drolement car chaque médicament peut avoir plusieurs noms suivant le labo qui le fabrique et par ailleurs les doses les posologies etc tout cela peut être vraiment n'importe quoi c'est pourquoi il me faut impérativement quelque chose qui fonctionne comme l'exemple que j'ai donné avec les disques et qui n'est qu'un exemple pour comprendre comment faire ma vraie base médicale
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
22 sept. 2011 à 12:37
Alors prenons le vrai exemple :

- table 'médicament'
- table 'patient'
- table 'posologie'

Relation de n-n entre médicament et patient via posologie, de plus cette table posologie pourra avoir des renseignements complémentaires : date de la prise du médicament, mode d'administration, quantité...

Il faudra savoir si tu prends chaque médicament comme entité unique (princeps plus dérivés) ou si tu prends uniquement la DCI pour le caractériser (tu pourrais dans ce cas, mettre la dénomination commerciale dans la table posologie).

Ensuite, pour remplir la table posologie, il te faudra un formulaire avec deux listes déroulantes : choix du patient, choix du médicament avec éventuellement des zones à remplir pour les renseignements complémentaires...
Ces listes déroulantes afficheront les noms, mais renverront des identifiants, ceci afin de mettre à jour la table posologie, sur laquelle sera basé ton formulaire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
22 sept. 2011 à 13:01
Ma vraie base doit comporter les tables suivantes :
Famille_Médicament
DCI
Nom_Specialite
Présentation ( c'est à dire comprimés, gélules, ..)
Voie_Administration ( Per os, IM, Perfusion etc..)
Age ou Poids
Posologie (en fonction de l'age et du poids)
Dose_max (pour chaque age ou poids)
Fréquence d'administration
Dosage unitaire ( c'est à dire dosage de la gélule, du comprimé etc)
Indications (uniques par spécialité sans les répéter dans chaque cas particulier)
Contre Indications (idem)

Il n'y a pas de patient dans tout cela car la base est destinée à servir au médecin un peu comme un dictionnaire où il va consulter ce qu'il doit ou ne doit pas faire avec un vrai malade. Autrement dit la base ne sert que comme un receuil de connaissances c'est à dire ce que le médecin devrait savoir dans sa tête à propos de tel ou tel médicament.

En attendant je vais essayer de "digerer" ton précédent message

Merci
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
22 sept. 2011 à 13:38
Donc, pour ton problème, quelles tables as-tu décidé de créer et à quel endroit situes-tu la relation n-n ?
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
Modifié par Plameninfo le 22/09/2011 à 14:41
J'ai un grand fichier word dont ci_joint une page exemple
http://www.cijoint.fr/cjlink.php?file=cj201109/cijnoLJEmz.pdf

J'ai voulu transposer tout le fichier avec tous les antibiotiques dans une base access
dont le formulaire principal se présente ainsi

http://www.cijoint.fr/cjlink.php?file=cj201109/ciju2J09Bg.pdf

ou comme ceci

http://www.cijoint.fr/cjlink.php?file=cj201109/cijisRubid.pdf

Puis j'ai commencé à entrer les données et je me suis apperçu que c'est bourré de répétitions et quasiment infernal à saisir. Donc j'ai tiré un trait sur tout ce que j'avais fait et ai décidé de recommencer à zéro la base de données.

Le problème qui se pose c'est que je peux avoir pour un même DCI plusieurs noms de spécialités, plusieurs dosages, plusieurs formes d'administration et surtout des posologies différentes en fonction de l'âge ou du poids.
Bref j'ai résolu le problème en multipliant les champs et en faisant des lignes séparées les unes sous les autres avec des champs différents comme si c'était des rubriques différentes alors qu'en fait il s'agit de la même chose que j'aurais pu grouper dans des champs reliés plusieurs à plusieurs.

Je sais pas si je me fais bien comprendre


En résumé je voudrais transformer la table word dont j'ai mis un extrait ci-dessus et qui est écrite une fois pour toutes en quelque chose de modifiable sous access
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
22 sept. 2011 à 15:02
Donc, d'après moi, il faut multiplier les tables, ça pourrait donner ceci :

- famille
- DCI
- spécialité
avec relation 1-n à chaque fois, puisque ce sont des données uniques (une famille contient n DCI, chaque DCI contient n spécialités).

ensuite des tables 'génériques' (sans mauvais jeu de mot) :

- voie
- présentation
- dosage
- ...

et pour ces tables une relation n-n avec spécialité (donc création d'une table intermédiaire).

On pourra donc affecter la présentation :' comprimé 1 g' à plusieurs spécialités, idem avec dosage...
Pour les contre-indications, elles seront indiquées dans spécialité, puisque ne dépendant pas du dosage, ni de la présentation.
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
22 sept. 2011 à 15:13
D'accord avec cette proposition cependant le problème est que je ne sais pas comment utiliser la table intermédiaire de jonction pour afficher en un seul endroit la totalité non pas des N° de clés primaires mais les vrais champs qui en dépendent pour entrer les données.
C'est pourquoi j'avais simplifié à l'extrème avec l'histoire des 3 tables disque, chansons, et table intermédiaire pour essayer de comprendre comment cela marche sur le plan du principe.

Peux tu faire abstraction de mon vrai problème pour me dire comment m'y prendre avec l'exemple simple disque et chanson que je teste à part avant de m'attaquer au vrai sujet

Merci
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
22 sept. 2011 à 15:34
Comme je l'ai dit dans un post précédent :

Ensuite, pour remplir la table posologie, il te faudra un formulaire avec deux listes déroulantes : choix du patient, choix du médicament avec éventuellement des zones à remplir pour les renseignements complémentaires...
Ces listes déroulantes afficheront les noms, mais renverront des identifiants, ceci afin de mettre à jour la table posologie, sur laquelle sera basé ton formulaire.
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
22 sept. 2011 à 15:40
Je dois m'absenter pour quelques heures. J'essaierais tout cela à mon retour.
Merci pour les conseils que je vais essayer tout à l'heure.
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
23 sept. 2011 à 11:57
Bonjour,

Me revoila toujours au même point
Voici l'exercice exemple simple disques_chansons en images pour mieux faire comprendre où je bute.

Je crée d'abord trois tables
T_Disque
T_Chanson
T_Jonction_Disque_Chanson

http://www.cijoint.fr/cjlink.php?file=cj201109/cijXWgKPFm.pdf
http://www.cijoint.fr/cjlink.php?file=cj201109/cijm9Po0JY.pdf
http://www.cijoint.fr/cjlink.php?file=cj201109/cijttDxesy.pdf

Ensuite je crée des relations

http://www.cijoint.fr/cjlink.php?file=cj201109/cijcXMoDrP.pdf

Ensuite je rentre des données d'exemple dans les deux tables T_Disque et T_Chanson

http://www.cijoint.fr/cjlink.php?file=cj201109/cij0r3YIbe.pdf
http://www.cijoint.fr/cjlink.php?file=cj201109/cijrKixqUd.pdf

Puis je crée automatiquement les trois formulaires de mes trois tables pour voir ce qu'access va faire pour moi

http://www.cijoint.fr/cjlink.php?file=cj201109/cij2pSquzc.pdf
http://www.cijoint.fr/cjlink.php?file=cj201109/cij2EnKxET.pdf
http://www.cijoint.fr/cjlink.php?file=cj201109/ciji0ksUrn.pdf

Résultat je ne retrouve nulle part les données que j'ai rentré dans mes deux tables Disque et Chanson pour pouvoir choisir parmi les disques existants les chansons que je vais saisir.

Apparemment c'est un gag basique mais je suis bloqué dessus depuis une semaine.
Pouvez vous m'aider svp?

Merci
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
23 sept. 2011 à 14:50
Tes relations ne sont pas marquées comme étant de 1-n entre les tables, est-ce normal ?

Résultat je ne retrouve nulle part les données que j'ai rentré dans mes deux tables Disque et Chanson pour pouvoir choisir parmi les disques existants les chansons que je vais saisir.
C'est normal, comme je l'ai expliqué auparavant, le formulaire disque-chanson doit être basé sur la table T_Jonction_Disque_Chanson, et les données ne doivent pas être affichées sous forme de zone mais sous forme de liste déroulante (c'est ça qui change tout)...

Dans ton exemple, si tu entres 1 et 1 dans tes deux zones et que tu fais enregistrement suivant, tu verras que le disque 1 est en relation avec la chanson 1, car tu auras créé une ligne dans la table T_Jonction_Disque_Chanson.
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
23 sept. 2011 à 15:02
Effectivement les relations ne sont pas marquées 1 à n mais elles y sont de ce type lorsqu'on fait une vérification par la commande modifier relations.
D'ailleurs je sais pas pourquoi ça ne s'affiche pas alors que dans d'autres cas ça s'affiche. Il y a peut être une commande pour afficher cela.

Je vais essayer ce que tu dis et je reviens
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
23 sept. 2011 à 15:29
Je suis furieux contre moi même. Est-ce possible d'être si nul...
En résumé je dois créer un formulaire basé sur la table T_Jonction_Disque_Chanson

pour cela je mets en surbrillance la table jonction

puis je vais dans création formulaire ce qui m'affiche un formulaire vide en mode création

puis à droite dans la fenetre propriétés je choisis pour mon formulaire la table de jonction

Je prends dans le ruban la liste déroulante que je mets dans le formulaire. Là s'affiche un assistant

Je choisis choisir dans une table et je fais suivant

et la je choisis quelle table Jonction?

Excuse moi de poser des questions aussi stupides...Je pète les plombs...
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
23 sept. 2011 à 15:39
Fais donc un 'formulaire instantané' basé sur la table T_Jonction_Disque_Chanson, ça évitera les questions ;-)
Pour l'affichage 1-n, as-tu coché 'intégrité référentielle' lorsque tu as créé tes relations (mais sans cocher les 'cascades') ?
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
23 sept. 2011 à 15:43
Bon il faut que j'arrête la, je dois m'absenter jusqu'à 19 h.

Je sens que je vais exploser je suis sur cette connerie depuis une semaine et j'y arrive pas. Pourtant je suis pas débutant en informatique mais voila une petite connerie et ça coince
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
Modifié par castours le 23/09/2011 à 18:30
Bonjour
Si cela t'interesse, j'ai un exemple de base de mediatheque ou tu pourras utiliser ou prendres des elements.
http://www.cijoint.fr/cjlink.php?file=cj201109/cijSedHfG2.zip
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
23 sept. 2011 à 19:55
Merci castours pour ton fichier,
C'est très intéressant mais un peu compliqué et surtout il n'y a pas de formulaire or c'est ce qui m'intéresse.

En dernier ressort....

Est-ce qu'une âme charitable pourrait me compléter mon fichier basique de trois tables élémentaires par un formulaire que je vais essayer d'analyser par la suite.

Ci-joint mon fichier disques et chansons dont je parlais plus haut

http://www.cijoint.fr/cjlink.php?file=cj201109/cijZ2HNYlU.zip

Ce que je veux c'est ajouter dans cette base un formulaire où l'on peut saisir pour différents disques différentes chansons.

Si vous pouvez me faire cela je vous serais reconnaissant jusqu'au ciel..., car cela fait une semaine que je décolle pas du micro j'ai lu et relu un tas de bouquins et rien à faire. Avec un bouquin j'ai presque réussi à faire ce que je veux mais c'est parasité par plusieurs fichiers qu'on ne peut supprimer et j'arrive pas à saisir la petite astuce valable sur un fichier basique et élémentaire comme celui que j'ai préparé ici


Merci d'avance à tous
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
23 sept. 2011 à 21:37
Pas de chance, ce doit être de l'access 2007, je n'ai qu'une vieille version à la maison et une version 2002 au boulot, je ne pourrai pas t'aider, à moins que tu ne changes le format...
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
23 sept. 2011 à 23:56
Bonjour
http://www.cijoint.fr/cjlink.php?file=cj201109/cijLCmJwiU.zip
Je te joins la base modifié sous access 2003.
J'ai modifié les relations, fait un formulaire avec un sous formulaire.
Tu choisis un cd puis les chansons dans le sous formulaire a l'aide de la liste deroulante.
Est ce que cela te va?
0
Plameninfo Messages postés 16 Date d'inscription mercredi 21 septembre 2011 Statut Membre Dernière intervention 24 septembre 2011 1
Modifié par Plameninfo le 24/09/2011 à 13:01
Merci blux et castours,

Une fois que j'ai fait mon post hier soir j'ai eu une idée lumineuse et je crois avoir trouvé. J'avais pas le temps de faire l'essai complet mais ça marche.

L'astuce est dans le fait que Microsoft a fait une connerie vraiment stupide et que les auteurs de livres que j'ai sur le sujet induisent en erreur en donnant de pseudo fausses explications. Je m'explique :

Dans mon bouquin il est dit que les deux champs clés dans la table de jonction sont de type numérique. C'est vrai et faux à la fois. En effet ce sont vraiment des champs numériques mais des champs numériques pas comme les autres au point de mériter un nom différent pour éviter toute confusion. Je pense qu'il faudrait les appeler champs numériques liés.

L'astuce consiste donc dans la définition même des propriétés de champ dans la table de jonction elle même lors de sa création. C'est à dire là où l'on doit définir s'il s'agit d'un champ de type texte , memo, date, numérique etc.

Si on suit bêtement le livre qui dit que puisque ce sont des champs clés primaires il faut qu'ils soient définis de type numérique, si on suit bêtement cette recommandation et qu'on les définit vraiment en tant que tels, c'est à dire ce que je faisais dfepuis une semaine, ensuite on peut faire toutes les manipulations que l'on veut ça ne marche pas.

A la place de ce que je voulais afficher la table joint affichait au mieux les numéros des enregistrements mais pas les champs liés qui dépendaient de ces enregistrements.

La confusion vient ensuite de microsoft. En effet lorsqu'on définit le type d'un champ dans les propriétés de la table avec access 2007 en tant que texte, memo numérique ole ou autre etc il y a aussi en dernier l'option "assistant liste de choix".

Lorsqu'on exécute cet assistant la propriété de champ affichée par la suite dans les propriétés est egalement numérique exactement comme si on avait choisi l'option numérique sans passer par l'assistant liste de choix. Bref quelqu'un qui examine la base qu'il n'a pas conçu lui même ne peut pas savoir que le champ a été défini en passant par l'assistant et peut croire que c'est un champ numérique banal puisque dans les deux cas la propriété affichée est numérique. Donc quand le livre dit il faut définir le champ comme numérique il a raison. Mais les deux numériques ne correspondent pas à la même chose et devraient porter dans les propriétés de la table des noms différents tout comme on ne mélange pas un champ de type mémo avec un champ de type texte.

Le numérique simple ne contient que le chiffre clé. Alors que le numérique qui est passé par l'assistant a crée automatiquement des relations et tient compte de ces relations. C'est là toute la différence. De plus il ne faut pas définir de relations manuellement. Elles se définissent automatiquement par l'assistant et on n'a plus rien d'autre à faire par la suite.

Mieux je pense et il faut que je le teste, qu'on peut établir des relations n - n sur plusieurs champs et non uniquement entre deux champs.

Dernière stupidité et c'est la mienne je voulais afficher dans un formulaire quelque chose qu'on ne peut afficher que sous forme de tableau quitte à utiliser un sous formulaire contenant un tableau associé à d'autres champs fixes.

Bref j'ai le cerveau en effervescence. Je vais mettre tout cela en pratique et je posterais la base exemple pour que vous voyez ce que ça donne. Cela dit je ne sais pas si dans une version antérieure à 2007 la façon de procéder est la même et plus particulièrement s'il existe un assistant liste de choix lors de la création de la table jonction.


Je n'ai pas le temps de faire tout cela maintenant. Je le posterais après.

En tout cas un très grand merci à vous de vous être obstinés à m'aider malgré la longueur des messages accumulés.

A plus tard
0
Bonjour Plameninfo,

je ne sais pas si vous consultez toujours ce forum, mais il me semble que je suis dans le même cas que vous l'année dernière : je construis une relation n à n par l'intermédiaire d'une table mais je n'arrive pas à l'utiliser correctement ...
Auriez-vous la base exemple (disque/chanson) pour que je puisse essayer de comprendre car même avec maintes explications j'ai toujours du mal à comprendre. Sinon peut-être celle que Castours avait jointe car elle n'est plus disponible ici.

Merci d'avance,
0
Bonjour,

J'ai le meme probleme que Plameninfo15

J'aimerai savoir si vous avez compri sa dernière explication

Si oui, cela m'aiderai beaucoup.

Baptiste
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
17 juil. 2012 à 16:10
Bonjour
Pour realiser une jonction un a plusieur , il faut un champ N)Auto en clé primaire puis dans l' autre tablememe non d champ mais en numerique.
Exemple /
Table 1; N° liste en cle primaire auto
Table 2; N°Liste en numérique indexe plusieurs
0