1 Initiation aux bases de données et à la programmation événementielle Cours N°9 : Gestion de la cohérence avec des sous-formulaires. Support de cours.

Slides:



Advertisements
Présentations similaires
Bratec Martin ..
Advertisements

NOTIFICATION ÉLECTRONIQUE
Fragilité : une notion fragile ?
SEMINAIRE DU 10 AVRIL 2010 programmation du futur Hôtel de Ville
Phono-sémantique différentielle des monosyllabes italiens
MAGGIO 1967 BOLOGNA - CERVIA ANOMALIES DU SOMMEIL CHEZ L'HOMME
droit + pub = ? vincent gautrais professeur agrégé – avocat
Transcription de la présentation:

1 Initiation aux bases de données et à la programmation événementielle Cours N°9 : Gestion de la cohérence avec des sous-formulaires. Support de cours de Soheib BAARIR*. Page web : pagesperso-systeme.lip6.fr/Souheib.Baarir/bdvba/support.htm Université Paris Ouest Nanterre la Défense * Adapté du cours de B. COFFIN. Reproduction interdite sans autorisation écrite de lauteur.

2 Sous-formulaire Un formulaire est un objet complexe composé de contrôles. Un formulaire peut être lui-même un contrôle dun autre formulaire. on parle alors de sous-formulaire. Si le formulaire et le sous-formulaire ont chacun une relation source, alors ils peuvent être liés. Une valeur dun champ de lun correspond à une valeur dun champ de lautre.

3 Un premier exemple Formulaire Principal Sous- Formulaire

4 1.Un sous-formulaire lié permet de gérer automatiquement un lien logique lors de la création des enregistrements. 2.Un sous-formulaire indépendant permet dafficher des informations complémentaires à celles du formulaire principal. Par exemple, il permet dafficher le détail dun enregistrement dune table après la saisie de sa clef (pour vérifier quil existe et que cest bien celui qui est cherché). Ce sont deux nouvelles façons de gérer la cohérence de la base de données. Sous-formulaire : lié / indépendant

5 Construction dun Sous-formulaire Cest un contrôle dun formulaire que nous appelons formulaire principal. On le crée en le dessinant sur la grille de construction du formulaire principal. Dans la propriété « objet source » on saisit le nom du formulaire qui doit être inséré dans le formulaire principal. Donc, le sous-formulaire doit avoir été construit avant… pour pouvoir devenir sous-formulaire.

6 Lien entre le formulaire principal et son sous-formulaire Le lien se fait : 1.Entre enregistrements : utilisation des propriétés « champs pères » et « champs fils » du contrôle sous-formulaire. 2.Par lintermédiaire de la requête décrivant la relation source du sous-formulaire.

7 Sous-formulaire lié Le lien avec le formulaire principal est la réalisation dun lien logique. Il faut que la source du formulaire principal soit construite sur une relation « père ». La relation source du formulaire qui est lui-même lobjet source du contrôle sous-formulaire doit être construite sur une relation « fils ». La valeur attribuée à la propriété « champs pères » du contrôle sous-formulaire doit être le nom de la clef primaire de la table (relation) père. La valeur attribuée à la propriété « champs fils » du contrôle sous-formulaire doit être le nom de la clef externe correspondante dans la table (relation) fils.

8 Exemple extrait dune base de données gérant lapprovisionnement dune entreprise. Table pour les fournisseurs : tabFournisseur. Table pour les produits : tabProduit. Un produit ne peut venir que dun fournisseur. On est bien dans un lien père/fils : Père : tabFournisseur. Fils : tabProduit. En général on saisit à la fois un nouveau fournisseur et ses premiers produits. Lergonomie de ce traitement est bien adaptée à un formulaire comprenant un sous-formulaire Exemple Sous-formulaire lié

9 tabFournisseur : [Code fournisseur] – texte de 6 caractères; clef primaire [Nom fournisseur] – texte de 50 caractères [Adresse fournisseur] – texte de 100 caractères [Ville] – texte de 50 caractères [Code postal] – entier long Exemple : création des tables tabProduit : [N° produit] – NuméroAuto ; clef primaire [Libellé produit] – texte de 50 caractères [Commentaire] – texte de 255 caractères [Référence fournisseur] – texte de 6 caractères ; clef externe; [Prix achat] – monétaire

10 FormProduit : Source : Select * From tabProduit Order BY [Libellé produit]; Zones de textes : ztLibellé, ztCommentaire, ztPrix liées respectivement aux trois champs [Libellé produit], [Commentaire], [Prix achat] Pas de contrôle pour la clef primaire et la clef externe (gérées automatiquement). Exemple : Formulaire produit

11 FormFournisseur : Source : Select * From tabFournisseur Order By [Nom Fournisseur], [Code postal], Ville; Cinq zones de textes : ztCode_fournisseur, ztNom_fournisseur, ztAdresse, ztCode_postal, ztVille liées respectivement aux quatre champs [Code fournisseur],[Nom fournisseur], [Adresse fournisseur], [Code postal] et [Ville] Le contrôle lié à la clef primaire est nécessaire parce que le type de cette clef nest pas NuméroAuto : cest à lutilisateur de le fournir (à moins quon ne prévoie un algorithme…). Un contrôle sous-formulaire sfProduits pour la saisie des produits du fournisseur. Exemple : Formulaire fournisseur

12 Exemple : Formulaire fournisseur (suite) Propriétés du contrôle sfProduits. Objet source : formProduit Champs pères : [Code fournisseur] Champs fils : [Référence fournisseur]

13 Exemple : Formulaire fournisseur (fin)

14 Exemple : Formulaire complet

15 Sous-formulaire indépendant Le lien avec le formulaire principal doit être géré par lapplication. On lutilise pour afficher des informations complexes en liaison avec le contenu du formulaire principal. Le lien se fait par lintermédiaire dune clause de restriction sur la requête de description de la relation source du sous- formulaire. La programmation événementielle gère lutilisation du sous- formulaire.

16 Construction dun formulaire permettant lajout dun produit (le fournisseur étant déjà enregistré) – formAjout_produit – la relation source est construite sur la table « fils » tabProduit. Lutilisateur doit saisir directement le code du fournisseur (connu) dans la zone de texte ztRéférence_fournisseur (liée à la clef externe [Référence fournisseur]). Lapplication doit alors afficher la description complète de lenregistrement du fournisseur correspondant au code saisi (lutilisateur pouvant alors mettre à jour une partie des données). Le contrôle utilisé pour ça est un sous-formulaire dont la relation source est construite sur la table « père » tabFournisseur. Le lien entre le formulaire principal et le sous-formulaire se fait par lintermédiaire de la requête de la source du sous-formulaire. Exemple sous-formulaire indépendant

17 formAfficher_fournisseur : Source : SELECT * FROM tabFournisseur WHERE [code fournisseur] = forms!formAjout_produit!ztRéférence_fournisseur ; Une zone de texte liée à chacun des champs (sauf la clef primaire qui doit être égale au contenu du contrôle ztRéférence_fournisseur du formulaire principal). Exemple : construction du sous- formulaire indépendant

18 formAjout_produit : Source : SELECT * FROM tabProduit; Une zone de texte liée à chacun des champs (sauf la clef primaire qui est gérée par lapplication – NuméroAuto) Un contrôle sous-formulaire sfFournisseur Objet lié : formAfficher_fournisseur Pas de lien « champs pères » / « champs fils » ! Le lien se fait par lintermédiaire de la requête source du formulaire formAfficher_fournisseur Exemple : construction du formulaire principale

19 Exemple : formulaire complet

20 Elle concerne uniquement le formulaire principal formAjout_produit. Lors de louverture du formulaire, il faut se placer sur un nouvel enregistrement (derrière ceux qui existent déjà) Private Sub Form_Load() DoCmd.GoToRecord acDataForm, "formAjout_produit", acNewRec ´ on peut laisser vide les deux premiers arguments ´ parce quil sagit de lobjet actif ; on écrit alors ´ DoCmd.GoToRecord,, acNewRec End Sub Exemple : Programmation des gestionnaires dévènements (1/3)

21 Exemple : Programmation des gestionnaires dévènements (2/3)

22 Après modification de la valeur de la zone de texte ztRéférence_fournisseur, il faut mettre à jour le contenu du contrôle sous- formulaire. Private Sub ztRéférence_fournisseur_AfterUpdate sfFournisseur.Requery End Sub Exemple : Programmation des gestionnaires dévènements (3/3) Le contrôle est mis à jour quand on le quitte. Alors, le sous- formulaire est mis à jour à son tour par la méthode Requery