1 Initiation aux bases de données et à la programmation événementielle Cours N°9 : Gestion de...

22
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 E-mail : [email protected] Université Paris Ouest Nanterre la Défense. 2009-2010. * Adapté du cours de B. COFFIN. Reproduction interdite sans autorisation écrite de l’auteur.

Transcript of 1 Initiation aux bases de données et à la programmation événementielle Cours N°9 : Gestion de...

Page 1: 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.

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.htmE-mail : [email protected]

Université Paris Ouest Nanterre la Défense.2009-2010.

* Adapté du cours de B. COFFIN.Reproduction interdite sans autorisation écrite de l’auteur.

Page 2: 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.

2

Sous-formulaire

• Un formulaire est un objet complexe composé de contrôles.

• Un formulaire peut être lui-même un contrôle d’un 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 d’un champ de l’un correspond à une valeur d’un champ de l’autre.

Page 3: 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.

3

Un premier exemple

Formulaire Principal

Sous-Formulaire

Page 4: 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.

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 d’afficher des informations complémentaires à celles du formulaire principal.

Par exemple, il permet d’afficher le détail d’un enregistrement d’une table après la saisie de sa clef (pour vérifier qu’il existe et que c’est 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

Page 5: 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.

5

Construction d’un Sous-formulaire

• C’est un contrôle d’un 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.

Page 6: 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.

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 l’intermédiaire de la requête décrivant la relation source du sous-formulaire.

Page 7: 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.

7

Sous-formulaire lié•Le lien avec le formulaire principal est la réalisation d’un 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 l’objet 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.

Page 8: 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.

8

•Exemple extrait d’une base de données gérant l’approvisionnement d’une entreprise.

Table pour les fournisseurs : tabFournisseur. Table pour les produits : tabProduit. Un produit ne peut venir que d’un 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. • L’ergonomie de ce traitement est bien adaptée à un formulaire comprenant un sous-formulaire

Exemple Sous-formulaire lié

Page 9: 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.

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

Page 10: 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.

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

Page 11: 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.

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 n’est pas NuméroAuto : c’est à l’utilisateur de le fournir (à moins qu’on ne prévoie un algorithme…).

• Un contrôle sous-formulaire sfProduits pour la saisie des

produits du fournisseur.

Exemple : Formulaire fournisseur

Page 12: 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.

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]

Page 13: 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.

13

Exemple : Formulaire fournisseur (fin)

Page 14: 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.

14

Exemple : Formulaire complet

Page 15: 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.

15

Sous-formulaire indépendant

•Le lien avec le formulaire principal doit être géré par l’application.

•On l’utilise pour afficher des informations complexes en liaison avec le contenu du formulaire principal.

•Le lien se fait par l’intermédiaire d’une clause de restriction sur la requête de description de la relation source du sous- formulaire.

•La programmation événementielle gère l’utilisation du sous- formulaire.

Page 16: 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.

16

•Construction d’un formulaire permettant l’ajout d’un produit (le fournisseur étant déjà enregistré) – formAjout_produit – la relation source est construite sur la table « fils » tabProduit.

•L’utilisateur 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]).

•L’application doit alors afficher la description complète de l’enregistrement du fournisseur correspondant au code saisi (l’utilisateur 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 l’intermédiaire de la requête de la source du sous-formulaire.

Exemple sous-formulaire indépendant

Page 17: 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.

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

Page 18: 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.

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 l’application – 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 l’intermédiaire de la requête source du formulaire formAfficher_fournisseur

Exemple : construction du formulaire principale

Page 19: 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.

19

Exemple : formulaire complet

Page 20: 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.

20

• Elle concerne uniquement le formulaire principal formAjout_produit.

• Lors de l’ouverture 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 qu’il s’agit de l’objet actif ; on écrit alors ´ DoCmd.GoToRecord , , acNewRecEnd Sub

Exemple : Programmation des gestionnaires d’évènements (1/3)

Page 21: 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.

21

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

Page 22: 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.

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.RequeryEnd 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