La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "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é."— Transcription de la présentation:

1 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é Paris 10 – Nanterre 2007/2008

2 2 tabClasse CP : N° Classe Niveau Indice Schéma de la dernière base de données du cours N°9 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

3 3 Ergonomie des traitements Lors du cours N°9, nous avons vu comment ajouter des enregistrements dans une table (tabNote) représentant une association de n à n entre les enregistrements de deux tables (tabElève et tabEpreuve) L’ergonomie proposée était : 1.Sélection de la classe 2.Sélection de l’épreuve et de l’élève 3.Enregistrement ou modification de la note Une zone de liste déroulante Deux zones de listes déroulantes avec restrictions / la valeur de la première zone de liste déroulante Sous-formulaire dont la source est construite sur tabNote ; programmation événementielle pour assurer la cohérence de l’application

4 4 Cette ergonomie est bien adaptée à la saisie des notes au coup par coup Elle n’est pas très bonne s’il s’agit de saisir toutes les notes d’une épreuve les unes après les autres L’utilisation de la souris ou du clavier pour sélectionner l’enregistrement cherché dans un formulaire continu serait plus agréable Cela suppose que les enregistrements de la table tabNote aient été créés avant la saisie (avec une valeur de la note non renseignée) Comment et quand créer ces enregistrements (pour tous les élèves concernés) ? C’est au moment de la création (insertion de l’enregistrement dans la table) de la description d’une épreuve qu’on peut créer les enregistrements des notes Pour créer un ensemble d’enregistrements directement (sans passer par l’intermédiaire d’une interface et de contrôles liés) on utilise une requête insertion

5 5 Rappel du cours N° 4 Il existe plusieurs variétés de requêtes : sélection ajout suppression mise à jour création ACCESS parle de « types » de requêtes La requête « ajout » (ou insertion) permet de créer de nouveaux enregistrements dans une table, en spécifiant la valeur de un ou plusieurs de leurs champs ; les champs dont on ne précise pas la valeur se voient attribuer leur valeur par défaut Définition générale de la requête : Commande permettant la manipulation d'informations à l'intérieur d'une base de données

6 6 Pour exécuter une requête qui n’est pas liée à un objet (formulaire ou zone de liste), on utilise la méthode RunSQL de l’objet DoCmd Cette méthode a besoin d’un argument : la description de la requête en SQL On la lui communique à l’aide d’une chaîne de caractères (String) On peut utiliser indifféremment une constante, une variable, une expression En utilisant une variable Dim texte_requête As String texte_requête = " ici la requête en SQL " DoCmd.RunSQL texte_requête En utilisant une constante DoCmd.RunSQL " ici la requête en SQL "

7 7 Syntaxe de la requête Ajout (ou Insertion) INSERT INTO le nom de la table concernée (liste des champs concernés) SELECT liste des valeurs à enregistrer FROM relations d’origine WHERE clause de restriction ; Les autres champs se voient attribuer leur valeur par défaut Ces trois clauses décrivent une requête Sélection normale qui décrit comment obtenir l’ensemble des enregistrements à insérer

8 8 Formulaire pour créer une épreuve et enregistrer les notes des élèves concernés Formulaire lié dont la source est : SELECT * FROM tabEpreuve; Deux zones de texte liées pour la saisie de la date et du nom de l’épreuve

9 9 Un sous-formulaire pour saisir les notes Nom : sfNote Objet source : Saisie_toutes_les_notes Source de Saisie_toutes_les_notes : SELECT [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] ORDER BY [Nom élève], [Prénom élève]; Champs père et fils : [N° épreuve] / [Réf épreuve]

10 10 Programmation événementielle Il faut créer les enregistrements de la table tabNote après insertion dans la table du nouvel enregistrement de tabEpreuve Private Sub Form_AfterInsert() Dim texte_requête As String texte_requête = "Insert Into tabNote ([Réf élève], [Réf épreuve]) " _ End Sub La procédure appartient au module du formulaire principal ; l’événement est AfterInsert Utilisation d’une variable pour calculer le texte de la requête (ce n’était pas obligatoire) Champs de tabNote dont on va donner la valeur Table dans laquelle on va insérer des enregistrements

11 11 Programmation événementielle Il faut créer les enregistrements de la table tabNote après insertion dans la table du nouvel enregistrement de tabEpreuve Private Sub Form_AfterInsert() Dim texte_requête As String texte_requête = "Insert Into tabNote ([Réf élève], [Réf épreuve]) " _ & "Select [N° élève], forms!Saisie_d_une_épreuve![N° épreuve] as Auxiliaire " _ & "From tabElève " End Sub Première valeur (attribuée au premier champ) Relation d’où proviennent les valeurs à insérer

12 12 Programmation événementielle Il faut créer les enregistrements de la table tabNote après insertion dans la table du nouvel enregistrement de tabEpreuve Private Sub Form_AfterInsert() Dim texte_requête As String texte_requête = "Insert Into tabNote ([Réf élève], [Réf épreuve]) " _ & "Select [N° élève], forms!Saisie_d_une_épreuve![N° épreuve] as Auxiliaire " _ & "From tabElève " _ End Sub Deuxième valeur (attribuée au deuxième champ) Le nom symbolique est obligatoire parce que la valeur n’est pas un champ de la relation tabElève

13 13 Programmation événementielle Il faut créer les enregistrements de la table tabNote après insertion dans la table du nouvel enregistrement de tabEpreuve Private Sub Form_AfterInsert() Dim texte_requête As String texte_requête = "Insert Into tabNote ([Réf élève], [Réf épreuve]) " _ & "Select [N° élève], forms!Saisie_d_une_épreuve![N° épreuve] as Auxiliaire " _ & "From tabElève " _ & "Where tabElève.[Réf Classe]=forms!Saisie_d_une_épreuve![Réf classe];" DoCmd.RunSQL texte_requête sfNote.Requery End Sub Restriction aux champs de tabElève qui correspondent à la valeur sélectionnée dans le formulaire Exécution de la requête Mise à jour de l’affichage du sous-formulaire

14 14 Programmation événementielle Qu’est-ce qui provoque l’insertion de l’enregistrement décrit par le formulaire dans la table tabEpreuve ? L’insertion n’a lieu qu’au moment de la fermeture du formulaire, lors d’un changement de l’enregistrement actif ou en utilisant une méthode pour provoquer la mise à jour de l’enregistrement On ne peut pas fermer le formulaire (il faut saisir les notes)

15 15 Programmation événementielle (1ère solution) Utilisation d’un bouton de commande Nom : btValider Légende : Valider la création Procédure événementielle pour changer l’enregistrement actif et revenir au dernier enregistrement créé : Private Sub btValider_Click() DoCmd.GoToRecord,, acNewRec ' provoque l'insertion de la nouvelle épreuve dans la table DoCmd.GoToRecord,, acLast ' retour au dernier enregistrement créé sfNote.SetFocus End Sub

16 16 Programmation événementielle (2ème solution) Utilisation d’un bouton de commande Nom : btValider Légende : Valider la création Procédure événementielle pour commander la mise à jour de l’enregistrement : Private Sub btValider_Click() DoCmd.RunCommand acCmdSaveRecord sfNote.SetFocus End Sub

17 17 Requête suppression Permet de supprimer des enregistrements d’une table Ne doit être utilisée que si cela ne détruit pas la cohérence de la base de données ! Syntaxe DELETE le nom d’au moins un champ de l’enregistrement à supprimer FROM le nom de la table concernée WHERE clause de restriction ; Si on ne précise pas de restriction, la requête détruit tous les enregistrements de la table, mais pas la table elle-même

18 18 Exemple d’utilisation sur le formulaire Saisie_d_une_épreuve On souhaite autoriser la suppression d’un enregistrement (celui qui vient d’être créé en principe) de la table tabEpreuve – par exemple parce que l’utilisateur s’est trompé lors de la sélection de la classe Il faut alors supprimer aussi les enregistrements de tabNote qui concernent cette épreuve On utilise un bouton commande pour déclencher les deux requêtes nécessaires Propriétés du bouton : Nom : btSupprimer Légende : Supprimer l’épreuve

19 19 Procédure événementielle Private Sub btSupprimer_Click() DoCmd.RunSQL "Delete * From tabNote " _ " Where [Réf épreuve] =forms!Saisie_d_une_épreuve![N° épreuve]" DoCmd.RunSQL "Delete * From tabEpreuve " _ " Where [N° épreuve] =forms!Saisie_d_une_épreuve![N° épreuve] " Forms!saisie_d_une_épreuve.Requery ‘pour mettre à jour l’affichage End Sub


Télécharger ppt "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é."

Présentations similaires


Annonces Google