1 / 23

Initiation aux bases de données et à la programmation événementielle

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 E-mail : souheib.baarir@u-paris10.fr

jetta
Download Presentation

Initiation aux bases de données et à la programmation événementielle

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 E-mail : souheib.baarir@u-paris10.fr Université Paris Ouest Nanterre la Défense. 2009-2010. * Adapté du cours de B. COFFIN. Reproduction interdite sans autorisation écrite de l’auteur.

  2. Ergonomie des traitements Ergonomie : étude de l’interaction homme / ordinateur. • Les choix des composantes d’une interface sont importants. • Pour construire le schéma d’un formulaire, il faut se demander : • Quelles sont les informations qui doivent être saisies ? • Quelles sont les informations qu’il faut communiquer à l’utilisateur • pour qu’il puisse agir comme il faut ? • Quels sont les événements qui doivent ou peuvent se produire ?

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

  4. Exemple : enregistrement d’une nouvelle commande (2/2) 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. Recherche d’enregistrements : Approche non automatique • Source du formulaire = ensemble d’enregistrements. • Enregistrement actif : par défaut le premier de la relation. • Les boutons de commande de la fenêtre du formulaire • permettent de changer d’enregistrement actif. Un jeu de boutons pour le formulaire et un autre pour le sous-formulaire

  6. Recherche d’enregistrements : approche automatique • 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. • pour les programmer en VBA, on utilise des méthodes • de l’objet DoCmd.

  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. • acFirst, • acLast, • acPrevious, • acNext (par défaut), • acNewRec. • Constante ACCESS. • acDataForm pour • un formulaire. • par défaut, l’objet actif. • chaîne de caractères. • par défaut, l’objet actif.

  8. 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 Exemples : GotoRecord • Rendre actif l’enregistrement suivant (du formulaire actif) • DoCmd.GotoRecord , , acNext • Ouvrir un formulaire (appelé forSaisie dans cet exemple) et se préparer à • ajouter un enregistrement. • DoCmd.OpenForm "forSaisie" • DoCmd.GotoRecord , , acNewRec La méthode rend le formulaire actif Donc les valeurs par défaut des deux premiers arguments sont adaptées au traitement souhaité • Si le formulaire forSaisie est déjà ouvert (mais n’est pas le formulaire actif) ? • DoCmd.GoToRecord acDataForm, "forSaisie", acNewRec

  9. 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. • 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.

  10. É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. Exemples : Gestion des erreurs ! • Programmation d’un bouton (appelé btPrécédentpour l’exemple) de • commande qui permet d’atteindre l’enregistrement précédent ; en cas • d’erreur : • Atteindre le dernier enregistrement. • PrivateSubbtPrécédent_Click() • On ErrorGoTo suite • DoCmd.GoToRecord , , acPrevious • Exit Sub • suite: DoCmd.GoToRecord , , acLast • End Sub • Ne rien faire. • PrivateSubbtPrécédent_Click() • On ErrorResumeNext • DoCmd.GoToRecord , , acPrevious • End Sub Ne pas oublier « Next », sinon on relance l’instruction qui a provoqué l’erreur, et… le programme ne s’arrête jamais !

  11. La méthode FindRecord do DoCmd • 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 ! DoCmd.FindRecord QueRechercher, OùChercher, RespecterCasse, QuelleDirection, RespectFormat, QuelChamp, ApartirDe • constante ACCESS, • acAnywhere, • acEntire, • acStart. • Booléen • true, • False. • Expression, • la méthode • recherche la • valeur de • l’expression • dans les • enregistrements • de la relation. L’argument par défaut est en rouge • Booléen • True(à partir du premier), • False (à partir de • l’enregistrement qui suit • l’enregistrement actif). • Booléen • True (champ actif), • False (tous les champs). • constante ACCESS, • acDown, • acSearchAll, • acUp. • Booléen • true, • False.

  12. tabClasse tabNote tabEpreuve tabElève CP : N° Classe Niveau Indice • CP :CE : Réf Elève • CE : Réf Epreuve • Note CP : N° Epreuve CE : Réf Classe Nom épreuve Date épreuve 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. Exemple : construction d’un formulaire de saisie des notes • 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. • Ergonomie • Sélection de la classe • Sélection de l’épreuve • Sélection de l’élève • 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

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

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

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

  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 » 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 • EtPrivate Sub ztRéf_élève_Click() • ztNote.SetFocus • End Sub

  18. Exemple : 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

  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 Pour éviter un affichage incohérent Private Sub zldChoix_classe_GotFocus() zldChoix_épreuve.Value = Null zldChoix_élève.Value = Null sfNote.Requery End Sub Zone de liste déroulante zldChoix_classe Mise à jour des contenus des 2 autres listes Private Sub zldChoix_classe_AfterUpdate() zldChoix_épreuve.Requery zldChoix_élève.Requery End Sub

  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 • Pour éviter un affichage incohérent • Private Sub zldChoix_épreuve_AfterUpdate() • sfNote.Requery • zldChoix_élève.Value = Null • End Sub Zone de liste déroulante zldChoix_épreuve

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

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

More Related