Initiation aux bases de donnes et la programmation
Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 11 Support de cours rédigé par Bernard COFFIN Université Paris 10 – Nanterre 2007/2008 1
Le formulaire est une interface destinée à des traitements conversationnels (traitements qui utilisent le clavier, la souris et l’écran) Il est possible d’en imprimer le contenu, mais le résultat n’est pas facilement contrôlable L’état (en anglais Report) est une interface destinée à des impressions Le contenu de l’état peut être affiché sur l’écran (ouverture en prévisualisation), mais le clavier et la souris sont sans effet (pas d’événement qui leur soit lié) 2
L’état est fait pour imprimer des informations issues de la base de données Il a une propriété source C’est une requête (en SQL) dont le résultat est la relation associée à l’état 3
Comme le formulaire, l’état est un objet complexe Ses éléments sont des contrôles On n’utilise que ceux qui ne nécessitent pas d’action de l’utilisateur : • Étiquettes • Zones de texte liées (à un champ de la source de l’état ou par une formule – Cf. cours N° 8, diapo N° 23) • Sous-état 4
L’état est divisé en trois niveaux (appellation non contrôlée) Chaque niveau est divisé en sections : en-tête contenu du niveau pied Le contenu permet décrit l’impression d’enregistrements de la relation source L’en-tête et le pied décrivent l’impression d’informations communes à l’ensemble des enregistrements du contenu du niveau Les trois niveaux : état page (dans le contenu de l’état) groupe (dans le contenu de la page ; un groupe peut en contenir un autre) La section contenu du niveau le plus bas (page ou groupe qui ne contient pas d’autre groupe) s’appelle « détail » sur la grille de création 5
Affichage sur la grille de création Lors de l’ouverture, seul le niveau « page » est affiché en-tête de page détail (contenu de la page) pied de page L’affichage du niveau « état » (sections en-tête et pied) se fait par la commande Affichage de ACCESS Mais les noms affichés sur la grille de construction sont Remarque : appliquée aux formulaires, la même commande bien ACCESS permet d’afficher des sections en-têtes et pieds de page • En-tête d’état ou de formulaire • Pied d’état L’utilisation est la même que pour un état L’option de commande est « en tête/pied de rapport » (traduction littérale de « report » ) Essentiellement pour un affichage en mode continu 6
Affichage sur la grille de création (suite) Les groupes se définissent au moyen d’une commande d’ACCESS Attention à l’icône : les groupes sont imbriqués les uns dans les autres, ils ne peuvent pas se suivre Pour une présentation séquentielle d’informations groupées, il faut utiliser des sous-états 7
Utilisation des sections A chaque niveau, la section contenu décrit l’impression de plusieurs enregistrements de la relation source (cas général) Les sections en-tête et pied de ce niveau décrivent l’impression • des informations de mise en page Utilisation • d’étiquettes • des informations qui concernent l’ensemble des enregistrements décrits dans la section contenu • de zones de texte liées Utilisation • d’étiquettes • de fonctions de mise en page (voir le diaporama de construction des états) Utilisation • de sous-états • de fonctions statistiques sur l’ensemble des enregistrements de la section contenu • de sous-états ayant pour source les requêtes statistiques ad hoc 8
La section détail Sert à décrire l’impression des enregistrements de la relation source Une fois décrite la relation, on place sur la grille de construction des zones de texte liées aux champs dont on veut imprimer le contenu On ne décrit qu’un enregistrement Ce modèle sera utilisé pour tous les enregistrements, les uns après les autres 9
Premier exemple Schéma de la base de données utilisée tab. Formation tab. Etudiant CP : N° formation CP : N° étudiant Nom formation CE : Formation suivie Niveau Nom Prénom Construire un état imprimant les identités des étudiants (nom et prénom) et le nom de la formation suivie 10
Source de l’état : SELECT [Nom formation], Nom & " " & Prénom AS Identité FROM tab. Formation, tab. Etudiant WHERE [N° formation]=[Formation suivie]; Étiquette Zones de texte ayant pour sources les champs Informations de mise en page de la relation Fonction Informations fournies par ACCESS 11
Résultat obtenu En-tête Détail Les enregistrements ne sont pas classés (pas de clause Order By) On utilise un autre outil pour trier les informations imprimées Pied de page 12
Groupe Attention ! ce terme ne doit pas être confondu avec la notion d’agrégation (clause Group By) étudiée au cours N° 8 Le regroupement dans un état consiste à • rassembler des enregistrements ayant des informations communes (un ou plusieurs champs) • ces informations communes permettent de construire un nouveau niveau de données (groupe portant le nom de ces informations communes) • décrire ces informations communes dans les sections en-tête et pied du groupe • décrire les autres informations de ces enregistrements dans la section contenu du groupe • pour décrire ces informations, on peut recourir à un nouveau groupe, etc. • Rappel : la section contenu du dernier groupe (à l’intérieur de 13 tous les autres) s’appelle détail
Classement des étudiants par formation Fenêtre de choix des critères de regroupement Permet aussi de décrire des tris (rend la clause Order BY inutile Il faut regrouper les enregistrements qui correspondent à la même dans la requête de description de Le choix de l’option « oui » formation la relation source) génère une nouvelle section Sélection ou frappe des critères Même chose pour le Pied de groupe (dans une expression, utiliser des crochets pour les noms symboliques) Déplacer le contrôle lié au champ [Nom formation] dans l’en-tête 14
15
Les sous-états Le principe est le même que pour les sous-formulaires 1. On crée un contrôle sous-état (même outil que sous-formulaire) 2. On établit un lien avec un état préalablement construit ; on utilise pour ça la propriété objet source du contrôle 3. On lie l’état et le sous-état par des couples champ père / champ fils 16
Construction d’un état des commandes regroupées par client tab. Adresse Reprise de l’exemple du cours N° 7 (certains noms symboliques ont été modifiés) CP : N° adresse CE : Client concerné tab. Client Adresse livraison tab. Produit CP : N° client CP : N° produit Nom client Prénom client Nom produit Description Adresse client PU HT tab. Commande CP : N° Commande CE : Réf Client Date commande tab. Ligne_commande CP : CE : Réf Commande CE : Réf adresse livraison CE : Réf Produit Qté_commandée 17
Construction d’un état des commandes regroupées par client L’état a pour source : SELECT * FROM tab. Client, tab. Commande WHERE réf_client=[N° client]; En fait on n’a pas besoin de tous les champs de tab. Commande, seul la clef primaire est indispensable, mais la requête est plus simple à écrire ainsi… Les enregistrements seront regroupés par Client. On fait donc de la clef primaire [N° client] un critère de regroupement (avec En-tête de groupe et Pied de groupe) Dans l’En-tête de groupe on décrit l’impression des champs de tab. Client Dans la section Détail, on imprime le N° de la commande, un sous-état décrivant le détail de la commande, et enfin un second sous-état décrivant l’impression du montant total de la commande Dans le pied de groupe on place un contrôle de « saut de page » , qui permet de ne pas avoir les commandes de plusieurs clients sur la même page 18
On commence par créer les sous-états 1. État décrivant le détail d’une commande Source de l’état : SELECT * FROM tab. Ligne_commande, tab. Adresse, tab. Produit WHERE [N° adresse]=réf_adresse_livraison And [N° produit]=réf_produit; Étiquettes (les données apparaîtront en colonnes) Regroupement sur les adresses de livraison L’en-tête et le pied de page sont vides : ils ne sont pas imprimés dans un sous-état (c’est l’état principal qui décrit ces sections) Formule : = Qté_commandé * [PU HT] 19
On commence par créer les sous-états 2. État décrivant le montant total d’une commande Source de l’état : SELECT Réf_commande, sum(Qté_commandée*[PU HT]) AS Total_commande_HT FROM tab. Ligne_commande, tab. Produit WHERE Réf_produit=[N° Produit] GROUP BY Réf_commande; Le résultat du calcul sur agrégation est la seule donnée imprimée par l’état 20
Ensuite on décrit l’état principal en utilisant des contrôles sous-états Champs communs à tous les enregistrements regroupés Sous-état Contrôle saut de page Sous-état Objet lié : État total commande Champ père : [N° commande] Champ fils : [Réf_commande] Objet lié : État détail commande Champ père : [N° commande] Champ fils : [Réf_commande] 21
22
Ouverture d’un état à partir d’un formulaire On utilise une procédure événementielle (par exemple liée à un bouton de commande) La commande utilisée en VBA est une méthode de l’objet Do. Cmd : Do. Cmd. Open. Report Il est possible d’utiliser les valeurs des contrôles du formulaire pour des restrictions dans la requête source de l’état Il est aussi possible d’utiliser une clause Where comme argument de la méthode Open. Report (c’est également possible pour Open. Form) 23
Propriétés de la zone de liste déroulante : Nom : Choix_client Contenu : SELECT [N° client], [Nom client] & " " & [Prénom client] FROM tab. Client ORDER BY [Nom client], [Prénom client]; Colonne liée : 1 Nombre de colonnes : 2 Largeurs colonnes : 0 cm; 8 cm Propriétés de la zone de liste déroulante : Nom : Choix_commande Contenu : SELECT [N° commande], [N° commande] & " du " & [date commande] FROM tab. Commande WHERE Réf_client=Choix_client. value; Colonne liée : 1 Nombre de colonnes : 2 Largeurs colonnes : 0 cm; 8 cm 24
Procédures événementielles Option Compare Database Premier argument : Deuxième argument : nom de l’état Mode d’ouverture Private Sub bt. Fermer_Click() Do. Cmd. Close End Sub Private Sub bt. Impression_Click() Do. Cmd. Open. Report "Liste commandes par client", ac. View. Normal, , _ "[N° commande] = forms![impression commande]!Choix_commande. Value" End Sub Private Sub bt. Prévisualisation_Click() Do. Cmd. Open. Report "Liste commandes par client", ac. View. Preview, , _ "[N° commande] = forms![impression commande]!Choix_commande. Value" End Sub Troisième argument : Private Sub Choix_client_After. Update() Choix_commande. Requery End Sub Quatrième argument : Filtre (pas au programme de ce cours) Restriction (clause Where sans le mot Where » ) 25
Click 26
- Slides: 26