Obiecte de tip modul. Aplicatii
Într-o variabila de acest tip puteti stoca text, date numerice sau orice alt tip de date predefinit în Access. Spre exemplu:
Dim varOrice As Variant
varOrice = 32
varOrice = varOrice & " este un numar întreg"
În prima linie de cod declaram variabila varOrice ca fiind de tipul Variant, apoi îi atribuim valoarea 32. În cea de-a 3-a linie de cod am folosit caracterul & pentru a concatena 32 cu un sir de caractere. Astfel, variabila noastra contine sirul de caractere "32 este un numar întreg". Access a facut implicit conversia de la tipul întreg la sir de caractere. Iata un alt exemplu:
varOrice =
varOrice = varOrice + "10"
Cea de-a doua linie de cod va face ca valoarea lui varOrice sa fie 12.5, prin conversia sirului de caractere "2,5" la numarul real 2.5. Acelasi efect îl vor avea si urmatoarele liniii de cod:
varOrice = 2.5
varOrice = varOrice + 10
De aceasta data, sirul "10" va fi convertit la numarul întreg 10.
Atunci când lucrati cu variabile de tipul Variant, este bine sa stiti urmatoarele:
Access va converti variabila la tipul de date corespunzator valorii atribuite;
atunci când doriti sa concatenati doua siruri de caractere, folositi operatorul & în loc de +;
Când folositi operatorul + pentru lucrul cu variabile de tip Variant, Access va actiona astfel:
daca ambele valori sunt numerice, se va efectua o adunare;
daca ambele contin siruri de caractere, ele vor fi concatenate;
daca una este o valoare numerica si cealalta este un sir de caractere, Access va încerca s-o converteasca în valoare numerica si sa faca adunarea; daca nu reuseste, va rezulta o eroare.
Pentru a determina ce tip de date contine o variabila de tip Variant la un moment dat, apelati functia predefinita VarType. Aceasta va returna una dintre valorile prezentate în tabelul urmator:
Valoarea returnata |
Tipul de date |
Constanta intrinseca |
vid (variabila este neinitializata) |
VbEmpty |
|
Null |
VbNull |
|
Integer |
VbInteger |
|
Long |
VbLong |
|
Single |
VbSingle |
|
Double |
VbDouble |
|
Currency |
vbCurrency |
|
Date |
vbDate |
|
String |
vbString |
|
Object |
vbObject |
|
eroare |
VbError |
|
Boolean |
vbBoolean |
|
Variant (numai pentru matrice) |
vbVariant |
|
obiect DAO |
vbDataObject |
|
Decimal |
vbDecimal |
|
Byte |
vbByte |
|
matrice |
vbArray |
Atunci când o variabila este declarata, ei i se atribuie valoarea initiala 0, daca variabila este de tip numeric, sau (sirul vid), daca este de tip sir de caractere. Variabilelor de tip Variant însa, nu li se atribuie la declarare nici o valoare, cu alte cuvinte sunt "vide" (a nu se confunda cu 0, Null sau ). Aceste variabile ramân vide pâna în momentul când li se atribuie o valoare. Puteti testa daca o variabila de tip Variant a fost sau nu initializata cu ajutorul functiei IsEmpty, care returneaza valoarea True daca variabila este "vida". Pentru a "vida" din nou o variabila, trebuie sa-i atribuiti ca valoare o alta variabila de tip Variant care nu a fost înca initializata:
Dim varOrice As Variant
acum varOrice este vida
varOrice = 0
If IsEmpty(varOrice) Then
am testat daca varOrice este vida (si nu este)
Dim varCeva As Variant
varOrice = varCeva
acum varOrice este vida din nou
O alta valoare speciala pe care o poate avea o variabila de tip Variant este Null (daca veti încerca sa atribuiti valoare Null unei variabile de orice alt tip decât Variant, veti obtine o eroare). Daca folositi valoare Null într-o expresie, întreaga expresie va avea valoarea Null. De exemplu:
Dim varOrice As Variant
varOrice = Null
varOrice = varOrice + 2.5
Dupa cea de-a treia linie de cod, varOrice va avea tot valoarea Null. Daca înlocuiti aceasta linie cu:
varOrice = varOrice & "ceva"
varOrice va avea valoarea "ceva". Deci, operatorul & este singurul care nu propaga valoarea Null într-o expresie.
Puteti testa daca o variabila are valoare Null cu ajutorul functiei IsNull
Variabilele de tip Variant sunt foarte utile, deoarece, pe lânga faptul ca nu trebuie sa va bateti capul cu alegerea unui tip de date, sunt singurul tip de variabile carora li se poate atribui valoare Null. Astfel, daca unei anumite variabile îi veti atribui valori dintr-un câmp al unei tabele care poate contine si valoarea Null, acea variabila trebuie sa fie de tip Variant. Folosirea acestui tip de variabile are însa si dezavantaje, printre care încetinirea executiei aplicatiei si chiar posibila aparitie a unor erori.
În exemplul de mai jos vom vedea ce se poate întâmpla în cazul în care nu am stabilit aceasta optiune în cadrul sectiunii Declaration a unui modul:
Sub AriaCercului (dblRaza As Double
Dim dblAria As Double
dblAria = 3.14 * dblRsza * dblRaza
MsgBox ("Aria = " & dblAria)
EndSub
Pentru a rula aceasta subrutina, deschideti fereastra Debug, apasând butonul Debug Window de pe bara de instrumente (fereastra Debug va va permite sa apelati procedurile direct, pentru a le putea testa). Scrieti în partea de jos a ferestrei Debug linia:
Call AriaCercului (5)
Dupa aceea, apasati pe Enter si veti vedea rezultatul 0. Este clar ca acest rezultat este eronat. Motivul este acela ca în codul subrutinei s-a strecurat o eroare: în loc de dblRaza am scris, într-un loc, dblRsza. Optiunea Option Explicit nefiind stabila, si deci nefiind necesar ca variabila sa fie declarata înainte de a fi folosita, Access a atribuit variabilei dblRsza valoarea implicita 0, care a dus la acest rezultat eronat.
Pentru ca aceasta optiune sa fie adaugata automat la orice modul nou pe care îl creati, alegeti comanda Tools/Option si, în pagina Module a ferestrei Option, validati optiunea Require Variable Declaration.
O matrice poate fi privita ca o multime de variabile de acelasi tip, având acelasi nume si care stocheaza informatii similare. Fiecarei variabile ce compune matricea îi corespunde un indice (un numar de ordine). Daca numarul de elemente ale matricei a fost specificat la declarare, matricea se numeste statica, altfel, ea se numeste dinamica.
Dupa ce ati fixat numarul de elemente în declararea matricei, acesta nu mai poate fi schimbat pe parcurs. Matricele statice se declara astfel:
Dim nume_matrice ( ip To iu ) As tip_de date
unde:
nume_matrice - este identificatorul (numele) matricei
ip - este indicele primului element
iu - este indicele ultimului element
tip_de_date - este tipul datelor stocate în matrice
exemplu:
Sub MatriceStat()
Dim i As Integer
Dim iMatrice(1 To 5) As Integer
iMatrice(1) = InputBox("Introduceti primul element", "Matrice")
For i = 2 To 5
iMatrice(i) = InputBox("Introduceti al" & i & "-lea element", "Matrice")
Next i
MsgBox ("Primul element este " & iMatrice(1))
For i = 2 To 5
MsgBox ("Al " & i & "-lea element este " & iMatrice(i))
Next i
End Sub
Nu este obligatoriu ca indicele primului element al unei matrici sa fie 1; el poate fi orice alt numar întreg, de exemplu:
Dim iMatrice(5 To 14) As Integer
este declaratia unei matrice de 10 elemente numere întregi.
Daca nu specificati indicele primului element al unei matrici, Access va considera în mod implicit ca acesta este 0. astfel, urmatoarele doua declaratii sunt echivalente:
Dim iMatrice(9) As Integer
Dim iMatrice(0 To 9) As Integer
Daca veti dori ca indicele implicit al primului element sa nu fie 0, ci altul (1, de exemplu), introduceti la sectiunea Declaration a modulului urmatoarea linie de cod:
Option Base 1
Daca nu cunoasteti de la început numarul de elemente pe care trebuie sa le aiba o matrice, puteti sa o declarati ca fiind dinamica. Astfel de matrici se declarara tot cu ajutorul instructiunii Dim, Static, Private sau Public, dar punând doua paranteze rotunde dupa numele matricei. Apoi, cu ajutorul instructiunii ReDim, puteti fixa indicii primului si ultimului element al matricei.
Exemplu:
Sub MatriceDin()
Dim i As Integer
Dim iTot As Integer
Dim iMatrice() As Integer
iTot = InputBox("Introduceti numarul total de elemente")
ReDim iMatrice(1 To iTot)
iMatrice(1) = InputBox("Introduceti primul element", "Matrice")
For i = 2 To iTot
iMatrice(i) = InputBox("Introduceti al" & i & "-lea element", "Matrice")
Next i
MsgBox ("Primul element este " & iMatrice(1))
For i = 2 To iTot
MsgBox ("Al " & i & "-lea element este " & iMatrice(i))
Next i
End Sub
Dupa ce ati specificat, cu ajutorul instructiunii ReDim, indecsii primului si ultimului element al matricei, puteti folosi din nou aceasta instructiune pentru a modifica acesti indecsi (si, deci, dimensiunea totala a matricei). În mod normal, modicicând acesti indecsi se vor pierde valorile stocate de elementele matricei. Pentru a preveni acest lucru, folositi cuvântul cheie Preserve, astfel:
Dim iMatrice() As Integer
ReDim iMatrice(1 To 10)
si dorim ulterior sa reducem la cinci numarul de elemente fara a pierde valorile primelor 5, vom scrie:
ReDim Preserve iMatrice(1 To 5)
Exista trei functii care ne ajuta sa aflam daca o variabila este simpla sau este o matrice: IsArray, VarType si TypeName.
Prima returneaza valoarea True daca variabila care îi este data ca argument este o matrice si False daca nu.
A treia se aseamana cu a doua, cu diferenta ca în locul valorii corespunzatoare unui tip de date, ea returneaza chiar numele tipului respectiv.
|