1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 9 Support de cours rédigé par Bernard COFFIN Université.

Slides:



Advertisements
Présentations similaires
VBA et les actions sur les tables
Advertisements

Abes agence bibliographique de l’enseignement supérieur Les scripts.
Portée des variables VBA & Excel
Eléments visuels. 2009/2010L3-Eco - Université de Bordeaux2 Les feuilles La feuille : cest le cadre dans lequel tous les autres éléments (visuels) dune.
FORMATION BE1D Une fois, les identifiants entrés, vous vous retrouvez sur la page daccueil de lapplication. Ce nest quà partir de cette page que vous devez.
Introduction Pour concrétiser l’enseignement assisté par ordinateur
Vocabulaire pour la passage du modèle conceptuel des données au modèle relationnel des données. MCDMRD EntitéTable PropriétésChamps, attribut IdentifiantClé
Le publipostage La fonction de fusion permet de créer des documents identiques dans les grandes lignes que l’on personnalise automatiquement à chaque destinataires.
! 1 CREATION D'UNE MAQUETTE EXPORT / IMPORT
Comprendre l’ergonomie du module STSWEB
Initiation aux bases de données et à la programmation événementielle
Lycée Louis Vincent SEANCE 6 Python Les listes Lundi 25 novembre 2013.
Initiation au système d’information et aux bases de données
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Cours de programmation
Par Fabrice Pasquier Cours IV
Créer un index.
Initiation aux bases de données et à la programmation événementielle
Les instructions PHP pour l'accès à une base de données MySql
Auto Exterior Scoop SQP PROCESSUS 24 juillet 2006 Version validée V01.
1 Initiation aux bases de données et à la programmation événementielle Cours N°9 : Gestion de la cohérence avec des sous-formulaires. Support de cours.
FICHIERS : Définition : Algorithme général:
CHAINE DE CARACTERES : Définition :
Structure et Services « STS » Menu Structures : Divisions
Initiation aux bases de données et à la programmation événementielle
Initiation aux bases de données et à la programmation événementielle
Initiation aux bases de données et à la programmation événementielle
Initiation aux bases de données et à la programmation événementielle
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II PRO-1024.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Menu Structure : Divisions Diffusion Nationale TOULOUSE – Décembre 2008 Structure et Services « STS » Menu Structures : Divisions.
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Créer des packages.
L. Gzara, E. Khouri, M Tollenaere 1 MSI 2A ICL – Initiation ACCESS Interfaces 2014 Initiation MS Access 2010 Interfaces – Formulaires Dynamique des données.
Initiation MS Access 2010 Structures – Tables, schémas et Données
La liste des tâches  Un moyen commode pour accéder directement et facilement aux tâches programmées pour l’utilisateur et le praticien en cours d’utilisation.
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II PRO-1024.
Jean Paul CHANLON IUT1 Grenoble Génie Mécanique et Productique
 Formulaires HTML : traiter les entrées utilisateur
Saisie des absences en salles de classes par les enseignants
Comprendre l’ergonomie du module STSWEB. La page d’accueil de STSWEB Code et Nom de l’établissement Version du module Campagne en cours Année affichée.
Informatique de Gestion part II – the dark macro
Comprendre le SGBDR Microsoft Access – partie 2
Scripts et fonctions Instructions de contrôle
Une aide pour débutant éclairé
QCM VBA.
Chapitre 3 La programmation de bases de données Access en Visual Basic
Initiation aux bases de données et à la programmation événementielle
Initiation aux bases de données et à la programmation événementielle
Initiation aux bases de données et à la programmation événementielle
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.
INTRODUCTION AUX BASES DE DONNEES Base et métabase
Tutoriel V_Stage Cliquez pour continuer.
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
Abes agence bibliographique de l’enseignement supérieur Les scripts.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 10 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 5 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 12 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 11 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 1 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 6 Support de cours rédigé par Bernard COFFIN Université.
Initiation aux bases de données et à la programmation événementielle Outil de création des tables Support de TD rédigé par Bernard COFFIN Université Paris.
Cerise Pro BTS COM Guide d’utilisation étudiants & enseignants
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 8 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 7 Support de cours rédigé par Bernard COFFIN Université.
Formation SGA Module Saisie des Demandes d’achat Durée : 0,5 jour.
La création des données d’exemplaire pour un exemplarisateur.
1 Initiation aux bases de données et à la programmation événementielle Construction d’un état Support de TD rédigé par Bernard COFFIN Université Paris.
Transcription de la présentation:

1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 9 Support de cours rédigé par Bernard COFFIN Université Paris 10 – Nanterre 2007/2008

2 Ergonomie des traitements Ergonomie : science du travail (compréhension des interactions entre l’Homme et les autres composantes d’un système) En informatique : étude de l’interaction homme / ordinateur Importance du choix des composantes d’une interface Pour construire le schéma d’un formulaire, il faut se demander Quelles sont les informations qui doivent être saisies ? Quels sont les événements qui doivent ou peuvent se produire ? Quelles sont les informations qu’il faut communiquer à l’utilisateur pour qu’il puisse agir comme il faut ?

3 Retour sur l’exemple du cours N° 8 : enregistrement d’une nouvelle commande tabCommande CP : N° Commande CE : Réf Client Date commande tabLien_Cde_Pdt CP :CE : Réf Commande CE : Réf Produit Quantité commandée tabClient CP : N° client Nom client Adresse tabProduit CP : Code produit Nom produit Prix Unitaire Problème : créer 1.un enregistrement de tabCommande, 2.n enregistrements de tabLien_Cde_Pdt 3.les liens logiques les concernant

4 Le couple formulaire et sous-formulaire liés permet de créer un enregistrement de la table père, les n enregistrements de la table fils et les n occurrences correspondantes du lien logique La zone de liste déroulante permet de gérer facilement les liens logiques vers les enregistrements de tabClient et tabProduit (enregistrements existant avant l’utilisation du formulaire)

5 Le couple formulaire et sous-formulaire permet d’afficher ensemble les données des champs père et fils Il est bien adapté à la création du couple, mais l’ergonomie est médiocre pour un ajout de champs fils (a un père déjà existant) La zone de liste déroulante permet de rattacher un fils à un père existant mais est peu commode si on veut en même temps consulter l’ensemble des données du père (a fortiori si on veut pouvoir en modifier certaines)

6 Recherche d’enregistrements Source du formulaire = ensemble d’enregistrements Enregistrement actif Les boutons de commande de la fenêtre du formulaire permettent de changer d’enregistrement actif … même en cas d’affichage continu Un jeu de boutons pour le formulaire et un autre pour le sous-formulaire La zone de texte permet de saisir le numéro de l’enregistrement cherché, mais il s’agit du numéro d’ordre dans la relation et non pas de la clef

7 On peut aussi programmer ces changements d’enregistrement actif Utilisation de méthodes Les mouvements commandés par les boutons du formulaire sont des actions ACCESS Rappel (Cf. TD1) : pour les programmer en VBA, on utilise des méthodes de l’objet DoCmd

8 La méthode GotoRecord (Cf. cours 6) Record = enregistrement GotoRecord → atteindre un enregistrement dans la relation liée à un objet Arguments de la méthode : 1.type de l’objet – constante ACCESS (acDataForm pour un formulaire) – par défaut, l’objet actif 2.nom de l’objet – chaîne de caractères – par défaut, l’objet actif 3.mode de déplacement – constante ACCESS : acFirst (le premier), acLast (le dernier), acPrevious (vers les précédents), acNext (vers les suivants – valeur par défaut), acGoto (accès direct), acNewRec (ajout d’un enregistrement à la suite des autres – dans la relation liée) 4.nombre entier – nombre d’enregistrements dans le cas d’un déplacement vers les précédents ou vers les suivants (par défaut 1) ou numéro d’ordre de l’enregistrement à atteindre dans la relation liée (accès direct). Nous n’utiliserons pas cet argument

9 Exemples d’utilisation de la méthode Rendre actif l’enregistrement suivant (du formulaire actif) DoCmd.GotoRecord,, acNext Rappel : il s’agit d’une méthode de l’objet DoCmd Le premier, et le deuxième arguments ne sont pas décrits, c’est la valeur par défaut qui est prise Pour le 4ème argument, on utilise la valeur par défaut : 1 Il n’y en a pas d’autre, alors il ne faut pas mettre la dernière virgule Ouvrir un formulaire (appelé forSaisie dans cet exemple) et se préparer à ajouter un enregistrement DoCmd.OpenForm "forSaisie" DoCmd.GotoRecord,, acNewRec Si le formulaire forSaisie est déjà ouvert (mais n’est pas le formulaire actif) ? DoCmd.GoToRecord acDataForm, "forSaisie", acNewRec La méthode rend le formulaire actif Donc les valeurs par défaut des deux premiers arguments sont adaptées au traitement souhaité

10 Gestion des erreurs ! Que se passe-t-il si on essaye d’atteindre un enregistrement qui n’existe pas ? La gestion standard (par le système) : affichage d’un message et fin du traitement (la procédure événementielle) Il est possible de gérer soi-même la réaction de l’application en cas d’erreur Utiliser (en VBA) la condition « On error GoTo étiquette » en début de procédure Puis, décrire le traitement à effectuer en repérant la première instruction par l’étiquette

11 Exemple Programmation d’un bouton de commande qui permet d’atteindre l’enregistrement précédent ; en cas d’erreur, atteindre le dernier enregistrement (présentation en boucle des enregistrements) Private Sub btPrécédent_Click() On Error GoTo suite DoCmd.GoToRecord,, acPrevious Exit Sub suite: DoCmd.GoToRecord,, acLast End Sub Étiquette – nom symbolique donné à une instruction pour la repérer parmi les autres Fin d’exécution de la procédure événementielle ; il ne faut pas exécuter le traitement prévu en cas d’erreur

12 Une autre réaction face à la même erreur : ne rien faire Utiliser l’instruction « Resume Next » (reprendre après l’instruction qui a provoqué l’erreur) Private Sub btPrécédent_Click() On Error Resume Next DoCmd.GoToRecord,, acPrevious End Sub C’est ce qui se passe quand on utilise les boutons standards Attention ! Ne pas oublier « Next », sinon on relance l’instruction qui a provoqué l’erreur, et… le programme ne s’arrête jamais.

13 La méthode FindRecord Record = enregistrement FindRecord → trouver un enregistrement dans la relation liée à un objet qui est obligatoirement l’objet actif Mais la méthode s’applique à l’objet doCmd ! Arguments de la méthode : 1.Que rechercher ? – expression – la méthode recherche la valeur de l’expression dans les enregistrements de la relation 2.Où chercher ? – constante ACCESS : acAnywhere (n’importe où dans le champ) acEntire (tout le champ) acStart (au début du champ) 3.Respecter la casse – booléen : true (on différencie majuscules et minuscules) false (pas de différence entre majuscules et minuscules) …/… L’argument par défaut est en rouge

14 Arguments de la méthode FindRecord (fin): 4.Dans quels enregistrements ? – constante ACCESS acDown (en allant vers le dernier enregistrement) acSearchAll (en allant vers le dernier enregistrement puis en repartant du premier ) acUp (en allant vers le premier enregistrement) 5.Respect du format (d’affichage) ? – booléen : true false 6.Dans quels champs ? – booléen : true (dans le champ actif seulement) false (dans tous les champs) 7.A partir de quel enregistrement ? – booléen : true (à partir du premier enregistrement) false (à partir de l’enregistrement qui suit l’enregistrement actif) L’argument par défaut est en rouge

15 Que se passe-t-il si on ne trouve aucun enregistrement qui respecte la condition cherchée ? L’enregistrement actif reste inchangé ATTENTION ! La méthode FindRecord ne peut être exécutée qu’après mise à jour ; donc ne pas l’utiliser dans une procédure _BeforeUpdate

16 tabClasse CP : N° Classe Niveau Indice Exemple : schéma de la base de données tabNote CP :CE : Réf Elève CE : Réf Epreuve Note tabEpreuve CP : N° Epreuve CE : Réf Classe Nom épreuve Date épreuve tabElève CP : N° Elève CE : Réf Classe Nom élève Prénom élève

17 Construction d’un formulaire de saisie des notes Ergonomie 1.Sélection de la classe 2.Sélection de l’épreuve 3.Sélection de l’élève 4.Affichage de la note si elle a déjà été saisie (modification), création d’un enregistrement de tabNote sinon, et saisie de la note Solution adoptée Zone de liste déroulante dont le contenu est celui de tabClasse Zone de liste déroulante dont le contenu est celui des enregistrements de tabEpreuve reliés à l’enregistrement de tabClasse sélectionné (prévoir « Requery ») Zone de liste déroulante dont le contenu est celui des enregistrements de tabElève reliés à l’enregistrement de tabClasse sélectionné (prévoir « Requery ») Sous-formulaire indépendant du formulaire principal (pas de lien champ père – champ fils) dont la source est la relation constituée par les champs de tabNote liés à l’enregistrement de tabEpreuve sélectionné (prévoir « Requery »); utilisation des déplacements dans la relation source

18 Construction du formulaire Saisie_note (utilisé comme sous-formulaire du formulaire principal) Source : SELECT [Réf élève], [Réf épreuve], Note, [Nom élève] & " " & [Prénom élève] AS Identité FROM tabNote INNER JOIN tabElève ON tabNote.[Réf élève]=tabElève.[N° élève] WHERE tabNote.[Réf épreuve]=forms!saisie_des_notes!zlChoix_épreuve.value ORDER BY [Nom élève], [Prénom élève]; 3 zones de textes liées, avec des propriétés de « format » d’affichage différentes En exploitation, la zone de texte ztRéf_élève sera « transparente » pour l’utilisateur : Couleur de police = couleur de fond Et Private Sub ztRéf_élève_Click() ztNote.SetFocus End Sub

19 Construction du formulaire Enregistrement_des_notes (formulaire principal) Source : formulaire indépendant, donc la propriété Source n’est pas renseignée 3 zones de listes déroulantes pour faire les choix prévus dans la description de l’ergonomie de l’interface Sous-formulaire sfNote Objet source : Saisie_note Pas de lien champs pères / fils

20 1.Sélection de la classe Source contrôle : est Null Contenu : SELECT [N° classe], Niveau & " / " & Indice FROM tabClasse ORDER BY Niveau, Indice; Colonne liée : 1 ; etc. Zone de liste déroulante zldChoix_classe Pour éviter un affichage incohérent Private Sub zldChoix_classe_GotFocus() zldChoix_épreuve.Value = Null zldChoix_élève.Value = Null sfNote.Requery End Sub Mise à jour des contenus des 2 autres listes Private Sub zldChoix_classe_AfterUpdate() zldChoix_épreuve.Requery zldChoix_élève.Requery End Sub

21 2.Sélection de l’épreuve Source contrôle : est Null Contenu : SELECT [N° épreuve], [Nom épreuve] & " / " & [Date épreuve] FROM tabEpreuve WHERE [Réf classe]=zldChoix_classe.Value ORDER BY [Nom épreuve], [Date épreuve]; Colonne liée : 1 ; etc. Zone de liste déroulante zldChoix_épreuve Pour éviter un affichage incohérent Private Sub zldChoix_épreuve_AfterUpdate() sfNote.Requery zldChoix_élève.Value = Null End Sub

22 3.Sélection de l’élève Source contrôle : est Null Contenu : SELECT [N° élève], [Nom élève] & " " & [Prénom élève] FROM tabElève WHERE [Réf classe]=zldChoix_classe.Value ORDER BY [Nom élève], [Prénom élève]; Colonne liée : 1 ; etc. Zone de liste déroulante zldChoix_classe

23 Private Sub zldChoix_élève_AfterUpdate() If IsNull(zldChoix_épreuve.Value) Then 'Il faut sélectionner l'épreuve ! zldChoix_épreuve.SetFocus: Exit Sub End If If IsNull(sfNote![Réf élève]) Then ' Au cas où la relation liée serait vide sfNote!ztRéf_élève.Value = zldChoix_élève.Value sfNote!ztNote.SetFocus: Exit Sub End If sfNote.SetFocus sfNote!ztRéf_élève.SetFocus ' Le champ [Réf_élève] doit être actif DoCmd.GoToRecord,, acNewRec ' Pour être prêt à une création si on ne trouve pas l'élève DoCmd.FindRecord zldChoix_élève.Value ' Recherche de l'élève pour éviter les doublons (interdits) If IsNull(sfNote![Réf élève]) Then ' On est en création sfNote!ztRéf_élève.Value = zldChoix_élève.Value End If sfNote!ztNote.SetFocus End Sub On a bien mis à jour [Réf élève], mais [Réf épreuve] ?

24 Pas de gestion automatique par le couple champs pères / champs fils Il faut donc programmer la mise à jour Dans le formulaire Saisie_note (objet source du sous-formulaire) on utilise la procédure événementielle : Private Sub Form_BeforeInsert(Cancel As Integer) [Réf épreuve] = Forms!Enregistrement_des_notes!zldChoix_épreuve.Value End Sub

25

26

27