Gestionarea
evenimentelor in ACCESS
ASOCIEREA CODULUI VBA LA UN
EVENIMENT
Un cod VBA poate fi atribuit unui obiect in doua
modalitati:
pornind
de la compartimentul Eveniment al
ferestrei de proprietati al obiectului in Acces
pornind
de la listele derulante de obiecte si evenimente editorul Visual Basic
CATEGORII DE EVENIMENTE
Listele urmatoare de evenimente sunt clasate dupa tip,
si cuprind:
numele evenimentului,
numele proprietatii
corespunzatoare din fereastra de proprietati ale obiectului
(intre paranteze),
descrierea evenimentului,
coloana din dreapta (Anulare) arata
daca evenimentul poate fi anulat. Anularea unui eveniment face obiectul
paragrafului 6.3.
EVENIMENTELE DE TIP
FORMA (FEREASTRA)
|
|
Anulare
|
Open
|
Are loc la deschiderera formularului dar inaintea afisarii
primei inregistrari. Are loc la deschiderea unu raport dar inaintea
listarii
|
DA
|
Load
|
(la incarcare) Are loc la deschiderea formularului cand este
afisata prima inregistrare.
|
NU
|
Resize
|
(la redimensionare) Are loc la prima afisare a formularului
si la modificarile aduse marimii acestuia.
|
NU
|
UnLoad
|
(la descarcare) Are loc la inchidere cand inregistrarile
sunt descarcate, insa inainte ca formularul sa dispara.
|
DA
|
Close
|
(la inchidere) Are loc atunci cand formularul sau raportul dispar la
inchidere.
|
NU
|
EVENIMENTE DE TIP FOCUS
Aceste evenimente se pot aplica formularelor (Activate, Deactivate, GotFocus, LostFocus) sau controalelor (Enter, Exit, SetFocus, LostFocus).
Se spune despre obiect ca are focus atunci cand poate accepta
schimbari in urma actiunilor utilizatorului prin intermediul
mouse-ului sau a tastaturii. Obiectele care au focus sunt numite obiecte active
(ActiveForm sau ActiveControl).
|
|
Anulare
|
Activate
|
(la activare) Are loc atunci cand fereastra formularului sau a
raportului este activata.
|
NU
|
Deactivate
|
(la dezactivare) Are loc atat la activarea unei alte ferestre,
(insa inainte ca aceasta sa fie activata), cat si la
inchiderea ferestrei.
|
NU
|
Enter
|
(la intrare) Are loc inainte ca un control sa primeasca
focus, pornind de la un alt control, sau la deschiderea formularului.
|
NU
|
Exit
|
(la iesire) Are loc inainte ca un control sa isi
piarda focus-ul in fata unui alt control din acelasi formular
sau din altul.
|
DA
|
GotFocus
|
(la primirea focusului) Are loc atunci cand un control sau un formular fara
control activ primeste un focus.
|
NU
|
LostFocus
|
(la pierderea focus-ului) Are loc atunci cand un control sau un
formular pierde focus-ul.
|
NU
|
EVENIMENTE DE TIP DATE
Se aplica formularelor asociate unei surse de date (proprietatea RecordSource pornind de la numele unui
tabel sau de la o interogare). Acest tip de evenimente se mai aplica
controalelor asociate unui camp al sursei de date a formularului (proprietatea ControlSource).
|
|
Anulare
|
AfterInsert
|
(dupa inserare) Are loc dupa adaugarea unei noi
inregistrari in tabel.
|
NU
|
AfterUpdate
|
(dupa MAJ) Are loc dupa actualizarea unui control sau a
unei inregistrari cu date modificate.
|
NU
|
AfterDel
Confirm
|
(dupa stergere) Are loc dupa ce utilizatorul a
raspuns cererii de stergere a inregistratilor.
|
NU
|
BeforeInsert
|
(inaintea inserarii) Are loc cand se tasteaza primul
caracter al unei noi inregistrari, insa inaintea inregistrarii
propriu-zise.
|
DA
|
BeforeUpdate
|
(inainte de MAJ) Are loc inaintea actualizarii unui control sau
a unei inregistrari cu date modificate.
|
DA
|
BeforeDel
Confirm
|
(inaintea stergerii) Are loc dupa ce utilizatorul a a
sters inregistrarile dar inainte ca Access sa ceara
confirmare.
|
DA
|
NotInList
|
(la absenta din lista) Are loc atunci cand tastarea unei
valori nu se gaseste pe lista si proprietatea
limitata la lista este adevarata.
|
NU
|
Current
|
(in momentul activarii) Are loc atunci cand focus-ul trece
dintr-o inregistrare in alta. De asemenea, are loc la deschidere inainte ca
prima inregistrare sa devina cea curenta.
|
NU
|
Change
|
(in momentul efectuarii unei schimbari) Are loc in
momentul modificarii continutului unei zone text sau lista
(tastatura sau macro/Visual Basic).
|
NU
|
Updated
|
(la MAJ) Are loc atunci cand datele unui obiect OLE au fost
modificate.
|
NU
|
Delete
|
(la stergere) Are loc inaintea stergerii propriu-zise.
|
DA
|
|
|
Anulare
|
Dirty
|
Se produce atunci cand continutul unui formular sau a
partii text al unei zone de lista se schimba si la
trecerea de la o pagina in alta a unui control.
|
DA
|
EVENIMENTE DE TIP MOUSE
|
|
Anulare
|
Click
|
Are loc cand de efectueaza clic stanga pe un control sau o
zona noua a unui formular.
|
NU
|
DblClick
|
Are loc cand se efectueaza dublu clic stanga pe un control sau
o zona noua a unui formular.
|
DA
|
MouseDown
|
Are loc la apasarea unui buton al mouse-ului pe un control sau
un formular.
|
DA
|
MouseMove
|
Are loc atunci cand utilizatorul deplaseaza mouse-ul pe un
formular sau un control.
|
NU
|
MouseUp
|
Are loc atunci cand utilizatorul nu mai apasa cu mouse-ul pe un
control sau formular.
|
NU
|
EVENIMENTELE DE TIP
TASTATURA
|
|
Anulare
|
KeyDown
|
Are loc la apasarea unei taste sau la executarea
instructiunii SendKeys.
Insa obiectul poate fi impiedicat sa fie afectat de tastatura
atribuind valoarea 0 argumentului Keycode
al procedurii KeyDown al obiectului.
|
NU
|
KeyPress
|
Are loc la apasarea unei taste ce genereaza un caracater
ANSI standard
Obiectul poate fi impiedicat sa fie afectat de actiunea
tastei atribuind valoarea 0 argumentului KeyAscii al procedurii KeyPress al
obiectului.
|
DA(cu macro sau VBA)
|
KeyUp
|
Are loc atunci cand utilizatorul nu mai apasa tasta sau cand se
executa SendKeys. Obiectul poate fi impiedicat sa fie afectat de
actiunea tastei atribuind valoarea 0 argumentului KeyCode al procedurii
KeyUp al obiectului.
|
NU
|
Proprietatea KeyPreview a
unui formular determina daca procedurile eveniment de tastatura
la nivelul formularului sunt apelate inaintea celor de la nivelul controalelor.
Proprietatea KeyPreview poate fi
folosita pentru a crea o procedura de gestionare la nivelul unui
formular.
Exemplul urmator demonstreaza cum se afiseaza un
formular cand utilizatorul actioneaza pe tasta F1, oricare ar fi controlul activ.
Private Sub Form_Load()
KeyPreview = True
End Sub
Private Sub Form_KeyDown(KeyCode
As Integer, _
Shift As Integer)
`Daca
tasta este F1, formularul Find este afisat
`KeyCode
este reinitializat pentru a afisa Microsoft _ `Access Help
If KeyCode = vbKeyF1 Then
DoCmd.OpenForm”Afisare”
KeyCode = 0
End If
End Sub
EVENIMENTELE
DE TIP PRINT
Aceste evenimente se aplica rapoartelor
Access:
|
|
Anulare
|
Format
|
(la formatare) Are loc cand Microsoft Access determina care
date apartin caror sectiuni.
|
DA
|
Print
|
(la listare) Are loc atunci cand se redacteaza o sectiune
pentru listare.
|
DA
|
Retreat
|
(la reformatare) Are loc cand Microsoft Access revine la o
sectiune precedenta in timpul redactarii unui raport.
|
NU
|
NoData
|
Are loc atunci cand Microsoft Access a redactat un raport in scopul
listarii sale si cand acesta nu contine data.
|
DA
|
Page
Observatie:
|
Are loc dupa ce Microsoft Access a redactat o pagina a
unui raport pentru listarea acestuia, dar inaintea listarii propriu-zise
a paginii.
|
NU
|
Evenimentele
Format, Print si Retreat se aplica sectiunilor
rapoartelor.
EVENIMENTELE DE TIP FILTRU
|
|
Anulare
|
ApplyFilter
|
Are loc atunci cand utilizatorul aplica un filtru.
|
DA
|
Filter
|
Are loc cand utilizatorul creaza un filtru.
|
DA
|
EVENIMENTELE DE TIP ERROR
SI TIMER
|
|
Anulare
|
Error
|
Are loc cand survine o eroare.
|
NU
|
Timer |
Are loc cand o intarziere specifica s-a scurs.
|
NU
|
ANULAREA
UNUI EVENIMENT
In anumite cazuri, este indicata anularea unui eveniment.
Exista doua modalitati de a realiza aceasta:
Specificand numele unui macro ce contine
actiunea CancelEvent, ca
si parametrul proprietatii de tip eveniment
corespunzatoare, de exemplu, pentru a anula actualizarea unui control sau
pentru a plasa numele macro-ului ce contine actiunea CancelEvent pe proprietatea sa Before
MAJ. Actiunea CancelEvent in
VBA foloseste actiunea identica din obiectul Docmd.
Conferind
valoarea True argumentului Cancel a unei proceduri.
Exemplu:
Daca data este incorecta, evenimentul Exit este anulat: cursorul este pozitionat pe camp.
Private Sub txtDateSfarsit_Exit(Cancel As
Integer)
If IsNull(txtDateSfarsit) Then Exit Sub
`Data
trebuie sa fie corecta
If Not IsDate(txtDateFin) Then
MsgBox(„Date incorecte”), vbCritical
Cancel =
True
Exit Sub
End If
`Data de
sarsit trebuie sa fie >= ca data de inceput
If DateValue(txtDateFin) <
DateValue(txtDateDeb) Then
MsgBox(„Data de sfarsit trebuie sa fie mai _
mare decat data de inceput:”), vbCritical
Cancel = True
Exit Sub
End If
End Sub
|
Observatie:
Nu
toate evenimentele pot fi anulate (vezi tablourile precedente de categorii de
evenimente).
SECVENTE
TIPURI DE EVENIMENTE
O actiune utilizator sau sistem genereaza un eveniment in
mod direct, insa, in acelasi timp, pot fi activate mai multe
evenimente subordonate.
Urmeaza o suita de secvente tipuri
de evenimente:
- Deschiderea
unui formular
Open → Load → Resize → Activate
→ Current
UnLoad → Deactivate → Close
Enter → GotFocus
- Trecerea
dintr-un formular in altul
Exit → Lost Focus
- Modificarea
unei zone de text:
Deactivate Form1 → Activate Form2
- Actualizarea
unei zone de text:
KeyDown → KeyPress → Change →
KeyUp → Exit (zona1) →
→LostFocus (zona2) →GotFocus (zona2)
- Actualizarea
unei inregistrari
KeyDown → KeyPress → Change →
KeyUp → Before Update
(Zone de texte) →AfterUpdate (Zone de Texte)
→BeforeUpdate (Zone de Texte) →Before (Formulare)
→AfterUpdate(Formulare)
- Introducerea
unei inregistrari in primul camp
KeyDown → KeyPress → BeforeUpdate
(Formular) →Change
→
KeyUp
- Stergerea
inregistrarilor
Delete → Current → BeforeDelConfirm
→ AfterDelConfirm
EVENIMENTE
DE ACTUALIZARE
In Microsoft Access evenimentele de actualizare intervin la doua
nivele:
- actualizarea
unui control,
- actualizarea
unei inregistrari.
In cazul actualizarii unui control, sunt executate evenimentele BeforeUpdate si AfterUpdate ale controlului in
cauza.
In cazul actualizarii unei inregistrari, sunt executate
evenimentele BeforeUpdate si AfterUpdate ale formularului.
Evenimentele de actualizare a controlalelor sunt executate inaintea
evenimentelor de actualizare a formularului.