Sunteți pe pagina 1din 46

Crearea aplicaiilor grafice cu limbajul Visual Basic

1 Crearea aplicaiilor grafice cu limbajul Visual Basic..................................................2 1.1 Limbajul Visual Basic..........................................................................................2 1.1.1 Tipuri de date standard..................................................................................2 1.1.2 Instruciuni.....................................................................................................5 1.1.3 Funcii i proceduri........................................................................................7 1.1.4 Tipuri de date definite de utilizator...............................................................9 1.2 Mesaje i evenimente...........................................................................................9 1.2.1 Evenimente..................................................................................................10 1.2.2 Crearea unei proceduri asociate unui eveniment.........................................13 1.2.3 Meniurile aplicaiei Visual Basic................................................................18 1.2.4 Casete de mesaj i casete de text.................................................................19 1.2.5 Definirea unei proceduri asociate unei casete text......................................20 1.2.6 Definirea unei proceduri asociate unui buton..............................................23 1.3 Navigarea n tabela rezultat a unui formular......................................................27 1.4 Crearea unei tabele rezultat pentru un formular i navigarea n tabel..............33 1.5 Afiarea numelor cmpurilor tabelei rezultat.....................................................40 1.6 Utilizarea instruciunilor SQL pentru prelucrarea bazei de date........................43 1.7 Probleme propuse...............................................................................................46 1.8 Intrebri de control.............................................................................................46

1 Crearea aplicaiilor grafice cu limbajul Visual Basic


Formularele i rapoartele bazei de date conin obiecte grafice, numite n capitolele anterioare controale, ce permit afiarea datelor din baza de date. In formularele i rapoartele create anterior am utilizat doar casete de text, liste i casete combinate ce afiau valori. Este posibil s adugm i alte obiecte grafice, cum ar fi butoanele care s ne permit s interacionm cu formularele sau rapoartele create: la un clic pe buton s se execute un program ce efectueaz calculele dorite. Asemenea programe se scriu n limbajul Visual Basic.

1.1 Limbajul Visual Basic


1.1.1 Tipuri de date standard
Variabilele unui limbaj se clasific dup tipul lor. Tipul unei variabile este mulimea valorilor pe care le poate lua acea variabil i operaiile ce se pot efectua cu acele valori. Tipul unei variabile este fcut explicit cu o declaraie de tip. Tipurile predefinite n limbajul Visual Basic sunt cele din Tabelul 1. Tip Long Integer Single Double Boolean String Currency Date Semnificaie Numere ntregi Numere ntregi Numere reale n simpl precizie Numere reale n simpl precizie Valoare boolean ir de caractere Valori monetare Dat calendaristic Dimensiune n octei 4 2 4 8 Domeniul de valori (-231 231) (-215 - 215 ) (-1038 1038) (-10307 10307) True , False -

Tabelul 1. Tipurile de date ale limbajului Visual Basic.

Numele de variabile (identificatorii) ncep cu o liter sau caracterul _ (underscore), i pot conine litere, cifre i caracterul _. Literele mari nu sunt deosebite de cele mici. Variabilele sunt definite cu instruciunea Dim cu forma Dim NumeVariabila As tip, NumeVariabila As tip, unde tip este tipul variabilei respective. Exemple. Dim nume As String Dim varsta As Integer Dim salariu As Currency Instruciunea Dim poata defini i tablouri cu una sau mai multe dimensiuni. Forma instruciunii pentru definirea unui vector este Dim NumeTablou (nre) As tip unde nre este numrul de elemente ale vecorului, iar tip tipul elementelor vectorului. Indicii componentelor ncep de la zero. De exemplu, instruciunea

Dim vec(5) As Single definete un vector cu cinci componente reale. Indicii componentelor sunt 0, 1, , 4. Forma instruciunii pentru definirea unei matrice este Dim NumeTablou (nl, nc) As tip unde nc i nl sunt numrul de linii i de coloane ale matricei. De exemplu, Dim mat (2, 3) As Integer definete o matrice cu dou linii i trei coloane cu elemente ntregi. Elementele matricei au indicii (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2). Pentru toate tipurile de date exist dou operaii fundamentale: atribuirea i compararea. Operatorul de atribuire este =. Forma unei instruciuni de atribuire este NumeVariabila = expresie Operatorii de comparare sunt <, <=, >, >=, =, <> Expresiile relaionale au forma expresie aritmetic operator de comparare expresie aritmetic Rezultatul unei expresii relaionale este True (adevrat) sau False (fals).

1.1.1.1 Tipurile numerice


Operatorii pentru tipurile numerice sunt +, -, *, /, \, Mod i ^. In cazul operatorului de mprire /, operanzii sunt convertii n numere reale dac este necesar, dup care se efectueaz mprirea. In cazul operatorului \ ctul se rotunjete la un numr ntreg. Operatorul Mod d restul mpririi a dou numere cu operatorul \. Operatorul ^ efectueaz ridicarea la putere. Expresiile aritmetice se evalueaz dup regulile cunoscute: cea mai mare prioritate o are operatorul ^, apoi operatorii *, /, \, Mod i, n final, operatorii + i -. Pentru a modifica ordinea de evaluare a operatorilor se utilizeaz paranteze rotunde, ( i ). Tabelul 2 prezint exemple de expresii aritmetice. Expresie 4/3 4\3 5 Mod 3 6/3*4 6 / (3 * 4) 2.5 ^ 2 Rezultat 1.3333333 1 2 8 0.5 6.25

Tabelul 2. Exemple de expresii aritmetice.

Numerele se scriu dup regulile cunoscute. Numerele reale se scriu cu partea ntreg separat de cea subunitar prin punct zecimal. Exist constanta predefinit PI. Funciile matematice standard ale limbajului sunt sin log sqr cos exp abs tan Funcia log calculeaz logaritmul natural, funcia sqr calculeaz rdcina patrat. Toate aceste funcii au un parametru de tip Double. Argumentele funciilor trigonometrice sunt n radiani. Putem defini i constante cu nume cu instruciunea Const NumeConstant As tip = valoare De exemplu putem defini numrul e ca Const E As Single = 2.71

1.1.1.2 Tipul String


Variabilele de tip String conin iruri de caractere. Constantele tip ir de caractere se scriu ntre ghilimele. Operatorul & realizeaz concatenarea irurilor. Exemple de constante tip String sunt "abcd" sau irul vid "". Concatenarea irurilor "xyz" i "a+b-c" se face cu expresia "xyz" & "a+b-c" i are ca rezultat irul "xyza+b-c". O funcie util la lucrul cu iruri este funcia Len() care are ca parametru un ir i ca rezultat lungimea irului. O alt funcie este Val() ce convertete un ir de caractere ntr-un numr. Funcia Val() ce are ca parametru irul de caractere i ca rezultat numrul rezultat prin conversie.

1.1.1.3 Tipul Boolean


Variabilele de tip Boolean au valoarea adevrat sau fals.Aceste valori sunt reprezentate prin constantele booleene predefinite True i False. Operatorii booleeni sunt And, Or i Not. Aceti operatori se definesc cu tabelele de adevr de mai jos. X False True X False False True True X False False True True Y False True False True Y False True False True Not X True False X And Y False False False True X Or Y False True True True

Tabelul 3. Definiia operatorului Not.

Tabelul 4. Definiia operatorului And.

Tabelul 5. Definiia operatorului Or.

Expresiile booleene conin constante, variabile booleene i expresii relaionale, i operatorii And, Or i Not. Prioritile operatorilor booleeni sunt: Not are cea mai mare prioritate, apoi And i Or. Pentru a modifica ordinea de execuie a operatorilor booleeni, se pot utiliza paranteze rotunde, ( i ). La evaluarea unei expresii booleene, prima dat se evalueaz expresiile relaionale. Tabelul 6 arat exemple de expresii relaionale i booleene. Expresie 8 < 10 12 > 5 And 5 >= 6 Rezultat True False

Tabelul 6. Exemple de expresii relaionale i booleene.

1.1.2 Instruciuni
In programe se pot insera linii cu comentarii n dou moduri: cu instruciunea Rem; dup cuvntul cheie Rem urmeaz comentariul, un apostrof, dup care urmeaz comentariul. O instruciune se poate scrie pe mai multe linii. Pentru continuare pe linia urmtoare se utilizeaz un spaiu i caracterul _.

1.1.2.1 Instruciunea If
Instruciunea If execut un grup de instruciuni n funcie de valoarea unei expresii booleene. Cea mai simpl form a instruciunii este If condiie then S End If Condiia este orice expresie relaional sau boolean, iar S este un grup de instruciuni. Modul de execuie al instruciunii If este urmtorul: 1. se evalueaz condiia, 2. cnd condiia are valoarea True se execut grupul de instruciuni S. O alt form a instruciunii If este If condiie S1 Else S2 End If Aici S1 i S2 sunt grupuri de instruciuni. Modul de execuie al instruciunii este 1. se evalueaz condiia, 2. cnd condiia are valoarea True se execut grupul de instruciuni S1, iar cnd are valoarea False se execut grupul de instruciuni S2. Instruciunea If are nc o form care permite testarea a mai multor condiii If condiie1 S1 Elseif condiie2 S2 Eleseif condiien Sn Else Sp End If Aceast instruciune se execut astfel : 1. se evalueaz condiie1, 2. cnd condiie1 are valoarea True se execut S1 i se prsete instruciunea If, 3. cnd condiie1 are valoarea False se evalueaz condiie2, 4. cnd condiie2 are valoarea True se execut S2 i se prsete instruciunea If,

5. 6. 7. 8.

.. cnd toate condiiile anterioare au avut valoarea False se evalueaz condiien, cnd condiien este True se execut Sn i se prsete instruciunea If, cnd condiien este False se execut Sp i se prsete instruciunea If.

1.1.2.2 Instruciunea Select Case


Forma instruciunii Select Case este urmtoare Select Case expresie Case condiie1 S1 Case condiie2 S2 Case condiien Sn End Select In aceast instruciune S1, S2, , Sn sunt grupuri de instruciuni dintre care se execut unul singur, cel al crui condiie este satisfcut de expresie. Modul de execuie al instruciunii Select Case este urmtorul: 1. se evalueaz expresia, 2. dac expresia satisface condiie1 se execut S1 i se prsete instruciunea, 3. dac expresia satisface condiie2 se execut S2 i se prsete instruciunea, 4. 5. cnd toate condiiile anterioare au fost false, dac expresia satisface condiien se execut Sn i se prsete instruciunea.

1.1.2.3 Instruciunea For


Instruciunea For execut repetat un grup de instruciuni cu modificarea dup fiecare execuie a unei variabile de control. Forma instruciunii For este For counter = valstart To valend Step valpas S Next counter este variabila de control a instruciunii For, valstart este valoarea iniial a variabilei counter, valend este valoarea final a variabilei counter, valpas este valoarea cu care este modificat variabila counter la fiecare pas, S este u grup de instruciuni. Instruciunea For se execut astfel: 1. variabila counter primete valoarea valstart, 2. se execut grupul de instruciuni S, 3. se modific valoarea variabilei counter cu valpas, 4. dac valoarea variabilei counter este <= dect valend se merge la pasul 2, n caz contrar se prsete instruciunea For. Exemplu. S calculm valoarea 5!. Programul este urmtorul

f=1 For i = 1 To 5 Step 1 f=f*i Next Variabila de control i a instruciunii For este mrit cu pasul 1 dup fiecare execuie a instruciunii f=f*i

1.1.2.4 Instruciunea while


Instruciunea While execut repetat un grup de instruciuni att timp ct o condiie are valoarea True. Forma instruciunii While este: While condiie S Wend Modul de execuie a instruciunii While este urmtorul: 1. se evalueaz condiia, 2. cnd condiia are valoarea True se execut grupul de instruciuni S i se merge la pasul 1, 3. cnd condiia are valoarea False, se prsete instruciunea While. Exemplu. S calculm valoarea 5!. Programul este urmtorul: f=1 i=1 While i <= 5 f=f*i i=i+1 Wend

1.1.3 Funcii i proceduri


Limbajul Visual Basic permite definirea a dou tipuri de subprograme: funcii i proceduri.

1.1.3.1 Definirea funciilor


O funcie calculeaz o valoare asociat numelui funciei. Funcia poate avea parametri, ale cror valori sunt folosite n calculele efectuate de funcie. Definiia unei funcii este urmtoarea Function NumeFuncie (lista de parametri) As tip corpul funciei End Function numele funciei, NumeFuncie este ales de programator, tip este tipul valorii calculate de funcie, lista de parametri a funciei are forma NumeParametru As tip, NumeParametru As tip, O funcie trebuie s conin cel puin o instruciune de forma

NumeFuncie = expresie Exemplu. S definim o funcie ce calculeaz valoarea n!. Funcia are ca parametru variabila n de tip Integer. Rezultatul calculat de funcie este de tip Integer. Function fact (Dim n As Integer) As Integer Din f As Integer f = 1; For i = 1 To n Step 1 f=f*i Next fact = f End Function Funcia se apeleaz utiliznd-o ca termen n membrul drept al unei instruciuni de atribuire. De exemplu, funcia de mai sus se utilizeaz pentru calculul valorii 4! astfel Dim k As Integer k = fact(4)
2 Pentru a calcula valoarea C 5 =

5! vom apela funcia astfel: 2!( 5 2 )!

Dim j As Integer j = fact(5) / fact(2) / fact(3)

1.1.3.2 Definirea procedurilor


O procedur calculeaz valori ce sunt asociate unor parametri ai procedurii. Procedura poate avea parametri de intrare, ale cror valori sunt folosite n calculele efecuate de procedur, i parametri de ieire ce primesc valori calculate de procedur. Definiia unei proceduri este urmtoarea Sub NumeProcedur (lista de parametri) corpul procedurii End Sub numele procedurii, NumeProcedur este ales de programator, lista de parametri a funciei are forma NumeParametru As tip, NumeParametru As tip, unde parametrii sunt de intrare i de ieire. Ieirea dintr-o procedur se face cu unstruciunea Exit Sub Procedurile au un mecanism de gestionare a erorilor ce apar la execuie. Acest mecanism asigur trecerea execuiei la o anumit etichet unde se excut instruciuni de tratare a erorii. Instruciunea de transfer a execuiei este On Error GoTo eticheta iar secvena de gestionare a erorii este eticheta: instruciuni de tratare a erorii In paragrafele urmtoare se vor prezenta exemple de definiii de proceduri.

O procedur se utilizeaz scriind numele procedurii, urmat n paranteze de parametri.

1.1.4 Tipuri de date definite de utilizator


Utilizatorul poate defini propriile tipuri de date. Un tip de date definit de utilizator poate conine variabile, numite n continuare cmpuri sau proprieti. Definirea unui tip utilizator se face cu instruciunea Type cu forma Type NumeTip NumeCmp As tip NumeCmp As tip . End Type Se pot defini obiecte de un tip utilizator cu instruiunea Dim cu forma Dim NumeObiect As NumeTip Exemplu. Fie tipul definit de utilizator Type Angajat Nume As String Prenume As String Varsta As Integer End Type Vom defini un obiect scalar i un vector cu obiecte de tipul Angajat Dim Director As Angajat Dim contabil(10) As Angajat Cmpurile unui obiect se apeleaz cu operatorul punct, . ca mai jos NumeObiect.NumeProprietate De exemplu Director.Nume Director.Varsta contabil(0).Prenume Tipurile de date pot avea i funcii numite n continuare metode, ce pot prelucra proprietile tipului. Funciile se apeleaz cu operatorul punct, ., la fel ca i proprietile obiectului, ca mai jos NumeObiect.NumeFuncie (parametri)

1.2 Mesaje i evenimente


Sistemul de operare Windows este un sistem dirijat de evenimente. La lansarea n execuie a unei aplicaii, sistemul de operare creaz o coad de mesaje pentru aplicaie. Fiecare mesaj conine codul unui eveniment i momentul su de apariie. Aplicaia const n funcii ce trateaz diverse evenimente. Sistemul de operare ia cte un mesaj din coad, n ordinea apariiei lor, i apeleaz funcia ce trateaz mesajul. Mesajele corespund unor evenimente generate de utilizator sau mesaje generate de sistemul de operare. Evenimentele generate de utilizator sunt urmtoarele: clic cu butonul drept al mousului, clic cu butonul stng al mousului, dublu clic, deplasarea mousului,

apsarea unei taste, eliberarea unei taste. La un moment dat pot fi lansate n execuie mai multe aplicaii, dar una singur este activ. Toate evenimentele generate de utilizator sunt dirijate ctre aplicaia activ; mesajele corespunztoare sunt introduce n coada de mesaje a aplicaiei active. Atunci cnd o aplicaie define activ, ea obine focul de intrare. Atunci cnd o alt aplicaie devine activ, aplicaia ce a fost activ pierde focul de intrare. Obinerea i pierderea focului de intrare sunt dou mesaje generate de sistemul de operare. Alte mesaje generate de sistemul de operare, specifice fiecrui obiect grafic, vor fi descrise mai departe.

1.2.1 Evenimente
Obiectele grafice au asociate mesaje trimise de utilizator i mesaje trimise de sistemul de operare. Aceste mesaje sunt artate n tabela de proprieti a obiectului, seciunea Event. Figura 1 arat cteva din mesajele primite de un formular.

Figura 1. Evenimente ale unui formular.

Secvena de mesaje trimise de sistemul de operare unui formular la crearea lui este urmtoarea Open Load Resize Activate Current Secvena de mesaje trimise de sistemul de operare unui formular la distrugerea lui este urmtoarea Unload Deactivate Close Evenimentele corespunztoare acestor mesaje sunt descrise mai jos. Pentru a executa o procedur la apariia unui eveniment se pune proprietatea OnEveniment la valoarea [Event Procedure]. Procedura ce se va executa are linia de definiie Private Sub object_Eveniment (parametri) Evenimentul Open Evenimentul Open apare cnd un formular este creat, dar nainte ca prima nregistrare s fie afiat. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub object_Open(Cancel As Integer) Object numele unui formular sau raport 10

Cancel variabil de tip Integer; determin dac apare deschiderea formularului sau raportului. Punnd argument Cancel la valoarea True (1) se anuleaz deschiderea formularului sau raportului. Procedura de mai jos afiaz o caset de dialog cu un mesaj i dou butoane, Yes i No. Se testeaz rezultatul funciei MsgBox ntr-o instruciune Select Case i se execut aciunea dorit. Private Sub Form_Open(Cancel As Integer)
Dim intReturn As Integer intReturn = MsgBox("Enter order details now?", vbYesNo) Select Case intReturn Case vbYes ' Open Order Details form. DoCmd.OpenForm "Order Details" Case vbNo MsgBox "Remember to enter order details by 5 P.M." Cancel = True ' Cancel Open event. End Select End Sub

Evenimentul Load Evenimentul Load apare atunci cnd un formular este creat i nregistrrile lui sunt afiate. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub Form_Load() Evenimentul Resize Evenimentul Resize apare cnd un formular este creat i ori de cte ori dimensiunile unui formular se modific. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub Form_Resize() Evenimentul Activate Evenimentul Activate apare cnd un formular sau raport primete focul de intrare i devine fereastra activ. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub object_Activate() Object numele unui formular sau raport. Evenimentul Current Evenimentul Current apare atunci cnd un formular este creat i ori de cte ori focul de intrare se mut de la o nregistrare a tabelei rezultat la alta. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub object_Current() Object numele unui formular Pentru a executa o procedur cnd apare acest eveniment, se seteaz proprietatea OnCurrent la valoarea [Event Procedure]. Evenimentul Unload Evenimentul Unload apare dup ce un formular este nchis, dar nainte ca s fie ters de pe ecran. Cnd formularul este rencrcat, Access reafiaz formularul i reiniializeaz coninutul su i toate controalele sale. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub Form_Unload()

11

Evenimentul Deactivate Evenimentul Deactivate apare cnd un formular sau raport pierde focul de intrare n favoarea unei Tabele, Interogari, Formular, Raport sau ferestre. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub object_Deactivate() Object numele unui formular sau raport. Evenimentul Close Evenimentul Close apare cnd un formular sau raport este nchis i ndeprtat de pe ecran. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub object_Close() Object numele unui formular sau raport. Evenimentul DblClick Evenimentul DblClick apare cnd utilizatorul execut un dublu clic pe un obiect. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub object_DblClick(Cancel As Integer) Object numele unui formular sau control. Cancel - variabil de tip Integer; determin dac evenimentul DblClick va aprea. Punnd argumentul Cancel la valoarea True (1) anuleaz evenimentul DblClick. Evenimentul DblClick se aplic la formulare i controale. Evenimentul Click Evenimentul Click apare cnd utilizatorul execut un clic de mous asupra unui obiect. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub object_Change() Object numele unui formular sau control. Pentru a executa o procedur cnd apare acest eveniment, se seteaz proprietatea OnClick la valoarea [Event Procedure]. In cazul unui control, evenimentul apare la un clic cu butonul stng pe control. In cazul unui formular evenimentul apare cnd se execut clic pe spaiul liber al formularului sau pe selectorul nregistrrilor. Evenimentul GotFocus Evenimentul GotFocus apare cnd un formular sau control primete focul de intrare.. Pentru a executa o aciune cnd apare acest eveniment, definim procedura Private Sub object_GotFocus() Object numele unui formular sau al unui control. Acest eveniment apar cnd focul de intrare se mut ca rspuns la aciunea utilizatorului, cum ar fi apsarea tastei TAB sau la un clic pe un obiect, sau cnd apelm metoda SetFocus. Reamintim c, n cazul tuturor evenimentelor, pentru a defini o procedur care s fie executat la apariia unui eveniment, se pune proprietatea OnEveniment la valoarea [Event Procedure]. Aplicaia Access genereaz urmtoarea procedura ce se va executa la apariia evenimentului Private Sub object_Eveniment (parametri) End Sub 12

Aceast procedur va fi completat de utilizator. In continuare vom arta cum se definesc proceduri asociate diverselor evenimente. Pentru scrierea acestor proceduri trebuie s afim fereastra editorului Visual Basic i caseta de proprieti ale obiectelor grafice. Barele de meniu i de instrumente ale vederii Design a unui formular sau raport sunt artate n Figura 2.

Figura 2. Barele de meniu i de instrumente ale vederii Design a rapoartelor i formularelor.

Afiarea ferestrei editorului Visual Basic se poate face cu butoanele barei de instrumente din Tabelul 7 sau cu opiunile Code i Properties ale meniului View. Buton Funcie Afiare fereastra editor Visual Basic Afiare caseta cu proprieti Afiare caseta Choose Builder

Tabelul 7. Butoane pentru afiarea casetelor cu proprieti i fereastra editorului Visual Basic.

Aplicaia Builder dorit se alege din caseta Choose Builder din Figura 3.

Figura 3. Caseta Choose Builder.

1.2.2 Crearea unei proceduri asociate unui eveniment


Considerm tabela PROIECT a crei proiectare este cea din Figura 4. Datele tabelei sunt cele din Figura 5.

Figura 4. Proiectarea tabelei PROIECT.

13

Figura 5. Datele tabelei PROIECT.

Se creaz un formular pentru afiarea datelor tabelei cu aplicaia vrjitor, ca cel din Figura 6.

Figura 6. Formularul pentru afiarea datelor tabelei PROIECT.

Vom defini o procedur ce afiaz mesajul Form Open cnd formularul primete mesajul Open, i o procedur ce afiaz mesajul Form Current, cnd formularul primete mesajul Current. Pentru a defini o procedur care s trateze evenimentul Open al obiectului Form se procedeaz astfel: 1. se afiaz caseta de proprieti a obiectului Form din Figura 7; se afiaz seciunea Event; clic pe opiunea On Open, ce corespunde evenimentului Open; din caseta combinat se alege opiunea [Event Procedure],

Figura 7. Evenimente ale unui formular.

14

2. clic pe butonul i se afiaz caseta de dialog Choose Builder din Figura 3, n care se alege opiunea Code Builder; clic pe butonul OK, i se afiaz fereastra aplicaiei Visual Basic din Figura 8, Fereastra aplicaiei Visual Basic conine: n stnga sus fereastra Project, cu proiectele pentru care s-au scris proceduri; fiecare form are asociat un proiect, n stnga jos fereastra Properties, cu proprietile obiectului selectat, n dreapta este afiat fereastra (Code), n care se scrie codul corespunztor procedurii; n partea stng a ferestrei (Code) exist caseta combinat (General) cu toate obiectele grafice ale formularului, n partea dreapt exist caseta combinat (Declarations) cu evenimentele asociate fiecrui obiect grafic. Coninutul celor dou casete este cel din Tabelul 8.

Figura 8. Fereastra aplicaiei Visual Basic.

a) caseta (General)

b) caseta (Declarations)

Tabelul 8. Casetele ferestrei (Code) asociate obiectelor grafice ale formularului.

La afiarea ferestrei aplicaiei Visual Basic se genereaz o procedur goal, corespunztoare obiectului grafic i evenimentului selectat. Numele procedurii este format ca NumeObiect_NumeEveniment vezi Figura 9 i cele dou casete cu obiecte i evenimente din Tabelul 8.

15

Figura 9. Procedur generat de Visual Basic.

3. se completeaz procedura cu instruciunile necesare. In cazul nostru afim doar o caset de mesaj, ca n Figura 10.

Figura 10. Procedura Form_Open.

La crearea formularului, (nainte de afiarea lui pe ecran), se afiaz caseta de mesaj din Figura 11.

Figura 11. Caseta de mesaj afiat de procedura Form_Open().

Vom mai defini o procedur asociat evenimentului Current care este generat de sistemul de operare nainte de afiarea fiecrei nregistrri n formular. Se urmeaz paii de mai sus i se definete procedura Form_Current() din Figura 12. Procedura afiaz o caset cu mesajul "Form Current", nainte de afiarea fiecrei nregistrri a tabelei de date. Dup cum se observ, n cele dou casete ale ferestrei (Code) sunt afiate numele obiectului grafic (Form) i numele evenimentului (Current).

16

Figura 12. Procedurile Form_Current() i Form_Open().

La afiarea unei noi inregistrri n formular se afiaz pe ecran caseta de dialog din Figura 13.

Figura 13. Caseta de mesaj afiat de procedura Form_Open() nainte de afiarea unei nregistrri n formular.

In Tabelul 9 este artat fereastra Properties. In partea de sus exist lista cu toate obiectele grafice ale formularului, ca i n bara de instrumente a vederii Design a formularului. In partea de jos exist o caset cu proprietile obiectelor grafice, aceleai ca n caseta Properties din Figura 7. Proprietile din seciunile Data, Event, Format i Other din Figura 7 sunt grupate n lista Categorized, iar seciunea All cu toate proprietile corespunde listei Alphabetic.

a) fereastra Properties

b) lista cu obiectele formularului

Tabelul 9. Fereastra Properties.

17

1.2.3 Meniurile aplicaiei Visual Basic


Figura 14 arat barele de meniu i de instrumente ale ferestrei Visual Basic.

Figura 14. Barele de meniu i de instrumente ale ferestrei Visual Basic.

Salvarea procedurilor definite n aplicaia Visual Basic se face cu clic pe meniul File SaveVBApplications sau cu clic pe butonul al barei de instrumente. Prsirea aplicaiei Visual Basic se face cu clic pe meniul File Close and Return to Microsoft Office Access. Meniul View conine opiuni referitoare la ferestrele depanatorului. Meniul Debug conine opiuni utilizate la depanarea programului: compilarea programului i rularea pas cu pas.

a) meniul View

b) meniul Debug

Tabelul 10. Meniurile View i Debug ale ferestrei Visual Basic.

opiunea Object Browser a meniului View i butonul Object Browser, , al barei de instrumente afiaz caseta Object Browser din Figura 15, n care sunt listate toate obiectele formularului i toate obiectele definite de limbajul Visual Basic cu proprietile lor, opiunea Code afiaz fereastra editorului Visual Basic, opiunea Object afiaz fereastra de proiectarea o obiectului, opiunea Properties Window i butonul Properties Window, , al barei de instrumente, afiaz fereastra Properties din Tabelul 9, opiunea Project Explorer i butonul Project Explorer, , al barei de instrumente, afiaz fereastra Project vezi Figura 8.

18

Figura 15. Caseta Object Browser.

1.2.4 Casete de mesaj i casete de text


In cazul formularelor avem nevoie, n multe cazuri, s afim diverse mesaje i s citim valori introduce de utilizator. O caset de mesaj se creaz cu instruciunea RetVal = MsgBox(Mesaj, Stil, Titlu) Parametrii funciei MsgBox sunt urmtorii: Mesaj este un ir de caractere ce va fi afiat n caset, Stil este un numr ce specific ce butoane va avea caseta, Titlu este un ir de caractere ce va constitui titltu casetei. Tabelul 11 arat valorile constantei Stil i tipurile de butoane ce vor fi afiate pentru fiecare valoare. Fiecare valoarea a constantei Stil are asociat o constant predefinit, artat n tabel. Stil 0 1 2 3 4 5 Constant vbOK vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel Butoane OK OK, Cancel Abort, Retry, Ignore Yes, No, Cancel Yes, No Retry, Cancel

Tabelul 11. Tipuri de butoane.

Funcia MsgBox are ca rezultat un numr ce arat butonul apsat. Valorile corespunztoare sunt artate n Tabelul 12. In consecin, funcia MsgBox este scris totdeauna ntr-o instruciune de atribuire.

19

Buton apsat OK Cancel Abort Retry Ignore Yes No

Rezultat 1 2 3 4 5 6 7

Tabelul 12. Rezultatul funciei MsgBox.

Pentru a citi un ir de caractere introdus de utilizator, se utilizeaz instructiunea RetVal = InputBox(Mesaj, Titlu, text, posx, posy) Funcia InputBox afiaz o caset de dialog ce conine o caset de text n care utilizatorul va introduce un ir de caractere. Parametrii funciei InputBox sunt urmtorii : Mesaj este un ir de caractere ce va fi afiat n caset, Titlu este un ir de caractere ce va constitui titltu casetei, text este textul ce este afiat n caseta de text, posx, poxy sunt coordonatele ecran n pixeli unde va fi afiat caseta. Funcia InputBox are ca rezultat irul de caractere introdus de utilizator. Pentru a converti acest ir ntr-un numr, se utilizeaz funcia Val() ce are ca parametru irul de caractere ce va fi convertit n numr.

1.2.5 Definirea unei proceduri asociate unei casete text


In continuare vom aduga formularului de mai sus un cmp care s calculeze salariul brut cu formula SAL_ORA * ORE Pentru aceasta vom aduga formularului un cmp ce const dintr-un obiect Label i un obiect Text ca n Figura 16. Obiectul Label are numele Label13 i conine textul Text12, iar obiectul text asociat are numele Text12, date de aplicaia Access. Calculul salariului brut se poate face prin introducerea formulei de calcul ca proprietate Control Source a casetei de text, dup cum s-a artat ntr-o lucrare anterioar. O alt posibilitate este de asocia o procedur evenimentului Currrent al formei, care este generat de sistemul de operare nainte de afiarea fiecrei nregistrri n formular. In aceast procedur vom calcula salariul brut cu formula de mai sus i l vom atribui proprietii Text a casetei text cu numele Text12.

20

Figura 16. Formular cu un cmp adugat.

Se modific textul (proprietatea Caption) la SALARIU BRUT ca n Figura 17.

Figura 17. Modificarea proprietii Caption a obiectului Label13.

Se adaug formularului o procedur care calculeaz salariul brut cu formula de mai sus i atribuie valoarea calculat casetei text cu numele Text12. Apelarea procedurii se face nainte de afiarea unei nregistrri n formular, deci atunci cnd formularul primete mesajul Current. Definirea procedurii se face ca mai sus: 1. se afiaz caseta Properties a formularului, seciunea Event, ca n Figura 18, 2. opiunea On Current se pune la valoarea [Event Procedure],

21

Figura 18. Caseta Properties a formularului.

3. se afiaz fereastra aplicaiei Visual Basic cu clic pe butonul , 4. se scrie procedura Form_Current() din Figura 19, 5. se modific proprietatea Text Align a casetei de text Text12 la valoarea Right.

Figura 19. Procedura Form_Current().

Formularul afiaz datele din ca n Figura 20.

Figura 20. Afiarea datelor n formular.

22

1.2.6 Definirea unei proceduri asociate unui buton


Vom exemplifica crearea unui buton prin rezolvarea urmtoarei probleme. Vom crea un formular corespunznd tabelei PROIECT, la care vom aduga dou casete de text. In una vom afia salariul brut, calculat cu formula SAL_ORA * ORE iar n alta vom afia salariul net calculat cu formula SAL_ORA * ORE * 0.81 Vom aduga formularului un buton care va comanda afiarea pe ecran doar a uneia din casetele de text. Modul de funcionare al butonului va fi urmtorul: atunci cnd este afiat pe ecran caseta ce calculeaz salariul brut, titlul butonului va fi Calcul salariu net, cnd este afiat caseta ce calculeaz salariul net, titlul butonului va fi Calcul salariu brut, comutarea ntre cele dou casete se va face cu un clic pe buton, iniial va fi afiat pe ecran caseta ce calculeaz salariul brut, iar titlul butonului va fi Calcul salariu net. Un obiect grafic este vizibil sau nu este vizibil pe ecran, dup cum proprietatea sa Visible are valoarea True sau False. Titlul unui obiect grafic este irul coninut n proprietatea Caption. Valoarea cestei proprieti poate fi modificat n orice moment. Realizarea formularului se face astfel: 1. se proiecteaz formularul cu o aplicaie vrjitor, 2. se adaug cele dou casete de text. Numele atribuite obiectelor Label de aplicaia Access se modific n SALARIU BRUT i respective n SALARIU NET. In casetele de text se introduce formulele de calcul de mai sus = [SAL_ORA] * [ORE] = [SAL_ORA] * [ORE] * 0.81 ca n Figura 21 Caseta text ce va conine salariul brut are numele Text12, cea care va conine salariul net are numele Text14.

Figura 21. Proiectarea formularului de calcul al salariului.

23

3. Se adaug formularului i un buton ce are numele Command16. Dup desenarea butonului, pornete o aplicaie vrjitor ce permite s alegem un nume semnificativ pentru buton. Caseta din Figura 22 ne permite s alegem numele unei aciuni.

Figura 22. Alegerea aciunii unui buton.

Vom alege aciunea Refresh Form Data din categoria Form Operations. Caseta din Figura 23 ne permite s alegem un text sau o figur pentru numele butonului. Vom pstra numele implicit Refresh.

Figura 23. Alegerea unui nume sau a unei figuri pentru buton.

Caseta din Figura 24 ne permite s alegem numele obiectului grafic buton.

24

Figura 24. Alegerea numelui obiectului grafic buton.

4. Se ataeaz butonului o procedur ce va fi executat la un clic pe buton, punnd opiunea On Click la valoarea [Event Procedure] ca n Figura 25,

Figura 25. Ataarea unei proceduri unui buton.

5. se ataaz o procedur formularului, executat la apariia evenimentului Load, punnd opiunea On Load la valoarea [Event Procedure]. Cele dou proceduri sunt artate n Figura 26.

25

Figura 26. Procedurile formularului de calcul al salariului.

In procedura Form_Load() se pune proprietatea Caption a butonului (titlul butonului) la valoarea Calcul net i proprietatea Visible a casetei de text ce calculeaz salariul net la valoarea False. In procedura Command16_Click() se testeaz proprietatea Visible a casetei de text ce calculeaz salariul net. Dac proprietatea are valoarea False, ea se pune la valoarea True (caseta de text devine vizibil), se pune proprietatea Visible a casetei de text ce calculeaz salariul brut la valoarea False, i se modific titlul butonului: Text14.Visible = True Text12.Visible = False Command16.Caption = "Calcul brut" In caz contrar, valorile proprietilor se modific astfel: Text14.Visible = False Text12.Visible = True Command16.Caption = "Calcul net" Rezultatele formularului afiate n modul Form sunt artate n Figura 27 i Figura 28. 26

Figura 27. Calculul salariului brut.

Figura 28. Calculul salariului net.

Rezultatele afiate n modul Foaie de date (Datasheet) sunt cele din Figura 29.

Figura 29. Formularul afiat n modul Foaie de date.

1.3 Navigarea n tabela rezultat a unui formular


O form este creat pe baza unei interogri ce are ca rezultat o tabel cu nregistrri. Pentru navigarea printre nregistrrile tabelei se utilizeaz metodele obiectului 27

DoCmd al aplicaiei. Metoda ce afiaz o anumit nregistrare este GoToRecord cu forma DoCmd.GoToRecord ((ObjectType As AcDataObjectType, ObjectName As String, Record As AcRecord, Offset As Integer) Parametrii procedurii sunt urmtorii: ObjectType tipul obiectului cu nregistrri, o tabel, o interogare, etc., ObjectName ir de caractere cu numele obiectului ce conine inregistrrile, Record aciunea ce se va efectua, Offset d numrul nregistrrii urmtoare. Forma metodei, cu valorile implicite ale parametrilor, este urmtoarea. DoCmd.GoToRecord(ByVal Optional ObjectType As AcDataObjectType = _ AcDataObjectType.acActiveDataObject, _ ByVal Optional ObjectName As String = "", _ ByVal Optional Record As AcRecord = AcRecord.acNext, _ ByVal Optional Offset As Integer = 1) Primul argument este membru al enumerrii AcDataObjectType. El permite s specificm tipul obiectului asupra cruia se va aplica aciunea. Membrii acestei enumerri sunt de tip ntreg i valorile lor sunt cele din Tabelul 13:
AcDataObjectType Member acActiveDataObject acDataTable acDataQuery acDataForm acDataReport 2 3 Value -1 0 Descriere Actiunea se va aplica asupra nregistrrii curente a obiectului deschis Actiunea se va aplica asupra unei nregistrri a unei tabele Actiunea se va aplica asupra unei nregistrri a unei interogri Actiunea se va aplica asupra unei nregistrri a unui formular Actiunea se va aplica asupra unei nregistrri a unui raport

Tabelul 13. Enumerarea AcDataObjectType.

Valoarea implicit este acActiveDataObject. Dac se omite primul argument i dac se apeleaz metoda DoCmd.GoToRecord() dintr-un formular sau raport, aciunea de navigare se va aplica asupra nregistrrii curente care este afiat n acel formular sau raport. Al doilea argument este numele obiectului selectat n primul argument. De exemplu, dac primul argument a fost specificat ca un formular, (AcDataObjectType.acDataForm), putem pasa numele acelui formular ca al doilea argument. Al treilea argument specific aciunea ce va fi executat. Acest argument este un membru al enumerrii AcRecord. Membrii acestei enumerri sunt de tip ntreg i valorile lor sunt cele din Tabelul 14 28

AcRecord Member acFirst acPrevious acNext acLast acGoTo

Value 2 0 1 3 4

La fel ca Clicking

Descriere Navigare la prima nregistrare Navigare la nregistrarea precedent Navigare la nregistrarea urmtoare Navigare la ultima nregistrare Navigare la o nregistrare. In acest caz se paseaz numrul nregistrrii ca al patrulea argument Deschide o nou nregistrare vid

acNewRec

Tabelul 14. Enumerarea AcRecord.

Al patrulea argument este de tip ntreg. El d numrul urmtoarei nregistrri. Dac acest argument este omis, valoarea lui este 1, adic se trece la urmtoarea nregistrare. Fie din nou tabela PROIECT, pentru care vrem ca s afim doar angajaii cu salariul orar cuprins ntre dou limite ce vor fi introduse cu dou casete de text. Proiectarea tabelei este cea din Figura 4, iar datele din tabel sunt cele din Figura 5. Vom utiliza formularul de afiare a nregistrrilor din tabela PROIECT, proiectat cu aplicaia vrjitor, din Figura 6. Vom asocia evenimentului Open procedura Form_Open din Figura 30. Procedura afiaz pentru nceput o caset cu mesajul "Limite pentru salariu" cu instruciunea RetVal = MsgBox("Limite pentru salariu", vbOKOnly, "Mesaj") Apoi se vor citi limitele, inferioar i superioar, cu dou casete de text LimInfs = InputBox("Limita inferioara", "Limite", "introduceti limita inferioara", 400, 600) LimSups = InputBox("Limita superioara", "Limite", "introduceti limita superioara", 400, 600) Cele dou limite citite sunt iruri de caractere. Se convertesc aceste iruri de caractere n numere n variabilele LimInf i LimSup cu instruciunile : LimInf = Val(LimInfs) LimSup = Val(LimSups) Pentru ca aceste valori s fie accesibile i altor proceduri, variabilele LimInf i LimSup sunt declarate ca publice nainte de proceduri. Public LimInf As Integer Public LimSup As Integer

29

Figura 30. Procedurile associate evenimentelor Open i Current.

Vom asocia evenimentului Current procedura Form_Current din Figura 30. In procedur vom citi valoarea din caseta de text SAL_ORA i o vom compara cu cele dou limite din variabilele LimInf i LimSup. Dac valoarea din caseta SAL_ORA nu este cuprins ntre aceste limite, vom comanda afiarea nregistrrii urmtoare. Pentru nceput vom converti irul din caseta de text SAL_ORA n numr cu funcia Val(). Sirul din caseta SAL_ORA este proprietatea Text a casetei i este referit ca [SAL_ORA].Text. Pentru a accesa acest proprietate vom trimite mai nti focul de intrare obiectului SAL_ORA. SAL_ORA.SetFocus lim = Val([SAL_ORA].Text) Vom compara variabila lim cu limitele din variabilele LimInf i LimSup. Dac valoarea salariului nu este cuprins ntre limite, vom comanda trecerea la nregistrarea urmtoare cu funcia DoCmd.GoToRecord(, , acNext) If lim < LimInf Or lim > LimSup Then DoCmd.GoToRecord , , acNext End If

30

In acest caz, este posibil s comandm deplasarea dup ultima nregistrare din tabel, ceea ce este o eroare. Pentru gestionarea erorii vom utiliza metoda prezentat anterior. Vom utiliza instruciunea On Error GoTo ErrClick care, n cazul apariiei unei erori, trece execuia programului la eticheta ErrClick. La aceasta etichet vom prsi execuia procedurii ErrClick: Exit Sub Execuia formularului se desfoar n felul urmtor: pentru nceput, se afiaz caseta Mesaj din Figura 31,

Figura 31. Caseta de dialog Mesaj.

se afiaz apoi casetele din Figura 32 i Figura 33, pentru introducerea limitelor inferioar i superioar pentru salariul orar; s-au introdus valorile 35 i 45,

Figura 32. Caseta pentru introducerea limitei inferioare.

Figura 33. Caseta pentru introducerea limitei superioare.

31

la parcurgerea elementelor formularului n modul Formular, (Form), se afiaz cte o nregistrare ce ndeplinete condiiile, ca n Figura 34 i Figura 35,

Figura 34. Afiarea rezultatelor n modul Formular.

Figura 35. Afiarea rezultatelor n modul Formular.

la parcurgerea elementelor formularului n modul Foaie de date, (Datasheet), se afiaz tabela i cursorul se deplaseaz la urmtoarea linie ce ndeplinete condiiile, ca n Figura 36 i Figura 37.

Figura 36. Afiarea rezultatelor n modul Foaie de date.

32

Figura 37. Afiarea rezultatelor n modul Foaie de date.

1.4 Crearea unei tabele rezultat pentru un formular i navigarea n tabel


Putem utiliza instruciunile SQL pentru a interoga baza de date i crea fromulare pe baza tabelei rezultate din interogare. Informaiile despre baza de date sunt coninute ntr-o variabil de tip Database. Informaiile despre baza de date curent sunt memorate n variabila CurrentDb de tip Database de ctre sistemul de operare. Pentru a executa o instruciune SQL SELECT se procedeaz astfel: 1. se definete o variabil tip String cu textul instruciunii SELECT, 2. se apeleaz funcia OpenRecordset a obiectului tip Database ce execut instruciunea SQL i creaz tabela rezultat a interogrii. Funcia OpenRecordset are forma OpenRecordset(s As String, tip rezultat) unde s irul de caractere ce conine instruciunea SELECT Tabela rezultat din interogare este memorat ntr-un obiect de tip Recordset. Tabela rezultat are un cursor care este iniial poziionat pe prima nregistrare din tabel. Cursorul poate fi deplasat nainte i napoi cu cte o unitate pentru a accesa nregistrrile tabelei. Obiectul tip Recordset are urmtoarele proprieti: BOF are valoarea True dac programul ncearc s deplaseze cursorul nainte de prima nregistrare. Dac tabela rezultat este vid, proprietatea BOF are valoare True, EOF are valoarea True dac programul ncearc s deplaseze cursorul dup ultima nregistrare, RecordCount d numrul de nregistrri din tabel ce au fost deja ncrcate de SQL. Iniial RecordCount = 0. Dup operaia MoveLast(), proprietatea RecordCount va conine numrul de nregistrri din tabela rezultat. Obiectul tip Recordset are urmtoarele metode (funcii) : MoveFirst() mut cursorul la prima nregistrare, MoveLast() mut cursorul la ultima nregistrare, MoveNext() mut cursorul la nregistrare urmtoare, MovePrevious() mut cursorul la nregistrarea precedent, Delete() terge nregistrarea curent, Edit() modific nregistrarea curent, AddNew() adaug o nou nregistrare,

33

Update() transfer nregistrarea adugat cu AddNew(), sau modificat cu Edit(), n tabela rezultat. Vom exemplifica utilizarea acestor funcii prin crearea unui formular care afiaz nregistrrile tabelei PROIECT. Vom crea un formular ce conine o caset text n care vom afia nregistrrile din tabela rezultat, o caset text n care vom afia numrul nregistrrii, i dou butoane unul pentru deplasarea la urmtoarea nregistrare, al doilea pentru deplasarea la nregistrarea precedent. Proiectarea formularului este cea din Figura 38. Caseta text n care afim rezultatele are numele Text0, cea n care afim numrul nregistrrii curente are numele Text2,cea n care afim numrul total de nregistrri din tabel are numele Text4, iar cele dou butoane au numele Command6 i Command7.

Figura 38. Proiectarea formularului de afiare a nregistrrilor.

In cazul nostru crem butoane de navigare. Dup adugarea unui buton la un formular sau raport se lanseaz o aplicaie vrjitor de personalizare a butoanelor. La primul pas n caseta vrjitorului se selecteaz Record Navigation (este selecia implicit) i alegem opiunile Go To Next Record i respective Go To Previous Record pentru cele dou butoane. La pasul al doilea selectm opiunea Text i atribuim butoanelor numele implicite Next Record i respective Previous Record. Paii aplicaiei vrjitor sunt artai n Figura 39 i Figura 40. Vom pune proprietatea Navigation Button a formei la valoarea No pentru a terge butoanele de navigare ale formei.

34

Figura 39. Caseta Command Button Wizard, pasul I.

Figura 40. Caseta Command Button Wizard, pasul II.

Procedurile generate de aplicaia vrjitor pentru cele dou butoane sunt cele din Figura 41.

35

Figura 41. Procedurile generate pentru butoane.

Vom ataa formularului dou proceduri: Form_Load(), n care apelm funcia OpenRecordset() a obiectului tip Database care creaz tabela rezultat, Form_Current() n care calculm numrul de nregistrri din tabela rezultat, i poziionm cursorul pe prima nregistrare. Vom defini variabilele globale db pentru obiectul tip Database ce conine baza de date, rs pentru obiectul tip Recordset ce conine tabela rezultat i rcc ce va conine numrul nregistrrii curente, vezi Figura 42.

Figura 42. Variabilele programului.

In procedura Form_Load() punem variabila db la valoarea CurrentDb, variabila rs la valoarea dat de funcia OpenRecordset() i variabila rcc la valoarea 0. Variabila

36

predefinit CurrentDb conine baza de date curent i este iniializat de aplicaia Access. Private Sub Form_Load() Set db = CurrentDb Set rs = db.OpenRecordset("Proiect", dbOpenDynaset) rcc = 0 End Sub

Figura 43. Procedura Form_Load()

In procedura Form_Current() calculm numrul de nregistrri din tabela rezultat i poziionm cursorul pe prima nregistrare. Variabila rcc primete valoarea 1. Private Sub Form_Current() If Not (rs.EOF) Then rcc = 1 rs.MoveLast rs.MoveFirst End If Text2 = rcc Text4 = rs.RecordCount End Sub Instruciunea MoveLast pune variabila RecordCount la numrul de nregistrri din tabela rezultat. Instruciunea MoveFirst poziioneaz cursorul pe prima nregistrare.

Figura 44. Procedura Form_Current().

Caseta Text2 primete ca valoare numrul nregistrrii curente, iar Text4 primete ca valoare numrul de nregistrri din tabela rezultat. De ce?

37

Figura 45. Procedura butonului Move Next.

Procedura asociat butonului Move Previous, Command6_Click(), este cea din Figura 45. In aceast procedur facem urmtoarele operaii: se afiaz nregistrarea curent; n caseta Text0 se concateneaz toate cmpurile din nregistrare: ID_PRJ, ID_ANG, etc. Text0 = rs![ID_PRJ] & "-" & rs![ID_ANG] & "-" & _ rs![NUME_ANG] & "-" & rs![DPT_ANG] & "-" & rs![ORE] n variabila Text2 se afiaz numrul nregistrrii curente Text2 = rcc cnd cursorul nu este dup ultima nregistrare, se trece la nregistrarea urmtoare i se adun 1 la variabila rcc, n caz contrar se poziioneaz cursorul pe ultima nregistrare i variabila rcc primete valoarea RecordCount. If Not rs.EOF Then rs.MoveNext rcc = rcc + 1 Else rs.MoveLast rcc = rs.RecordCount End If In caz de eroare se afiaz un mesaj de eroare i se merge la sfritul procedurii. Err_Command6_Click: MsgBox Err.Description Resume Exit_Command6_Click

38

Figura 46. Procedura butonului Move Previous.

Procedura asociat butonului Move Previous, Command7_Click(), este cea din Figura 46. In aceast procedur facem urmtoarele operaii: se afiaz nregistrarea curent; n caseta Text0 se concateneaz toate cmpurile din nregistrare: ID_PRJ, ID_ANG, etc. Text0 = rs![ID_PRJ] & "-" & rs![ID_ANG] & "-" & _ rs![NUME_ANG] & "-" & rs![DPT_ANG] & "-" & rs![ORE] n variabila Text2 se afiaz numrul nregistrrii curente Text2 = rcc cnd cursorul nu este nainte de prima nregistrare, se trece la nregistrarea precedent i se scade 1 din variabila rcc, n caz contrar se poziioneaz cursorul pe prima nregistrare i variabila rcc primete valoarea 1. If Not rs.BOF Then rs.MovePrevious rcc = rcc - 1 Else rs.MoveFirst rcc = 1 End If In caz de eroare se afiaz un mesaj de eroare i se merge la sfritul procedurii. Err_Command7_Click: MsgBox Err.Description Resume Exit_Command7_Click

39

Figura 47. Navigarea n tabela rezultat.

1.5 Afiarea numelor cmpurilor tabelei rezultat


Obiectul Recordset conine un obiect Fields care este o list cu numele cmpurilor din tabela rezultat. Fiecare obiect din aceast list are tipul Field. In cele ce urmeaz vom afia ntr-o caseta text numele cmpurilor din tabela rezultat. Fie un obiect tip Recordset creat de o interogare cu numele rs. Vom crea un ir de caractere cu numele cmpurilor separate de |. Secvena de instruciuni este urmtoarea Dim a As String a = "" Dim fld As Field For Each fld In rs.Fields a = a & " | " & fld.Name Next Vom utiliza tabela PROIECT a crei proiectare este cea din Figura 4, iar datele tabelei sunt cele din Figura 5. Proiectm formularul din Figura 48. In acest formular avem caseta text Text0, obiectul tip Label cu numele Label1 ce conine textul Text0 i butonul Command2. Caseta aplicaiei vrjitor de personalizare a butonului la pasul I este cea din Figura 49. Vom schimba numele obiectului Label n Nume Campuri i vom defini o procedur ataat evenimentului OnLoad. Vom pune proprietatea Navigation Button a formei la valoarea No pentru a terge butoanele de navigare ale formei.

40

Figura 48. Formularul pentru afiarea numelor cmpurilor.

Figura 49. Caseta Command Button Wizard, pasul I.

Vom completa procedurile asociate butonului i evenimentului On Load ca n Figura 50. Procedura asociat butonului a fost detaliat mai nainte.

41

Figura 50. Procedurile formularului.

Crearea tabelei rezultat se face ca n aplicaiile anterioare. Formularul rezultat este cel din Figura 51.

Figura 51. Numele cmpurilor tabelei rezultat.

42

1.6 Utilizarea instruciunilor SQL pentru prelucrarea bazei de date


Pentru execuia unei instruciuni SQL asupra bazei de date se utilizeaz metoda RunSQL(SQLStatement, UseTransaction) a obiectului DoCmd. Parametrii metodei sunt urmtorii: SQLStatement este o variabil de tip String ce conine instruciunea SQL, UseTransaction, dac acest argumentul este True, se utilizeaz tranzacii, dac argumentul este False nu se utilizeaz tranzacii. Instruciunile SQL ce se pot utiliza sunt: INSERT INTO, DELETE, SELECT...INTO, UPDATE, CREATE TABLE, ALTER TABLE. Vom exemplifica utilizarea unei instruciuni SQL pentru actualizarea unei coloane a unei tabele.Fie definiia tabelei PROIECTMODIF din Figura 52.

Figura 52. Proiectarea tabelei PROJECTEUPDATE.

Tabela este completat ca n Figura 53.

Figura 53. Tabela PROIECT_MODIF.

Vom completa coloana TOTAL cu salariul total, calculat cu formula TOTAL = SAL_ORA * ORE Instruciunea SQL cu care vom completa coloana TOTAL este UPDATE PROIECT_MODIF SET TOTAL = SAL_ORA * ORE Se proiectez formularul din Figura 54. Caseta text n care vom introduce instruciunea SQL are numele Text0. Butonul are numele Command4.

43

Figura 54. Formularul de introducere a instruciunilor SQL.

Lista obiectelor grafice ale formularului, afiat n fereastra editorului Visual Basic este cea din Figura 55.

Figura 55. Lista obiectelor formularului afiat n fereastra Visual Basic.

Se asociaz butonului procedura din Figura 56. In procedur se citete textul din caseta Text0 i se execut instruciunea SQL corespunztoare.

44

Figura 56. Procedura asociat butonului.

In Figura 57 se arat instruciunea SQL introdus. In Figura 58 se arat mesajul generat , iar n Figura 59 se arat tabela modificat.

Figura 57. Instruciune SQL.

45

Figura 58. Mesaj la execuia instruciunii SQL.

Figura 59. Tabela PROIECT_MODIF actualizat.

1.7 Probleme propuse


Fie tabela SITUATIE_FINANCIARA de mai jos cu veniturile i cheltuielile unei intreprinderi. SITUATIE_FINANCIARA AN VENITURI CHELTUIELI PROFIT

Cheia primar a tabelei este cmpul AN. Se va proiecta tabela i se vor completa cmpurile AN, VENITURI, CHELTUIELI. Se va crea un formular pentru afiarea tabelei cu o aplicaie vrjitor i se va scrie o procedur pentru calculul profitului dup formula PROFIT = VENITURI - CHELTUIELI

1.8 Intrebri de control


1. Care sunt tipurile de date i instruciunile limbajului Visual Basic? 2. Cum se definesc funciile i procedurile n limbajul Visual Basic? 3. Care sunt evenimentele trimise de sistemul de operare unui formular la deschiderea i nchiderea lui?

46