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 Cours N°10 : Ergonomie, déplacement et recherche. Support de cours de Soheib BAARIR*.

Présentations similaires


Présentation au sujet: "1 Initiation aux bases de données et à la programmation événementielle Cours N°10 : Ergonomie, déplacement et recherche. Support de cours de Soheib BAARIR*."— Transcription de la présentation:

1 1 Initiation aux bases de données et à la programmation événementielle Cours N°10 : Ergonomie, déplacement et recherche. Support de cours de Soheib BAARIR*. Page web : pagesperso-systeme.lip6.fr/Souheib.Baarir/bdvba/support.htm Université Paris Ouest Nanterre la Défense * Adapté du cours de B. COFFIN. Reproduction interdite sans autorisation écrite de lauteur.

2 2 Ergonomie des traitements Les choix des composantes dune interface sont importants. Pour construire le schéma dun formulaire, il faut se demander : Quelles sont les informations qui doivent être saisies ? Quelles sont les informations quil faut communiquer à lutilisateur pour quil puisse agir comme il faut ? Quels sont les événements qui doivent ou peuvent se produire ? Ergonomie : étude de linteraction homme / ordinateur.

3 3 Exemple : enregistrement dune nouvelle commande (1/2) 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 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 lutilisation du formulaire) Exemple : enregistrement dune nouvelle commande (2/2)

5 5 Recherche denregistrements : Approche non automatique Source du formulaire = ensemble denregistrements. Enregistrement actif : par défaut le premier de la relation. Les boutons de commande de la fenêtre du formulaire permettent de changer denregistrement actif. Un jeu de boutons pour le formulaire et un autre pour le sous-formulaire

6 6 On peut aussi programmer ces changements denregistrement actif. Utilisation de méthodes : les mouvements commandés par les boutons du formulaire sont des actions ACCESS. pour les programmer en VBA, on utilise des méthodes de lobjet DoCmd. Recherche denregistrements : approche automatique

7 7 La méthode GotoRecord de DoCmd Record = enregistrement. GotoRecord atteindre un enregistrement dans la relation liée à un objet. DoCmd.GotoRecord type_Objet, Nom_Objet, mode_déplacement Constante ACCESS. acDataForm pour un formulaire. par défaut, lobjet actif. chaîne de caractères. par défaut, lobjet actif. Constante ACCESS. acFirst, acLast, acPrevious, acNext (par défaut), acNewRec.

8 8 Exemples : GotoRecord Rendre actif lenregistrement suivant (du formulaire actif) DoCmd.GotoRecord,, acNext Rappel : il sagit dune méthode de lobjet DoCmd Le premier, et le deuxième arguments ne sont pas décrits, cest la valeur par défaut qui est prise 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 nest 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é

9 9 Gestion des erreurs ! Que se passe-t-il si on essaye datteindre un enregistrement qui nexiste pas ? La gestion standard (par le système) : affichage dun message et fin du traitement. Il est possible de gérer soi-même la réaction de lapplication en cas derreur. 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.

10 10 Programmation dun bouton (appelé btPrécédent pour lexemple) de commande qui permet datteindre lenregistrement précédent ; en cas derreur : 1.Atteindre le dernier enregistrement. Private Sub btPrécédent_Click() On Error GoTo suite DoCmd.GoToRecord,, acPrevious Exit Sub suite: DoCmd.GoToRecord,, acLast End Sub 2.Ne rien faire. Private Sub btPrécédent_Click() On Error Resume Next DoCmd.GoToRecord,, acPrevious End Sub Étiquette – nom symbolique donné à une instruction pour la repérer parmi les autres Fin dexécution de la procédure événementielle : il ne faut pas exécuter le traitement prévu en cas derreur. Exemples : Gestion des erreurs ! Ne pas oublier « Next », sinon on relance linstruction qui a provoqué lerreur, et… le programme ne sarrête jamais !

11 11 La méthode FindRecord do DoCmd Record = enregistrement FindRecord trouver un enregistrement dans la relation liée à un objet qui est obligatoirement lobjet actif. Mais la méthode sapplique à lobjet DoCmd ! DoCmd.FindRecord QueRechercher, OùChercher, RespecterCasse, QuelleDirection, RespectFormat, QuelChamp, ApartirDe Largument par défaut est en rouge Expression, la méthode recherche la valeur de lexpression dans les enregistrements de la relation. constante ACCESS, acAnywhere, acEntire, acStart. Booléen true, False. constante ACCESS, acDown, acSearchAll, acUp. Booléen true, False. Booléen True (champ actif), False (tous les champs). Booléen True (à partir du premier), False (à partir de lenregistrement qui suit lenregistrement actif).

12 12 tabClasse CP : N° Classe Niveau Indice 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 Exemple : schéma de la base de données

13 13 Exemple : construction dun 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 dun 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 à lenregistrement de tabClasse sélectionné (prévoir « Requery »). Zone de liste déroulante dont le contenu est celui des enregistrements de tabElève reliés à lenregistrement 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 à lenregistrement de tabEpreuve sélectionné (prévoir « Requery »); utilisation des déplacements dans la relation source.

14 14 Exemple : Résultat à obtenir (1/3)

15 15 Exemple : Résultat à obtenir (2/3)

16 16 Exemple : Résultat à obtenir (3/3)

17 17 Exemple : construction du formulaire Saisie_note (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 » daffichage différentes En exploitation, la zone de texte ztRéf_élève sera « transparente » pour lutilisateur : Couleur de police = couleur de fond Et Private Sub ztRéf_élève_Click() ztNote.SetFocus End Sub

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

19 19 Exemple : 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 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

20 20 Exemple : 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 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

21 21 Exemple : Sélection de lélève (1/2) 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 Zone de liste déroulante zldChoix_classe

22 22 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] ? Exemple : Sélection de lélève (2/2)

23 23 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 Exemple : Mise à jour de la relation du sous-formulaire.


Télécharger ppt "1 Initiation aux bases de données et à la programmation événementielle Cours N°10 : Ergonomie, déplacement et recherche. Support de cours de Soheib BAARIR*."

Présentations similaires


Annonces Google