Scrigroup - Documente si articole

     

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


Programarea in Access

access



+ Font mai mare | - Font mai mic



Programarea in Access

Pentru inceput vom incerca sa raspundem la doua intrebari : Ce sunt Visual Basic pentru aplicatii si Access Basic ? De ce le folosim ?



Deoarece Access Basic este derivat din Visual Basic, o sa ne ocupam mai mult de Visual Basic pentru aplicatii. Visual Basic pentru aplicatii, prescurtat uzual VBA, pune la dispozitie un limbaj complex pentru dezvoltarea aplicatiilor in cadrul programelor din Microsoft Office. Aceasta inseamna ca nucleul limbajului, componentele sale si mediul sunt aceleasi ca in Microsoft Access for Windows 95/97, Microsoft Visual Basic, Microsoft Excel si Microsoft Project.

Aplicatiile mai simple din Access pot fi scrise folosind comenzi macro. Desi comenzile macro sunt bune pentru crearea rapida de prototipuri de functii si pentru dezvoltarea majoritatii aplicatiilor de baza, dezvoltarea unor aplicatii serioase in Access se face folosind limbajul Access Basic, respectiv VBA.

Marile avantaje pe care le ofera limbajele de programe mai sus amintite, fata de comenzile macro, ar fi :

Implementarea tratarii erorilor;

Executia procesului tranzactional;

Crearea unor structuri ciclice pentru parcurgerea seturilor de inregistrari;

Apelarea functiilor Windows API;

Crearea prin program a obiectelor bazei de date;

Utilizarea constantelor si a variabilelor;

De asemenea, Access Basic si VBA usureaza scrierea bibliotecilor de functii reutilizabile, precum si proiectarea si depanarea proceselor complexe de catre programatori. In concluzie, desi comenzile macro pot da solutii rapide problemelor simple, limitarile lor determina necesitatea folosirii limbajelor de programare pentru dezvoltarea solutiilor mai complexe.

Module si proceduri

Codul Access Basic si VBA este scris in unitati numite proceduri. O procedura contine o secventa de cod Access Basic sau VBA care executa o operatie sau calculeaza o valoare. Exista doua feluri de proceduri :

Subrutine (Sub)

Functii (Function)

O subrutina (sub-procedura) este o rutina care raspunde la aparitia unui eveniment sau executa o anumita actiune. O functie este un tip special de rutina, datorata faptului ca poate intoarce o valoare. Aceste subrutine si functii sunt pastrate in module. Modulele furnizeaza o cale de a organiza procedurile. Cu toate ca toate procedurile pot fi inglobate intr-un singur modul, este mai convenabil sa le divizam in grupuri logice, si fiecare grup sa-l stocam in module separate. Modulele pot fi globale sau specifice unui anumit formular sau raport. Modulele specifice unui formular sau raport sunt in general numite coduri din spatele formularelor (Code Behind Forms - CBF).

Exista doua feluri de rutine, rutinele evenimentelor si rutine definite de utilizator. Procedurile evenimentelor sunt create automat atunci cand scrieti codul evenimentului pentru un control. De exemplu, rutina Private Sub OKButton_Click() este creata atunci cand plasati instructiuni de cod in evenimentul Click al butonului numit OKButton.

De asemenea, utilizatorii isi pot crea rutine proprii. Acestea nu sunt specifice unui anumit obiect sau eveniment. Depinzand de modul si de locul in care au fost create, ele pot fi apelate de oriunde din aplicatie sau numai dintr-un modul individual de cod, formular sau raport. Iata un mic exemplu de subrutina :

Sub SayHello( )

'Subrutina care afiseaza pe ecran textul 'Hello world !, from Access'.

MsgBox 'Hello world !, from Access '.

End Sub

Cum se pot apela procedurile ? Foarte simplu. Procedurile evenimentelor sunt apelate automat cand are loc un eveniment pentru un obiect. De exemplu, cand utilizatorul executa click pe un buton de comanda, este executat codul evenimentului Click pentru acel buton de comanda. In mod obisnuit, pentru apelarea procedurilor definite de utilizator, se foloseste cuvantul cheie Call, ca in exemplul urmator :

Call SayHello

Apelul se poate face insa si fara cuvantul cheie Call, astfel : SayHello. Totusi, aceasta metoda contravine standardelor, deoarece cuvantul cheie Call indica faptul ca se apeleaza o rutina definita de utilizator sau o rutina eveniment. Cuvantul cheie Call face ca instructiunea sa fie mai clara si mai usor de citit. Deci, va recomandam sa folositi cuvantul cheie Call.

De asemenea, nu e o idee rea sa va comentati codul. O puteti face fie folosind cuvantul cheie Rem, fie apostroful.

Atat subrutinele cat si functiile pot primi argumente (parametri), iar numai functiile pot returna valori. Subrutina din exemplul urmator primeste doi parametri, txtFirst si txtLast.

Private Sub sendMsg _ Click ( )

Call Initials ( txtFirstName, txtLastName)

End Sub

Sub Initials ( sFisrt As String, sLast As String )

MsgBox ' Initialele dvs. sunt '&

Left $ (sFirst, 1) & Left $ (sLast, 1)

End Sub

Codul precedent transmite pur si simplu valori si apoi opereaza cu ele. Exemplul urmator ilustreaza folosirea unei functii care intoarce o valoare :

Private Sub nameFunc _ Click ( )

Dim sInitials As String

SInitials = ReturIni ( txtFirstName, txtLastName )

MsgBox ' Initialele dvs. sunt ' & sInitials

EnduSub

Function ReturIni ( sFirstName As String, sLastName As String )

ReturIni = Left $ ( sFirstName, 1 ) & Left $ ( sLastName, 1 )

End Function

Variabile, constante, tipuri de date

Deseori avem nevoie sa stocam valori temporare cand efectuam operatii in Access Basic sau Visual Basic. De exemplu, poate dorim sa calculam cateva valori, sa le comparam si in functie de rezultatul comparatiei sa executam diferite operatii. Pentru aceasta trebuie sa pastram valorile ca sa le putem compara, dar deoarece avem nevoie de ele doar atata timp cat ruleaza codul nostru nu trebuie sa le stocam in tabele. Access Basic si Visual Basic, ca majoritatea limbajelor de programare, folosesc variabile pentru stocarea valorilor.

Cand creati variabile trebuie sa luati in considerare mai multe lucruri. Modul in care declarati o variabila determina domeniul de valabilitate, durata de valabilitate si alte caracteristici ale acesteia.

Declararea variabilelor

Sunt mai multe metode de declarare a variabilelor in limbajele Access Basic si VBA. Trei metode sunt gresite si numai una e corecta. De exemplu, ati putea declara pur si simplu :

X = 10

Folosind aceasta metoda, practic nu declarati deloc variabila. In mod obisnuit, veti declara variabilele in timp ce le folositi. Aceasta metoda este foarte periculoasa, deoarece poate cauza multe probleme. Ati putea, de asemenea, sa introduceti :

Dim iCounter

Instructiunea Dim declara o variabila. Singura problema a acestei metode este ca nu ati declarat compilatorului tipul variabilei. In acest caz, variabila va avea tipul de data Variant.

O alta greseala obisnuita este declararea mai multor variabile pe aceeasi linie :

Dim iCounter, iAge, iWegiht as Integer

In acest caz, numai ultima variabila este declarata ca o variabila Integer, celelalte variabile sunt declarate Variant.

Cea mai eficienta si mai lipsita de erori metoda de declarare a variabilelor este de a transmite cat mai exact compilatorului tipul de date al variabilelor, ca in exemplul :

Dim iCounter as Integer

Dim sName as String

Asa cum puteti vedea, acest tip de declaratie contine atat numele variabilei, cat si tipul datelor pe care le contine. Acest lucru permite compilatorului sa intercepteze erori de genul memorarii unui sir intr-o variabila de tip intreg. La o implementare corespunzatoare, prin selectarea celui mai scurt tip de date folosit pentru fiecare variabila, puteti reduce resursele necesare executarii programului dumneavoastra. Deci, cu toate ca cele patru variante de declarare a unei variabile sunt corecte din punctul de vedere al compilatorului, ultima metoda este cea mai indicata. Urmariti-o, si va veti scuti de multa bataie de cap.

Revenind un pic la prima metoda de declarare, cea in care practic noi nu declaram variabila inainte de a o folosi. De exemplu, avem functia :

Function SafeSqr (num)

TempVal = Abs (num)

SafeSqr = Sqr (TempVal)

End Function

In functie s-a utilizat variabila TempVal fara sa fie declarata. De fapt, limbajul de programare declara o variabila pentru noi cu numele de TempVal, deci variabila se poate folosi fara sa fie declarata explicit. Cu toate ca aceasta metoda pare a fi interesanta si folositoare, totusi poate genera erori subtile in cod, greu de detectat, daca din greseala se scrie gresit numele variabilei. De exemplu, daca functia ar fi aratat astfel :

Function SafeSqr(num)

TempVal = Abs(num)

SafeSqr = Sqr(TemVal)

End Function

La prima vedere functia este asemanatoare cu prima, dar din greseala la a doua folosire a variabilei TempVal, s-a scris TemVal, deci s-a creat o noua variabila. Prin urmare aceasta functie va returna intotdeauna valoarea zero.

Pentru a evita aceasta problema, putem stipula ca, compilatorul sa genereze mesaj de eroare atunci cand intalneste o variabila nedeclarata explicit. Pentru a face asta, trebuie introdus in sectiunea de declaratii a modulului instructiunea Option explicit. Utilizatorii de Access 95 sau 97 nu trebuie sa-si bata capul cu aceasta problema, deoarece la crearea unui nou modul, instructiunea Option explicit este adaugata automat in modul.

Atentie deci, utilizatori de Access 2.0 !

Tipuri de date VBA

Limbajul VBA ofera mai multe tipuri de date pentru variabile. In tabelul alaturat este afisata o lista a tipurilor de date disponibile, modalitatea standard de denumire a lor, spatiul de stocare necesar, datele pe care le pot pastra si valorile lor prestabilite.

Tipuri de date fundamentale

 


Tipul de date

Denumire conventionala

Exemplu

Spatiu de memo-rare

Domeniu

Valoarea implicita

Byte(Octet)

Bt

btValue

1 octet

Boolean

(Logic)

B

bAnswer

2 octeti

True sau

False

False

Integer

(Intreg)

I

iCounter

2 octeti

De la

-32.768 la

Long Integer (Intreg lung)

I

iAmount

4 octeti

De la

la

Single

(Simplu)

Sng

sngAmount

4 octeti

Intre -3,402823E38

si

-1,401298E-45 (valori negative)

Intre 1,401298E-45

si

3,402823E38

(valori pozitive)

Double

(Dublu)

D

dValue

8 octeti

Intre

-1,79769313486232E308

si

-4,94065645841247E-324

(valori negative)

intre

4,94065645841247E-324

si

1,79769313486232E308

(valori pozitive)

Currency

(valuta)

C

cSalary

8 octeti

De la

la

Date (Data)

Dt

dtStartDate

8 octeti

De la 1 / 1 / 100    la

Object (obiect)

O

oExcel

4 octeti

Orice obiect

Fixed String

(sir static)

S

sName

10 octeti +lungime sir

De la 0 la 2 miliarde

' '

Var.String

(String variabil)

S

sName

Lungime sir

De la 1 la 65.400

' '

Variant

/W numere

Vnt

vntData

16 octeti

Orice variabila numerica sau de tip Double

Emply

(Gol)

Variant

/W caractere

Vnt

vntData

22 octeti

De la 1 la 65.400

Emply

(Gol)

Type

Typ

typEmp

Variabil

Bazat pe elemente

Limbajul VBA ofera mai multe tipuri de date pentru variabile. Va prezentam aici tabelul cu toate tipurile de date disponibile, denumirile conventionale, spatiul de stocare necesar, datele pe care le pot pastra si valorile lor implicite.

Domeniul si durata de valabilitate a variabilelor

Variabilele pot fi declarate local, la nivel de modul sau publice :

Variabile locale. Variabilele locale sunt disponibile numai in subrutina in care au fost declarate. Iata un exemplu ilustrativ :

Private Sub OkButton _ Click

Dim sAnimal As String

sAnimal = ' Caine '

Call ChangeAnimal

End Sub

Private Sub ChangeAnimal

sAnimal = ' Pisica '

End Sub

Aceasta secventa de cod ar putea sa fie tratata in doua moduri. Daca este valabila    instructiunea Option Explicit, ceea ce inseamna ca variabilele trebuie sa fie declarate inainte de folosire, acest cod va returna o eroare de compilare. In caz contrar, variabila sAnimal poate fi schimbata in ' Pisica ' numai in cadrul subrutinei ChangeAnimal.

Variabile statice. Exemplul urmator ilustreaza diferenta dintre variabilele locale si cele statice. Variabilele locale sunt initializate la fiecare apel al codului. De fiecare data cand lansati in executie urmatoarea procedura, variabila iCounter ia valoarea 1 :

Private Sub local Click ( )

Dim iCounter As Integer

ICounter = iCounter + 1

End Sub

De fiecare data cand acest cod este executat, instructiunea DIM reinitializeaza variabila iCounter. Este putin diferita de urmatoarea secventa de cod, care ilustreaza folosirea variabilei statice :

Private Sub static_Click ( )

Static iCounter As Integer

ICounter = iCounter + 1

End Sub

De fiecare data c[S1] and acest cod este executat, variabila cu numele iCounter este incrementata si retinuta.

Pana acum, aceasta discutie s-a limitat la variabilele care au domeniul in interiorul unei proceduri individuale. Variabilele de nivel modul pot fi vizualizate din orice rutina apartinand modulului in care au fost declarate. Variabilele de nivel modul sunt declarate prin plasarea unei comenzi DIM in sectiunea General Declarations a formularului, raportului sau modulului de cod.

[General Declarationss

Option Explicit

Dim miCounter As Integer

Valoarea variabilei poate fi schimbata de orice subrutina sau functie din modulul respectiv. De exemplu, urmatoarea subrutina schimba valoarea variabilei de nivel modul miCounter la 20. Retineti conventia de numire a variabilei prin folosirea literei m ca prefix al numelui acesteia. Aceasta o face sa fie cunoscuta ca o variabila de nivel modul. Ar trebui sa folositi declaratii de nivel modul numai pentru variabilele care trebuie sa fie vazute de mai multe rutine. Ar trebui sa incercati sa declarati majoritatea variabilelor dumneavoastra de tip local. Aceasta metoda face codul dumneavoastra mai modular si mai usor de depanat.

Private Sub module_Click ( )

MiCounter = 20

End Sub

Variabile publice. O variabila poate fi accesata de oriunde din aplicatia dumneavoastra. Variabilele publice se folosesc de obicei pentru identificatorii de acces, valori de configurare pentru mediul de lucru si alte variabile care trebuie sa fie vizibile pentru intreaga aplicatie.

Declaratiile variabilelor publice trebuie sa fie plasate in sectiunea General Declarations a modulului de cod. O declaratie de variabila publica arata ca in exemplul urmator :

Option Explicit

Public piCounter As Integer

Retineti folosirea prefixului p, care indica tipul public al variabilei. Secventa de cod urmatoare, plasata in evenimentul Click al butonului de comanda OKButton schimba valoarea variabilei publice piCounter la 150.

Private Sub OKButton_Click ( )

PiCounter = 150

End Sub

Pentru utilizatorul de Access 2.0, cuvantul cheie Public nu exista, echivalentul sau fiind Global. O variabila publica se poate declara in orice modul de cod, cu conditia sa fie precedat de cuvantul cheie Public sau Global. Astfel se pot declara mai multe variabile globale in mai multe module, lucru destul de neplacut, pentru ca daca doriti sa vedeti declaratia unei variabile globale trebuie sa cautati in mai multe module. Un lucru destul de elegant ar fi crearea unui modul separat pentru declaratii, numit de exemplu Declarations, si in care sa nu faceti nimic altceva decat sa va declarati variabilele globale. Insa, pe cat posibil evitati folosirea variabilelor globale.

Constante

O constanta este un nume semnificativ pe care il dati unui sir sau numar. Constantele pot fi folosite numai pentru valori care nu se schimba in timpul executiei aplicatiei. De exemplu, rata impozitului ar putea fi constanta in timpul executiei aplicatiei. Constantele sunt utilizate pentru a creste lizibilitatea codului dumneavoastra si pentru a usura intretinerea programului respectiv.

In limbajul Access Basic si VBA exista doua tipuri de constante. Primul este numit constanta proprie (intrinseca). Constantele de acest tip fac parte din limbajul propriu zis. Ca programator in Access, puteti folosi constante furnizate de Microsoft Access, Visual Basic si obiecte pentru acces la date (DAO = Date Access Objects). De asemenea, puteti folosi constante din orice biblioteca de obiecte pe care o utilizati in aplicatia dumneavoastra. Al doilea tip de constanta este cea simbolica sau definita de utilizator. Acesta este tipul de constanta pe care o declarati dumneavoastra , ca programator.

O constanta definita de utilizator este declarata folosind cuvantul cheie Const. Constantele pot fi declarate in subrutine sau functii in sectiunea General Declarations a unui modul. Iata si un mic exemplu:

Function TotalAmount (SaleAmount As Curreny)

Const TaxRate = 0,0875

TotalAmount = SaleAmount * TaxRate

End Function

Tablouri

Un tablou este format dintr-o serie de variabile referite prin acelasi nume. Fiecare element al unui tablou este diferentiat de celelalte printr.un numar index unic. Tablourile ajuta in multe situatii la crearea unui cod mai simplu si mai mic. Tablourile au o limita superioara si o limita inferioara. Toate elementele unui tablou trebuie sa fie continue.

Domeniul de valabilitate al unui tablou poate fi public, modul sau local. Ca si la celelalte variabile, acest lucru depinde de locul in care a fost declarat tabloul si daca este folosit cuvantul cheie Public sau Global. Limita superioara a unui tablou este zero (ca valoare prestabilita). Toate elementele unui tablou trebuie sa fie de acelasi tip.

Exista trei modalitati de a declara un tablou cu marime fixa, in functie de domeniul de valabilitate pe care doriti sa-l aiba :

Pentru a crea un tablou global sau public se foloseste comanda Global sau Public.

Pentru a crea un tablou la nivel de modul se foloseste comanda Dim in sectiunea de declaratii din modul.

In cadrul unei proceduri, se foloseste comanda Static (se poate folosi si Dim daca toata procedura a fost declarata statica).

In Access Basic respectiv VBA exista doua tipuri de tablouri : statice si dinamice.

Tablouri statice

Cand declarati un tablou static, indicati compilatorului limita superioara si tipul de date pe care le va contine tabloul. Urmatoarea secventa de cod creeaza un tablou care va contine sase variabile de tip sir :

Dim sName (5) As String

Acest tablou este static, in sensul ca dimensiunea sa nu poate fi modificata in timpul executiei aplicatiei. Secventa de cod da un exemplu despre modul in care puteti sa faceti o bucla intr-un tablou :

Sub Fixed_Array ( )

Dim sName (5) As String

Dim i As Integer

sNames (0) = ' Catalin [S2] 

sNames (1) = ' Adrian '

For i = 0 To Ubound(sName)

MsgBox ( sNames (1) )

Next i

End Sub

Tablouri dinamice

Deseori nu cunoasteti numarul elementelor pe care trebuie sa le contina un tablou. In acest caz, trebuie sa declarati un tablou dinamic. Tablourile dinamice pot fi redimensionate in timpul executiei aplicatiei. Acest lucru face ca programul dumneavoastra sa fie mai eficient, deoarece in cazul unui tablou static, VBA face o prealocare de spatiu de memorie pentru toate elementele, indiferent daca acestea contin sau nu date.

Pentru a crea un tablou dinamic, declarati tabloul fara sa atribuiti o limita superioara, ca in exemplul urmator :

Sub Dynamic_Array ( )

Dim sNames ( ) As String

Dim i As Integer

ReDim sNames (1)

SNames (0) = ' Catalin '

SNames (1) = ' Adriana '

For i = 0 To Ubound (sName)

MsgBox ( sNames (1) )

Next i

End Sub

Probleme apar cand incercati sa redimensionati tabloul :

Sub Dynamic_Array ( )

Dim sNames ( ) As String

Dim i As Integer

ReDim sNames (1)

SNames (0) = ' Catalin '

SNames (1) = ' Adriana '

ReDim sNames (2)

SNames (2) = ' Ana '

For I =0 To Ubound (sName)

MsgBox ( sNames (1) )

Next I

End Sub

Va asteptati probabil ca toate cele trei elemente ale tabloului sa contina date. De fapt, instructiunea ReDim reinitializeaza toate elementele si numai elementul al doilea va contine o valoare. Acest fenomen poate fi evitat prin folosirea cuvantului cheie Preserve. Codul va arata cam asa :

Sub Dynamic_Array ( )

Dim sNames ( ) As String

Dim I As Integer

ReDim sNames (1)

SNames (0) = ' Catalin '

SNames (1) = ' Adriana '

ReDim Preserve sNames (2)

SNames (2) = ' Ana '

For I = 0 To Ubound (sName)

MsgBox (sNames (1) )

Next I

End Sub

In acest exemplu, toate valorile memorate in tablou sunt pastrate. Sunt si parti ascunse ale folosirii acestui cuvant cheie. Temporar, acest procedeu necesita mai multa memorie deoarece in timpul procesului de redimensionare, VBA creaza un intreg tablou nou. Toate valorile sunt din tabloul originar intr-un tablou nou si apoi tabloul originar este sters din memorie. Daca prelucrati tablouri foarte mari, aceasta metoda poate cauza probleme.

Programarea in Access

Deoarece Microsoft Access 95 are inclus ca limbaj de programare limbajul Visual Basic, in cele ce urmeaza ne vom referi in principal la programarea in VBA si mai putin la limbajul Access Basic folosit in versiunea Access 2.0, iar Microsoft Access 97 are inclus tot limbajul Visual Basic.

Structuri de control

VBA pune la dispozitia programatorilor cateva structuri diferite pentru bucle si pentru luarea de decizii. Cele mai utilizate dintre ele vor fi prezentate mai pe larg, cu exemple de cod.

If. Then . Else. Structura If. Then . Else evalueaza daca o conditie este adevarata sau falsa. Daca expresia este adevarata se executa blocul de instructiuni dintre If si Else, iar daca este falsa se executa toate instructiunile dintre Else si End If. Folosirea comenzii Else este optionala, in cazul nefolosirii ei executandu-se instructiunile dintre If si End If, doar daca conditia este adevarata.

Private Sub IfThenElse Click()

If IsNu11 (Me!Nume) Then

MsgBox "Introduceti o valoare in campul Nume!"

Else

MsgBox "Numele introdus

este:" & Me!Nume

End If

End Sub

In cazul in care se doreste utilizarea mai multor structuri If. Then . Else imbricate, se poate folosi comanda ElseIf, in felul urmator:

Private Sub IfThenElse-Click()

If IsNu11 (Me!Nume) Then

MsgBox "Introduceti o valoare in campul Nume!"

Else If IsNull (Me!Prenume) Then

MsgBox "Introduceti o valoare in campul Prenume!"

Else

MsgBox "Numele si prenumele:" & Me!Nume & " "&Me!Prenume

End If

End Sub

Select Case. In loc sa folosesti mai multe instructiuni If. Then.Else este mult mai simplu sa utilizati o instructiune case. Sa vedem cum se poate utiliza aceasta instructiune, urmarind exemplul urmator:

Private Sub SelectCase-Click()

Dim iResponse As Integer

If IsNull (Me!Varsta) Then

iResponse = 0

Else

iResponse = Me!Varsta

End If

Select Case !Response

Case 0

MsgBox "Introduceti varsta!"

Case 1 to 17

MsgBox "Persoana introdusa este minora!"

Case 18

MsgBox "Persoana introdusa are varsta de 18 ani!"

Case Else

MsgBox "Persoana introdusa este majora!"

End Select

End Sub

Aceasta rutina utilizeaza in prima parte o instructiune If pentru a evalua daca campul Varsta este nul. In acest caz, rutina memoreaza un zero intr-o variabila numita iResponse. In caz contrar, valoarea continuta in campul Varsta este memorata in iResponse. Instructiunea case evalueaza continutul variabilei iResponse. Daca valoarea variabilei este 0, se afiseaza un mesaj "Introduceti varsta". Daca valoarea este intre 1 si 17 inclusiv, este afisat mesajul "Persoana introdusa este minora!". Daca in campul Varsta a fost introdusa valoarea 18 se va afisa mesajul "Persoana introdusa are varsta de 18 ani!", pentru orice alta valoare mesajul afisat fiind "Persoana introdusa este majora!".

Looping (Buclarea). In VBA sunt disponibile mai multe structuri ciclice, dar noi vom prezenta doar doua dintre ele. Prima structura este cu test la inceputul buclei, iar cea de-a doua are conditia la sfarsit.

Private Sub Loop1-Click()

Dim !Counter As Integer

iCounter = 1

Do While !Counter < 5

MsgBox !Counter

iCounter = iCounter + 1

Loop

End Sub

Aceasta structura nu asigura intotdeauna executarea secventei de cod din interiorul buclei (cel putin o singura data). Daca iCounter este mai mare sau egal cu 5, codul din interiorul buclei nu va fi executat niciodata.

Private Sub Loop2-Click ()

Dim iCounter As Integer

iCounter = 5

Do

MsgBox iCounter

iCounter = iCounter + 1

Loop While iCounter < 5

End Sub

Spre deosebire de prima structura, acest cod va fi executat cel putin o singura data, chiar daca iCounter este mai mare decat 5.

For . Next. Structura For. Next este folosita atunci cand doriti sa executati un numar fix de iteratii. Aceasta va arata astfel:

Private Sub ForNext-Click()

Dim iCounter As Integer

For iCounter = 1 To 5

MsgBox iCounter

Next iCounter

End Sub

Se poate observa iCounter se auto-incrementeaza. Unei structuri For.. Next i se poate da, de asemenea, o valoare de incrementare (step):

Private Sub ForNext-Click()

Dim iCounter As Integer

For iCounter = 1 To 5 Step 2

MsgBox iCounter

Next iCounter

End Sub

Functii interne

Visual Basic pentru aplicatii contine o biblioteca de functii foarte bogata si cuprinzatoare. In continuare vom prezenta pe scurt doar cateva dintre ele, sugerandu-va ca in momentele de relaxare sa consultati helpul sau un manual de referinta pentru comenzi si functii, astfel incat sa va obisnuiti cu restul functiilor.

Format - formateaza expresiile in stilul specificat. Primul parametru este expresia pe care doriti sa o formatati, iar cel de-al doilea este tipul de format pe care doriti sa il aplicati

Instr - returneaza pozitia in care un sir se situeaza in interiorul altui sir

Left - functia care returneaza primele n caractere ale unui sir, unde n este un argument care indica numarul de caractere

Right - spre deosebire de left, functia Right returneaza ultimele n caractere ale unui sir, unde n este un argument care indica numarul de caractere

Mid - returneaza un subsir format dintr-un numar specificat de caractere dintr-un sir

Ucase - returneaza un sir cu toate caracterele majuscule

DatePart - returneaza o parte specificata a unei date

DateDiff - returneaza intervalul de timp dintre doua date

DateAdd - returneaza rezultatul adaugarii sau scaderii unei perioade specifice de timp la o (dintr-o) data stabilita.

Diferentele si asemanarile dintre VBA si alte limbaje

In functie de stilul dumneavoastra de programare, daca ati mai lucrat si cu alte limbaje, va veti adapta foarte usor cu unele aspecte ase limbajului Visual Basic pentru aplicatii, in timp ce cu altele vi se va parea incomod de lucrat. Fata de versiunile mai vechi de Basic, au fost schimbate domeniul si durata de valabilitate a variabilelor. Ca orice programator intr-un limbaj procedural, veti descoperi pentru prima oara paradigma orientarii pe evenimente. Pentru programatorii in Xbase trebuie mentionat ca inregistrarile din Access nu au numere de inregistrare si nu exista comanda de anulare a stergerii. Inregistrarile sunt excluse din tabel imediat ce sunt sterse. De asemenea, trecerea de la programarea orientata pe evenimente este o tranzitie dificila pentru programatorii in Xbase. Mai familiarizati cu limbajul VBA ar trebui sa fie programatorii in C. Functiile pot fi apelate fara atribuirea unei valori de returnare. Tipurile definite de utilizator pot deveni baza pentru alte tipuri definite de utilizator, permitandu-se astfel un echivalent al structurilor din C. Insa majoritatea programatorilor in C vor gasi greoaie metoda de tratare a erorilor din VBA.

Depanarea

Desi pentru a putea crea o aplicatie ar ajunge cunostintele pe care le-ati invatat pana acum, este foarte important sa stapaniti arta depanarii, deoarece un bun programator nu este neaparat unul caruia ii reusesc aplicatiile din prima incercare. Din fericire, mediul Access va ofera instrumente excelente pentru a va asista in cursul procesului de depanare. Depanarea este procesul de detectare si inlaturare a problemelor in cadrul programului dumneavoastra. Acest proces implica localizarea si identificarea problemelor in cadrul programului si este o etapa obligatorie in procesul de dezvoltare a aplicatiilor. Instrumentele de depanare ale mediului Access permit parcurgerea pas cu pas a programului, stabilind, dupa nevoie, puncte de intrerupere si puncte de supraveghere. Un punct de intrerupere este un punct in care executia programului va fi oprita neconditionat. In programul dumneavoastra, puteti stabili mai multe puncte de intrerupere. De asemenea, puteti adauga si sterge punctele de intrerupere in timpul executiei programului. Plasarea strategica a punctelor de intrerupere in cadrul programului dumneavoastra va da posibilitatea sa executati sectiunile de cod deja depanate si sa va opriti numai in zonele cu probleme.

Cea mai buna metoda de tratare a erorilor de program este,totusi, evitarea lor de la bun inceput. Tehnicile corecte de programare pot sa fie cu adevarat de folos in acest proces.

Folosirea instructiunii Option Explicit, definirea corecta a variabilelor, folosirea standardelor in denumirea variabilelor si stabilirea unor domenii stricte de valabilitate va pot ajuta sa eliminati erorile de program. In continuare vom prezenta toate aceste elemente care contribuie la eliminarea erorilor de programare.

Option Explicit cere ca toate variabilele sa fie declarate inainte de a fi folosite. Incluzand Option Explicit in fiecare modul de formular, cod sau raport, compilatorul VBA va gasi usor coincidentele in numele variabilelor.

A defini corect variabilele inseamna sa indicati tipul datelor care vor fi memorate intr-o variabila in momentul in care este declarata. De exemplu, instructiunea Dim i as Integer va initializa o variabila care contine valori intregi. Daca undeva in program atribuiti acestei variabile un sir, compilatorul va gasi eroarea.

Tratarea erorilor

Atentie la utilizarea instructiunilor On Error Resume si On Error

Resume Next!

 


Folosirea standardelor in denumirea variabilelor poate, de asemenea, sa va ajute foarte mult in eliminarea erorilor. O denumire atenta a variabilelor face codul mult mai usor de citit si face mai clara destinatia variabilelor.

Prin stabilirea unui domeniu de valabilitate cat mai restrans variabilelor dumneavoastra, reduceti sansele ca un fragment de program sa suprascrie accidental o variabila din alt fragment de program. Ideal ar fi sa folositi variabile locale oriunde este posibil. Folositi variabile globale (publice) sau de nivel modul numai cand este necesar sa vedeti valoarea unei variabile din mai multe subrutine sau din mai multe module.

Tratarea erorilor

Inainte de a incepe analizarea tratarii erorilor, sa analizam putin erorile pe care le puteti intalni. Exista trei tipuri de erori.

Erori de compilare. Aceste erori sunt rezultatul unei instructiuni gresit construite. Poate s-a uitat un cuvant rezervat, poate s-au omis ceva semne de punctuatie necesare. Access Basic si VBA detecteaza aceste erori inainte de executia codului, la compilarea sursei.

Erori run-time. Aceste erori apar (si sunt detectate de limbajul de programare) in timpul executiei programului, cand o instructiune incearca sa execute o operatie imposibila.

Erori logice de programare. Erorile logice de programare pot fi corecte din punct de vedere al sintaxei, pot efectua operatii admise, dar produc rezultate incorecte deoarece codul este gresit din punct de vedere logic.

Erorile apar chiar in absenta erorilor de programare. Este necesar sa va protejati programele si datele de efectele nedorite ale acestor erori. Acest lucru il realizati prin procesul de tratare a erorilor. Tratarea erorilor mai este cunoscuta si sub numele de detectarea erorilor. Tratarea erorilor este procesul de interceptare a raspunsului VBA la aparitia unei erori. Aceasta permite programatorului sa determine nivelul de gravitate al unei erori si sa actioneze corespunzator pentru a raspunde la aparitia acesteia. Fara tratarea erorilor, utilizatorul aplicatiei dumneavoastra este nevoit sa iasa brusc din aplicatie.

Sa analizam un pic urmatoarea functie simpla, FileExist.

Function FileExist (FileName)

FileExist = (Dir(fileName<>**))

End function

Aceasta functie returneaza TRUE daca fisierul specificat exista, si returneaza FALSE in cazul in care fisierul nu exista. Functia Dir returneaza numele fisierului in cazul in care fisierul este gasit la locatia specificata, si returneaza sirul vid in cazul in care fisierul nu este gasit. La prima vedere codul pare sa acopere toate cazurile care pot aparea dupa apelul functiei DIR. Dar, daca de exemplu unitatea de disc care a fost specificata in calea fisierului nu exista, atunci va apare eroarea Device unavailable. Daca fisierul este pe discheta si in unitatea de flopy nu este nici o discheta atunci se va genera eroarea Disk not ready si executia programului se va intrerupe.

Pentru a evita aceasta situatie, se foloseste tratarea erorilor. Functia de mai sus ar putea arata asa:

Function FileExist (fileName)

Dim Msg

On Error GoTo CheckError

FileExist = (Dir(fileName) <>**)

Exist Function

CheckError:

Const ERR-DISKNOTREADY = 71,

ERR-DEVICEUNAVAILABLE = 68

If Err = ERR-DISKNOTREADY) Then

Msg "Insert a flopy Disk in the drive"

If Msgbox (Msg, vbOKCancel) = vbOK Then

Resume

Else

Resume Next

End If

ElseIf Err = ERR-DEVICEUNVAILABLE Then

Msg = "This drive on path Does not exist: " + fileName

MsgBox (Msg, vbOKOnly)

Resume Next

Else

MsgBox Err, Description

Stop

End If

Resume

End Function

Ce se intampla in aceasta functie? La inceput se face apel la functia Dir. Daca aceasta functie genereaza o eroare, atunci eroarea este captata, si se sare cu executia programului la eticheta CheckError. Daca eroarea generata este ERR-DISKNOTREADY, atunci se afiseaza un mesaj ca utilizatorul sa introduca o discheta. In cazul in care utilizatorul doreste sa introduca discheta, atunci se incearca citirea din nou a dischetei, altfel se paraseste functia. Daca eroarea generata este ERR-DEVICEUNAVAILABLE, atunci se afiseaza un mesaj de eroare generat de program si se paraseste functia. In cazul in care s-a generat o eroare neasteptata, atunci se afiseaza eroarea, care de data aceasta nu este generata de program, si se paraseste functia.

O instructiune On Error activeaza procesul de tratare a erorilor. In cazul in care doriti ca fiecare rutina sa trateze erorile prin propriile metode, fiecare dintre rutine trebuie sa cuprinda propria sa instructiune On Error. Astfel, procesul de tratare a erorilor va umple in cascada stiva de apeluri. Daca in stiva de apeluri nu este gasita nici o instructiune On Error va fi apelata procedura de tratare a erorilor a limbajului VBA. Folosind o instructiune On Error, determinati aplicatia sa execute procedura de tratare a erorilor, reluand executia de pe linia imediat urmatoare erorii, sau sa astepte reexecutarea liniei de program cu probleme. Trebuie sa va decideti asupra raspunsului corespunzator pentru fiecare eroare. Uneori este mai indicat ca aplicatia dumneavoastra sa se intrerupa cand raspunde la o eroare. Alteori, este cel mai bine ca rutina sa sara intreaga linie cu probleme. Puteti trata corespunzator fiecare eroare combinand folosirea optiunilor On Error GoTo, On Error Resume Next si On Error Resume.

Instructiunea On Error Goto <label> informeaza VBA, ca, incepand din acest punct, daca apare o eroare, trebuie sa sara la eticheta specificata in instructiune. Este cea mai uzuala metoda de tratare a erorilor. Eticheta specificata in instructiunea On Error trebuie sa existe in procedura si trebuie sa fie unica in cadrul unui modul. Secventa urmatoare de cod ilustreaza un exemplu simplu de tratare a erorilor.

Sub Calculate ( iVar1 As Integer, iVar2 As Integer)

On Error GoTo Error-Handler

Dim rez as Long

Rez = iVar1/iVar

Exist-Sub:

Exit Sub

Error-Handler:

MsgBox Err & ":" & Error

Resume Exit-Sub

End Sub

Functia Err returneaza codul erorii, iar functia Error returneaza eroarea.

Instructiunea On Error Resume Next continua executia programului de la linia imediat urmatoare erorii. Aceasta structura este folosita in mod obisnuit in situatiile in care este mai bine sa fie ignorata o eroare si sa fie continuata executia programului. In exemplul urmator este prezentata o astfel de eroare:

Sub DeleteFile (pFileName)

On Error Resume Next

Kill pFileName

End Sub

Instructiunea Kill este folosita pentru a sterge un fisier de pe disc. Daca fisierul respectiv nu este gasit, apare o eroare. Deoarece doriti sa stergeti fisierul numai daca acesta exista, nu va ingrijoreaza aparitia erorii. Instructiunea On Error Resume Next este foarte potrivita in acest caz, deoarece aplicatia nu este afectata prin continuarea executiei dupa linia cu probleme.

Instructiunea On Error Resume continua executia programului de la linia care a provocat aparitia erorii. Aceasta structura trebuie sa fie folosita cu atentie, deoarece poate trimite programul intr-o bucla infinita, din care nu se mai poate iesi.

Daca Access-ul nu a gasit nici o procedura de tratare a erorilor intr-o subrutina sau functie, cauta in stiva de apeluri un program anterior de tratare a erorilor. Acest caz este ilustrat in fragmentul de cod urmator:

Sub Func1 ()

On Error GoTo Handler-Func1

Debug.Print "Ne aflam in Functia 1"

Call Func2

Debug.Print "Am revenit in Functia 1"

Exit Sub

Handler-Func1:

MsgBox "Eroare in Functia 1 : " &

Error

Resume Next

End Sub

Sub Func2 ()

Debug-Print "Ne aflam in Functia 2"

Call Func3

Debug-Print "Ne aflam inca in Functia 2"

End Sub

Sub Func3 ()

Dim rez As Single

Debug-Print "Ne aflam in Functia 3"

Rez = 5 / 0

Debug.Print "Ne aflam inca in Functia 3"

End Sub

In aceasta situatie, eroarea apare in functia Func3. Deoarece functia Func3 nu are propria procedura de tratare a erorilor, se face referire inapoi la functia Func2. Nici aceasta nu are o procedura de tratare a erorilor. Functia Func2 abandoneaza controlul in favoarea functiei Func1, astfel ca VBA executa codul de eroare in Func , pe linia Debug Print "Revin in Functia 1". Acest tip de tratare a erorilor este periculos si confuz. De aceea, cel mai bine este sa proiectati o rutina generala de tratare a erorilor care sa fie accesata in afara aplicatiei dumneavoastra.

Un program general de tratare a erorilor este o procedura de tratare a erorilor care poate fi apelata de oriunde din aplicatia dumneavoastra si are capacitatea de a raspunde la orice tip de eroare. Un program general de tratare a erorilor preintampina scrierea unor proceduri specifice de tratare a erorilor de oriunde din aplicatie in cel mai eficient mod posibil. Acest program ar trebui sa furnizeze utilizatorului informatii despre eroare, sa permita utilizatorului sa tipareasca aceste informatii si sa memoreze informatiile intr-un fisier.

Obtinerea accesului la datele externe

Microsoft Access asigura posibilitatea de interfata cu date din alte surse. Poate utiliza date din orice sursa de date ODBC, ca si date din FoxPro, dBase, Paradox, Lotus, Excel si multe alte aplicatii. Datele externe sunt memorate in afara bazei de date curente. Access este un produs excelent de tipul front-end. Aceasta inseamna ca asigura metode eficiente si puternice de prezentare a datelor, inclusiv a datelor externe. Datele sunt pastrate in diferite locuri in afara Access-ului din mai multe motive. De exemplu bazele de date de mari dimensiuni pot fi administrate mult mai eficient pe un server de baze de date back-end, cum ar fi Microsoft SQL Server. Deseori, informatiile sunt inregistrate in fisiere FoxPro, dBase sau Paradox deoarece sunt utilizate de aplicatii mai vechi scrise in aceste medii de programare.

Datele de tip Access pot fi pastrate si in alte baze de date decat baza de date a aplicatiei dumneavoastra.

Fisierele create in FoxPro, dBase si Paradox inregistreaza datele in format ISAM (Indexed Sequential Access Method). Ca sa puteti accesa fisiere ISAM trebuie sa instalati driverele necesare pentru comunicarea cu un fisier de tip ISAM.

Legaturile cu datele externe pot fi create usor folosind instrumentele front-end puse la dispozitie de Access. Pentru a crea o legatura cu un tabel din alta baza de date Access sau din oricare baza de date, executati clic pe butonul drept al mouse-ului pe un a din etichetele bazei de date si apoi selectati optiunea Link tables sau selectati optiunea Get External Data din meniul File si apoi alegeti eticheta Link External Data. Va aparea pe ecran caseta de dialog din care trebuie sa selectati numele fisierului si tipul fisierului cu care doriti sa faceti legatura.


 [S1]

 [S2]



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2293
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