Limbajul Visual
Basic
1 Editarea
modulelor VBA
Modulele
din Access 2000 sunt obiecte ale bazei de date, care permit scrierea de rutine
in limbajul Visual Basic pentru Aplicatii (VBA):

Acestea pot
fi constituite din: declaratii de variabile, tipuri de date utilizator,
proceduri si/sau functii, declaratii de functii API etc.
Pentru a
crea un modul nou se parcurg urmatorii pasi:
selectati sectiunea Modules din fereastra bazei de date,
activati butonul New.
Pentru a
modifica un modul:
selectati modulul dorit si apoi
click butonul Design sau
dublu-click direct pe modulul dorit.
Pentru a
sterge un modul se selecteaza modulul si apoi se activeaza
tasta Delete.
Editorul
are, de asemenea, facilitati de colorare a cuvintelor cheie,
declaratiilor utilizator, frazelor eronate, comentariilor etc.
Cea mai puternica
facilitate a editorului VBA este posibilitatea afisarii contextuale
in momentul scrierii in VBA a elementelor care caracterizeaza un anumit
context:

2 Instructiuni
pentru afisarea si introducerea datelor
Evident,
formularele si rapoartele reprezinta o forma eleganta de
introducere si respectiv afisare a datelor care se bazeaza in
principal pe structura bazei de date. In afara de acestea, exista in
VBA instructiuni pentru introducerea unor date izolate si
afisarea de mesaje. Aceasta necesitate se simte mai ales in faza de
test a unei proceduri sau functii, sau pentru afisarea de mesaje
catre utilizatorul bazei de date.
InputBox
(mesaj, [titlu], [val_implicita], [x] ,[y], [fisier_help, context]) permite
introducerea unei secvente de caractere de la tastatura.
MsgBox(
mesaj [,butoane] [,titlu] [,fisier_help , context]) permite
afisarea unui mesaj si optional poate returna o constanta,
in functie de butonul ales de utilizator din fereastra MsgBox.
3 Declararea
variabilelor in VBA
Variabilele
pot fi declarate intr-o procedura sau functie cu ajutorul
instructiunii Dim:
Dim nume_variabila As tip_de_data
VBA
accepta doua categorii de tipuri de date:
standard (predefinite);
utilizator.
Tipurile de
date standard sunt:
Double: numar memorat pe 64 biti, virgula mobila,
dubla precizie. Valori posibile: de la -1,797E+308 pana la
+1,797E+308,
Single: numar memorat pe 32 biti, virgula mobila,
simpla precizie. Valori posibile: de la -3,4E+38 pana la +3,4E+38,
Currency: numar memorat pe 64 biti. Sunt memorate 15 caractere
la stanga virgulei si 4 caractere la dreapta virgulei. Valori
posibile:-922337203685477,5808 pana la 922337203685477,5807,
Byte: numar intreg pe 8 biti. Valori posibile: 0-255,
Integer: numar intreg pe 16 biti. Valori posibile: -32768 pana
la 32767,
Long: numar intreg pe 32 biti. Valori posibile: -2147483648:
pana la 2147483647,
Boolean: poate contine valoarea logica True (adevarat -1)
sau False (fals 0),
Date :poate contine date calendaristice si timp. Se
utilizeaza intre #,
String: sir de caractere. Un sit de caractere trebuie incadrat de
' astfel 'exemplu',
Variant: tip de date generic. O asemenea variabila se poate utiliza
pentru orice tip de date. Practic, toate variabilele utilizate pot fi declarate
de tip Variant. Este recomandat totusi ca sa specificati tipul
variabilei in momentul declararii pentru a nu fi create confuzii.
Object: tip de date care refera un obiect. Pentru a asocia un obiect
propriu-zis unei asemenea variabile trebuie sa se utilizeze si
instructiunea Set.
Unei
variabile de tip obiect (tipul generic Object sau de tipul celorlalte obiecte
Access 2000) nu se i se poate atribui un obiect in varianta clasica
variabila=expresie sau variabila1=variabila2, ci numai impreuna cu
instructiunea Set: Set variabila_obiect = expresie_obiect. In urma
apelului acestei instructiuni, variabila_obiect va referi obiectul
returnat de expresia expresie_obiect.
4 Operatori
Operatorii
acceptati de VBA sunt de trei categorii:
matematici: ^, - , *, /, , Mod(returneaza restul unei impartiri), +,
&(concateneaza doua siruri de caractere);
de comparare: =, <>, <, >, <=, >=, Like(compararea a
doua siruri), Is(compararea a doua obiecte);
logici: Not, And, Or, Xor, Eqv(echivalenta), Imp(implicatia
logica).
5 Functii si
proceduri definite de utilizator
O
functie/procedura reprezinta un blob de instructiuni care
realizeaza o prelucrare. Acestea pot fi apelate ori de cate ori este
nevoie, fara a mai fi necesara rescrierea lor. In felul acesta
se reduce considerabil efortul de programare. Pentru a da un grad de
generalitate cat mai mare, functiile si/sau procedurile contin
in definirea acestora o lista de parametri formali. In momentul
apelarii unei functii si/sau proceduri se transmit catre
acestea, nici unul, unul sau mai multe valori pentru fiecare parametru al
procedurii sau functiei.
Sintaxa
pentru definirea unei proceduri este urmatoarea:
Private|Public] Sub nume_procedura[([ByRef|ByVal] param_1 as
tip_date,.)]
[instructiuni]
.
[Exit Sub]
[instructiuni]
End Sub
Unde:
Private semnifica faptul ca procedura poate fi apelata
numai din modulul unde a fost definita,
Public semnifica faptul ca procedura poate fi apelata
din orice modul;
Exit Sub permite iesirea fortata dintr-o procedura.
Apelul unei
proceduri se poate face astfel:
[Call1 nume_procedura [(valoare_param_1,valoare_param_2,.)]
Sintaxa
unei functii este urmatoarea:
[Private|Public] Function nume_functie [([ByRef|ByVal] param_1 as
tip_date , .)] [as tip_date]
[instructiuni]
[nume_functie = expresie]
[Exit Function]
[instructiuni]
[nume_functie = expresie]
End Function
Unde:
Exit Function permite iesirea fortata dintr-o
functie,
nume_functie = expresie permite asocierea unui rezultat numelui
functiei.
Acest
rezultat va fi returnat in momentul terminarii executiei
functiei. Apelul unei functii se poate face astfel:
Variabila = nume_functie [(valoare_param_1, valoare_param_2, .)]. Variabila
preia rezultatul returnat de functie.
Pentru a
testa o procedura fara parametri direct dintr-un modul, se
pozitioneaza cursorul in corpul procedurii, apoi se selecteaza
comanda: Run, Run Sub/User Form.
Limbajul
VBA cuprinde in plus o serie de functii predefinite care faciliteaza
scrierea procedurilor si functiilor utilizator:
Abs( expresie_numerica ): returneaza valoarea absoluta a unei expresii
numerice, sau a unui numar
Asc( sir_caractere ): returneaza codul primului caracter din sirul de
caractere specificat
Chr( COD_CARACTER ): returneaza caracterul cu codel specificat
Date(): Returneaza data calendaristica
Day( data_calendaristica ): returneaza numarul zilei din luna
Month( data_calendaristica ): returneaza numarul lunei din an
Year( data_calendaristica ): returneaza anul
CDate( expresie ): face conversia la tipul Date
CDbl( expresie ): face conversia la tipul Double
Dec( expresie ): face conversia la tipul Decimal
CInt( expresie ): face conversia la tipul Integer
CLng( expresie ): face conversia la tipul Long
CSng( expresie ): face conversia la tipul Single
CStr( expresie ): face conversia la tipul String
Cos( expresie_numerica ): returneaza cosinus dintr-o expresie
numerica sau dintr-un numar. Valoarea returnata este de tip
Double.
Exp( expresie_numerica ): returneaza valoarea constantei e
ridicata la o putere (expresie numerica sau numar).
Log( expresie_numerica ): returneaza logaritm natural dintr-un
numar sau dintr-o expresie numerica.
IsDate( expresie ): returneaza valoarea adevarat (TRUE)
daca expresia dintre paranteze este compatibila cu o data
calendaristica.
IsEmpty( expresie ): returneaza valoarea adevarat (TRUE)
daca expresia dintre paranteze nu contine o valoare. Null este
considerat valoare.
IsNumeric( expresie ): returneaza valoarea adevarat (TRUE)
daca expresia dintre paranteze poate fi evaluata ca numar.
IsObject( expresie ): returneaza valoarea adevarat (TRUE)
daca identificatorul dintre paranteze este de tip obiect.
IsError( expresie ): returneaza valoarea adevarat (TRUE)
daca expresia dintre paranteze contine o eroare.
Len( sir_caractere/variabila ): returneaza numarul de
caractere ale sirului de caractere specificat sau numarul de
octeti necesari pentru a stoca continutul unei variabile.
Space( numar): returneaza numarul de spatii specificate
Str(expresie_numerica): converteste rezultatul evaluarii
expresiei numerice dintre paranteze intr-un sir de caractere.
Val(sir_caractere): returneaza rezultatul evaluarii
sirului de caractere specificat, intr-un numar
Mid((sir_caractere, pozitie_start[, lungimea])): extrage un
sir de caractere dintr-un alt sir de caractere.
6 Structura
alternativa
In Access
pentru implementarea structurii alternative se poate utiliza
instructiunile IF si SELECT CASE.
Sintaxa
variantei principale a instructiunii IF este urmatoarea:
IF conditie THEN
[secventa instructiuni A]
[ELSE
[secventa instructiuni B ]]
END IF
Conditia
poate fi o expresie numerica sau o expresie sir de caractere, care
poate fi evaluata la adevarat (True) sau fals (False).
Instructiunea IF evalueaza conditia si daca aceasta
este adevarata, se executa secventa de instructiuni A,
altfel se executa secventa de instructiuni B.
Instructiunea
SELECT CASE este o structura alternativa de tip selector. Principiul
de functionare este urmatorul: se testeaza pe rand valoarea unei
expresii selector, executandu-se secventa de instructiuni
corespunzatoare valorii expresiei. Sintaxa instructiunii este:
SELECT CASE expresie_selector
[CASE lista_expresii_case_1
[secventa instructiuni A]]
[CASE lista_expresii_case _2
[secventa instructiuni B]]
[CASE lista_expresii_case _3
[secventa instructiuni C]]
.
[CASE ELSE
[secventa instructiuni N]]
END SELECT
7 Structura
repetitiva
Structura
repetitiva, la modul general, presupune repetarea unei secvente de
instructiuni de un anumit numar de ori, in functie de o
conditie. Fiecare limbaj implementeaza mai multe instructiuni
pentru realizarea structurii repetitive.
Principalele
instructiuni rpretitive sunt WHILEWEND si FORNEXT.
WHILE.WEND
este o structura repetitiva conditionata anterior. Sintaxa
este urmatoarea:
WHILE conditie
[secventa_instructiuni]
WEND
Conditia
poate fi o expresie numerica sau o expresie sir de caractere, care
poate fi evaluata la adevarat (True) sau fals (False). Intai se
evalueaza conditie, daca este adevarata
(returneaza valoarea logica TRUE), se executa secventa de
instructiuni, daca nu este adevarata (returneaza
valoarea logica FALSE), se trece la urmatoarea instructiune de
dupa WEND. Dupa ce s-a executat o data secventa de
instructiuni se trece din nou la evaluarea conditiei s.a.m.d.
Sintaxa
instructiunii FORNEXT este :
FOR vb_contor=val_initiala TO val_finala [STEP val_pas]
[secventa instructiuni]
[EXIT FOR]
[secventa instructiuni]
NEXT [ vb_contor ]
unde :
val_initiala,val_finala - reprezinta valoarea initiala, respectiv
valoarea finala pentru vb_contor;
val_pas - reprezinta valoarea pasului de incrementare/decrementare pentru
variabila contor, implicit are valoarea +1;
val_initiala,val_finala,val_pas - pot fi si rezultatul evaluarii unor
expresii.
Cu aceasta
structura se repeta secventa de instructiuni de un numar de ori, plecandu-se de
la valoarea initiala a variabilei contor, pana la valoarea finala a acesteia,
incrementandu-se automat variabila contor cu +1 (deci aceasta nu trebuie
incrementata explicit de programator). Daca este prezenta instructiunea STEP,
se incrementeaza variabila contor cu pasul de incrementare/decrementare.
8 Obiecte Access
2000
O baza de
date Access 2000 este formata dintr-o multime de obiecte, care pot fi accesate
din VBA. Fiecare obiect are o serie de proprietati si metode
atasate. Invocarea unei metode sau proprietati a unui obiect se face prin
prefixarea acesteia cu numele obiectului astfel:
ume_obiect.nume_metoda;
nume_obiect.nume_proprietate.
Specificarea
unui obiect apartinand unei colectii se poate face conform uneia din
urmatoarele variante:
nume_obiect_colectie![nume_obiect] - este nevoie de paranteze drepte
numai daca numele obiectului contine spatii,
nume_obiect_colectie("nume_obiect"),
nume_obiect_colectie(index_obiect) - numar care indica pozitia in
colectie a unui obiect. Aceste numere de ordine incep de la zero.
Printre
numeroasele obiectele care pot fi utilizate de programatori sunt si
obiectele Applicaton si Form.
Obiectul
Application refea aplicatia Microsoft Access 2000.
Principalele
metode ale obiectului Application sunt:
CurrentDb returneaza un obiect baza de date (DataBase) care refera baza
de date curenta .
CurrentUser returneaza utilizatorul curent, conectat la baza de date
curenta
SysCmd se poate utiliza in principal pentru a afisa un text in bara de
stare (Status Bar) sau pentru gestionarea unui Progress Bar
SetOption stabileste valori pentru parametrii care se gasesc in meniul
Tools, optiunea Options: obiect_Application.SetOption nume_optiune, setari
GetOption returneaza valorile unor parametri care se gasesc in meniul
Tools,optiunea Options: obiect_Application.GetOption(nume_optiune).
Principalele
proprietati ale obiectului Application sunt:
DoCmd apeleaza obiectul DoCmd, descris in paragraful precedent;
Forms permite accesul la colectia de formulare deschise dintr-o baza de
date;
Reports permite accesul la colectia de rapoarte deschise dintr-o baza de
date;
Screen permite accesul la obiectul Screen (va fi descris in paragrafele
urmatoare).
Obiectul
Form refera un obiect de tip formular. Toate formularele deschise din baza de
date se regasesc in colectia Forms, fiind identificate printr-un numar, alocat
in ordinea deschiderii acestora. Primul formular deschis are numarul de ordine
zero. Pentru a afla numarul de formulare deschise la un moment dat, trebuie
citita proprietatea Count a colectiei Forms.
Metodele
ale obiectului Form sunt:
Repaint redeseneaza pe ecran formularul pentru care a fost apelata
aceasta metoda;
Requery reactualizeaza inregistrarile din formular (daca formularul are
ca sursa o interogare se reface aceasta);
SetFocus se cedeaza controlul formularului specificat impreuna cu metoda;
Undo - toate modificarile facute datelor afisate in formular se pierd.
Dintre
proprietatile acestui obiect amintim:
OpenArgs - sir de caractere care poate fi transmis ca parametru la
deschiderea unui formular ;
RecordSource - numele unei tabele, interogari sau o fraza SQL ce are ca
rezultat un set de inregistrari de care este atasat formularul;
RecordSelectors seteaza aparitia marcatorului de inregistrare pe formular
(TRUE) sau dezactivarea acestuia (FALSE);
DataEntry - formularul este deschis numai pentru introducerea de
inregistrari noi;
AutoCenter - formularul este afisat pe centrul ecranului;
AutoResize - formularul se redimensioneaza pe ecran automat, astfel incat
sa se vada tot continutul sau;
Caption - sir de caractere afisat in bara de titlu a ferestrei
formularului;
ControlBox seteaza activarea (TRUE) sau dezactivarea (FALSE) butoanelor
de control ale ferestrei formularului;
NavigationButtons seteaza activarea (TRUE) sau dezactivarea (FALSE)
controlului pentru deplasarea intre inregistrarile unui formular;
Toolbar indica bara de instrumente (Toolbar) afisata o data cu
formularul;
Controls reprezinta colectia de controale de pe un formular.
9 Programarea
dirijata de evenimente in Access 2000
Se poate
vorbi de programare dirijata de evenimente in Access 2000 in contextul
formularelor, rapoartelor si controalelor de pe un formular/raport sau
sectiunile acestora. Evenimente in Access 2000 pot fi de exemplu
deschiderea unui formular/raport, inchiderea unui formular/raport, scrierea
unei inregistrari intr-o tabela, stergerea unei inregistrari
dintr-o tabela, dublu clic pe mouse, activarea unui buton de comanda,
o eroare etc. Tuturor evenimentelor din Access 2000 li se pot atasa
proceduri, macro-uri, expresii. Astfel de exemplu, la evenimentul de deschidere
a unui formular se poate atasa o procedura/functie care sa
testeze daca un anumit utilizator are drepturi de utilizare a acestuia sau
inainte de salvarea unei inregistrari intr-o tabela se poate
atasa o procedura care sa verifice respectarea anumitor
corelatii dintre date etc.
Pentru a
atasa o procedura la un eveniment trebuie parcurse urmatoarele etape:
afisati fereastra de proprietati (Properties) a
obiectului dorit (Form,Control,Report, etc.): View > Properties:

selectati sectiunea Event,
selectati evenimentul la care doriti sa atasati
o procedura,
click pe butonul
pentru editarea
procedurii respective.
Pentru un
obiect fomular (Form) principalele evenimente sunt:
OnClose : se produce la inchiderea si stergerea de pe ecran a
formularului,
OnLoad: se produce la deschiderea formularului, in momentul in care o
inregistrare din tabela sau interogarea atasata formularului (in
proprietatea Record Source) este afisata pe ecran,
OnCurrent: se declanseaza atunci cand o inregistrare din tabela
sau interogarea atasata formularului devine inregistrare
curenta.
Pentru
controale dintre evenimentele caracteristice acestora se pot enumera:
OnClick:se declanseaza in momentul in care se activeaza
butonul mouse-ului,
OnDblClick: se declanseaza in momentul in care se
activeaza de doua ori butonul mouse-ului (la dublu clic),
OnMouseMove: se declanseaza in momentul in care utilizatorul
muta mouse-ul pe deasupra controlului unde se trateaza acest
eveniment,
OnChange: se declanseaza atunci cand continutul unui
control caseta de text (Text Box) sau lista derulanta (Combo
Box) se modifica.