Visites

   visiteurs

   visiteurs en ligne

Sujet n°227 Comment récupérer calcul sur champ dans un formulaire dans la table ayant ce même champ ?
    par data93 le 19/01/2009 : 14:03

Bonjour,

Merci de m'aider à trouver un solution à mon problème, qui doit être simple, mais j'avoue y avoir passé des heures :

j'ai un base avec 3 tables

pour 1 table, je doit récupérer un champ = Identifiant Mécecin, qui correspondant à la concaténation de 3 autres  champs présents dans ma table.

J'ai fait un formulaire  avec un calcul via générateur d'expression :

ça fonctionne très bien sur le formulaire mais je ne récupère rien dans la table correspondant pour le champ "Identifiant Médecin" ???

Comment faire

Merci d'avance

 

data93... débutante...


Réponse n° 1 par 3Stone le 19/01/2009 : 14:20
Bonjour,

Je ne comprends pas bien ou se trouve le problème décrit...

je doit récupérer un champ = Identifiant Mécecin, qui correspondant à la concaténation de 3 autres  champs présents dans ma table

Veux tu dire que dans cette table tu as 3 champs ainsi que la concaténation de ces trois champs ?
Ou bien, tu as ces trois champs et tu souhaites les récupérer tous les trois ?

Tu dis aussi avoir 3 tables... Sont-elles liées par un champ commun (clé primaire et clé externe) ?

Décris un peu plus les tables, leurs champ et ce que tu souhaites récupérer.

PS: Normalement, on utilise une simple requête "sélection" dans laquelle on sélectionne les champs désiré des tables concernées.

Cordialement,
Pierre(3stone)

Réponse n° 2 par data93 le 24/01/2009 : 20:32

Bonjour,

Merci d'avoir si rapidement apporté une réponse à ma question intilale.

J'ai de mon côté mis bien plus de temps pour élaborer un contenu le plus proche possible de mon problème.

J'ai donc une base contenant 3 tables :

-Table "Pays" avec  les champs :

- pays (clé primaire) : avec le nom de 10 pays

- code2 : correspondant à 2 chiffres  (un seul possible par pays)

code3 : correspondant à 3 chiffres  (un seul possible par pays)

-Table "Centre" avec  les champs :

- Num Centre (clé primaire) : c'est un NumAuto

- Id Centre : c'est la concaténation de => les 2 premières lettres de la Ville du centre + le code2 (récupéré via table Pays + 2 derniers numéro du tél du centre)

- Nom Centre

- Ville

- Pays (lié avec table Pays)

- Tel (champ texte)

- Fax

- Mail

-Table "Agent" avec  les champs :

- Id Centre  (clé primaire) : c'est un NumAuto

-Id Agent : c'est la concaténation de => code3 (récupéré via table Pays + " NumAgent" sur 5 digits)

- Id Centre : provenant de table Centre

- Nom Agent

-Prénom Agent

Tél direct

- Mail perso

+ 1 Centre peut avoir plusieurs Agents

ET

+ 1 Agent peut intervenir dans plusieurs Centres

=> pour moi c'est une relation plusieurs à plusieurs

J'ai fait une table intermédiaire "Identification" avec les champs ""Num Centre et "Num Agent" tous les 2 en clés primaires et qui joingnent respectivement chacune des 2 tables Centre et Agent

J'ai fait 2 formulaires pour chacune des 2 tables

J'y ai créé formules de calcul avec génératuer d'expression pour obtenir lors du remplissage formulaire les champs "Id Centre" et "Id Agent".

Les calculs fonctionnent dans les formulaires et le champ "Id Centre" est récupéré quand je bacule du formulaire "Centre" vers le formulaire "Agent" pour associer un Agent à un centret

Sauf que...je ne récupère pas les résultats de ces 2 champs calculés dans les 2 tables concernées et j'en ai besoin.

J'ai pensé à faire deux macros pour calculer ces 2 champs "Id Centre" et "Id Azent" quand les formulaires sont renseignées mais je n'y arrive pas.

 

C'est un peu long, merci si tu peux m'aider !!!

Je n'ai jamais fait un développement entier de base sur Access même si je connais ce logiciel...

Data93

Réponse n° 3 par 3Stone le 26/01/2009 : 14:46
Bonjour,

Commençons par la table pays...
Le nom, d'un pays, d'une personne ou d'autre chose, fait toujours une mauvaise clé primaire. Il vaut mieux utiliser un code pays (bien sûr unique) ou à défaut, un simple numéroauto.

La table "Centre" :
NumCentre est acceptable, si un centre n'est pas déjà défini par un code particulier qui lui est propre.
Id_Centre est un mauvaise idée, car basée sur une concaténation qui n'apporte rien, sauf des complications. En plus tu mélanges les infos de différentes tables. En fait "Id_Centre" devrait être la clé primaire, puisque ce champ est unique et identifiant du centre.

La table "Agent" :
Id_Centre n'a rien à faire dans cette table... sauf comme clé externe et dans ce cas pas en NuméroAuto.
Id_Agent... même remarques que plus haut. Concaténations qui n'apportent rien.
Second Id_Centre ??  mais qui ici est défini (je suppose) en clé externe.

Le fait qu'un agent puisse apparaitre dans plusieurs Centres et que les Centres puissent avoir plusieurs agents demande bien une table supplémentaire "T_AgentCentre".
Elle possèdera minimum les deux champs Id_Agent et Id_Centre. La sélection des deux champs sera défini comme clé primaire.
De cette façon, un agent X pourra se trouver dans le centre G, H, I, J mais pas deux fois dans le même centre... et inversément.

Note: J'écris "Id_Agent" ou "IdAgent" car il vaut mieux éviter les espaces, les caractères accentués ainsi que les noms réservés.

Je souligne encore une fois ici, l'importance des tables, de leurs champs et des relations (clé primaire et clé externe) entre les tables.
Sans de "bonnes" tables, impossible de créer une bonne base. De plus, il est quasiment impossible de faire évoluer une telle base.

Il faut obligatoirement passer par un peu de lecture, voir même réaliser l'exercice comme celui qui est décrit ici.

Cordialement,
Pierre(3stone)

Réponse n° 4 par data93 le 27/01/2009 : 01:07

Bonjour,

 

J'ai fait une erreur car dans la table "Agent", je parlais en premier de "Num Centre" en clée primaire avec Num Auto.

J'ai bien fait une troisième table Index pour faire la relation plusieurs à plusieurs avec les 2 clés primaires suivantes :

- Num Centre : numérique, index avec doublon

et

- Num Agent : numérique, index avec doublon

Je dois faire la saisie (cela m'est imposé...) d'un nouvel Agent (ou de plusierus) en étant sur un formulaire Centre.

J'ai donc fait un formulaire Centre avec un sous formulaire Agent mais comment lier mon SF à mon Formulaire étant donné qu'ils n'ont pas de champs communs et qu'ils sont liés entre eux par la table précédente Index ?

Voilà, c'est peut-être tout simple mais je ne trouve pas et j'ai bien lu ton exercice mais je n'arrive pas à transposer ?

Peux-tu m'aider, STP ?

Merci

Data 93

 

 

Réponse n° 5 par 3Stone le 27/01/2009 : 14:34
Bonjour,

As-tu bien créé les relations entre les tables ?
- de clé primaire vers la clé externe...

Il faut également activer l'intégrité référencielle et la mise à jour en cascade pour ces relations.

Ensuite, dans la table de jonction, celle qui contient NumAgent et NumCentre, il faut sélectionner les deux champs via le sélecteur et en faire la clé primaire.

Vu que tu "dois" wink travailler sur le formulaire "frmCentres", tu appelleras le petit formulaire dans lequel du crées la jonction (la désignation Agent <-> Centre) via un bouton.

Cordialement,
Pierre(3stone)

Réponse n° 6 par data93 le 27/01/2009 : 16:39

Bonjour,

Oui, j'ai bien créé :

les relations entre les tables de clé primaire vers la clé externe et activé l'intégrité référencielle avec la mise à jour en cascade pour ces relations.

Dans la table de jonction, celle qui contient NumAgent et NumCentre,j'ai aussi sélectionné les deux champs via le sélecteur pour en faire la clé primaire.

Masi quand tu dis :

"tu appelleras le petit formulaire dans lequel du crées la jonction (la désignation Agent <-> Centre) via un bouton."

Je crée un bouton sur le formulaire "Centre" et j'ouvre le formulaire "Agent" mais je ne vois pas comment créer la jonction Agent <-> Centre ?

En plus, je dois donc créer un bouton pour pouvoir créer un nouvel agent mais aussi un autre pour pouvoir rattacher un agent existant déjà sur un centre X à un autre centre Y...


Tout cela devient compliqué mais je n'ai pas le choix...

Merci pour ton aide.

Data93

Réponse n° 7 par 3Stone le 28/01/2009 : 15:17
Bonjour,

Avec un formulaire et un sous-formulaire, chacun ayant sa table comme source, tu pourrais par exemple saisir des agents (dans le sous-formulaire) et les centres (dans le formulaire principal). Mais dans ce cas, tu as une liaison 1 (centre) à plusieurs (agents).

Si tu veux travailler sur le formulaire frmCentres, il faut que tu puisses définir quel(s) agent(s) sera "rattaché" au centre courant (celui qui est affiché).

Soit tu ouvre un autre petit formulaire (via un bouton) pour sélectionner l'agent que tu souhaites attacher au centre. Soit tu installe une liste déroulante qui te permette cela.

Ne pas oublier qu'il te faudras bien avoir un formulaire via lequel tu saisiras directement les agents... avant qu'il soient liés à un quelconque centre.

PS: Si tu n'as jamais créé de base, commence par faire des choses simples... comme une liaison de 1 à plusieurs. Cela permet d'apprendre progressivement.

Pour des "cours" d'Access, je ne peux que te conseiller de visiter ce site sur lequel tu trouveras des "sites à visiter", y compris des sites avec exercices pour débutants.

Cordialement,
Pierre(3stone)

Recherche



Préférences

Se reconnecter
---

Votre nom (ou pseudo) :

Votre code secret


 Nombre de membres 1 membre


Connectés :

( personne )

Haut