Title: Initiation aux bases de donn
1Initiation aux bases de données et à la
programmation événementielle
- Cours N9
- Gestion de la cohérence
- avec des sous-formulaires.
Support de cours de Soheib BAARIR. Page web
pagesperso-systeme.lip6.fr/Souheib.Baarir/bdvba/su
pport.htm E-mail souheib.baarir_at_u-paris10.fr
Université Paris Ouest Nanterre la
Défense. 2009-2010. Adapté du cours de B.
COFFIN. Reproduction interdite sans autorisation
écrite de lauteur.
2Sous-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.
3Un premier exemple
Formulaire Principal
Sous-Formulaire
4Sous-formulaire lié / indépendant
- Un sous-formulaire lié permet de gérer
automatiquement - un lien logique lors de la création des
enregistrements. - 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.
5Construction 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.
6Lien entre le formulaire principal et son
sous-formulaire
- Le lien se fait
- Entre enregistrements
- utilisation des propriétés  champs pères et
 champs fils du contrôle sous-formulaire. - Par lintermédiaire de la requête décrivant la
relation source du sous-formulaire.
7Sous-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.
8Exemple Sous-formulaire lié
- 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
9Exemple création des tables
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
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
10Exemple Formulaire produit
- 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).
11Exemple Formulaire fournisseur
- 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.
12Exemple Formulaire fournisseur (suite)
Propriétés du contrôle sfProduits. Objet source
formProduit Champs pères Code
fournisseur Champs fils Référence
fournisseur
13Exemple Formulaire fournisseur (fin)
14Exemple Formulaire complet
15Sous-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.
16Exemple sous-formulaire indépendant
- 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.
17Exemple construction du sous- formulaire
indépendant
- 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).
18Exemple construction du formulaire principale
- 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
19Exemple formulaire complet
20Exemple Programmation des gestionnaires
dévènements (1/3)
- 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
21Exemple Programmation des gestionnaires
dévènements (2/3)
22Exemple Programmation des gestionnaires
dévènements (3/3)
- 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
Le contrôle est mis à jour quand on le quitte.
Alors, le sous-formulaire est mis à jour à son
tour par la méthode Requery