Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 3 Support de cours rédigé par Bernard COFFIN Université Paris 10 – Nanterre 2007/2008
Table Relation « stable » de la mémoire du SI décrit par l’application On la retrouve d’une exécution à l’autre Constituée de champs un nom un domaine (de valeurs) Suite de caractères imprimables, ne commençant pas par un espace et ne comprenant pas de . ! [ ]
Table D’abord il faut la déclarer Définir la liste des champs Définir leurs domaines Enregistrer la table en lui donnant un nom On enregistre la déclaration de la table, et non pas les données qu’elle contient ! Leur mémorisation se fait automatiquement au fur et à mesure des traitements. Il n’y a pas de demande de validation des modifications du contenu de la BD lors de la fermeture de l’application
Table Une fois la table déclarée, on peut lui ajouter des enregistrements les consulter les modifier – changer les valeurs des champs avec précautions ! les supprimer et on peut utiliser la relation (la table) pour calculer de nouvelles relations Pour tout ça on utilise des requêtes (en SQL), directement ou à travers des interfaces d’ACCESS
Description du domaine Ensemble des valeurs que peut enregistrer le champ Définir le type de ces valeurs (notion moins précise qu’en programmation pour les nombres) Préciser les « propriétés du champ » Taille Valeur par défaut Valeurs autorisées Indexation « Null » autorisé etc.
Attention à l’orthographe ! Null Null signifie que la propriété valeur (value) d’un objet n’est pas renseignée Null ne concerne pas un objet qui ne dispose pas de cette propriété (Ex. une étiquette) Null ne concerne pas une variable qui n’est pas un objet Null n’étant pas une valeur, on ne peut pas s’en servir pour un test de relation (= , < , > , etc.) On utilise la fonction « IsNull » Ex. : If IsNull (ztTitre.Value) then L’affectation est possible Ex. : ztTitre.Value = Null
Définir une clef primaire Identifier un enregistrement parmi les autres Champ ne pouvant prendre deux fois la même valeur pour deux enregistrements différents Un « type » bien adapté : NuméroAuto Le type des données, c’est « Entier Long » ! Lors de la création de l’enregistrement, une nouvelle valeur est attribuée automatiquement au champ correspondant (sauf option contraire, la dernière valeur attribuée + 1 ; on parle d’incrémentation)
Clef primaire / clef externe Nécessaire pour gérer les liens logiques Un lien logique décrit la complémentarité de sens entre un enregistrement d’une table T1 et plusieurs enregistrements d’une table T2 On parle d’un lien père – fils T1 est la table père et T2 la table fils La valeur d’un champ de T2 (clef externe) doit être égale à la valeur de la clef primaire de T1 Le type des données de la clef externe (table fils) doit être le même que celui des données de la clef primaire (table père) Exactement le même, il ne suffit pas que ce soit deux types numériques Donc la clef externe de T2 doit être déclarée « Entier Long » si la clef primaire de T1 est déclarée « NuméroAuto »
Pour plus de détails, voir le cours N° 7 Une ou deux tables Dans un enregistrement (table ou relation calculée), chaque champ a une valeur et une seule (sauf si cette valeur n’est pas renseignée) Si on a besoin de plusieurs valeurs (un nombre quelconque), alors il faut utiliser deux tables unies par un lien logique Ex : pour construire une BD permettant de décrire des artistes (peintres, sculpteurs…) et leurs œuvres, il faut une table père regroupant les données décrivant l’artiste une table fils regroupant les données décrivant une œuvre Le lien logique est réalisé par une clef externe de la table fils égale à la clef primaire de l’enregistrement correspondant dans la table père Pour plus de détails, voir le cours N° 7
Ouvrir une table ? Select * From Table1; , et elle peut parfois empêcher de comprendre ce qui se passe L’expression n’est pas heureuse En fait, on ouvre un objet « feuille de données » c’est une interface « basique » liée à une requête qui sélectionne tous les champs de la table, sans restriction Si d’autres objets liés à la table (par des requêtes), font des modifications sur les enregistrements, l’état réel de la table peut être différent de ce que montre la feuille de données liée à son « ouverture » Il faut privilégier l’utilisation des formulaires, plus souples, à celle des feuilles de données (à n’utiliser qu’en phase de mise au point de l’application)
En « mode feuille de données », la table est représentée en colonnes (les champs) et lignes (les enregistrements) Ces cases sont des zones de texte On ne peut pas modifier cette colonne Il suffit de taper un caractère dans un des champs du nouvel enregistrement, pour que l’enregistrement soit ajouté à la table (et que le N° étudiant soit attribué) Valeurs par défaut
Formulaire lié Un formulaire peut être lié à une relation Elle est définie par une requête Elle est calculée lors de l’ouverture du formulaire On peut aussi commander ce calcul par programme en utilisant la méthode Requery Cette requête est la source du formulaire ; c’est une propriété de l’objet
Que fait la requête ? Calcule une nouvelle relation en fonction du contenu de la BD au moment du calcul Ensemble ordonné d’enregistrements Reste disponible jusqu’à la fermeture du formulaire (sauf nouveau calcul par la méthode Requery) Enregistrement actif Changement d’enregistrement par commande d’ACCESS (bouton en bas de la fenêtre du formulaire) ou application d’une méthode
Afficher un enregistrement Utilisation des contrôles du formulaire On peut lier un contrôle à un champ => La valeur affichée par le contrôle est la valeur du champ => La modification de la valeur du contrôle est enregistrée dans le champ
Quelles classes de contrôles ? Il faut que le contrôle ait une propriété « valeur » Zone de texte Zone de liste Le lien s’effectue par l’intermédiaire d’une propriété du contrôle : Source contrôle / ACCESS (grille de propriétés) ControlSource / VBA
Attention ! Il ne faut pas confondre le contrôle du formulaire et le champ qui lui est lié : ce n’est pas la même chose… Pour comprendre le rôle de chacun et pour savoir les utiliser dans des traitements non élémentaires, il faut prendre l’habitude de leur donner des noms différents Ex. : nom du champ - [Type vin] nom du zone de texte liée à ce champ – ztType_vin