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

Access Discussion :

[DEB] lier deux tables par un NumAuto


Sujet :

Access

  1. #1
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut [DEB] lier deux tables par un NumAuto
    Bonjour,

    Comment peut-on lier deux tables à partir d'un champs de type NumAuto.
    Mes tables à l'origine sont vides. Je vais utiliser un formulaire de saisie pour les remplir.
    D'avance merci de votre aide !

  2. #2
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Bonjour,

    Je ne suis pas sûr que cela soit une bonne idée...que veux-tu faire exactement?

    SE

  3. #3
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Bonsoir,

    En fait c'est assez simple mais difficile a expliquer, résumons:
    J'ai 3 tables: table1 table2 et table3. J'ai aussi 1 formulaire (de saisie) comportant une dizaine de sous formulaires. Le formulaire principale ainsi que certains sous formulaires sont liés à la tables 1, d'autres sous formulaire sont liés à la table2 et le reste des sous formualires à la tables 3. Je fais cela car j'ai énormement de données à rentrer. Mes tables font 200 champs chacunes. Et j'utilise des sous formes pour ne pas arriver au max des controls autorisé par Access...
    Bref, au début mes tables sont vides. Je rentre des données cliniques et epidémiologiques pour 1000 personnes. Chaque personne sera sur une ligne qui ira de la table 1 à la table 3. C'est ici que le num automatique doit intervenir, chaque ligne donc chaque personne doit avoir un numero unique que l'on retrouve dans les deux autres tables pour lier les données.
    Mais je ne sais pas comment faire pour recopier le numauto de la table 1 dans la table2 et puis 3...

    Merci d'avance pour ta patience

  4. #4
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    Tu ne peux avoir qu'un seul numéro automatique (si les autres doivent être égaux au premier ils ne sont logiquement plus automatiques)
    Ce sont les champs père-fils qui s'occupent de faire la mise à jour des numéros dans les tables suivantes, la première table devant être renseignée en premier.

    Ceci dit si tu as 3*200 champs je suppose que ta conception est à revoir.
    Quelle information peut bien nécessiter 600 champs?
    Il faut sûrement réfléchir sur le modèle de données.

  5. #5
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Bonsoir,

    Effectivement 600 champs (a peut pès!) c'est beaucoup mais c'est exactement ce que je dois avoir. Nous travaillons sur des questionnaires épidémiologiques et clinique qui sont malheureusement pour moi extrêment étendus chaque question doit absolument avoir un champs. Nous y faisons apres des statistiques dessus. Je ne peut pas faire autrement.
    Ce que je ne sais pas faire c'est à partir du moment ou le numero automatique est crée dans la table 1 (que je renseigne en premier), le copier dans les champs fils des deux autres tables. Si cela fonctionne comme cela !

    Merci pour ta réponse...

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    non c'est une erreur en fait ta structure de table est

    ref question1 question2 question3 question4.....
    avec 600 questions j'ai 601 champs et là je renonce

    si j'adoptais la structure suivante

    ref numquestion réponse

    j'aurais 3 champs et 600 lignes, en fait on devrait probablement ajouter
    une ou deux colonnes notamment pour gérer des types de données différents
    mais quel confort

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 168
    Points : 196
    Points
    196
    Par défaut
    +1
    1 seule ligne par question sinon tu vas droit dans le mur, surtout avec Access!
    Il ne faut pas considerer une base de donnees comme une feuille excel...

    Tu devrais avoir par exemple :

    1 table Questions, qui ressence toutes les questions. cle primaire num_question
    1 table Questionnaires qui defini le numero du questionnaire, le nom et/ou numero de la personne questionnee, la date, commentaires...cle primaire num_questionnaire
    1 table de correspondance questions_questionnaires qui te permet de definir les question associee a ton questionnaire.Tu as comme cle primaire num_questionnaire et num_question

    voilou++

  8. #8
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Merci pour vos réponses...
    Random: je n'ai pas bien compris en fait je vais avoir une table contenant mes questions avec leur réponse. Si j'ai 600 questions j'ai donc 600 lignes, c'est ca ? Là ou j'ai du mal à comprendre c'est comment stocker les 1000 différents patients qui seront interrogé, donc les 1000*600 réponses ?
    Pour Fablobon: en fait mon cahier des charges est clair : j'ai 7 questionnaires (dont certains sont énormes) j'aurai donc 7 bases de données différentes, et aucunes questions ne se retrouvent dans les autres questionnaires. Et que faire dans ton modèle de toutes les réponses ?

    Je commence à être un peu desorienté là !!!

    Merci de votre patience pour un Debutant de mon accabit

  9. #9
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    JE reflechi depuis ce matin (ici il est midi !) à votre idée de refaire les tables. On prends l'exemple du questionnaire femme. Au début de mon questionnaire on inscrit 3 numéro qui mits bout à bout sont un identifiant unique: Un numero Ilot , un numero foyer et un numero de la personne dans le foyer.
    Je vais donc créer une table "Femme" qui contiendra 3 colonnes, ilot, foyer, personne.
    Puis je créer une autre table "reponse" avec les colonne suivantes:
    Ilot, Foyer, Personne, IdQuestion,Reponse

    Je fais une clé avec les 3 premières valeurs (ilot+foyer+personne) dans les deux tables et je fais une liaison 1:n.
    Je fais un formulaire de saisie avec 2 controls appelés Ct1 et Ct2.

    Je sais que cela ne se fait pas mais j'ai alors deux questions:

    Comment fait-on pour dans le champs IdQuestion mettre le nom de tous les controls ( en fait le nom de la question) pour chaque Femmes ?
    A partir du moment ou les clés sont définis est ce que mes valeur de Ilot, Foyer et Personne seront automatiquement copiées dans la table "Réponse" ?

    D'avance merci pour votre patience

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 168
    Points : 196
    Points
    196
    Par défaut
    Salut, j ai un truc de ce genre a te proposer, mais attends de voir si d autre personnes n ont pas de meilleures idees...Y a toujours moyen d ameliorer ...

    a++

    Nom : MCD.JPG
Affichages : 98
Taille : 23,3 Ko

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    ne stresse pas IP203

    En fait personne nhe t'as dit mais tu dois faire ce qu'on appelle une analyse merise avant de te lancer sur la base access.
    Si tu ni connais rien en merise, ce n'est pas trés grave pour ta base.

    Si j'ai bien compris tu as 1000 patients (+ ou - peut importe), c'est patients répondent à 7 questionnaires, ces 7 questionnaires comportent bcp de questions (600 en tout ou 600 pour chaque je ne sais pas et peut importe).

    Ton cahier des charges dois définir ce que tu veux faire de ta base, considère que tu as des fiches papiers en face de toi avec tes patients et tes questionnaires, que veux tu en faire.
    Imagines si tu as des questionnaires avec les noms des patients mais pas de fiche patients, comment fais tu pour rassembler tout cela.

    Le pb est là.

    A mon avis

    Tu auras une table patients avec toutes les infos patients
    Clé primaire n° auto
    Nom
    Prénom
    Age
    Adresse
    CP
    Ville
    etc....

    en fait tu liste tout ce qui concerne le patient et uniquement le patient par les questionnaires

    puis tu auras une table questionnaire avec tes questions, mêmes s'il y en a 600 pas de pb

    le tout es de savoir si tu différencie les 7 questionnaires ou pas

    est ce qu'un patient est obligé d'avoir répondu à au moins un questionnaires pour faire parti de ta base ?


    la 3ème table que tu voulais faire correpond à quoi ?

    As tu pensez aux médecins ? ou aux laborantins ou je ne sais quoi ? es ce que ça t'es utiles de savoir qui a fait ou a demandé l'analyse ?


    Bon une fois que tu as déterminé tout cela

    En fait ce que tu appelle une relation n° auto est une clé migrante, ce que les personnes qui t'ont répondu appelle relation père/fils

    C'est à dire que :
    Ta table 1 patients aura comme clé primaire un nh° auto sans doublon etc... c'est le mieux sinon il te faut une double clé à cause des homonymes nom, il faudrait comme clés nom et prénom, bref mets un n° auto
    Ta table 2 questionnaire aura aussi une clé primaire, un n° auto aussi je ne vois que ça.

    Ensuite et seulement ensuite suivant la relation que tu auras (nanalyse merise) entre tes deux tables tu feras la relation.
    Il faut que tu saches si un patients répond minimum à 1 questionnaires voir à plusieurs,
    bon on est d'accord qu'un questionnaires appartient qu'à un seul patients ?

    dans ce cas tu auras une relation n,1, soit plusieurs à 1.

    Suivant les type de relation, n,n / 1,n, / 1,1 / 0,1 / 0,n etc............. les clés de tes tables migrent de façon différentes vers les autres tables, voir vers une tables qui centralise certaines infos.

    Pour ton cas je pense que ta relation sera un à plusieurs, dans ce cas la clé primaire patient va migrer et passer dans la table questionnaires en tant que clé migrante, ou clé enfant.

    Va voir les explication dans l'aide sur les relations un à plusieurs, plusieurs à plusieurs etc.... ça pourras te donner des explications.


    ATTENTION,

    Une clé primaire n'accepte pas les valeurs Null et doit toujours avoir un index unique.
    Une clé primaire sert à relier une table à des clés étrangères se trouvant dans d'autres tables.

    Lorsque tu créées une relation entre deux tables, les champs associés ne doivent pas porter le même nom !
    C'est à dire que dans ta table 1 pateints ce sera par exemple n° auto patient.
    Dans ta table questionnaire le champs correspondant à cette clé, sur lequel tu vas faire ta relation ne pourra pas s'appeler n° auto patient, mais devra s'appeler autrement et ce ne sera pas pas un n° auto mais un chmaps numérique avec les même caractéristiques que ton n° auto (taille etc...)


    Tu peux faire correspondre un champ NuméroAuto (clé primaire) avec un champ numérique (clé étrangère) uniquement si la propriété TailleChamp (FieldSize) des deux champs correspondants est similaire.

    Par exemple, tu peux faire correspondre un champ NuméroAuto avec un champ numérique si la valeur de la propriété TailleChamp (FieldSize) des deux champs est Entier long. Cette propriété doit être similaire même si les deux champs associés sont des champs numériques.


    Et voilà, ensuite et bien une fois tes teables enregistrées et fermées, tu cliques sur Relations et tu tires la clé primaire vers la clé étrangère, la relation va s'effectuée

    tu vois les options, il faudra lui dire si tu veux une intégrité référentielle etc..........



    C'est Ok? tu as compris mon roman ?

  12. #12
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Salut...

    Wow effectivement c'est un vrai roman, mais en tout cas mille merci pour le mal que tu te donnes.
    Je viens d'essayer de relier déjà mes deux tables a l'aide d'une clé NumAuto et l'autre Entier Long.
    Dans mon formulaire de saisie j'ai deux sous formulaires qui sont reliés à la deuxième table. en effectuant les transformation que tu m'a dis j'obtient à chaque fois que je vais dans les sous formulaires ls messages suivants:
    Le paramètre de la propriété Champs Pères est à l'origine de l'erreur suivante:
    L'objet ne contient pas d'objet d'automatisation 'Enfant01''
    Enfant01 est une des deux tables.

    Pour répondre à ton roman

    Les questionnaires ne peuvent concerner qu'une seule personne à chaque fois car ils sont par tranche d'age (Enfant de 0 a1 ans, de 1à 4 ans...). Donc une personne est inclue dans la table à partir du moment ou elle réponds au questionnaire.
    Le cahier des charge précise bien qu'il faut une base par questionnaire:
    Une base Enfant de 0 a 1 ans, Une base pour les femmes de 15à 49 ans etc...
    Tu dis aussi que avoir 600 question se n'est pas grave, mais quand je vois le commentaires que l'on me fait sur la structure de mes base visiblement je fais fausse route. J'ai une questionnaire (femme) avec 600 questions une autre (enfant 0 a 1 ans) avec 400 question ...

    Bon je m'y remets avec quand même une petite angoisse

    Merci encore

  13. #13
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Tu dis aussi que avoir 600 question se n'est pas grave, mais quand je vois le commentaires que l'on me fait sur la structure de mes base visiblement je fais fausse route. J'ai une questionnaire (femme) avec 600 questions une autre (enfant 0 a 1 ans) avec 400 question ...
    Tes questionnaires ne seront sûrement pas figés.
    Lorsque tu devras ajouter une question comment fais tu? Il faudra modifier la structure de la table.
    Si une question disparait tu ne peux pas la retirer sinon tu perds l'historique.
    Donc tu as de plus en plus de champs, tu dois ajouter les nouvelles questions dans toutes tes requêtes (qui d'ailleurs n'acceptent pas plus de 255 champs) et un jour viendra où tu devras créer une 4ème table.

    Tu dois avoir une table pour paramétrer tes questionnaires, avec chacune des questions sur une ligne, avec un identifiant et un libellé.
    Un peu comme la proposition de Fablondon, peut-être avec un champ en plus pour le type de questionnaire.

  14. #14
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Salut,

    Si justement mes questionnaires sont figés; Il s'agit d'une enquête qui se place sur un laps de temps très court (6 mois); Aucune autres questions n'est envisagées par le protocole. C'est pour cela que j'ai obté pour une structure de type feuille excel...
    Pourrais tu me dire si il est judicieux de prendre comme champs pere Le champs en NumAuto et le champs fils Idem pour lier une sous formulaire à son formulaire ?
    En fait le formualire et le sous formualire sont liée à une même table.

    Merci de ton aide

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    pour ta question :

    "Le paramètre de la propriété Champs Pères est à l'origine de l'erreur suivante:
    L'objet ne contient pas d'objet d'automatisation 'Enfant01''"

    je ne vois pas de quoi ça peut venir, tu as bien ta relation du n° auto vers l'entier long, pas en sens inverse ?

    Tes sous formulaires viennent de la table 2, mais tu fais bien référence à la table 1, qui est d'abord saisie, un formulaire ne peut pas exister si le patient n'existe pas.

    Autrement il faut faire une requete et liste des champs de la table 2 et de la table 1, puis faire ton formulaire en appelant cette requete.

    Je vois pas trop, attends les réponse des autres.


    Pour l'autre question, les 600 et 400 champs, ok tes questions sont figées, super, sinon ça aurait été galère.
    Je n'avais pas pensé au 255 champs maxi des requêtes comme à dit Arkham46. Ben la solution sera de faire des sous requete, enfin des requetes de requetes.
    Autrement fait d'autres tables avec maxi 255, enfin disons 250 champs.
    Par exemple
    Table 2
    Questionnaire
    N° entier long (clé étrangère)
    Type de questionnaire (Femme ou enfant)
    date
    lieu
    remarques
    etc... etc..........
    tout ce qui est propre au questionnaire

    puis Table 3
    Contenu du questionnaire
    Qui pourait être des question communes aux deux types de questionnaires par exemple
    ou médicament
    ou résultats analyse
    ou question perso

    et ainsi tu divises tes tables, mais garde une logique

    600 / 250 = 3 tables distinctes

    une avec les infos de base sur le questionnaire
    et deux autres par exemple comme je te disais analyse et médicaments, enfin j'en sais rien

  16. #16
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    C'est pour cela que j'ai obté pour une structure de type feuille excel...
    Oui mais là tu n'es pas dans excel
    Avant de te lancer réfléchis à tes stats.
    En fonction de ce que tu dois faire ensuite avec tes données, tu risques de bloquer à cause de ta structure, de devoir créer une requête par champ ou quelque chose du genre.
    En plus ta base n'est pas du tout réutilisable pour une autre enquête, c'est dommage.

    Pourrais tu me dire si il est judicieux de prendre comme champs pere Le champs en NumAuto et le champs fils Idem pour lier une sous formulaire à son formulaire ?
    Là je ne vois pas où tu veux en venir.
    Je persiste : avant d'essayer de régler des problèmes techniques dû à un mauvais modèle de données, est-ce que tu es sûr que tu pourras exploiter tes données dans cet état?
    Inutile de perdre du temps à travailler sur la saisie si les statistiques sont infaisables.
    L'analyse est importante et doit couvrir toutes les fonctionnalités de la base.

    Comment faire par exemple si tu dois sortir la liste des gens qui ont répondu Oui à une certaine question?
    Avec un bon modèle de donnée tu fais une requête avec un paramètre sur l'identifiant de la question et c'est fini.
    Avec ton modèle de données tu dois faire la requête sur le champ correspondant à la question, et là tu es obligé de bidouiller avec du VBA.

    Bref la simplicité apparente de ton modèle de données cache les difficultés à venir. A étudier donc avant de faire quoi que soit de plus, c'est ce que je pense en tout cas.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 168
    Points : 196
    Points
    196
    Par défaut
    Salut, juste une petite question sur ton cahier des charges , sais tu pourquoi il t obliges a creer autant de base que de type de personnes interogees ??
    Tout pourrait etre traite dans une seulle et mem base de donnee et de simple requete te permettraient de faire le tri entre les enfant 0-1 ans,les femmes...

    Comme l a dit Arkham46 si tu ne valide pas completement ton modele de donne avant de commencer quoi que ce soit tu vas droit dans le mur...je t en parle en connaissance de cause .
    Peut etre pourrais tu nous faire parvenir un resume de ton cahier des charges pour que nous puissions t aider a etablir un bon modele de donnees sinon nous allons tous te proposer des solutions qui peuvent etre en contradiction avec ce que l'on te demande...
    Une base de donnee a la difference d un tableur excel te permet de stocker plus de donnes mais aussi te permet de mieux les stocker...bref oubli tes reflexes excel pour ton projet.

    a++ courage.

  18. #18
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Là je me sens tout petit...
    Effectivement je crois que mes anciens reflexes de statisticien sont remontés à la surface. Mais ce que j'ai honte d'avouer c'est que j'ai fais déjà tous mes formulaires de saisie (avec moulte code dedant !!!). Et franchement vu la taille du boulot j'aimerai pas tout recommencer !!!
    Mais je vais essayer de changer la structure de ma base (avec le peu d'expérience que j'ai ca va être coton )
    Par contre pouriiez vous m'éguiller sur une petite question technique...(Arkham46 j'ai déjà fait mes formulaires ). Dans un formualire j'ai deux sous formulaire, mon formulaireest lié a une table avec une cle sur un NumAuto. Mes sous form sont lié à cette table aussi. Lorsque je saisie mes données, quand je rentre dans mes sous form il m'incrémentent mon champs NumAuto et donc toutes mes données au lieux d'être sur une ligne se retrouvent sur 3 lignes...
    Si jamais...

    En tout cas grand grand merci à vous tous pour votre aide...

Discussions similaires

  1. Lier deux tables indépendantes par dates
    Par fprovot dans le forum SQL
    Réponses: 7
    Dernier message: 30/07/2013, 16h57
  2. Réponses: 4
    Dernier message: 20/11/2005, 18h02
  3. Comment lier deux tables (0-1;1-1) ?
    Par tsing dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 22/02/2005, 13h36
  4. lier deux tables a partir dun calcul!!
    Par marie10 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/04/2004, 09h44
  5. comment lier deux tables?????
    Par baboune dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/03/2004, 14h45

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