Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > Conception

Conception Le forum qui vous aide à résoudre vos questions relatives à la modélisation de votre base de données sous Access.

Réponse
 
Outils de la discussion
Vieux 20/08/2008, 10h55   #1 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Localisation: Hauts de seine
Messages: 8
Envoyer un message via Yahoo à pyetre
Par défaut Comment créer une clef étrangère sous access?

Bonjour,
Débutant sur access, j'ai en charge de passer l'ancienne BDD de mon taff de works à access.
Après et malgré plusieurs lectures et relectures des pages concernées, je n'arrive toujours pas à créer via access mes clefs étrangères:

J'ai une première table (élèves) avec une clé primaire incrémenté comprenant les caractéristiques de chaque enregistrements. J'ai une seconde table (adresses) avec les adresses de ces derniers, où j'ai créé une autre clef primaire.

Mon problème est que je souhaite créer une clef étrangère dans cette table, adresse, qui correspondrait à ma première clef primaire (table client).Cependant je suis incapable de la réaliser.

Enfin, j'ai un formulaire qui fonctionne bien avec ma table client mais pas avec ma table adresse. Lors de l'enregistrement d'un nouvel élève, ma table élève est bien à jour, mais pas ma table adresse. Comment faire? Dois-je reprendre la clef primaire de ma table adresse afin de l'insérer dans mon formulaire où dois-je intégrer un sous formulaire?

Bref, je suis complètement perdu et dois être opérationnel lundi prochain...
Merci pour toute l'aide que vous pourriez m'apporter.
pyetre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 11h14   #2 (permalink)
Membre Expert
 
Avatar de Danjos
 
Date d'inscription: août 2007
Localisation: Abidjan - Côte d'Ivoire
Messages: 1 029
Par défaut

Bonjour et bienvenue sur le forum.
A bien lire ton problème, je pense que la table Adresses est liée à la table Eleves dans une relation un à plusieurs, ce qui se traduit par le fait qu'un élève peut avoir plusieurs adresses. Est ce le cas?

Si oui, je pense que tu dois mettre dans ta table Adresses, un nouveau champ de type numerique, qui ne sera rien d'autre que la clé secondaire qui lie Adresses à Eleves.

De là, la suite devient simple
__________________
Un gros problème est la somme de plusieurs petits problèmes.
Resolvez chacun des petits problèmes: vous aurez resolu le gros problème!
Danjos est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 11h34   #3 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Localisation: Hauts de seine
Messages: 8
Envoyer un message via Yahoo à pyetre
Par défaut Exact

Tu as parfaitement cerné mon problème.
J'ai beau regarder sur les divers topic, livres sur access (Foucher, pour les nuls...) Je ne parviens pas à créer cette clef secondaire. apparemment on ajout une # ou quelle est l'opération à faire.
Merci
pyetre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 11h54   #4 (permalink)
Modérateur
 
Avatar de CinePhil
 
Date d'inscription: août 2006
Localisation: Toulouse
Âge: 45
Messages: 1 314
Envoyer un message via MSN à CinePhil
Par défaut

Le principe général, à adapter à ton cas particulier :

En français :
- Un élève peut avoir de 1 à plusieurs adresses.
- Une adresse appartient à 1et 1 seul élève.

En MCD (modèle conceptuel de données, de la méthode Merise) :
Eleves -1,n----Avoir----1,1- Adresses

Ce qui donne les tables :
Eleves(ElId, ElNom, ElPrenom, ...)
Adresses(AdrId, Adr_FK_IdEleve, AdrRue, AdrVille, AdrCodePostal, ...)

FK veut dire clé étrangère (Foreign Key in english) et contient l'identificateur de l'élève auquel appartient l'adresse, c'est à dire un numéro existant déjà dans la colonne ElId de la table Eleves.

Pourquoi, dans ton premier message, mélanges-tu les notions d'élève et de client ?
__________________
Philippe Leménager.
Futur ingénieur CNAM, en CDD à l'INRA Toulouse jusqu'au 31/12 suite au stage effectué.
Je reste ouvert aux propositions d'emploi.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 11h55   #5 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Localisation: Hauts de seine
Messages: 8
Envoyer un message via Yahoo à pyetre
Par défaut Comment lier ma table adresse et élève?

Pour info, à l'heure actuelle j'ai créé un nouveau champ dans adresses. J'ai copié dans mode création ma clef primaire, l'ai collé dans adresse en modifiant le format (numauto en numérique) et ajout de # devant Code élève.
Par contre je n'ai pas d'ajout des nouveaux enregistrement sur ma table adresses alors que je l'ai sur la table élève. Donc j'en déduis que mon lien n'est pas bon (j'ai coché l'intégrité référentielle et la mise à jour des champs correspondant)
Dois je m'orienter vers une cardinalité de plusieurs à plusieurs?
pyetre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 11h57   #6 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Localisation: Hauts de seine
Messages: 8
Envoyer un message via Yahoo à pyetre
Par défaut Pas compris philippe

Ok Philippe, par contre j'ai pas compris comment je créer ce lien, cette clef externe depuis la table adresse.
Pouvez-vous m'expliquer format en numérique?...
Merci
pyetre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 12h00   #7 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Localisation: Hauts de seine
Messages: 8
Envoyer un message via Yahoo à pyetre
Par défaut Elèves et clients

Ben je savais pas comment présenté mon cas donc au départ j'avais pris le cas client.
Puis j'ai changé d'avis mais n'ai pas tout corrigé.
Par contre Philippe, je n'ai toujours pas compris comment je créer ce lien depuis ma clef secondaire (table adresse)
pyetre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 14h45   #8 (permalink)
Modérateur
 
Avatar de CinePhil
 
Date d'inscription: août 2006
Localisation: Toulouse
Âge: 45
Messages: 1 314
Envoyer un message via MSN à CinePhil
Par défaut

Quand tu crées la table adresses en ajoutant la clé étrangère, tu ne fais que créer les colonnes de ta table mais la table est vide. Elle ne se remplit pas toute seule !

Pour avoir la correspondance entre les deux tables, c'est à dire le numéro d'un élève qui apparaît dans la colonne clé étrangère de la table adresses, il faut :
- soit tout saisir à la main,
- soit utiliser les formulaires et sous-formulaires.

Un coup d'oeil aux tutoriels t'apporterait une grande aide je pense.
__________________
Philippe Leménager.
Futur ingénieur CNAM, en CDD à l'INRA Toulouse jusqu'au 31/12 suite au stage effectué.
Je reste ouvert aux propositions d'emploi.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 15h07   #9 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Localisation: Hauts de seine
Messages: 8
Envoyer un message via Yahoo à pyetre
Par défaut Merci

Effectivement, les connaissances me manquent énormément. Autant avec un pied de vigne je te produit du vin, autant en informatique je suis une bille...

Aussi quant on créé une clef secondaire dans la table adresse (1 côté élève et n côté adresse) et que l'on applique l'intégrité référentielle, je pensais que l'ajout d'un enregistrement dans la table élève, le répercutait automatiquement dans ma table adresse. Comme tu le soulignes je vais reprendre les tutoriels.

Par contre peux-tu me confirmer que la création d'un champ vide dans la table adresse, auquel j'ai collé les infos de la clef primaire de la table élève (en m'assurant qu'elles correspondent) avec la mise en lien comme défini précédemment suffit, on est-ce un bricolage néfaste?

Merci à vous tous et sûrement à bientôt après avoir repris les tutos!!!
pyetre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 15h19   #10 (permalink)
Modérateur
 
Avatar de CinePhil
 
Date d'inscription: août 2006
Localisation: Toulouse
Âge: 45
Messages: 1 314
Envoyer un message via MSN à CinePhil
Par défaut

Citation:
Envoyé par pyetre Voir le message
Par contre peux-tu me confirmer que la création d'un champ vide dans la table adresse, auquel j'ai collé les infos de la clef primaire de la table élève (en m'assurant qu'elles correspondent) avec la mise en lien comme défini précédemment suffit, on est-ce un bricolage néfaste?
Si je comprends bien, tes tables 'Eleves' et 'Adresses' sont déjà remplies de données mais il n'y a pas encore de lien entre elles ?

Si oui alors ajoute le champ de clé étrangère mais n'applique pas l'intégrité référentielle ; Access ne voudra pas puisque tu as plein de lignes qui ne sont pas encore reliées à la table 'Eleves'.

Ensuite construit un formulaire Adresses avec une liste déroulante pour choisir l'élève à qui appartient l'adresse. Voir les tutoriels pour apprendre à le faire. Et là, miracle, la colonne de clé étrangère se renseigne toute seule à chaque fois que tu choisis un élève !
Quand tu as fait le lien entre toutes les adresses et les élèves, applique l'intégrité référentielle pour les saisies futures.
__________________
Philippe Leménager.
Futur ingénieur CNAM, en CDD à l'INRA Toulouse jusqu'au 31/12 suite au stage effectué.
Je reste ouvert aux propositions d'emploi.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/08/2008, 15h24   #11 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Localisation: Hauts de seine
Messages: 8
Envoyer un message via Yahoo à pyetre
Par défaut Ok

très bien compris, je commence le taff dès maintenant et considère que le problème est résolu, je te tiens au jus en mp et merci à toi ainsi qu'à tous!!!

pyetre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 21/08/2008, 14h00   #12 (permalink)
Invité de passage
 
Date d'inscription: août 2008
Localisation: Hauts de seine
Messages: 8
Envoyer un message via Yahoo à pyetre
Par défaut Euh???


Alors là j'ai beau essayer, je n'arrive toujours pas à obtenir un lien efficace entre mes 2 tables.
J'ai même rentré les 319 codes de la clef étrangère manuellement, puis seulement appliquer l'intégrité référentiel, que neni!!!! Lors de nouveaux enregistrements, seuls la table élève est renseignée, pas la table adresse...
Peut-on m'apporter des précisions où d'autres infos?
Sincèrement
pyetre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 21/08/2008, 15h01   #13 (permalink)
Modérateur
 
Avatar de CinePhil
 
Date d'inscription: août 2006
Localisation: Toulouse
Âge: 45
Messages: 1 314
Envoyer un message via MSN à CinePhil
Par défaut

La réponse que j'ai apportée par MP :
Citation:
En 3 minutes sur Access 2003, voici les étapes que j'ai réalisées et qui fonctionnent :
1) Créer table Adresses(AdrId, AdrRue, AdrCp, AdrVille, AdrEleve) et y créer quelques lignes.

2) Créer table Eleves(ElId, ElNom) et y créer quelques lignes.

3) Ouvrir la page des relations (icône avec le dessin de trois tables reliées). Ajouter les deux tables. Tirer la colonne ElId vers la table Adresses décocher 'Appliquer l'intégrité référentielle' si c'est coché et cliquer sur OK. Enregistrer les relations.

4) Créer un formulaire avec un assistant. Choisir la table Adresses et y importer tous les champs. Accepter tout le reste par défaut.

5) Passer le formulaire en mode 'modification'. Clic droit sur la zone de texte 'AdrEleve' et choisir Remplacer par.../Liste déroulante.

6) Afficher les propriétés de la liste déroulante 'AdrEleve'. Dans l'onglet 'Données' :
- Origine source = Table/Requête
- Contenu =
Code :
SELECT Eleves.ElId, Eleves.ElNom
FROM Eleves
ORDER BY Eleves.ElNom;
- Colonne liée = 1
Et dans l'onglet 'Format' :
- Nbre colonnes = 2
- Largeurs colonnes = 0cm; 5cm

7) Passer le formulaire en mode Saisie de données et choisir pour chaque adresse l'élève à qui elle appartient.

8) Fermer le formulaire et vérifier les données dans la table Adresses : La colonne AdrEleve s'est automatiquement remplie avec les id des élèves.

9) Rouvrir les relations. Double cliquer sur le lien entre les deux tables. Cliquer sur 'Appliquer l'intégrité référentielle' et éventuellement sur les deux cases à cocher juste en dessous. Cliquer sur OK. Ca marche !
Pour saisir de nouveaux élèves et/ou de nouvelles adresses pour des élèves existants, il vaut mieux faire l'inverse et utiliser un sous-formulaire 'Adresses' dans un formulaire 'Eleves'. Voir tutoriels.
__________________
Philippe Leménager.
Futur ingénieur CNAM, en CDD à l'INRA Toulouse jusqu'au 31/12 suite au stage effectué.
Je reste ouvert aux propositions d'emploi.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > Conception

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide