Title: Initiation aux bases de donnes et la programmation vnementielle
1Initiation aux bases de donnéeset à la
programmation événementielle
- VBA sous ACCESS
- Cours N 5
Support de cours rédigé par Bernard
COFFIN Université Paris 10 Nanterre
2007/2008
2Lien logique
Rappels (Cf. cours N 2)
- un lien logique établit que des enregistrements
de deux relations sont complémentaires - à un enregistrement de la première table, on
associe n (plusieurs) enregistrements de la
seconde, alors quà un enregistrement de la
seconde on nassocie quun seul enregistrement de
la première - le lien doit être réalisé à laide de la clef
primaire de la table père et dune clef externe
de la table fils
on parle dun lien père / fils
3Rappel La clef primaire est un champ qui ne
peut pas prendre la même valeur pour deux
enregistrements différents de la table
Le plus simple est de laisser à ACCESS le soin de
gérer ses valeurs en la déclarant NuméroAuto
Le type de la clef externe de la table fils doit
être exactement le même que celui de la clef
primaire de la table père
Si elle existe (nest pas Null), la valeur de la
clef externe de la table fils doit toujours être
égale à la valeur de la clef primaire dun
enregistrement existant de la table père
La clef externe ne peut être non renseignée
(Null) que dans des cas rares et très précis de
traitements
4Autoriser que la valeur de la clef externe (table
fils) ne soit pas renseignée (Null) signifie que
le champ père est créé après les champs
fils ou bien que le lien décrit une
information qui apparaît après la création des
enregistrements père et fils
5- Exemple 1 Le champ père sert à définir un point
commun (entre les fils) qui apparaît après leur
création - dans une table on décrit des commandes
- dans une deuxième table, on décrit des
livraisons - supposons quune livraison puisse concerner
plusieurs commandes - alors la table Livraison va être la table père
et la table Commande sera la table fils - la clef externe de la table Commande ne doit pas
être renseignée (Null) au moment de la création
de lenregistrement (une commande) - elle sera mise à jour lors de la création de la
livraison (concernant n commandes)
6- Exemple2 Le lien décrit un événement qui
napparaît quaprès la création du père et du
fils - dans une table on décrit des uvres dart
- dans une deuxième table, on décrit des
collectionneurs - un collectionneur peut posséder plusieurs
uvres, mais elles nont quun propriétaire - la table tabCollectionneur est la table père et
la table tabOeuvre est la table fils - la clef externe de la table tabuvre ne doit
pas être renseignée (Null) au moment de la
création de lenregistrement (réalisation de
luvre) elle sera mise à jour au moment de la
vente de luvre
7En dehors de cas particuliers comme ceux-là, la
clef externe de chaque enregistrement de la table
fils doit toujours être renseignée et égale à la
clef primaire dun enregistrement existant de la
table père
Si la valeur dune clef externe dun
enregistrement est renseignée mais nest pas
égale à la clef primaire dun enregistrement
existant, alors la base de données est
INCOHÉRENTE !
8Garantir la cohérence de la BD
- Ne pas attribuer à une clef externe une valeur
sans être certain quelle est égale à la clef
primaire dun enregistrement existant - Ne pas supprimer un enregistrement de la table
père tant quil est lié à au moins enregistrement
de la table fils - On ne modifie pas la valeur dune clef primaire !
9Loutil relations dACCESS
ACCESS propose un outil nommé relations mais
il ne sagit pas de relations au sens de
lalgèbre relationnelle ! Permet de définir des
jointures par défaut (utilisées avec lassistant
de construction de requête hors programme de ce
cours, rappelons le) Permet dimposer des
contraintes dintégrité à ces relations par
défaut
10Loutil relations dACCESS
Lergonomie des traitements (derreurs) est
souvent médiocre Ne pas utiliser cet outil qui
nest pas au programme du cours et de lexamen
! Il faut prévoir les traitements nécessaires au
maintien de la cohérence de la base
11Gestion de la cohérence par lapplication
Trois possibilités à choisir en fonction de
critères ergonomiques
- Saisir la valeur de la clef externe, puis
vérifier quelle correspond bien à la clef
primaire dun enregistrement existant
Utilisation dun sous-formulaire indépendant pour
afficher lenregistrement père
12Gestion de la cohérence par lapplication
- Utiliser un objet complexe lié aux deux tables
les enregistrements créés sont alors forcément
cohérents lors de la création (mais on est ramené
au problème précédent en cas de modification par
une autre interface)
Utilisation dun Sous-formulaire lié à la table
fils (le formulaire principal étant, lui, lié à
la table père)
13Gestion de la cohérence par lapplication
- Plutôt que de saisir la clef externe, se
rattacher à un enregistrement choisi parmi ceux
qui existent dans la base
Utilisation dans un formulaire lié à la table
fils dune Zone de liste déroulante permettant
dafficher les enregistrements pères possibles et
de sélectionner le bon
14La zone de liste déroulante
Appelée aussi zone de liste modifiable
Un contrôle des formulaires
Objet lié à un ensemble de valeurs complexes
Nous utiliserons toujours les enregistrements
dune relation définie par une requête
La zone de liste déroulante permet de
sélectionner un des enregistrements (de la
relation liée) parmi les autres
15La zone de liste déroulantePrincipales propriétés
- Valeur / Value
- dépend de lenregistrement sélectionné
- peut être modifiée par VBA dans ce cas
lenregistrement sélectionné (affiché) est mis à
jour automatiquement
16La zone de liste déroulantePrincipales propriétés
- Contrôle source / ControlSource
- la valeur du champ lié est égale à la valeur de
la zone de liste déroulante - on utilise la zone de liste déroulante pour
gérer la valeur de la clef externe
17La zone de liste déroulantePrincipales propriétés
- Contenu / RowSource (row rangée)
- pour nous, uniquement une relation décrite par
une requête sélection - calculée lors du chargement du formulaire
- recalculée par programmation à laide de la
méthode Requery de lobjet
Attention ne pas confondre les propriétés
contenu et valeur de la zone de liste !
18La zone de liste déroulantePrincipales propriétés
- Colonne liée / BoundColumn
- colonne champ !
- les champs de la requête sont numérotés à partir
de la gauche en commençant à 1 - la valeur de zone de liste déroulante est égale
à la valeur du champ repéré par la propriété
colonne liée
19La zone de liste déroulantePrincipales propriétés
- Colonne liée / BoundColumn
- si la valeur de la propriété colonne liée
est égale à zéro, alors la valeur de la zone de
liste est égale au numéro dordre de
lenregistrement sélectionné dans la relation
(les enregistrements sont numérotés à partir de
zéro)
20La zone de liste déroulantePrincipales propriétés
- Nbre colonnes / ColumnCount
- nombre de champs affichables dans la zone de
liste déroulante (le plus souvent cest le nombre
de champs de la relation décrite par la requête)
21La zone de liste déroulantePrincipales propriétés
- Largeurs colonnes / ColumnWidths
- donne la largeur de laffichage de chacun des
champs (de gauche à droite dans lordre de la
requête) - si la largeur dun champ est zéro cm, alors la
valeur du champ nest pas affichée (mais elle est
disponible quand même !) - pendant la sélection, tous les champs
affichables sont visibles - sinon, seul le premier champ affichable (largeur
gt0) est visible
22Un contenu classé
La zone de liste déroulante permet de
sélectionner un des enregistrements (de la
relation liée) parmi les autres Pour que la
recherche de lenregistrement désiré soit
efficace, il faut trier les enregistrements de la
relation Utiliser la clause Order By Il suffit
de taper les premiers caractères de la valeur
cherchée pour se déplacer dans le jeu
denregistrements on termine la recherche en
visualisant les enregistrements voisins
23Exemple dutilisation formulaire de saisie dun
enregistrement dune table fils
Table père tabFormation Champs N
formation NuméroAuto clef primaire Nom
formation Texte de 50 caractères Niveau
Entier Long 1, 2, 3 pour une licence
1, 2 pour un master
24Exemple dutilisation formulaire de saisie dun
enregistrement dune table fils
Table fils tabEtudiant Champs N
étudiant NuméroAuto, clef primaire Nom
Texte de 50 caractères Prénom Texte de 50
caractères Formation suivie Entier Long
clef externe Source du formulaire de saisie dun
étudiant Select From tabEtudiant
25Il faut gérer le lien avec la table père
donc le contrôle lié doit être la clef externe
Numéro dordre du champ qui donne la valeur de la
zone de liste soit N Formation
Formation suivie
Il faut pouvoir sélectionner un enregistrement de
la table père , donc
26Le premier champ N Formation ne doit pas être
affiché sa largeur est 0cm Le deuxième champ
Nom formation est affiché en permanence sur
5cm Le troisième champ Niveau est affiché
seulement pendant la sélection sur 2cm
Remplacer la valeur par défaut (1) par le nombre
de champs de la requête (contenu)
3
0cm
5cm
2cm
27(No Transcript)
28Si on veut que le nom et le niveau de la
formation soient affichés en permanence, alors il
faut modifier la requête qui décrit le
contenu de la zone de liste en utilisant un
champ calculé Select N Formation, Nom
formation " / " Niveau From tabFormation
Order By Nom formation, Niveau
Pour une meilleure présentation en mode
sélection, modifier aussi les propriétés Nbre
colonnes et Largeurs colonnes