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 uncii !i proceduri................................................................................."
1.1.# Tipuri de date definite de utili$ator........................................................%
1.2 &esaje !i e'enimente.....................................................................................%
1.2.1 ('enimente...........................................................................................1)
1.2.2 Crearea unei proceduri asociate unui e'eniment..................................13
1.2.3 &eniurile aplicaiei Visual Basic.........................................................1*
1.2.# Casete de mesaj !i casete de te+t..........................................................1%
1.2.5 ,efinirea unei proceduri asociate unei casete te+t...............................2)
1.2.- ,efinirea unei proceduri asociate unui buton......................................23
1.3 .a'igarea /n tabela re$ultat a unui formular................................................2"
1.# Crearea unei tabele re$ultat pentru un formular !i na'igarea /n tabel0........33
1.5 1fi!area numelor c2mpurilor tabelei re$ultat...............................................#)
1.- 3tili$area instruciunilor 45L pentru prelucrarea ba$ei de date..................#3
1." 6robleme propuse.........................................................................................#-
1.* Intreb0ri de control.......................................................................................#-
1
1 Crearea aplicaiilor grafice cu limbajul Visual Basic
ormularele !i rapoartele ba$ei de date conin obiecte grafice7 numite /n capitolele
anterioare controale7 ce permit afi!area datelor din ba$a de date. In formularele !i
rapoartele create anterior am utili$at doar casete de te+t7 liste !i casete combinate ce
afi!au 'alori. (ste posibil s0 ad0ug0m !i alte obiecte grafice7 cum ar fi butoanele care
s0 ne permit0 s0 interacion0m cu formularele sau rapoartele create8 la un clic pe
buton s0 se e+ecute un program ce efectuea$0 calculele dorite. 1semenea programe se
scriu /n limbajul Visual Basic.
1.1 Limbajul Visual Basic
1.1.1 Tipuri de date standard
Variabilele unui limbaj se clasific0 dup0 tipul lor. Tipul unei 'ariabile este mulimea
'alorilor pe care le poate lua acea 'ariabil0 !i operaiile ce se pot efectua cu acele
'alori. Tipul unei 'ariabile este f0cut e+plicit cu o declaraie de tip. Tipurile
predefinite /n limbajul Visual Basic sunt cele din Tabelul 1.
Tip 4emnificaie
,imensiune
/n octei
,omeniul de
'alori
Long .umere /ntregi # 9:2
31
; 2
31
<
Integer .umere /ntregi 2 9:2
15
: 2
15
<
4ingle
.umere reale /n
simpl0 preci$ie
# 9:1)
3*
; 1)
3*
<
,ouble
.umere reale /n
simpl0 preci$ie
* 9:1)
3)"
; 1)
3)"
<
Boolean
Valoare
boolean0
: True 7 alse
4tring =ir de caractere : :
Currenc> Valori monetare : :
,ate
,at0
calendaristic0
: :
Tabelul 1. Tipurile de date ale limbajului Visual Basic.
.umele de 'ariabile 9identificatorii< /ncep cu o liter0 sau caracterul ? 9underscore<7 !i
pot conine litere7 cifre !i caracterul ?. Literele mari nu sunt deosebite de cele mici.
Variabilele sunt definite cu instruciunea ,im cu forma
,im .umeVariabila 1s tip7 .umeVariabila 1s tip7 @
unde tip este tipul 'ariabilei respecti'e.
(+emple.
,im nume 1s 4tring
,im 'arsta 1s Integer
,im salariu 1s Currenc>
Instruciunea ,im poata defini !i tablouri cu una sau mai multe dimensiuni. orma
instruciunii pentru definirea unui 'ector este
,im .umeTablou 9nre< 1s tip
unde nre este num0rul de elemente ale 'ecorului7 iar tip tipul elementelor 'ectorului.
Indicii componentelor /ncep de la $ero. ,e e+emplu7 instruciunea
,im 'ec95< 1s 4ingle
2
define!te un 'ector cu cinci componente reale. Indicii componentelor sunt )7 17 @7 #.
orma instruciunii pentru definirea unei matrice este
,im .umeTablou 9nl7 nc< 1s tip
unde nc !i nl sunt num0rul de linii !i de coloane ale matricei. ,e e+emplu7
,im mat 927 3< 1s Integer
define!te o matrice cu dou0 linii !i trei coloane cu elemente /ntregi. (lementele
matricei au indicii 9)7 )<7 9)7 1<7 9)7 2<7 917 )<7 917 1<7 917 2<.
6entru toate tipurile de date e+ist0 dou0 operaii fundamentale8 atribuirea !i
compararea. Aperatorul de atribuire este B. orma unei instruciuni de atribuire este
.umeVariabila B e+presie
Aperatorii de comparare sunt
C7 CB7 D7 DB7 B7 CD
(+presiile relaionale au forma
e+presie aritmetic0 operator de comparare e+presie aritmetic0
Ee$ultatul unei e+presii relaionale este True 9ade'0rat< sau alse 9fals<.
1.1.1.1 Tipurile numerice
Aperatorii pentru tipurile numerice sunt F7 :7 G7 H7 I7 &od !i J. In ca$ul operatorului de
/mp0rire H7 operan$ii sunt con'ertii /n numere reale dac0 este necesar7 dup0 care se
efectuea$0 /mp0rirea. In ca$ul operatorului I c2tul se rotunje!te la un num0r /ntreg.
Aperatorul &od d0 restul /mp0ririi a dou0 numere cu operatorul I. Aperatorul J
efectuea$0 ridicarea la putere.
(+presiile aritmetice se e'aluea$0 dup0 regulile cunoscute8 cea mai mare prioritate o
are operatorul J7 apoi operatorii G7 H7 I7 &od !i7 /n final7 operatorii F !i :. 6entru a
modifica ordinea de e'aluare a operatorilor se utili$ea$0 parante$e rotunde7 9 !i <.
Tabelul 2 pre$int0 e+emple de e+presii aritmetice.
(+presie Ee$ultat
# H 3 1.3333333
# I 3 1
5 &od 3 2
- H 3 G # *
- H 93 G #< ).5
2.5 J 2 -.25
Tabelul 2. Exemple de expresii aritmetice.
.umerele se scriu dup0 regulile cunoscute. .umerele reale se scriu cu partea /ntreg0
separat0 de cea subunitar0 prin punct $ecimal. (+ist0 constanta predefinit0 6I.
unciile matematice standard ale limbajului sunt
sin log sKr
cos e+p abs
tan
uncia log calculea$0 logaritmul natural7 funcia sKr calculea$0 r0d0cina patrat0.
Toate aceste funcii au un parametru de tip ,ouble. 1rgumentele funciilor
trigonometrice sunt /n radiani. 6utem defini !i constante cu nume cu instruciunea
Const .umeConstant0 1s tip B 'aloare
,e e+emplu putem defini num0rul e ca
Const ( 1s 4ingle B 2."1
3
1.1.1.2 Tipul String
Variabilele de tip 4tring conin !iruri de caractere. Constantele tip !ir de caractere se
scriu /ntre gLilimele. Aperatorul M reali$ea$0 concatenarea !irurilor.
(+emple de constante tip 4tring sunt NabcdN sau !irul 'id NN. Concatenarea !irurilor
N+>$N !i NaFb:cN se face cu e+presia
N+>$N M NaFb:cN
!i are ca re$ultat !irul N+>$aFb:cN.
A funcie util0 la lucrul cu !iruri este funcia Len9< care are ca parametru un !ir !i ca
re$ultat lungimea !irului. A alt0 funcie este Val9< ce con'erte!te un !ir de caractere
/ntr:un num0r. uncia Val9< ce are ca parametru !irul de caractere !i ca re$ultat
num0rul re$ultat prin con'ersie.
1.1.1.3 Tipul Boolean
Variabilele de tip Boolean au 'aloarea ade'0rat sau fals.1ceste 'alori sunt
repre$entate prin constantele booleene predefinite True !i alse. Aperatorii booleeni
sunt 1nd7 Ar !i .ot. 1ce!ti operatori se definesc cu tabelele de ade'0r de mai jos.
O .ot O
alse True
True alse
Tabelul 3. Definiia operatorului ot.
O P O 1nd P
alse alse alse
alse True alse
True alse alse
True True True
Tabelul !. Definiia operatorului "nd.
O P O Ar P
alse alse alse
alse True True
True alse True
True True True
Tabelul #. Definiia operatorului $r.
(+presiile booleene conin constante7 'ariabile booleene !i e+presii relaionale7 !i
operatorii 1nd7 Ar !i .ot. 6riorit0ile operatorilor booleeni sunt8 .ot are cea mai mare
prioritate7 apoi 1nd !i Ar. 6entru a modifica ordinea de e+ecuie a operatorilor
booleeni7 se pot utili$a parante$e rotunde7 9 !i <. La e'aluarea unei e+presii booleene7
prima dat0 se e'aluea$0 e+presiile relaionale.
Tabelul - arat0 e+emple de e+presii relaionale !i booleene.
(+presie Ee$ultat
* C 1) True
12 D 5 1nd 5 DB - alse
Tabelul %. Exemple de expresii relaionale &i booleene.
#
1.1.2 Instruciuni
In programe se pot insera linii cu comentarii /n dou0 moduri8
cu instruciunea EemQ dup0 cu'2ntul cLeie Eem urmea$0 comentariul7
un apostrof7 dup0 care urmea$0 comentariul.
A instruciune se poate scrie pe mai multe linii. 6entru continuare pe linia urm0toare
se utili$ea$0 un spaiu !i caracterul ?.
1.1.2.1 'nstruciunea 'f
Instruciunea If e+ecut0 un grup de instruciuni /n funcie de 'aloarea unei e+presii
booleene. Cea mai simpl0 form0 a instruciunii este
If condiie tLen
4
(nd If
Condiia este orice e+presie relaional0 sau boolean07 iar 4 este un grup de
instruciuni. &odul de e+ecuie al instruciunii If este urm0torul8
1. se e'aluea$0 condiia7
2. c2nd condiia are 'aloarea True se e+ecut0 grupul de instruciuni 4.
A alt0 form0 a instruciunii If este
If condiie
41
(lse
42
(nd If
1ici 41 !i 42 sunt grupuri de instruciuni. &odul de e+ecuie al instruciunii este
1. se e'aluea$0 condiia7
2. c2nd condiia are 'aloarea True se e+ecut0 grupul de instruciuni 417 iar c2nd
are 'aloarea alse se e+ecut0 grupul de instruciuni 42.
Instruciunea If are /nc0 o form0 care permite testarea a mai multor condiii
If condiie1
41
(lseif condiie2
42
@
(leseif condiien
4n
(lse
4p
(nd If
1ceast0 instruciune se e+ecut0 astfel 8
1. se e'aluea$0 condiie17
2. c2nd condiie1 are 'aloarea True se e+ecut0 41 !i se p0r0se!te instruciunea If7
3. c2nd condiie1 are 'aloarea alse se e'aluea$0 condiie27
#. c2nd condiie2 are 'aloarea True se e+ecut0 42 !i se p0r0se!te instruciunea If7
5
5. @..
-. c2nd toate condiiile anterioare au a'ut 'aloarea alse se e'aluea$0 condiien7
". c2nd condiien este True se e+ecut0 4n !i se p0r0se!te instruciunea If7
*. c2nd condiien este alse se e+ecut0 4p !i se p0r0se!te instruciunea If.
1.1.2.2 'nstruciunea Select (ase
orma instruciunii 4elect Case este urm0toare
4elect Case e+presie
Case condiie1
41
Case condiie2
42
@
Case condiien
4n
(nd 4elect
In aceast0 instruciune 417 427 @7 4n sunt grupuri de instruciuni dintre care se
e+ecut0 unul singur7 cel al c0rui condiie este satisf0cut0 de e+presie. &odul de
e+ecuie al instruciunii 4elect Case este urm0torul8
1. se e'aluea$0 e+presia7
2. dac0 e+presia satisface condiie1 se e+ecut0 41 !i se p0r0se!te instruciunea7
3. dac0 e+presia satisface condiie2 se e+ecut0 42 !i se p0r0se!te instruciunea7
#. @
5. c2nd toate condiiile anterioare au fost false7 dac0 e+presia satisface condiien
se e+ecut0 4n !i se p0r0se!te instruciunea.
1.1.2.3 'nstruciunea )or
Instruciunea or e+ecut0 repetat un grup de instruciuni cu modificarea dup0 fiecare
e+ecuie a unei 'ariabile de control. orma instruciunii or este
or counter B 'alstart To 'alend 4tep 'alpas
4
.e+t
counter este 'ariabila de control a instruciunii or7
'alstart este 'aloarea iniial0 a 'ariabilei counter7
'alend este 'aloarea final0 a 'ariabilei counter7
'alpas este 'aloarea cu care este modificat0 'ariabila counter la fiecare pas7
4 este u grup de instruciuni.
Instruciunea or se e+ecut0 astfel8
1. 'ariabila counter prime!te 'aloarea 'alstart7
2. se e+ecut0 grupul de instruciuni 47
3. se modific0 'aloarea 'ariabilei counter cu 'alpas7
#. dac0 'aloarea 'ariabilei counter este CB dec2t 'alend se merge la pasul 27 /n
ca$ contrar se p0r0se!te instruciunea or.
(+emplu. 40 calcul0m 'aloarea 5R. 6rogramul este urm0torul
-
f B 1
or i B 1 To 5 4tep 1
f B f G i
.e+t
Variabila de control i a instruciunii or este m0rit0 cu pasul 1 dup0 fiecare e+ecuie a
instruciunii
f B f G i
1.1.2.! 'nstruciunea *+ile
Instruciunea SLile e+ecut0 repetat un grup de instruciuni at2t timp c2t o condiie are
'aloarea True. orma instruciunii SLile este8
SLile condiie
4
Send
&odul de e+ecuie a instruciunii SLile este urm0torul8
1. se e'aluea$0 condiia7
2. c2nd condiia are 'aloarea True se e+ecut0 grupul de instruciuni 4 !i se merge
la pasul 17
3. c2nd condiia are 'aloarea alse7 se p0r0se!te instruciunea SLile.
(+emplu. 40 calcul0m 'aloarea 5R. 6rogramul este urm0torul8
f B 1
i B 1
SLile i CB 5
f B f G i
i B i F 1
Send
1.1.3 Funcii i proceduri
Limbajul Visual Basic permite definirea a dou0 tipuri de subprograme8 funcii !i
proceduri.
1.1.3.1 Definirea funciilor
A funcie calculea$0 o 'aloare asociat0 numelui funciei. uncia poate a'ea
parametri7 ale c0ror 'alori sunt folosite /n calculele efectuate de funcie.
,efiniia unei funcii este urm0toarea
unction .umeuncie 9lista de parametri< 1s tip
corpul funciei
(nd unction
numele funciei7 .umeuncie este ales de programator7
tip este tipul 'alorii calculate de funcie7
lista de parametri a funciei are forma
.ume6arametru 1s tip7 .ume6arametru 1s tip7 @
A funcie trebuie s0 conin0 cel puin o instruciune de forma
"
.umeuncie B e+presie
(+emplu. 40 definim o funcie ce calculea$0 'aloarea nR. uncia are ca parametru
'ariabila n de tip Integer. Ee$ultatul calculat de funcie este de tip Integer.
unction fact 9,im n 1s Integer< 1s Integer
,in f 1s Integer
f B 1Q
or i B 1 To n 4tep 1
f B f G i
.e+t
fact B f
(nd unction
uncia se apelea$0 utili$2nd:o ca termen /n membrul drept al unei instruciuni de
atribuire. ,e e+emplu7 funcia de mai sus se utili$ea$0 pentru calculul 'alorii #R astfel
,im T 1s Integer
T B fact9#<
6entru a calcula 'aloarea
( )R 2 5 R 2
R 5
2
5

= C
'om apela funcia astfel8
,im j 1s Integer
j B fact95< H fact92< H fact93<
1.1.3.2 Definirea procedurilor
A procedur0 calculea$0 'alori ce sunt asociate unor parametri ai procedurii. 6rocedura
poate a'ea parametri de intrare7 ale c0ror 'alori sunt folosite /n calculele efecuate de
procedur07 !i parametri de ie!ire ce primesc 'alori calculate de procedur0.
,efiniia unei proceduri este urm0toarea
4ub .ume6rocedur0 9lista de parametri<
corpul procedurii
(nd 4ub
numele procedurii7 .ume6rocedur0 este ales de programator7
lista de parametri a funciei are forma
.ume6arametru 1s tip7 .ume6arametru 1s tip7 @
unde parametrii sunt de intrare !i de ie!ire.
Ie!irea dintr:o procedur0 se face cu unstruciunea
(+it 4ub
6rocedurile au un mecanism de gestionare a erorilor ce apar la e+ecuie. 1cest
mecanism asigur0 trecerea e+ecuiei la o anumit0 eticLet0 unde se e+cut0 instruciuni
de tratare a erorii. Instruciunea de transfer a e+ecuiei este
An (rror UoTo eticLeta
iar sec'ena de gestionare a erorii este
eticLeta8
instruciuni de tratare a erorii
In paragrafele urm0toare se 'or pre$enta e+emple de definiii de proceduri.
*
A procedur0 se utili$ea$0 scriind numele procedurii7 urmat /n parante$e de parametri.
1.1. Tipuri de date definite de utili!ator
3tili$atorul poate defini propriile tipuri de date. 3n tip de date definit de utili$ator
poate conine 'ariabile7 numite /n continuare c2mpuri sau propriet0i. ,efinirea unui
tip utili$ator se face cu instruciunea T>pe cu forma
T>pe .umeTip
.umeC2mp 1s tip
.umeC2mp 1s tip
@.
(nd T>pe
4e pot defini obiecte de un tip utili$ator cu instruiunea ,im cu forma
,im .umeAbiect 1s .umeTip
(+emplu. ie tipul definit de utili$ator
T>pe 1ngajat
.ume 1s 4tring
6renume 1s 4tring
Varsta 1s Integer
(nd T>pe
Vom defini un obiect scalar !i un 'ector cu obiecte de tipul 1ngajat
,im ,irector 1s 1ngajat
,im contabil91)< 1s 1ngajat
C2mpurile unui obiect se apelea$0 cu operatorul punct7 V.W ca mai jos
.umeAbiect..ume6roprietate
,e e+emplu
,irector..ume
,irector.Varsta
contabil9)<.6renume
Tipurile de date pot a'ea !i funcii numite /n continuare metode7 ce pot prelucra
propriet0ile tipului. unciile se apelea$0 cu operatorul punct7 V.W7 la fel ca !i
propriet0ile obiectului7 ca mai jos
.umeAbiect..umeuncie 9parametri<
1.2 Mesaje i evenimente
4istemul de operare SindoXs este un sistem dirijat de e'enimente. La lansarea /n
e+ecuie a unei aplicaii7 sistemul de operare crea$0 o coad0 de mesaje pentru
aplicaie. iecare mesaj conine codul unui e'eniment !i momentul s0u de apariie.
1plicaia const0 /n funcii ce tratea$0 di'erse e'enimente. 4istemul de operare ia c2te
un mesaj din coad07 /n ordinea apariiei lor7 !i apelea$0 funcia ce tratea$0 mesajul.
&esajele corespund unor e'enimente generate de utili$ator sau mesaje generate de
sistemul de operare. ('enimentele generate de utili$ator sunt urm0toarele8
clic cu butonul drept al mousului7
clic cu butonul st2ng al mousului7
dublu clic7
deplasarea mousului7
%
ap0sarea unei taste7
eliberarea unei taste.
La un moment dat pot fi lansate /n e+ecuie mai multe aplicaii7 dar una singur0 este
acti'0. Toate e'enimentele generate de utili$ator sunt dirijate c0tre aplicaia acti'0Q
mesajele corespun$0toare sunt introduce /n coada de mesaje a aplicaiei acti'e. 1tunci
c2nd o aplicaie define acti'07 ea obine focul de intrare. 1tunci c2nd o alt0 aplicaie
de'ine acti'07 aplicaia ce a fost acti'0 pierde focul de intrare. Abinerea !i pierderea
focului de intrare sunt dou0 mesaje generate de sistemul de operare. 1lte mesaje
generate de sistemul de operare7 specifice fiec0rui obiect grafic7 'or fi descrise mai
departe.
1.2.1 "#enimente
Abiectele grafice au asociate mesaje trimise de utili$ator !i mesaje trimise de sistemul
de operare. 1ceste mesaje sunt ar0tate /n tabela de propriet0i a obiectului7 seciunea
('ent. igura 1 arat0 c2te'a din mesajele primite de un formular.
)igura 1. E,enimente ale unui formular.
4ec'ena de mesaje trimise de sistemul de operare unui formular la crearea lui este
urm0toarea
Apen Load Eesi$e 1cti'ate Current
4ec'ena de mesaje trimise de sistemul de operare unui formular la distrugerea lui este
urm0toarea
3nload ,eacti'ate Close
('enimentele corespun$0toare acestor mesaje sunt descrise mai jos. 6entru a e+ecuta
o procedur0 la apariia unui e'eniment se pune proprietatea $nE,eniment la 'aloarea
Y('ent 6rocedureZ. 6rocedura ce se 'a e+ecuta are linia de definiie
6ri'ate 4ub object?('eniment 9parametri<
E,enimentul $pen
('enimentul Apen apare c2nd un formular este creat7 dar /nainte ca prima /nregistrare
s0 fie afi!at0. 6entru a e+ecuta o aciune c2nd apare acest e'eniment7 definim
procedura
-ri,ate Sub object.$pen/(ancel "s 'nteger0
Object numele unui formular sau raport
1)
Cancel 'ariabil0 de tip IntegerQ determin0 dac0 apare descLiderea formularului sau
raportului. 6un2nd argument Cancel la 'aloarea True 9;1< se anulea$0 descLiderea
formularului sau raportului.
6rocedura de mai jos afi!a$0 o caset0 de dialog cu un mesaj !i dou0 butoane7 Pes !i
.o. 4e testea$0 re$ultatul funciei &sgBo+ /ntr:o instruciune 4elect Case !i se
e+ecut0 aciunea dorit0.
6ri'ate 4ub orm?$pen9Cancel 1s Integer<
,im intEeturn 1s Integer
intEeturn B &sgBo+9N(nter order details noX[N7 'bPes.o<
4elect Case intEeturn
Case 'bPes
\ Apen Arder ,etails form.
,oCmd.Apenorm NArder ,etailsN
Case 'b.o
&sgBo+ NEemember to enter order details b> 5 6.&.N
Cancel B True \ Cancel Apen e'ent.
(nd 4elect
(nd 4ub
E,enimentul 1oad
('enimentul Load apare atunci c2nd un formular este creat !i /nregistr0rile lui sunt
afi!ate. 6entru a e+ecuta o aciune c2nd apare acest e'eniment7 definim procedura
-ri,ate Sub Form.1oad/0
E,enimentul 2esi3e
('enimentul Eesi$e apare c2nd un formular este creat !i ori de c2te ori dimensiunile
unui formular se modific0. 6entru a e+ecuta o aciune c2nd apare acest e'eniment7
definim procedura
-ri,ate Sub Form.2esi3e/0
E,enimentul "cti,ate
('enimentul 1cti'ate apare c2nd un formular sau raport prime!te focul de intrare !i
de'ine fereastra acti'0. 6entru a e+ecuta o aciune c2nd apare acest e'eniment7
definim procedura
-ri,ate Sub object."cti,ate/0
Object numele unui formular sau raport.
E,enimentul (urrent
('enimentul Current apare atunci c2nd un formular este creat !i ori de c2te ori focul
de intrare se mut0 de la o /nregistrare a tabelei re$ultat la alta. 6entru a e+ecuta o
aciune c2nd apare acest e'eniment7 definim procedura
-ri,ate Sub object.(urrent/0
Object numele unui formular
6entru a e+ecuta o procedur0 c2nd apare acest e'eniment7 se setea$0 proprietatea
$n(urrent la 'aloarea Y('ent 6rocedureZ.
E,enimentul 4nload
('enimentul 3nload apare dup0 ce un formular este /ncLis7 dar /nainte ca s0 fie !ters
de pe ecran. C2nd formularul este re/nc0rcat7 1ccess reafi!a$0 formularul !i
11
reiniiali$ea$0 coninutul s0u !i toate controalele sale. 6entru a e+ecuta o aciune c2nd
apare acest e'eniment7 definim procedura
-ri,ate Sub Form.4nload/0
E,enimentul Deacti,ate
('enimentul Deacti,ate apare c2nd un formular sau raport pierde focul de intrare /n
fa'oarea unei Tabele7 Interogari7 ormular7 Eaport sau ferestre. 6entru a e+ecuta o
aciune c2nd apare acest e'eniment7 definim procedura
-ri,ate Sub object.Deacti,ate/0
Object numele unui formular sau raport.
E,enimentul (lose
('enimentul Close apare c2nd un formular sau raport este /ncLis !i /ndep0rtat de pe
ecran. 6entru a e+ecuta o aciune c2nd apare acest e'eniment7 definim procedura
-ri,ate Sub object.(lose/0
Object numele unui formular sau raport.
E,enimentul Dbl(lic5
('enimentul ,blClicT apare c2nd utili$atorul e+ecut0 un dublu clic pe un obiect.
6entru a e+ecuta o aciune c2nd apare acest e'eniment7 definim procedura
-ri,ate Sub object.Dbl(lic5/(ancel "s 'nteger0
Object numele unui formular sau control.
Cancel : 'ariabil0 de tip IntegerQ determin0 dac0 e'enimentul ,blClicT 'a ap0rea.
6un2nd argumentul Cancel la 'aloarea True 9;1< anulea$0 e'enimentul ,blClicT.
('enimentul ,blClicT se aplic0 la formulare !i controale.
E,enimentul (lic5
('enimentul ClicT apare c2nd utili$atorul e+ecut0 un clic de mous asupra unui obiect.
6entru a e+ecuta o aciune c2nd apare acest e'eniment7 definim procedura
-ri,ate Sub object.(+ange/0
Object numele unui formular sau control.
6entru a e+ecuta o procedur0 c2nd apare acest e'eniment7 se setea$0 proprietatea
$n(lic5 la 'aloarea Y('ent 6rocedureZ.
In ca$ul unui control7 e'enimentul apare la un clic cu butonul st2ng pe control. In
ca$ul unui formular e'enimentul apare c2nd se e+ecut0 clic pe spaiul liber al
formularului sau pe selectorul /nregistr0rilor.
E,enimentul 6ot)ocus
('enimentul Uotocus apare c2nd un formular sau control prime!te focul de intrare..
6entru a e+ecuta o aciune c2nd apare acest e'eniment7 definim procedura
-ri,ate Sub object.6ot)ocus/0
Object numele unui formular sau al unui control.
1cest e'eniment apar c2nd focul de intrare se mut0 ca r0spuns la aciunea
utili$atorului7 cum ar fi ap0sarea tastei T1B sau la un clic pe un obiect7 sau c2nd
apel0m metoda Set)ocus.
Eeamintim c07 /n ca$ul tuturor e'enimentelor7 pentru a defini o procedur0 care s0 fie
e+ecutat0 la apariia unui e'eniment7 se pune proprietatea $nE,eniment la 'aloarea
Y('ent 6rocedureZ. 1plicaia 1ccess generea$0 urm0toarea procedura ce se 'a e+ecuta
la apariia e'enimentului
12
6ri'ate 4ub object?('eniment 9parametri<
(nd 4ub
1ceast0 procedur0 'a fi completat0 de utili$ator.
In continuare 'om ar0ta cum se definesc proceduri asociate di'erselor e'enimente.
6entru scrierea acestor proceduri trebuie s0 afi!0m fereastra editorului Visual Basic !i
caseta de propriet0i ale obiectelor grafice. Barele de meniu !i de instrumente ale
'ederii ,esign a unui formular sau raport sunt ar0tate /n igura 2.
)igura 2. Barele de meniu &i de instrumente ale ,ederii Design a rapoartelor &i formularelor.
1fi!area ferestrei editorului Visual Basic se poate face cu butoanele barei de
instrumente din Tabelul " sau cu opiunile (ode !i -roperties ale meniului Vie*.
Buton uncie
1fi!are fereastra editor Visual Basic
1fi!are caseta cu propriet0i
1fi!are caseta CLoose Builder
Tabelul 7. Butoane pentru afi&area casetelor cu propriet8i &i fereastra editorului Visual Basic.
1plicaia Builder dorit0 se alege din caseta CLoose Builder din igura 3.
)igura 3. (aseta (+oose Builder.
1.2.2 Crearea unei proceduri asociate unui e#eniment
Consider0m tabela 6EAI(CT a c0rei proiectare este cea din igura #. ,atele tabelei
sunt cele din igura 5.

)igura !. -roiectarea tabelei -2$'E(T.
13
)igura #. Datele tabelei -2$'E(T.
4e crea$0 un formular pentru afi!area datelor tabelei cu aplicaia 'r0jitor7 ca cel din
igura -.
)igura %. )ormularul pentru afi&area datelor tabelei -2$'E(T.
Vom defini o procedur0 ce afi!a$0 mesajul Vorm ApenW c2nd formularul prime!te
mesajul Apen7 !i o procedur0 ce afi!a$0 mesajul Vorm CurrentW7 c2nd formularul
prime!te mesajul Current.
6entru a defini o procedur0 care s0 trate$e e'enimentul Apen al obiectului orm se
procedea$0 astfel8
1. se afi!a$0 caseta de propriet0i a obiectului orm din igura "Q se afi!a$0
seciunea E,entQ clic pe opiunea $n $pen7 ce corespunde e'enimentului
ApenQ din caseta combinat0 se alege opiunea 9E,ent -rocedure:7

)igura 7. E,enimente ale unui formular.
1#
2. clic pe butonul !i se afi!a$0 caseta de dialog CLoose Builder din igura 37
/n care se alege opiunea (ode BuilderQ clic pe butonul $;7 !i se afi!a$0
fereastra aplicaiei Visual Basic din igura *7
ereastra aplicaiei Visual Basic conine8
/n st2nga sus fereastra 6roject7 cu proiectele pentru care s:au scris proceduriQ
fiecare form0 are asociat un proiect7
/n st2nga jos fereastra 6roperties7 cu propriet0ile obiectului selectat7
/n dreapta este afi!at0 fereastra 9Code<7 /n care se scrie codul corespun$0tor
proceduriiQ /n partea st2ng0 a ferestrei 9Code< e+ist0 caseta combinat0 /6eneral0
cu toate obiectele grafice ale formularului7 /n partea dreapt0 e+ist0 caseta
combinat0 /Declarations0 cu e'enimentele asociate fiec0rui obiect grafic.
Coninutul celor dou0 casete este cel din Tabelul *.
)igura <. )ereastra aplicaiei Visual Basic.
a< caseta 9Ueneral< b< caseta 9,eclarations<
Tabelul <. (asetele ferestrei /(ode0 asociate obiectelor grafice ale formularului.
La afi!area ferestrei aplicaiei Visual Basic se generea$0 o procedur0 goal07
corespun$0toare obiectului grafic !i e'enimentului selectat. .umele procedurii este
format ca
.umeAbiect?.ume('eniment
'e$i igura % !i cele dou0 casete cu obiecte !i e'enimente din Tabelul *.
15
)igura =. -rocedur8 generat8 de Visual Basic.
3. se completea$0 procedura cu instruciunile necesare. In ca$ul nostru afi!0m
doar o caset0 de mesaj7 ca /n igura 1).
)igura 1>. -rocedura )orm.$pen.
La crearea formularului7 9/nainte de afi!area lui pe ecran<7 se afi!a$0 caseta de mesaj
din igura 11.
)igura 11. (aseta de mesaj afi&at8 de procedura )orm.$pen/0.
Vom mai defini o procedur0 asociat0 e'enimentului Current care este generat de
sistemul de operare /nainte de afi!area fiec0rei /nregistr0ri /n formular. 4e urmea$0
pa!ii de mai sus !i se define!te procedura orm?Current9< din igura 12. 6rocedura
afi!a$0 o caset0 cu mesajul Norm CurrentN7 /nainte de afi!area fiec0rei /nregistr0ri a
tabelei de date. ,up0 cum se obser'07 /n cele dou0 casete ale ferestrei 9Code< sunt
afi!ate numele obiectului grafic 9orm< !i numele e'enimentului 9Current<.
1-
)igura 12. -rocedurile )orm.(urrent/0 &i )orm.$pen/0.
La afi!area unei noi inregistr0ri /n formular se afi!a$0 pe ecran caseta de dialog din
igura 13.
)igura 13. (aseta de mesaj afi&at8 de procedura )orm.$pen/0 ?nainte de afi&area unei
?nregistr8ri ?n formular.
In Tabelul % este ar0tat0 fereastra 6roperties. In partea de sus e+ist0 lista cu toate
obiectele grafice ale formularului7 ca !i /n bara de instrumente a 'ederii ,esign a
formularului. In partea de jos e+ist0 o caset0 cu propriet0ile obiectelor grafice7
acelea!i ca /n caseta 6roperties din igura ". 6ropriet0ile din seciunile Data@ E,ent7
)ormat !i $t+er din igura " sunt grupate /n lista (ategori3ed7 iar seciunea "ll cu
toate propriet0ile corespunde listei "lp+abetic.
a< fereastra 6roperties b< lista cu obiectele formularului
Tabelul =. )ereastra -roperties.
1"
1.2.3 $eniurile aplicaiei Visual Basic
igura 1# arat0 barele de meniu !i de instrumente ale ferestrei Visual Basic.
)igura 1!. Barele de meniu &i de instrumente ale ferestrei Visual Basic.
4al'area procedurilor definite /n aplicaia Visual Basic se face cu clic pe meniul )ile
Sa,eVB"pplications sau cu clic pe butonul al barei de instrumente. 60r0sirea
aplicaiei Visual Basic se face cu clic pe meniul )ile (lose and 2eturn to
Aicrosoft $ffice "ccess.
&eniul Vie* conine opiuni referitoare la ferestrele depanatorului. &eniul Debug
conine opiuni utili$ate la depanarea programului8 compilarea programului !i rularea
pas cu pas.
a< meniul VieX b< meniul ,ebug
Tabelul 1>. Aeniurile Vie* &i Debug ale ferestrei Visual Basic.
opiunea $bject Bro*ser a meniului Vie* !i butonul $bject Bro*ser7 7 al
barei de instrumente afi!a$0 caseta Abject BroXser din igura 157 /n care sunt
listate toate obiectele formularului !i toate obiectele definite de limbajul Visual
Basic cu propriet0ile lor7
opiunea (ode afi!a$0 fereastra editorului Visual Basic7
opiunea $bject afi!a$0 fereastra de proiectarea o obiectului7
opiunea -roperties Bindo* !i butonul -roperties Bindo*7 7 al barei de
instrumente7 afi!a$0 fereastra 6roperties din Tabelul %7
opiunea -roject Explorer !i butonul -roject Explorer7 7 al barei de
instrumente7 afi!a$0 fereastra 6roject 'e$i igura *.
1*
)igura 1#. (aseta $bject Bro*ser.
1.2. Casete de mesaj i casete de te%t
In ca$ul formularelor a'em ne'oie7 /n multe ca$uri7 s0 afi!0m di'erse mesaje !i s0
citim 'alori introduce de utili$ator.
A caset0 de mesaj se crea$0 cu instruciunea
EetVal B &sgBo+9V&esajW7 4til7 VTitluW<
6arametrii funciei &sgBo+ sunt urm0torii8
&esaj este un !ir de caractere ce 'a fi afi!at /n caset07
4til este un num0r ce specific0 ce butoane 'a a'ea caseta7
Titlu este un !ir de caractere ce 'a constitui titltu casetei.
Tabelul 11 arat0 'alorile constantei 4til !i tipurile de butoane ce 'or fi afi!ate pentru
fiecare 'aloare. iecare 'aloarea a constantei 4til are asociat0 o constant0 predefinit07
ar0tat0 /n tabel.
4til Constant0 Butoane
) 'bA] A]
1 'bA]Cancel A]7 Cancel
2 'b1bortEetr>Ignore 1bort7 Eetr>7 Ignore
3 'bPes.oCancel Pes7 .o7 Cancel
# 'bPes.o Pes7 .o
5 'bEetr>Cancel Eetr>7 Cancel
Tabelul 11. Tipuri de butoane.
uncia &sgBo+ are ca re$ultat un num0r ce arat0 butonul ap0sat. Valorile
corespun$0toare sunt ar0tate /n Tabelul 12. In consecin07 funcia &sgBo+ este scris0
totdeauna /ntr:o instruciune de atribuire.
1%
Buton ap0sat Ee$ultat
A] 1
Cancel 2
1bort 3
Eetr> #
Ignore 5
Pes -
.o "
Tabelul 12. 2e3ultatul funciei AsgBox.
6entru a citi un !ir de caractere introdus de utili$ator7 se utili$ea$0 instructiunea
EetVal B InputBo+9V&esajW7 VTitluW7 te+t7 pos+7 pos><
uncia InputBo+ afi!a$0 o caset0 de dialog ce conine o caset0 de te+t /n care
utili$atorul 'a introduce un !ir de caractere. 6arametrii funciei InputBo+ sunt
urm0torii 8
&esaj este un !ir de caractere ce 'a fi afi!at /n caset07
Titlu este un !ir de caractere ce 'a constitui titltu casetei7
te+t este te+tul ce este afi!at /n caseta de te+t7
pos+7 po+> sunt coordonatele ecran /n pi+eli unde 'a fi afi!at0 caseta.
uncia InputBo+ are ca re$ultat !irul de caractere introdus de utili$ator. 6entru a
con'erti acest !ir /ntr:un num0r7 se utili$ea$0 funcia Val9< ce are ca parametru !irul de
caractere ce 'a fi con'ertit /n num0r.
1.2.& 'efinirea unei proceduri asociate unei casete te%t
In continuare 'om ad0uga formularului de mai sus un c2mp care s0 calcule$e salariul
brut cu formula
41L?AE1 G AE(
6entru aceasta 'om ad0uga formularului un c2mp ce const0 dintr:un obiect Label !i un
obiect Te+t ca /n igura 1-. Abiectul Label are numele Label13 !i conine te+tul
Te+t127 iar obiectul te+t asociat are numele Te+t127 date de aplicaia 1ccess.
Calculul salariului brut se poate face prin introducerea formulei de calcul ca
proprietate (ontrol Source a casetei de te+t7 dup0 cum s:a ar0tat /ntr:o lucrare
anterioar0.
A alt0 posibilitate este de asocia o procedur0 e'enimentului Currrent al formei7 care
este generat de sistemul de operare /nainte de afi!area fiec0rei /nregistr0ri /n formular.
In aceast0 procedur0 'om calcula salariul brut cu formula de mai sus !i /l 'om atribui
propriet0ii Te+t a casetei te+t cu numele Te+t12.
2)
)igura 1%. )ormular cu un cCmp ad8ugat.
4e modific0 te+tul 9proprietatea (aption< la 41L1EI3 BE3T ca /n igura 1".
)igura 17. Aodificarea propriet8ii (aption a obiectului 1abel13.
4e adaug0 formularului o procedur0 care calculea$0 salariul brut cu formula de mai
sus !i atribuie 'aloarea calculat0 casetei te+t cu numele Te+t12. 1pelarea procedurii se
face /nainte de afi!area unei /nregistr0ri /n formular7 deci atunci c2nd formularul
prime!te mesajul Current. ,efinirea procedurii se face ca mai sus8
1. se afi!a$0 caseta 6roperties a formularului7 seciunea E,ent7 ca /n igura 1*7
2. opiunea $n (urrent se pune la 'aloarea 9E,ent -rocedure:7
21
)igura 1<. (aseta -roperties a formularului.
3. se afi!a$0 fereastra aplicaiei Visual Basic cu clic pe butonul 7
#. se scrie procedura orm?Current9< din igura 1%7
5. se modific0 proprietatea Text "lign a casetei de te+t Te+t12 la 'aloarea 2ig+t.
)igura 1=. -rocedura )orm.(urrent/0.
ormularul afi!a$0 datele din ca /n igura 2).
)igura 2>. "fi&area datelor ?n formular.
22
1.2.( 'efinirea unei proceduri asociate unui buton
Vom e+emplifica crearea unui buton prin re$ol'area urm0toarei probleme. Vom crea
un formular corespun$2nd tabelei 6EAI(CT7 la care 'om ad0uga dou0 casete de te+t.
In una 'om afi!a salariul brut7 calculat cu formula
41L?AE1 G AE(
iar /n alta 'om afi!a salariul net calculat cu formula
41L?AE1 G AE( G ).*1
Vom ad0uga formularului un buton care 'a comanda afi!area pe ecran doar a uneia din
casetele de te+t. &odul de funcionare al butonului 'a fi urm0torul8
atunci c2nd este afi!at0 pe ecran caseta ce calculea$0 salariul brut7 titlul butonului
'a fi Calcul salariu net7
c2nd este afi!at0 caseta ce calculea$0 salariul net7 titlul butonului 'a fi Calcul
salariu brut7
comutarea /ntre cele dou0 casete se 'a face cu un clic pe buton7
iniial 'a fi afi!at0 pe ecran caseta ce calculea$0 salariul brut7 iar titlul butonului 'a
fi Calcul salariu net.
3n obiect grafic este 'i$ibil sau nu este 'i$ibil pe ecran7 dup0 cum proprietatea sa
Visible are 'aloarea True sau )alse. Titlul unui obiect grafic este !irul coninut /n
proprietatea (aption. Valoarea cestei propriet0i poate fi modificat0 /n orice moment.
Eeali$area formularului se face astfel8
1. se proiectea$0 formularul cu o aplicaie 'r0jitor7
2. se adaug0 cele dou0 casete de te+t. .umele atribuite obiectelor Label de
aplicaia 1ccess se modific0 /n 41L1EI3 BE3T !i respecti'e /n 41L1EI3
.(T. In casetele de te+t se introduce formulele de calcul de mai sus
B Y41L?AE1Z G YAE(Z
B Y41L?AE1Z G YAE(Z G ).*1
ca /n igura 21
Caseta te+t ce 'a conine salariul brut are numele Te+t127 cea care 'a conine salariul
net are numele Te+t1#.
)igura 21. -roiectarea formularului de calcul al salariului.
23
3. 4e adaug0 formularului !i un buton ce are numele Command1-. ,up0
desenarea butonului7 porne!te o aplicaie 'r0jitor ce permite s0 alegem un
nume semnificati' pentru buton. Caseta din igura 22 ne permite s0 alegem
numele unei aciuni.

)igura 22. "legerea aciunii unui buton.
Vom alege aciunea 2efres+ )orm Data din categoria )orm $perations.
Caseta din igura 23 ne permite s0 alegem un te+t sau o figur0 pentru numele
butonului. Vom p0stra numele implicit EefresL.
)igura 23. "legerea unui nume sau a unei figuri pentru buton.
Caseta din igura 2# ne permite s0 alegem numele obiectului grafic buton.
2#
)igura 2!. "legerea numelui obiectului grafic buton.
#. 4e ata!ea$0 butonului o procedur0 ce 'a fi e+ecutat0 la un clic pe buton7
pun2nd opiunea $n (lic5 la 'aloarea 9E,ent -rocedure: ca /n igura 257
)igura 2#. "ta&area unei proceduri unui buton.
5. se ata!a$0 o procedur0 formularului7 e+ecutat0 la apariia e'enimentului Load7
pun2nd opiunea $n 1oad la 'aloarea 9E,ent -rocedure:.
Cele dou0 proceduri sunt ar0tate /n igura 2-.
25
)igura 2%. -rocedurile formularului de calcul al salariului.
In procedura orm?Load9< se pune proprietatea (aption a butonului 9titlul butonului<
la 'aloarea VCalcul netW !i proprietatea Visible a casetei de te+t ce calculea$0 salariul
net la 'aloarea alse.
In procedura Command1-?ClicT9< se testea$0 proprietatea Visible a casetei de te+t ce
calculea$0 salariul net. ,ac0 proprietatea are 'aloarea alse7 ea se pune la 'aloarea
True 9caseta de te+t de'ine 'i$ibil0<7 se pune proprietatea Visible a casetei de te+t ce
calculea$0 salariul brut la 'aloarea alse7 !i se modific0 titlul butonului8
Te+t1#.Visible B True
Te+t12.Visible B alse
Command1-.Caption B NCalcul brutN
In ca$ contrar7 'alorile propriet0ilor se modific0 astfel8
Te+t1#.Visible B alse
Te+t12.Visible B True
Command1-.Caption B NCalcul netN
Ee$ultatele formularului afi!ate /n modul orm sunt ar0tate /n igura 2" !i igura 2*.
2-
)igura 27. (alculul salariului brut.
)igura 2<. (alculul salariului net.
Ee$ultatele afi!ate /n modul oaie de date 9,atasLeet< sunt cele din igura 2%.
)igura 2=. )ormularul afi&at ?n modul )oaie de date.
1.3 Navigarea n tabela rezultat a unui formular
A form0 este creat0 pe ba$a unei interog0ri ce are ca re$ultat o tabel0 cu /nregistr0ri.
6entru na'igarea printre /nregistr0rile tabelei se utili$ea$0 metodele obiectului
2"
,oCmd al aplicaiei. &etoda ce afi!a$0 o anumit0 /nregistrare este UoToEecord cu
forma
,oCmd.UoToEecord 99AbjectT>pe 1s 1c,ataAbjectT>pe7
Abject.ame 1s 4tring7
Eecord 1s 1cEecord7
Affset 1s Integer<
6arametrii procedurii sunt urm0torii8
AbjectT>pe ; tipul obiectului cu /nregistr0ri7 o tabel07 o interogare7 etc.7
Abject.ame ; !ir de caractere cu numele obiectului ce conine inregistr0rile7
Eecord ; aciunea ce se 'a efectua7
Affset ; d0 num0rul /nregistr0rii urm0toare.
orma metodei7 cu 'alorile implicite ale parametrilor7 este urm0toarea.
,oCmd.UoToEecord9B>Val Aptional ObjectType 1s 1c,ataAbjectT>pe B ?
1c,ataAbjectT>pe.ac1cti'e,ataAbject7 ?
B>Val Aptional ObjectName 1s 4tring B NN7 ?
B>Val Aptional Record 1s 1cEecord B 1cEecord.ac.e+t7 ?
B>Val Aptional Offset 1s Integer B 1<
6rimul argument este membru al enumer0rii 1c,ataAbjectT>pe. (l permite s0
specific0m tipul obiectului asupra c0ruia se 'a aplica aciunea. &embrii acestei
enumer0ri sunt de tip /ntreg !i 'alorile lor sunt cele din Tabelul 138
AcDataObjectType
Member
Value Descriere
acActiveDataObject -1
Actiunea se va aplica asupra nregistrrii
curente a obiectului deschis
acDataTable 0
Actiunea se va aplica asupra unei
nregistrri a unei tabele
acDataQuery
Actiunea se va aplica asupra unei
nregistrri a unei interogri
acDataFor !
Actiunea se va aplica asupra unei
nregistrri a unui "orular
acData#eport $
Actiunea se va aplica asupra unei
nregistrri a unui raport
Tabelul 13. Enumerarea "cData$bjectTDpe.
Valoarea implicit0 este ac1cti'e,ataAbject.
,ac0 se omite primul argument !i dac0 se apelea$0 metoda ,oCmd.UoToEecord9<
dintr:un formular sau raport7 aciunea de na'igare se 'a aplica asupra /nregistr0rii
curente care este afi!at0 /n acel formular sau raport.
1l doilea argument este numele obiectului selectat /n primul argument. ,e e+emplu7
dac0 primul argument a fost specificat ca un formular7
91c,ataAbjectT>pe.ac,ataorm<7 putem pasa numele acelui formular ca al doilea
argument.
1l treilea argument specific0 aciunea ce 'a fi e+ecutat0. 1cest argument este un
membru al enumer0rii 1cEecord. &embrii acestei enumer0ri sunt de tip /ntreg !i
'alorile lor sunt cele din Tabelul 1#
2*
AcRecord
Member
Value
La fel ca
Clicking
Descriere
acFirst ! %avigare la pria nregistrare
acre!ious 0
%avigare la nregistrarea
precedent
ac"e#t 1
%avigare la nregistrarea
urtoare
acLast $ %avigare la ultia nregistrare
ac$oTo &
%avigare la o nregistrare' (n
acest ca) se pasea) nurul
nregistrrii ca al patrulea
arguent
ac"e%Rec *
Deschide o nou nregistrare
vid
Tabelul 1!. Enumerarea "c2ecord.
1l patrulea argument este de tip /ntreg. (l d0 num0rul urm0toarei /nregistr0ri. ,ac0
acest argument este omis7 'aloarea lui este 17 adic0 se trece la urm0toarea /nregistrare.
ie din nou tabela 6EAI(CT7 pentru care 'rem ca s0 afi!0m doar angajaii cu salariul
orar cuprins /ntre dou0 limite ce 'or fi introduse cu dou0 casete de te+t. 6roiectarea
tabelei este cea din igura #7 iar datele din tabel0 sunt cele din igura 5.
Vom utili$a formularul de afi!are a /nregistr0rilor din tabela 6EAI(CT7 proiectat cu
aplicaia 'r0jitor7 din igura -.
Vom asocia e'enimentului Apen procedura orm?Apen din igura 3). 6rocedura
afi!a$0 pentru /nceput o caset0 cu mesajul NLimite pentru salariuN cu instruciunea
EetVal B &sgBo+9NLimite pentru salariuN7 'bA]Anl>7 N&esajN<
1poi se 'or citi limitele7 inferioar0 !i superioar07 cu dou0 casete de te+t
LimInfs B InputBo+9NLimita inferioaraN7 NLimiteN7
Nintroduceti limita inferioaraN7 #))7 -))<
Lim4ups B InputBo+9NLimita superioaraN7 NLimiteN7
Nintroduceti limita superioaraN7 #))7 -))<
Cele dou0 limite citite sunt !iruri de caractere. 4e con'ertesc aceste !iruri de caractere
/n numere /n 'ariabilele LimInf !i Lim4up cu instruciunile 8
LimInf B Val9LimInfs<
Lim4up B Val9Lim4ups<
6entru ca aceste 'alori s0 fie accesibile !i altor proceduri7 'ariabilele LimInf !i
Lim4up sunt declarate ca publice /nainte de proceduri.
6ublic LimInf 1s Integer
6ublic Lim4up 1s Integer
2%
)igura 3>. -rocedurile associate e,enimentelor $pen &i (urrent.
Vom asocia e'enimentului Current procedura orm?Current din igura 3). In
procedur0 'om citi 'aloarea din caseta de te+t 41L?AE1 !i o 'om compara cu cele
dou0 limite din 'ariabilele LimInf !i Lim4up. ,ac0 'aloarea din caseta 41L?AE1 nu
este cuprins0 /ntre aceste limite7 'om comanda afi!area /nregistr0rii urm0toare.
6entru /nceput 'om con'erti !irul din caseta de te+t 41L?AE1 /n num0r cu funcia
Val9<. 4irul din caseta 41L?AE1 este proprietatea Te+t a casetei !i este referit0 ca
Y41L?AE1Z.Te+t. 6entru a accesa acest0 proprietate 'om trimite mai /nt2i focul de
intrare obiectului 41L?AE1.
41L?AE1.4etocus
lim B Val9Y41L?AE1Z.Te+t<
Vom compara 'ariabila lim cu limitele din 'ariabilele LimInf !i Lim4up. ,ac0
'aloarea salariului nu este cuprins0 /ntre limite7 'om comanda trecerea la /nregistrarea
urm0toare cu funcia ,oCmd.UoToEecord97 7 ac.e+t<
If lim C LimInf Ar lim D Lim4up TLen
,oCmd.UoToEecord 7 7 ac.e+t
(nd If
3)
In acest ca$7 este posibil s0 comand0m deplasarea dup0 ultima /nregistrare din tabel07
ceea ce este o eroare. 6entru gestionarea erorii 'om utili$a metoda pre$entat0 anterior.
Vom utili$a instruciunea
An (rror UoTo (rrClicT
care7 /n ca$ul apariiei unei erori7 trece e+ecuia programului la eticLeta (rrClicT. La
aceasta eticLet0 'om p0r0si e+ecuia procedurii
(rrClicT8
(+it 4ub
(+ecuia formularului se desf0!oar0 /n felul urm0tor8
pentru /nceput7 se afi!a$0 caseta &esaj din igura 317
)igura 31. (aseta de dialog Aesaj.
se afi!a$0 apoi casetele din igura 32 !i igura 337 pentru introducerea limitelor
inferioar0 !i superioar0 pentru salariul orarQ s:au introdus 'alorile 35 !i #57
)igura 32. (aseta pentru introducerea limitei inferioare.
)igura 33. (aseta pentru introducerea limitei superioare.
31
la parcurgerea elementelor formularului /n modul ormular7 9orm<7 se afi!a$0
c2te o /nregistrare ce /ndepline!te condiiile7 ca /n igura 3# !i igura 357
)igura 3!. "fi&area re3ultatelor ?n modul )ormular.
)igura 3#. "fi&area re3ultatelor ?n modul )ormular.
la parcurgerea elementelor formularului /n modul oaie de date7 9,atasLeet<7 se
afi!a$0 tabela !i cursorul se deplasea$0 la urm0toarea linie ce /ndepline!te
condiiile7 ca /n igura 3- !i igura 3".
)igura 3%. "fi&area re3ultatelor ?n modul )oaie de date.
32
)igura 37. "fi&area re3ultatelor ?n modul )oaie de date.
1.4 rearea unei tabele rezultat !entru un formular i
navigarea n tabel"
6utem utili$a instruciunile 45L pentru a interoga ba$a de date !i crea fromulare pe
ba$a tabelei re$ultate din interogare. Informaiile despre ba$a de date sunt coninute
/ntr:o 'ariabil0 de tip ,atabase. Informaiile despre ba$a de date curent0 sunt
memorate /n 'ariabila Current,b de tip ,atabase de c0tre sistemul de operare. 6entru
a e+ecuta o instruciune 45L 4(L(CT se procedea$0 astfel8
1. se define!te o 'ariabil0 tip 4tring cu te+tul instruciunii 4(L(CT7
2. se apelea$0 funcia ApenEecordset a obiectului tip ,atabase ce e+ecut0
instruciunea 45L !i crea$0 tabela re$ultat a interog0rii.
uncia ApenEecordset are forma
ApenEecordset9s 1s 4tring7 tip re$ultat<
unde
s ; !irul de caractere ce conine instruciunea 4(L(CT
Tabela re$ultat0 din interogare este memorat0 /ntr:un obiect de tip Eecordset. Tabela
re$ultat are un cursor care este iniial po$iionat pe prima /nregistrare din tabel0.
Cursorul poate fi deplasat /nainte !i /napoi cu c2te o unitate pentru a accesa
/nregistr0rile tabelei.
Abiectul tip Eecordset are urm0toarele propriet0i8
BA are 'aloarea True dac0 programul /ncearc0 s0 deplase$e cursorul /nainte
de prima /nregistrare. ,ac0 tabela re$ultat este 'id07 proprietatea BA are
'aloare True7
(A are 'aloarea True dac0 programul /ncearc0 s0 deplase$e cursorul dup0
ultima /nregistrare7
EecordCount d0 num0rul de /nregistr0ri din tabel0 ce au fost deja /nc0rcate de
45L. Iniial EecordCount B ). ,up0 operaia &o'eLast9<7 proprietatea
EecordCount 'a conine num0rul de /nregistr0ri din tabela re$ultat.
Abiectul tip Eecordset are urm0toarele metode 9funcii< 8
&o'eirst9< mut0 cursorul la prima /nregistrare7
&o'eLast9< mut0 cursorul la ultima /nregistrare7
&o'e.e+t9< mut0 cursorul la /nregistrare urm0toare7
&o'e6re'ious9< mut0 cursorul la /nregistrarea precedent07
,elete9< !terge /nregistrarea curent07
(dit9< modific0 /nregistrarea curent07
1dd.eX9< adaug0 o nou0 /nregistrare7
33
3pdate9< transfer0 /nregistrarea ad0ugat0 cu 1dd.eX9<7 sau modificat0 cu
(dit9<7 /n tabela re$ultat.
Vom e+emplifica utili$area acestor funcii prin crearea unui formular care afi!a$0
/nregistr0rile tabelei 6EAI(CT.
Vom crea un formular ce conine o caset0 te+t /n care 'om afi!a /nregistr0rile din
tabela re$ultat7 o caset0 te+t /n care 'om afi!a num0rul /nregistr0rii7 !i dou0 butoane
unul pentru deplasarea la urm0toarea /nregistrare7 al doilea pentru deplasarea la
/nregistrarea precedent0. 6roiectarea formularului este cea din igura 3*. Caseta te+t
/n care afi!0m re$ultatele are numele Te+t)7 cea /n care afi!0m num0rul /nregistr0rii
curente are numele Te+t27cea /n care afi!0m num0rul total de /nregistr0ri din tabel0 are
numele Te+t#7 iar cele dou0 butoane au numele Command- !i Command".
)igura 3<. -roiectarea formularului de afi&are a ?nregistr8rilor.
In ca$ul nostru cre0m butoane de na'igare. ,up0 ad0ugarea unui buton la un formular
sau raport se lansea$0 o aplicaie 'r0jitor de personali$are a butoanelor. La primul pas
/n caseta 'r0jitorului se selectea$0 2ecord a,igation 9este selecia implicit0< !i
alegem opiunile Uo To ext 2ecord !i respecti'e 6o To -re,ious 2ecord pentru
cele dou0 butoane. La pasul al doilea select0m opiunea Text !i atribuim butoanelor
numele implicite ext 2ecord !i respecti'e -re,ious 2ecord. 6a!ii aplicaiei 'r0jitor
sunt ar0tai /n igura 3% !i igura #).
Vom pune proprietatea a,igation Button a formei la ,aloarea o pentru a
&terge butoanele de na,igare ale formei.
3#
)igura 3=. (aseta (ommand Button Bi3ard@ pasul '.
)igura !>. (aseta (ommand Button Bi3ard@ pasul ''.
6rocedurile generate de aplicaia 'r0jitor pentru cele dou0 butoane sunt cele din
igura #1.
35
)igura !1. -rocedurile generate pentru butoane.
Vom ata!a formularului dou0 proceduri8
orm?Load9<7 /n care apel0m funcia ApenEecordset9< a obiectului tip
,atabase care crea$0 tabela re$ultat7
orm?Current9< /n care calcul0m num0rul de /nregistr0ri din tabela re$ultat7 !i
po$iion0m cursorul pe prima /nregistrare.
Vom defini 'ariabilele globale db pentru obiectul tip ,atabase ce conine ba$a de
date7 rs pentru obiectul tip Eecordset ce conine tabela re$ultat !i rcc ce 'a conine
num0rul /nregistr0rii curente7 'e$i igura #2.
)igura !2. Variabilele programului.
In procedura orm?Load9< punem 'ariabila db la 'aloarea Current,b7 'ariabila rs la
'aloarea dat0 de funcia ApenEecordset9< !i 'ariabila rcc la 'aloarea ). Variabila
3-
predefinit0 Current,b conine ba$a de date curent0 !i este iniiali$at0 de aplicaia
1ccess.
6ri'ate 4ub orm?Load9<
4et db B Current,b
4et rs B db.ApenEecordset9N6roiectN7 dbApen,>naset<
rcc B )
(nd 4ub
)igura !3. -rocedura )orm.1oad/0
In procedura orm?Current9< calcul0m num0rul de /nregistr0ri din tabela re$ultat !i
po$iion0m cursorul pe prima /nregistrare. Variabila rcc prime!te 'aloarea 1.
6ri'ate 4ub orm?Current9<
If .ot 9rs.(A< TLen
rcc B 1
rs.&o'eLast
rs.&o'eirst
(nd If
Te+t2 B rcc
Te+t# B rs.EecordCount
(nd 4ub
Instruciunea &o'eLast pune 'ariabila EecordCount la num0rul de /nregistr0ri din
tabela re$ultat. Instruciunea &o'eirst po$iionea$0 cursorul pe prima /nregistrare.
)igura !!. -rocedura )orm.(urrent/0.
Caseta Te+t2 prime!te ca 'aloare num0rul /nregistr0rii curente7 iar Te+t# prime!te ca
'aloare num0rul de /nregistr0ri din tabela re$ultat. ,e ce[
3"
)igura !#. -rocedura butonului Ao,e ext.
6rocedura asociat0 butonului &o'e 6re'ious7 Command-?ClicT9<7 este cea din igura
#5. In aceast0 procedur0 facem urm0toarele operaii8
se afi!a$0 /nregistrarea curent0Q /n caseta Te+t) se concatenea$0 toate
c2mpurile din /nregistrare8 I,?6E^7 I,?1.U7 etc.
Te+t) B rsRYI,?6E^Z M N:N M rsRYI,?1.UZ M N:N M ?
rsRY.3&(?1.UZ M N:N M rsRY,6T?1.UZ M N:N M rsRYAE(Z
/n 'ariabila Te+t2 se afi!a$0 num0rul /nregistr0rii curente
Te+t2 B rcc
c2nd cursorul nu este dup0 ultima /nregistrare7 se trece la /nregistrarea
urm0toare !i se adun0 1 la 'ariabila rcc7 /n ca$ contrar se po$iionea$0 cursorul
pe ultima /nregistrare !i 'ariabila rcc prime!te 'aloarea EecordCount.
If .ot rs.(A TLen
rs.&o'e.e+t
rcc B rcc F 1
(lse
rs.&o'eLast
rcc B rs.EecordCount
(nd If
In ca$ de eroare se afi!a$0 un mesaj de eroare !i se merge la sf2r!itul procedurii.
(rr?Command-?ClicT8
&sgBo+ (rr.,escription
Eesume (+it?Command-?ClicT
3*
)igura !%. -rocedura butonului Ao,e -re,ious.
6rocedura asociat0 butonului &o'e 6re'ious7 Command"?ClicT9<7 este cea din igura
#-. In aceast0 procedur0 facem urm0toarele operaii8
se afi!a$0 /nregistrarea curent0Q /n caseta Te+t) se concatenea$0 toate
c2mpurile din /nregistrare8 I,?6E^7 I,?1.U7 etc.
Te+t) B rsRYI,?6E^Z M N:N M rsRYI,?1.UZ M N:N M ?
rsRY.3&(?1.UZ M N:N M rsRY,6T?1.UZ M N:N M rsRYAE(Z
/n 'ariabila Te+t2 se afi!a$0 num0rul /nregistr0rii curente
Te+t2 B rcc
c2nd cursorul nu este /nainte de prima /nregistrare7 se trece la /nregistrarea
precedent0 !i se scade 1 din 'ariabila rcc7 /n ca$ contrar se po$iionea$0
cursorul pe prima /nregistrare !i 'ariabila rcc prime!te 'aloarea 1.
If .ot rs.BA TLen
rs.&o'e6re'ious
rcc B rcc : 1
(lse
rs.&o'eirst
rcc B 1
(nd If
In ca$ de eroare se afi!a$0 un mesaj de eroare !i se merge la sf2r!itul procedurii.
(rr?Command"?ClicT8
&sgBo+ (rr.,escription
Eesume (+it?Command"?ClicT
3%
)igura !7. a,igarea ?n tabela re3ultat.
1.# $fiarea numelor c%m!urilor tabelei rezultat
Abiectul Eecordset conine un obiect ields care este o list0 cu numele c2mpurilor din
tabela re$ultat. iecare obiect din aceast0 list0 are tipul ield. In cele ce urmea$0 'om
afi!a /ntr:o caseta te+t numele c2mpurilor din tabela re$ultat.
ie un obiect tip Eecordset creat de o interogare cu numele rs. Vom crea un !ir de
caractere cu numele c2mpurilor separate de _. 4ec'ena de instruciuni este urm0toarea
,im a 1s 4tring
a B NN
,im fld 1s ield
or (acL fld In rs.ields
a B a M N _ N M fld..ame
.e+t
Vom utili$a tabela 6EAI(CT a c0rei proiectare este cea din igura #7 iar datele tabelei
sunt cele din igura 5.
6roiect0m formularul din igura #*. In acest formular a'em caseta te+t Te+t)7 obiectul
tip Label cu numele Label1 ce conine te+tul Te+t) !i butonul Command2. Caseta
aplicaiei 'r0jitor de personali$are a butonului la pasul I este cea din igura #%. Vom
scLimba numele obiectului Label /n .ume Campuri !i 'om defini o procedur0 ata!at0
e'enimentului AnLoad. Vom pune proprietatea a,igation Button a formei la
,aloarea o pentru a &terge butoanele de na,igare ale formei.
#)
)igura !<. )ormularul pentru afi&area numelor cCmpurilor.
)igura !=. (aseta (ommand Button Bi3ard@ pasul '.
Vom completa procedurile asociate butonului !i e'enimentului An Load ca /n igura
5). 6rocedura asociat0 butonului a fost detaliat0 mai /nainte.
#1
)igura #>. -rocedurile formularului.
Crearea tabelei re$ultat se face ca /n aplicaiile anterioare. ormularul re$ultat este cel
din igura 51.
)igura #1. umele cCmpurilor tabelei re3ultat.
#2
1.& 'tilizarea instruc(iunilor )*L !entru !relucrarea bazei +e
+ate
6entru e+ecuia unei instruciuni 45L asupra ba$ei de date se utili$ea$0 metoda
Eun45L945L4tatement7 3seTransaction<
a obiectului ,oCmd. 6arametrii metodei sunt urm0torii8
45L4tatement este o 'ariabil0 de tip 4tring ce conine instruciunea 45L7
3seTransaction7 dac0 acest argumentul este True7 se utili$ea$0 tran$acii7 dac0
argumentul este alse nu se utili$ea$0 tran$acii.
Instruciunile 45L ce se pot utili$a sunt8 I.4(ET I.TA7 ,(L(T(7 4(L(CT...I.TA7
36,1T(7 CE(1T( T1BL(7 1LT(E T1BL(.
Vom e+emplifica utili$area unei instruciuni 45L pentru actuali$area unei coloane a
unei tabele.ie definiia tabelei 6EAI(CT&A,I din igura 52.
)igura #2. -roiectarea tabelei -2$EE(TE4-D"TE.
Tabela este completat0 ca /n igura 53.
)igura #3. Tabela -2$'E(T.A$D').
Vom completa coloana TAT1L cu salariul total7 calculat cu formula
TAT1L B 41L?AE1 G AE(
Instruciunea 45L cu care 'om completa coloana TAT1L este
36,1T( 6EAI(CT?&A,I 4(T TAT1L B 41L?AE1 G AE(
4e proiecte$0 formularul din igura 5#. Caseta te+t /n care 'om introduce
instruciunea 45L are numele Te+t). Butonul are numele Command#.
#3
)igura #!. )ormularul de introducere a instruciunilor SF1.
Lista obiectelor grafice ale formularului7 afi!at0 /n fereastra editorului Visual Basic
este cea din igura 55.
)igura ##. 1ista obiectelor formularului afi&at8 ?n fereastra Visual Basic.
4e asocia$0 butonului procedura din igura 5-. In procedur0 se cite!te te+tul din
caseta Te+t) !i se e+ecut0 instruciunea 45L corespun$0toare.
##
)igura #%. -rocedura asociat8 butonului.
In igura 5" se arat0 instruciunea 45L introdus0. In igura 5* se arat0 mesajul
generat 7 iar /n igura 5% se arat0 tabela modificat0.
)igura #7. 'nstruciune SF1.
#5
)igura #<. Aesaj la execuia instruciunii SF1.
)igura #=. Tabela -2$'E(T.A$D') actuali3at8.
1., -robleme !ro!use
ie tabela 4IT31TI(?I.1.CI1E1 de mai jos cu 'eniturile !i cLeltuielile unei
intreprinderi.
4IT31TI(?I.1.CI1E1

1. V(.IT3EI C`(LT3I(LI 6EAIT
CLeia primar0 a tabelei este c2mpul 1.. 4e 'a proiecta tabela !i se 'or completa
c2mpurile 1.7 V(.IT3EI7 C`(LT3I(LI. 4e 'a crea un formular pentru afi!area
tabelei cu o aplicaie 'r0jitor !i se 'a scrie o procedur0 pentru calculul profitului dup0
formula
6EAIT B V(.IT3EI : C`(LT3I(LI
1.. /ntreb"ri +e 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 e'enimentele trimise de sistemul de operare unui formular la
descLiderea !i /ncLiderea lui[
#-