Implanter un sous-état dans un état

Image non disponible

Souvent, le besoin se fait sentir d'afficher toutes les données liées à une information "maître" dans un même objet (formulaire ou état). Cet article se propose donc d'expliquer la démarche à suivre pour mettre en place dans un seul état, cette relation de type "un à plusieurs". Ce tutoriel s'adresse aux débutants.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. INTRODUCTION

Souvent, le besoin se fait sentir d'afficher toutes les données liées à une information "maître". Les exemples concrets ne manquent pas : détail d'une facture, détail d'une commande, liste des articles d'un fournisseur, etc ...
Je vais donc, au long de ce tutoriel, vous présenter la démarche à suivre pour créer ce genre d'objet sous Access.

II. PRESENTATION DU PROJET

II-A. Le cahier des charges

Pour illustrer ce propos, je vous propose de faire un courrier qui rappelle aux adhérents indélicats la liste des livres empruntés dans notre bibliothèque et qui, suite à un oubli, ont omis de les rendre à la date prévue.
Dans la liste des ouvrages non rendus, on trouvera :
          - le titre du livre.
          - Le nom et le prénom de l'auteur concaténés.
          - la date de l'emprunt.
          - la date de retour prévue.
          - le nombre de jours de retard.
          - l'amende à payer. (on considèrera 0.10 € par jour de retard).

A noter que la date de retour prévue est une date calculée par l'application et fait donc partie de la table des emprunts.
Vous trouverez la base de travail à la fin de l'article dans le chapitre "TELECHARGEMENT".

II-B. Les tables en jeu

Afin de réaliser notre projet nous utiliserons plusieurs tables :

Nom de la table Description Relation
T_Ouvrages Table qui contient les données de l'ouvrage. CodeLivre -> Clé Primaire.
CodeAuteur -> Clé étrangère en liaison avec la table T_Auteurs.
T_Auteurs Table qui contient les caractéristiques des auteurs. CodeAuteur -> Clé Primaire.
T_Adherents Table qui contient les informations concernant des adhérents de la bibliothèque. CodeAdherent -> Clé Primaire.
T_Emprunts Table qui contient la date d'emprunt, de retour prévue et un champ "Rendu" de type booléen. CodeLivre - > Clé étrangère en liaison avec la table T_Ouvrages.
CodeAdherent -> Clé étrangère en liaison avec la table T_Adherents.

II-C. Les sources de nos états

Chaque état aura sa propre source mais toutes les deux auront un champ commun.
En effet, l'état principal doit nous afficher les coordonnées de notre adhérent et le sous-état doit nous lister les livres non rendus par le même adhérent. Nous retrouverons donc dans chaque requête le champ "CodeAdherent"

II-C-1. Requête Source de l'état principal

Image non disponible

Cette requête nous donne la liste des adresses des adhérents concernés. Elle appelle trois remarques :
          1) J'ai créé un champ calculé pour concaténer le nom et le prénom de l'adhérent.
              Cela permettra de ne manipuler qu'un seul champ au lieu de deux dans l'état.
          2) J'ai créé un champ calculé pour concaténer le code postal et la ville de l'adhérent.
              Même raison que ci-dessus.
          3) Le champ DateRetour n'est pas affiché. En effet, la requête m'affiche autant d'enregistrements d'adhérents qu'il y a de livres non rendus.
              Il nous faut donc paramétrer les propriétés de la requête pour masquer les doublons.

Pour modifier les propriétés de la requête :
Cliquez droit dans la zone de tables puis cliquez sur la commande "Propriétés".
Paramétrez la propriété "Valeurs distinctes" sur OUI.

II-C-2. Requête Source du sous-état

Image non disponible

Cette requête nous donne la liste des ouvrages non rendus à temps pour chaque adhérent. Je ferai 6 observations sur celle-ci :
          1) On retrouve le champ "CodeAdherent" qui servira de lien avec le champ "CodeAdherent" de l'état principal.
          2) J'ai créé un champ calculé pour concaténer les infos de l'auteur.
              Cela permettra de ne manipuler qu'un seul champ dans l'état.
          3) Le champ "DateRetour" est affiché dans la requête. En effet, il doit être affiché dans l'état.
          4) J'ai créé un champ "Retard" pour le nombre de jours de retard.
          5) J'ai créé un champ "Pénalité" pour indiquer le montant de l'amende due (0.10 € par jour de retard).
          6) Le champ "Rendu" nous sert bien sûr de critère de sélection.

D'autre part, on peut remarquer que les données du champ "Retard" sont formatées (exemple : 76 jours).
Pour parvenir à ce résultat, cliquez droit sur le champ "Pénalité" puis affichez les propriétés.
Dans la ligne "Format", tapez le code suivant : 0" jours"

Nous avons préparé les sources de nos différents états, il ne nous reste maintenant qu'à les mettre en forme.

III. REALISATION DES ETATS

III-A. Préparation du sous-état

Voici ci-contre l'aperçu du sous-état des ouvrages non rendus.
Il présente ici la liste de tous les ouvrages concernés, tous adhérents confondus.
On remarquera également le cumul des pénalités qui se mettra à jour en fonction de chaque adhérent lors de l'impression.

Voici l'état en mode création. J'aurai deux remarques importantes à faire :
          - Le champ "CodeAdherent" qui permettra de faire le lien avec l'état principal n'est pas intégré de l'état.
          - Pour faire apparaître les titres du sous-état, il est nécessaire de les implanter dans l'entête d'état.

Pour retrouver comment organiser vos contrôles sur votre état, je vous renvoie à l'article : Créer un état

III-B. Préparation état principal

Image non disponible Image non disponible
Aperçu de l'état principal Structure de l'état principal

On peut faire plusieurs remarques par rapport à la structure de l'état principal :
          1) Implantation des champs de la requête source de l'état principal.
              Le champ "CodeAdherent" n'est toujours pas implanté.
          2) On utilise le champ de type Etiquette (bouton Aa dans la boîte à outils) pour créer les textes fixes.
          3) L'espace pour le sous-état a été réservé. Le cadre sera supprimé au moment de l'implantation.
          4) Un nouveau champ de type Etiquette a été créé. On remarquera que pour créer des paragraphes dans l'étiquette on appliquera le raccourci clavier : SHIFT + ENTREE.
          5) La ligne des salutations n'est pas une étiquette mais une zone Texte (bouton ab dans la boîte à outils).
              En effet, il y a une concaténation de texte fixe avec le champ Civilité.

III-C. Implantation du sous-état

Il ne nous reste maintenant qu'à implanter le sous-état dans l'état principal. Cette opération se déroulera en 3 étapes.

Etape 1

Mettre la fenêtre de base de données et l'état en mode création en fenêtre côte à côte.
Cliquez maintenu sur le nom du sous-état et le glisser dans l'état principal en cours de création.

Etape 2

Le sous-état implanté développe un espace dont les mesures correspondent à ses dimensions.
On peut, si on le désire enlever l'étiquette ou en modifier le texte.

Etape 3

Il ne nous reste qu'à paramétrer la liaison entre l'état principal et le sous-état.
En cliquant droit sur le bord du cadre du sous-état, demandez l'affichage des propriétés.
Par l'onglet "Données", on retrouve les deux propriétés qui permettront d'établir le lien.
          - Champs Fils : contiendra le ou les champs liés (séparés par ;) de la source du sous-état. (Côté plusieurs de la relation).
          - Champs Père : contiendra le ou les champs liés (séparés par ;) de la source de l'état principal. (Côté 1 de la relation).  
En cliquant dans l'une des deux propriétés puis sur le bouton visible à droite de la propriété, Access ouvre une boîte de dialogue permettant d'indiquer les champs à lier.
Dans notre exemple, indiquez dans les deux listes le champ "CodeAdherent".

Il est possible de saisir directement les noms des champs Père et Fils dans les lignes correspondantes.

IV. CONCLUSION

Ce petit article vient en complément de Création d'un état afin de vous rendre autonome sur la création de ce type d'objet.

V. TELECHARGEMENT

Cliquez sur ce lien pour récupérer la base exemple

VI. REMERCIEMENTS

Un grand merci à fabsnz, Dolphy35, Starec pour leur relecture attentive.
Ainsi que Loufab pour ses encouragements. Je voudrais remercier l'ensemble de l'équipe DVP pour son travail énorme qui a fait de Developpez.com ce qu'il est aujourd'hui et qui nous tire toujours vers le haut.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2008 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.