Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Vizibilitatea si durata de viata a variabilelor

c



+ Font mai mare | - Font mai mic



Vizibilitatea si durata de viata a variabilelor

Vizibilitatea unei variabile este data de portiunea de cod in care ea poate fi folosita si depinde de locul in care a fost declarata. Vizi-bilitatea unei variabile create in cadrul unei proceduri se reduce doar la acea procedura si se spune ca vizibilitatea sa este locala. O variabila poate fi declarata si in afara oricarei proceduri, in cadrul sectiunii (General) (Declarations) a unui modul. In acest caz, ea poate fi folosita de toate procedurile din modulul respectiv si din alte module si se spune ca vizibilitatea sa este publica.



Durata de viata a unei variabile e data de perioada in care ea va putea contine o valoare. Astfel, o variabila locala a unei proceduri "traieste" atata timp cat se ruleaza procedura respectiva si este recreata la urmatorul apel al procedurii.daca se doreste ca o variabila locala sa existe si dupa terminarea procedurii, se va folosi cuvantul cheie Static la declararea ei. Se poate declara si o procedura ca fiind statica, astfel incat toate variabilele sale locale sa fie statice.

Variabilele publice exista atata timp cat este deschisa baza de date.

In Access se poate stabili si vizibilitatea procedurilor, folosind cuvintele cheie Public si Private. O procedura avand specificatorul Private poate fi apelata numai din interiorul modulului in care este declarata, in timp ce o procedura cu specificatorul Public poate fi apelata din orice alt modul. Pentru a putea apela o procedura din fereastra Debug, aceasta trebuie sa fie publica.

Variabile statice

Pentru ca o variabila declarata intr-o procedura sa-si pastreze valoarea si intre doua apeluri ale procedurii, ea trebuie sa fie declarata folosind cuvantul cheie Static, in locul lui Dim. O astfel de variabila va fi initializata o singura data: la primul apel al procedurii.

Fie exemplul:

Sub VarStatic()

Static intVar As Integer

IntVar = intVar + 1

Debug.Print intVar

End Sub

Dupa ce se ruleaza rutina de mai multe ori, rezultatele vor fi cele din figura 135:

Figura 135

Daca intVar nu ar fi fost declarata ca statica, subrutina ar fi tiparit de fiecare data aceeasi valoare: 1.

Pentru ca toate variabilele unei proceduri sa fie statice, se foloseste cuvantul cheie Static inaintea declaratiei procedurii:

Static Sub VarStatic()

Variabile publice

Exista doua tipuri de variabile publice in Access:

variabile publice in cadrul unui modul;

variabile publice in cadrul aplicatiei.

Variabilele publice in cadrul unui modul se declara cu ajutorul instructiunii Dim la sectiunea (General) (Declarations) a modulului si pot fi folosite de catre toate procedurile modulului.

Astfel de variabile sunt folosite in urmatorul exemplu:

la sectiunea (Declarations) a unui modul se va declara variabila intVarModul astfel:

Dim intVarModul As Integer

se creeaza urmatoarele doua subrutine:

Sub Incrementare()

IntVarModul = intVarModul + 1

End Sub

si

Sub Tiparire()

Debug.Print intVarModul

End Sub

se apeleaza de mai multe ori ambele subrutine din fereastra Debug. Figura 136 prezinta rezultatele (de exemplu, dupa ce s-a apelat o data subrutina Incrementare si o data Tiparire, in fereastra Immediate s-a afisat 1):


Figura 136

se creeaza o a treia procedura, in acelasi modul:

Sub LocalVar()

Dim intVarModul As Integer

IntVarModul = 50

Debug.Print intVarModul

End Sub

dupa ce se apeleaza o data subrutina LocalVar si apoi, din nou Tiparire, in figura 137 se vor vedea rezultatele:


Figura 137

LocalVar lucreaza cu variabila intVarModul declarata in inte-riorul sau, fara a modifica sau a fi afectata de variabila publica intVarModul, chiar daca acestea au acelasi nume.

Observatie:

Pentru a evita confuziile este bine sa se aleaga pentru variabile locale nume diferite de cele ale variabilelor publice.

Variabilele publice in cadrul aplicatiei pot fi accesate din toate modulele aplicatiei, dar pot fi declarate numai in cadrul sectiunii (General) (Declarations) a unui modul standard. Aceste variabile se declara inlocuind instructiunea Dim cu instructiunea Public:

Public intVarPublic As Integer

Variabilele nu se pot declara ca publice in cadrul procedurilor.

Instructiuni de control

VBA ofera posibilitatea de a testa in cadrul procedurilor anumite conditii si de a efectua operatii diferite in functie de rezultatele testelor

Instructiunea IfThen

Instructiunea IfThen se foloseste in cazul in care se doreste executarea anumitor operatii doar daca o conditie este adevarata. Ea are doua sintaxe:

Daca instructiunea este folosita pe o singura linie de cod, sintaxa este:

If conditie Then instructiune

Altfel, daca instructiunea este compusa din mai multe linii de cod:

If conditie Then

Instructiuni

End If

A doua varianta este utila atunci cand se doreste executarea mai multor instructiuni in cazul in care conditia este adevarata. In cadrul clauzei If poate aparea orice expresie. Daca valoarea expresiei evaluate este diferita de 0, ea este considerata adevarata, altfel este considerata falsa.

Exemplu de folosire a ambelor variante ale instructiunii IfThen:

Sub TestIfThen(strDat As String, strCautat AS String)

Dim strRezultat As String

If strDat = "" Then strRezultat = "Sirul dat este vid"

If InStr(strDat, strCautat) Then

StrRezultat = strCautat

StrRezultat = strRezultat & " se afla in " & strDat

End If

Debug.Print strRezultat

End Sub

Mai intai se va apela subrutina TestIfThen cu primul parametru vid si cel deal doilea avand valoarea "test":

Call TestIfThen("", "test")

A doua oara, se va apela aceeasi subrutina cu primul parametru avand valoarea "Acesta este un test", iar cel de-al doilea raminand cu valoarea "test":

Call TestIfThen("Acesta este un test", "test")

Figura 138 prezinta rezultatele celor doua rulari, in fereastra Immediate:


Figura 138

In cadrul subrutinei TestIfThen s-a folosit o functie predefinita in Access, InStr, care verifica daca un sir de caractere (strCautat) se gaseste in alt sir (strDat) si returneaza pozitia la care apare sirul cautat in sirul sursa sau 0 daca sirul cautat nu se regaseste in sirul sursa.

Instructiunea IfThenElse

Pentru a specifica ce operatii trebuie efectuate in cazul in care conditia este falsa, se foloseste instructiunea IfThenElse.

Exemplu:

If InStr(strDat, strCautat) Then

StrRezultat = strCautat & " se afla in " & strDat

Else

StrRezultat = strCautat & " nu se afla in " & strDat

End If

Instructiunea ElseIf

Aceasta instructiune poate fi privita ca un mijloc de a imbrica mai multe instructiuni IfThenElse, deci si de a verifica mai multe conditii.

Iata un exemplu:

If strDat = "" Then

StrReyultat = "Sirul dat este vid"

ElseIf InStr(strDat, strCautat) Then

StrRezultat = strCautat & " se afla in " & strDat

Else

StrRezultat = strCautat & " nu se afla in " & strDat

End If

Astfel, daca prima conditie nu e adevarata, se verifica cea de-a doua, si daca nici aceasta nu este adevarata se executa instructiunea din ca-drul clauzei Else; in acest mod se pot folosi oricate instructiuni ElseIf.

Instructiunea Select Case

Atunci cand trebuie sa se testeze mai multe conditii si sa se efectueze pentru fiecare un anumit set de operatii, folosirea instructiunii ElseIf poate deveni greoaie. In schimb, se poate folosi o instructiune Select Case care sa faca acelasi lucru. Astfel, urmatoarele doua secvente duc la acelasi rezultat:

If intVarsta<=18 Then

ElseIf intVarsta>=19 And intVarsta<=25 Then

ElseIf intVarsta>=26 And intVarsta<=40 Then

Else

End If

si

Select Case intVarsta

Case Is <=18

Case 19 To 25

Case 26 To 40

Case Else

End Select

Expresiile clauzelor Case se testeaza in ordinea in care sunt date si in momentul in care este intalnita o expresie adevarata, se vor executa instructiunile corespunzatoare si se va iesi din instructiunea Case. Astfel, daca expresiile a doua dintre clauzele Case sunt adevarate, va fi executat numai codul corespunzator primeia dintre ele, nemaifacandu-se apoi nici o verificare.

Instructiunea Case de mai sus poate fi scrisa si astfel:

Select Case intVarsta

Case Is <=18

Case 19, 20, 21, 22, 23, 24, 25

Case 26 To 40

Case Else

End Select

Existenta clauzei Case Else in cadrul unei instructiuni Select Case nu este obligatorie, ea poate fi insa utila in cazul in care variabila testata poate avea si alta valoare decat cele cuprinse in clauzele Case.

Observatie:

Variabila testata poate contine atat valori numerice, cat si siruri de caractere sau date.

Instructiunea IIf (Immediate If)

Aceasta instructiune este aproape echivalenta cu instructiunea IfThenElse.

Sintaxa instructiunii IIf este urmatoarea:

IIf(conditie, valoarea1, valoarea2),

unde:

conditie este conditia care trebuie sa fie testata;

valoarea1 este valoarea returnata in cazul in care conditia este adevarata;

valoarea2 este valoarea returnata cand conditia este falsa.

Fie urmatoarele doua functii:

Function Impartire(intImpartitor As Integer, intDeimp As Integer) As Double

If intImpartitor = 0 Then

Impartire = 0

Else

Impartire = intDeimp / IntImpartitor

End If

Debug.Print intDeimp & ':' & IntImpartitor & '=' & Impartire

End Function

si

Function Impartire(intImpartitor As Integer, intDeimp As Integer) As Double

Impartire = IIf(intImpartitor=0,0,intDeimp / intImpartitor)

End Function

Aparent, cele doua functii fac acelasi lucru. Diferenta consta in faptul ca in prima functie, daca este indeplinita conditia instructiunii If, se executa instructiunea Impartire = 0 si se iese din instructiunea IfThenElse fara alte verificari. In instructiunea IIf din cea de-a doua functie se evalueaza insa toate argumentele. Astfel, daca intImpartitor=0 , la evaluarea lui intDeimp / intImpartitor va rezulta o eroare.

Faptul ca in instructiunea IIf se evalueaza toate argumentele, nu numai ca incetineste executia procedurii, dar poate duce si la erori.

Instructiuni iterative

Exista situatii, foarte des intalnite in programare, cand un anumit bloc de instructiuni trebuie sa fie executat de mai multe ori. Pentru astfel de operatii, VBA pune la dispozitie instructiunile ForNext si DoLoop.

Instructiunea ForNext

Aceasta instructiune este utila atunci cand se stie precis cate iteratii trebuie efectuate.

Sintaxa ei este:

For contor = val_init To val_final [Step pasul]

Next [contor]

unde:

contor - variabila care se incrementeaza la fiecare iteratie;

val_init - valoarea initiala a variabilei contor;

val_final - valoarea finala a variabilei contor;

pasul - valoarea cu care se incrementeaza variabila contor la fiecare iteratie.

Valoarea implicita a pasului este 1. pasul poate fi si negativ, caz in care variabila contor va descreste la fiecare iteratie cu valoarea absoluta a pasului.

Exemplu:

For intCont = 1 To intTotal Step 2

Debug.Print intCont

Next

In exemplul de mai sus, valoarea initiala a contorului intCont este 1 si la fiecare pas aceasta valoare creste cu 2 unitati, pana cand ega-leaza valoarea variabilei intTotal. De asemenea, la fiecare iteratie se va afisa valoarea lui intCont

Instructiunea DoLoop

In situatiile in care un set de instructiuni trebuie sa se execute pana cand sau atata timp cat o anumita conditie este satisfacuta, se foloseste instructiunea DoLoop, care are urmatoarele sintaxe:

Do Until conditie

Bloc de instructiuni

Loop

Sau

Do

Bloc de instructiuni

Loop Until conditie

Sau

Do While conditie

Bloc de instructiuni

Loop

Sau

Bloc de instructiuni

Loop While conditie

Primele doua variante ale instructiunii DoLoop executa blocul de instructiuni pana cand conditia va deveni adevarata. Deosebirea dintre ele este aceea ca in cea de-a doua varianta blocul de instructiuni se executa cel putin o data.

Ultimele doua variante ale instructiunii DoLoop executa blocul de instructiuni atata timp cat conditia este adevarata cu deosebirea ca, in cazul ultimei variante, blocul de instructiuni se executa cel putin o data.

Intreruperea iterarii

Atat in cazul instructiunii ForNext, cat si in cel al instructiunii DoLoop, se stie cand anume se va opri procesul iterrativ. VBA ofera insa si posibilitatea de a intrerupe acest proces la o anumita iteratie, cu ajutorul instructiunii Exit.

De exemplu:

For intCont = 1 To intTotal

If intStop Then

Exit For

End If

Debug.Print intCont

Next

Daca intStop este diferit de zero, procesul iterativ se opreste, indiferent de valoarea lui intCont

Pentru a parasi o subrutina sau o functie, se pot folosi instructiu-nile Exit Sub sau Exit Function



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1123
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved