17
1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : 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/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.

1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

Embed Size (px)

Citation preview

Page 1: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

1

Initiation aux bases de données et à la programmation événementielle

Cours N°8 :

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/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°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

2

• 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 n’associe qu’un seul enregistrement de la première.

• Le lien doit être réalisé à l’aide de la clef primaire de la table père et d’une clef externe de la table fils

on parle alors d’un lien logique père/fils

Rappel et compléments : lien logique (1/3)

Page 3: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

3

• La valeur de la clef externe de la table fils doit :

soit être égale à la valeur de la clef primaire d’un enregistrement existant de la table père,

soit (dans des cas particuliers) être Null.

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

Rappel et compléments : lien logique (2/3)

Page 4: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

4

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.

Rappel et compléments : lien logique (3/3)

Page 5: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

5

•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 l’enregistrement (une commande) ; elle sera mise à jour lors de la création de la livraison (concernant plusieurs commandes).

Cas 1 : Le champ père sert à définir un point commun, entre les fils, qui apparaît après leur création.

Page 6: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

6

•Dans une table on décrit des œuvres d’art.•Dans une deuxième, on décrit des collectionneurs.•Un collectionneur peut posséder plusieurs œuvres, mais elles n’ont qu’un 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

l’enregistrement (réalisation de l’œuvre).

elle sera mise à jour au moment de la vente de l’œuvre

Cas 2 : le lien décrit un événement qui n’apparaît qu’après la création du père et du fils

Page 7: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

7

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 d’un enregistrement existant de

la table père

Si la valeur d’une clef externe d’un enregistrement est renseignée mais n’est pas égale à la clef

primaire d’un enregistrement existant, alors la base de données est

INCOHÉRENTE !

Première conclusion.

Page 8: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

8

1.Ne pas attribuer à une clef externe une valeur sans être certain qu’elle est égale à la clef primaire d’un enregistrement existant.

2.Ne pas supprimer un enregistrement de la table père tant qu’il est lié à au moins enregistrement de la table fils.

3.Ne pas modifier la valeur d’une clef primaire !

Garantir la cohérence de la BD

Page 9: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

9

Gestion par imposition d’une contraintes d’intégrité

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

)

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

Page 10: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

10

Gestion de la cohérence par l’application.

Plusieurs possibilités (à choisir en fonction de critères ergonomiques) :

1. 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, d’une Zone de liste

déroulante permettant d’afficher les enregistrements pères possibles et de sélectionner le bon.

2. Saisir la valeur de la clef externe, puis vérifier qu’elle correspond bien à la clef primaire d’un enregistrement existant.

Utilisation de : formulaire/Sous-formulaire liés.

Page 11: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

11

Exemple : gestion par zone de liste déroulante.

Page 12: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

12

La zone de liste déroulante

• C’est un contrôle que l’on peut insérer dans un formulaire

• C’est un objet lié à un ensemble de valeurs : les enregistrements d’une 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.

Page 13: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

13

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 à l’aide de la méthode Requery de l’objet.

La zone de liste déroulante :la propriété Contenu

Avec VBA

Page 14: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

14

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

La zone de liste déroulante :la propriété Colonne liée

Page 15: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

15

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

La zone de liste déroulante :la propriété Contrôle source

Page 16: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

16

Largeurs colonnes / ColumnWidths :

• Donne la largeur de l’affichage de chacun des champs (de gauche à droite dans l’ordre de la requête).

• Si la largeur d’un champ est de « 0 cm », alors la valeur du champ n’est pas affichée : pendant la sélection, tous les champs affichables sont visibles, sinon, seul le premier champ affichable (largeur >0) est visible.

La zone de liste déroulante :la propriété Largeurs colonnes

Page 17: 1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Support

17

Astuce…• 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 l’enregistrement 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 d’enregistrements.