Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Limbajul Visual Basic - Editarea modulelor VBA, Instructiuni pentru afisarea si introducerea datelor, Operatori

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.