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. Souheib BAARIR. Page web : Université Paris Ouest Nanterre la Défense.
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, et, à 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)
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 très 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)
4 Autoriser que la valeur de la clef externe (table fils) ne soit pas renseignée (Null) signifie que : [Cas 1] le champ « père » est créé après les champs « fils » ; [Cas 2] 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)
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 : la table Livraison va être la table père et la table Commande sera la table fils ; la clef externe de la table Commande se référant à la table Livraison 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.
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 : 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
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 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.
8 1.Ne pas attribuer à une clef externe une valeur sans être certain qu’elle est égale à la clef primaire (de la table père). 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
9 Gestion par imposition d’une contraintes d’intégrité CREATE TABLE Articles ( [Code article] Autoincrement NOT NULL, Description Text(20), [Prix Achat] Int, [Prix vente] Double, [Réf fournisseur] Int, CONSTRAINT A1 PRIMARY KEY ([Code article]), CONSTRAINT A2 FOREIGN KEY ([Réf fournisseur]) REFERENCES Fournisseurs ([N° Siret]) ) Une valeur insérée dans le champ [référence fournisseur] de la table Articles doit obligatoirement exister comme clé primaire de la table Fournisseurs (le champ [N° Siret])
10 Gestion de la cohérence par l’application. Plusieurs possibilités (à choisir en fonction de critères ergonomiques) : 1.Se rattacher à un enregistrement (clef primaire) 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.
11 Exemple : gestion par zone de liste déroulante.
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.
13 Contenu / RowSource : Pour notre utilisation, uniquement une relation décrite par une requête de 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
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
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
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
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.