Title: Initiation aux bases de donn
1Initiation aux bases de données et à la
programmation événementielle
- Cours N8
- Gestion de la cohérence avec des zones de liste
déroulantes.
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.
2Rappel et compléments lien logique (1/3)
- Un lien logique établit que des enregistrements
- de deux relations (tables) sont
complémentaires. - À un enregistrement de la première table, on
- associe 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 alors dun lien logique père/fils
3Rappel et compléments lien logique (2/3)
- 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.
- La valeur de la clef externe de la table fils
doit - soit être égale à la valeur de la clef primaire
- dun enregistrement existant de la table père,
- soit (dans des cas particuliers) être Null.
4Rappel et compléments lien logique (3/3)
- Autoriser 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.
5Cas 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. - Une livraison peut 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 plusieurs commandes).
6Cas 2 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, on décrit des collectionneurs.
- Un collectionneur peut posséder plusieurs œuvres,
- mais elles nont quun propriétaire
- la table Collectionneur est la table père et la
- table Å’uvre est la table fils.
- ?la clef externe de la table Å’uvre ne doit pas
être - renseignée (Null) au moment de la création de
- lenregistrement (réalisation de lœuvre).
- ?elle sera mise à jour au moment de la vente de
lœuvre
7Première conclusion.
En dehors des deux cas particuliers, 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. - Ne pas modifier la valeur dune clef primaire !
9Gestion par imposition dune contraintes
dintégrité
Une valeur insérée dans le champ référence
fournisseur de la table article doit
obligatoirement exister comme clé primaire de la
table fournisseur (le champ N Siret)
CREATE TABLE Article ( code article
Autoincrement NOT NULL, prix article
INT, date fabrication DATE,
référence fournisseur INT NOT NULL,
CONSTRAINT A1 PRIMARY KEY (code article),
CONSTRAINT A2 FOREIGN KEY (référence
fournisseur) REFERENCES fournisseur (N
Siret) )
10Gestion de la cohérence par lapplication.
Plusieurs possibilités (à choisir en fonction de
critères ergonomiques)
- 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.
- Saisir la valeur de la clef externe, puis
vérifier quelle correspond bien à la clef
primaire dun enregistrement existant. - ? Utilisation de formulaire/Sous-formulaire
liés.
11Exemple gestion par zone de liste déroulante.
12La zone de liste déroulante
- Cest un contrôle que lon peut insérer dans un
- formulaire
- Cest un objet lié à un ensemble de valeurs
-
- ? 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.
13La zone de liste déroulante la propriété Contenu
Avec VBA
- Contenu / RowSource
- Pour notre utilisation, 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.
14La zone de liste déroulante la propriété
Colonne liée
- 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 .
15La zone de liste déroulante la propriété
Contrôle source
- Contrôle source / ControlSource
- Utiliser pour gérer la valeur de la clef
externe. - À chaque instant, la valeur du champ lié est
- égale à la valeur de la zone de liste
déroulante (colonne liée).
16La zone de liste déroulante la propriété
Largeurs colonnes
- 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 de  0 cm , alors
la valeur - du champ nest pas affichée pendant la
sélection, - tous les champs affichables sont visibles,
sinon, seul le - premier champ affichable (largeur gt0) est
visible.
17Astuce
- 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.
- ? Ainsi, il suffit de taper les premiers
caractères de - la valeur cherchée pour se déplacer dans le
jeu - denregistrements.