Initiation aux bases de donnes et la programmation vnementielle - PowerPoint PPT Presentation

1 / 27
About This Presentation
Title:

Initiation aux bases de donnes et la programmation vnementielle

Description:

Rendre actif l'enregistrement suivant (du formulaire actif) ... Si le formulaire forSaisie est d j ouvert (mais n'est pas le formulaire actif) ... – PowerPoint PPT presentation

Number of Views:33
Avg rating:3.0/5.0
Slides: 28
Provided by: bernard111
Category:

less

Transcript and Presenter's Notes

Title: Initiation aux bases de donnes et la programmation vnementielle


1
Initiation aux bases de donnéeset à 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 lHomme et les autres
composantes dun système) En informatique étude
de linteraction homme / ordinateur Importance du
choix des composantes dune interface Pour
construire le schéma dun 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 quil faut communiquer à
lutilisateur pour quil puisse agir comme il
faut ?
3
Retour sur lexemple du cours N 8
enregistrement dune nouvelle commande
  • Problème créer
  • un enregistrement de tabCommande,
  • n enregistrements de tabLien_Cde_Pdt
  • 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 lutilisation du
formulaire)
5
Le couple formulaire et sous-formulaire permet
dafficher ensemble les données des champs père
et fils Il est bien adapté à la création du
couple, mais lergonomie 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 lensemble des
données du père (a fortiori si on veut pouvoir en
modifier certaines)
6
Recherche denregistrements
Source du formulaire ensemble
denregistrements Enregistrement actif Les
boutons de commande de la fenêtre du formulaire
permettent de changer denregistrement actif
même en cas daffichage 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
lenregistrement cherché, mais il sagit du
numéro dordre dans la relation et non pas de la
clef
7
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 Rappel (Cf.
TD1) pour les programmer en VBA, on utilise des
méthodes de lobjet 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
  • type de lobjet constante ACCESS (acDataForm
    pour un formulaire) par défaut, lobjet actif
  • nom de lobjet chaîne de caractères par
    défaut, lobjet actif
  • 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 dun enregistrement à la
    suite des autres dans la relation liée)
  • nombre entier nombre denregistrements dans le
    cas dun déplacement vers les précédents ou vers
    les suivants (par défaut 1) ou numéro dordre de
    lenregistrement à atteindre dans la relation
    liée (accès direct). Nous nutiliserons pas cet
    argument

9
Exemples dutilisation de la méthode
Rendre actif lenregistrement 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.Go
toRecord , , 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
nest pas le formulaire actif) ? DoCmd.GoToRecord
acDataForm, "forSaisie", acNewRec
10
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 (la procédure
événementielle) 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
11
Exemple Programmation dun bouton de commande qui
permet datteindre lenregistrement précédent
en cas derreur, 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
12
Cest ce qui se passe quand on utilise les
boutons standards
Une autre réaction face à la même erreur ne
rien faire Utiliser linstruction  Resume Next 
(reprendre après linstruction qui a provoqué
lerreur) Private Sub btPrécédent_Click() On
Error Resume Next DoCmd.GoToRecord , ,
acPrevious End Sub
Attention ! Ne pas oublier  Next , sinon on
relance linstruction qui a provoqué lerreur,
et le programme ne sarrête jamais.
13
La méthode FindRecord
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 !
  • Arguments de la méthode
  • Que rechercher ? expression la méthode
    recherche la valeur de lexpression dans les
    enregistrements de la relation
  • Où chercher ? constante ACCESS
  • acAnywhere (nimporte où dans le champ)
  • acEntire (tout le champ)
  • acStart (au début du champ)
  • Respecter la casse booléen
  • true (on différencie majuscules et minuscules)
  • false (pas de différence entre majuscules et
    minuscules)
  • /

Largument par défaut est en rouge
14
  • Arguments de la méthode FindRecord (fin)
  • 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)
  • Respect du format (daffichage) ? booléen
  • true
  • false
  • Dans quels champs ? booléen
  • true (dans le champ actif seulement)
  • false (dans tous les champs)
  • A partir de quel enregistrement ? booléen
  • true (à partir du premier enregistrement)
  • false (à partir de lenregistrement qui suit
    lenregistrement actif)

Largument par défaut est en rouge
15
Que se passe-t-il si on ne trouve aucun
enregistrement qui respecte la condition cherchée
? Lenregistrement actif reste inchangé ATTENTION
! La méthode FindRecord ne peut être exécutée
quaprès mise à jour donc ne pas lutiliser
dans une procédure _BeforeUpdate
16
Exemple schéma de la base de données
17
Construction dun 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 à
    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
  • 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 dun enregistrement de
    tabNote sinon, et saisie de la note

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èvetabElève.N élève WHERE
tabNote.Réf épreuveforms!saisie_des_notes!zlCho
ix_é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
19
Construction du formulaire Enregistrement_des_note
s (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
20
Zone de liste déroulante zldChoix_classe
  • 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.
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.Requer
y End Sub
21
Zone de liste déroulante zldChoix_épreuve
  • Sélection de lépreuve

Source contrôle est Null Contenu SELECT N
épreuve, Nom épreuve " / " Date épreuve
FROM tabEpreuve WHERE Réf classezldChoix_cla
sse.Value ORDER BY Nom épreuve, Date
épreuve Colonne liée 1 etc.
Pour éviter un affichage incohérent Private Sub
zldChoix_épreuve_AfterUpdate() sfNote.Requery
zldChoix_élève.Value Null End Sub
22
Zone de liste déroulante zldChoix_classe
  • 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 classezldChoix_classe.Value
ORDER BY Nom élève, Prénom élève Colonne
liée 1 etc.
23
Private Sub zldChoix_élève_AfterUpdate() If
IsNull(zldChoix_épreuve.Value) Then 'Il faut
sélectionner l'épreuve ! zldChoix_épreuve.SetF
ocus 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.SetFoc
us 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
(No Transcript)
26
(No Transcript)
27
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com