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

Post on 04-Apr-2015

111 views 6 download

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

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 : souheib.baarir@u-paris10.fr

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

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

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.

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

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.

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.

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.

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é

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

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

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

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

19

Exemple : formulaire complet

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)

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