Insérer champ calculé dans un sous-formulaire (Access 2010) [Résolu/Fermé]

Signaler
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
-
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
-
Bonjour,

J'ai trois tables T_mère, T_accouchement et T_bb.

J'ai créé une requête (R_agemere) dans laquelle je calcule l'âge de la mère au moment de l'accouchement --> Diffdate("aaaa";[DDN mère];[Date accouchement]).

Je dois créer un formulaire de saisie ayant pour principal la T_mère, puis deux sous-formulaires, respectivement associés à T_accouchement et à T_bb.

J'aimerais ensuite que quelque part dans mon formulaire (idéalement dans le sous-formulaire de T_accouchement) on retrouve le résultat du champ calculé de la requête. (Ou d'une autre façon, si la requête n'est pas nécessaire...)

Ainsi, lorsque l'infirmière entrera la date de l'accouchement, l'âge de la mère s'inscrirait.

Je n'y parviens pas. J'ai essayé de créer un sous-sous-formulaire, mais Access ne semble pas le supporter (plante chaque fois). J'ai réussi à ajouter le champ dans la section du formulaire principal, mais ça ne convient pas, car tant qu'il n'y a pas d'accouchement, l'âge de la mère ne se calcule pas, et la T_mère contient les données permanentes (invariables) de la mère. L'âge au moment de l'accouchement devrait se trouver dans la T_accouchement, mais on n'y retrouve pas la date de naissance de la mère (qui est dans la T_mère - et doit y rester).

Enfin, j'espère que je suis assez claire!!!

Merci à l'avance!

2 réponses

Bonjour,
Plusieurs choses!
1) J'ai essayé de créer un sous-sous-formulaire, mais Access ne semble pas le supporter (plante chaque fois)
Les anciennes version de Access descendaient jusqu'à 15 (quinze) niveaux de s/s formulaires. A titre perso je suis allé jusqu'à 4. Assez difficile à articuler; alors 15 !!!! Donc ton problème ne vient pas de Access, mais plutôt du manque de maîtrise.
2) Les formulaires, s/s formulaires, états, etc , ne sont que des présentations des tables et des requêtes. Donc, il est nécessaire de faire tous ses calculs et recherches de données avec des requêtes, et seulement quand tout va bien les mettre en formulaire et états.
3) Pour ton problème, si je comprends bien, il te faut 2 niveaux de requêtes, un niveau "Mère" et un niveau "Accouchement" puisque les mères accouchent (peuvent) plusieurs fois et chaque fois à des âges différents.
Le mieux, il me semble, est de prévoir dans la 2ème requête, un champ "DDNMere" pour avoir un champ calculé "AgeMere = Annee(DAccoucht - DDNMere)"
Attention: Prévoir un champ "IdMere" dans la 2ème requête, pour faire la liaison avec l'"IdMere" de la table "TMere"
4) Pour la table "TBb", tu peux prévoir éventuellement, 2 champs de liaisons, "IdMere" et "IdAccoucht", pour rattacher les bébés à leur mère et à leur accouchement, mais ce n'est pas obligé parce chacun est déjà relié à un accouchement et chaque accouchement est relié à une mère. Le reste n'est qu'un peu de savoir-faire.
Avant de te lancer dans les formulaires et s/s formulaires, valide tes requêtes, il sera bien temps de t'occuper des façades quand la structure sera au point.
Bonne suite
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Premièrement, je m'en vais en vacances, alors je verrai tout ça à mon retour...
1. J'ai essayé à la maison et j'ai pu créer les trois niveaux de sous-formulaire - avec le même fichier. (Ce n'est donc pas un manque de maîtrise (même si je ne me prétends pas experte!) Le problème est donc au bureau (logiciel instable, mémoire vive insuffisante?), je verrai avec le tech.
2. et 3. J'ai bel et bien effectué le calcul dans une requête et ça fonctionne, mais je cherche un moyen pour que l'infirmière puisse VOIR s'afficher l'âge de la patiente lors de l'accouchement, lorsqu'elle saisit des données. Les infirmières ne manipuleront pas de requêtes, seulement des formulaires.
(Par ailleurs, j'aurai aussi besoin d'afficher cette même donnée calculée dans un état, mais je ne suis pas rendue là...)
4. J'ai déjà une relation mère à accouchement (via n° dossier mère, clé primaire) et une relation accouchement à bébé (via clé n° incrémenté de l'acc.), cette logique, je l'avais déjà.
Je n'ai aucune autre requête à créer, je suis bien à l'étape des formulaires, mes tables sont complétées. Mes formulaires fonctionnent très bien, mais il ne me manque que la donnée calculée Age_mere.
Je ne vois pas de solution dans votre réponse. Merci quand même!
D'ici mon retour, est-ce que quelqu'un a une meilleure idée...???
Pour l'instant... c'est le temps des vacances!!!
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Ah oui, la date de l'accouchement, elle est dans bébé (T_bb) et non dans l'accouchement comme tel (T_acc), car il peut y avoir deux bébés dans un même accouchement, à deux heures différentes, voire à deux dates différentes si jamais le premier naît peu avant minuit. Il y a pas mal de réflexion derrière ma structure!
Re-... et bonne vacances (ou en espérant que vous avez passé de bonnes vacances).
"je cherche un moyen pour que l'infirmière puisse VOIR s'afficher l'âge de la patiente lors de l'accouchement, lorsqu'elle saisit des données"
Dans ce cas effectivement il faut calculer immédiatement l'âge. La seule chose est que c'est un peu compliqué, parce que si on relance la requête principale pour qu'elle recalcule les nouvelles données, elle réinitialise tout, y compris l'ordre et l'ensemble des données. Aussi la seule manière est de mettre un contrôle calculé dans le formulaire qui s'actualise soit à l'entrée de la donnée soit en forçant par un click.
J'opterais pour un petit bout de code placé dans un module standard, ou un module de classe, pour pouvoir l'appeler à différentes étapes de l'entrée des données.

Function AgeParturiente()
DNMere = Screen.ActiveForm![DateDNMere]
DAcc = Screen.ActiveForm!SsFormAcc.Form![DateAcc]
Age = Year(DAcc - DNMere ) - 1899
Screen.ActiveForm!SsFormAcc.Form![AgePartur]


En plaçant ce petit code sur la propriété AprèsMaj du sous-formulaire "Accouchement", ça devrait marcher. Mais il faut que le contrôle "AgePartur" soit indépendant
Mais le problème est que vous n'aurez que l'âge au moment du dernier accouchement parce que les autres ne pourront pas être calculés; ils ne pourront l'être qu'à partir de la requête source. En fait il y a conflit entre les 2, et je n'y vois pas d'autres solutions que d'avoir 2 contrôles pourle calcul de l'age, un par le biais de la requête et l'autre par le moyen d'un calcul indépendant.
Pour l'état c'est beaucoup plus simple parce qu'il suffit d'utiliser le calcul dans la requête en utilisant la formule que j'ai donnée:
Age = Year(DAcc - DNMere) - 1899
Bonne suite
Dans l'exemple de code, j'ai oublié la dernière ligne:
End function
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Merci! Je vais donc me contenter de ma simple requête, pour le moment. Je verrai pour l'état par la suite (pas rendue là)...