Documente Academic
Documente Profesional
Documente Cultură
Access PDF
Access PDF
Cuprins
http://www.east.utcluj.ro/mb/mep/antal
Obiectivele cursului 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Ce sunt datele? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Acest curs este proprietatea lui
Concepte de baz| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
DefiniÛii: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
De ce Microsoft Access? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Cât "poate duce" Access-ul? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
EvoluÛia Access-ului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Compatibilitatea între versiuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
O introducere în Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Introducere în instrumentele Accessului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Obiectivele cursului 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
0264-401667
NU COPIA !.
Explorarea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
http://www.east.utcluj.ro/mb/mep/antal
Închiderea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Obiectivele cursului 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
48
RelaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
RelaÛii unu la unu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Pt. cumparare viziteaza:
RelaÛii unu la mulÛi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
RelaÛii mulÛi la mulÛi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Normalizarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Prima Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
A Doua Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
A Treia Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Subfoi de date (subdatasheets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Reguli de integritate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Reguli de integritate generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Reguli de integritate specifice bazei de date . . . . . . . . . . . . . . . . . . . . . . . . . 54
Utilizarea formatelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Formatarea pentru tipurile Text i Memo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Formatarea pentru tipurile Number i Currency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Formatarea pentru tipurile Date/Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7 CUPRINS
http://www.east.utcluj.ro/mb/mep/antal
Utilizarea m|Õtilor de intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Validarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Obiectivele cursului 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Editarea înregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Selectarea înregistr|rilor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Acest curs este proprietatea lui
Selectarea înregistr|rilor folosind tastatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Selectarea câmpurilor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Selectarea coloanelor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Selectarea câmpurilor Õi coloanelor de la tastatur| . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Ôtergerea înregistr|rilor Õi a câmpurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
ANTAL Tiberiu Alexandru.
Tip|rirea (Printing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Obiectivele cursului 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Sortarea înregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
http://www.east.utcluj.ro/mb/mep/antal
Ce este un filtru? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Filtrarea înregistr|rilor prin selecÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Editarea relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Pt. cumparare viziteaza:
Obiectivele cursului 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Tipuri de interog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Posibilit|Ûile interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Crearea unei interog|ri folosind Generatorul de Interog|ri Simple (Simple Query Wizard)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
http://www.east.utcluj.ro/mb/mep/antal
Interogarea de creare a unui tabel (Make-Table Query) . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
http://www.east.utcluj.ro/mb/mep/antal
AfiÕarea codului din spatele formularului . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Crearea unei cutii combinate (Combo Box) folosind cutia cu instrumente (Toolbox) . . . . 162
Crearea unui formular cu o cutie combinat| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Implementarea regulilor de integritate specifice bazei de date sau controlul datelor stocate în
11 CUPRINS
baz| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
http://www.east.utcluj.ro/mb/mep/antal
Modificarea ordinii Tab-urilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
http://www.east.utcluj.ro/mb/mep/antal
Proceduri de evenimente (Event Procedures) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Proceduri definite de utilizator (General Procedures) . . . . . . . . . . . . . . . . . . . . . . . 232
Tabloul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Declararea tablourilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Tablouri cu mai multe dimensiuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Alocarea dinamic| a spaÛiului pentru stocarea tablourilor . . . . . . . . . . . . . . . . . . . . 240
Operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Operatori aritmetici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Operatori de comparaÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Operatori de concatenare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Operatori logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
http://www.east.utcluj.ro/mb/mep/antal
Tipuri de date definite de utilizator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Crearea unei modul clas| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Definirea membrilor dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Implementarea propriet|Ûilor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Modul de lucru cu Property Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Modul de lucru cu Property Let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Crearea metodelor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Definirea evenimentelor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Acest curs este proprietatea lui
Evenimentul Initialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Evenimentul Terminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Utilizarea clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
255
Propriet|Ûile Õi metodele obiectului colecÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Ad|ugarea unui articol la colecÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Pt. cumparare viziteaza:
Referirea unui obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Parcurgerea articolelor colecÛiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Ôtergerea obiectelor individuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Ôtergerea tuturor obiectelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Eliberarea spaÛului folosit pentru stocarea variabilei obiect . . . . . . . . . . . . . . . . . . 257
Crearea unei clase pentru manipularea colecÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Modul de lucru cu Property Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
http://www.east.utcluj.ro/mb/mep/antal
ColecÛii implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Acest curs este proprietatea lui
Tipuri de evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Aplicaie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
298
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
Predicatele ALL, DISTINCTROW Õi DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Agregarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Interog|ri de agregare f|r| clauza GROUP BY . . . . . . . . . . . . . . . . . . . . . . 310
Interog|ri de agregare cu clauza GROUP BY . . . . . . . . . . . . . . . . . . . . . . . 310
Interog|ri de reuniune (UNION Queries) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Compatibilitatea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Subinterog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
SQL cu parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Acest curs este proprietatea lui
Actualizarea datelor cu SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
InstrucÛiunea UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
InstrucÛiunea DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
InstrucÛiunea INSERT INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
InstrucÛiunea SELECT INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
ANTAL Tiberiu Alexandru.
328
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
Ôtergerea unor înregistr|ri dintr-o mulÛime de înregistr|ri . . . . . . . . . . . . . 341
Modificarea unui grup de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Modificarea datelor prin tranzacÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
http://www.east.utcluj.ro/mb/mep/antal
Executarea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Executarea unei interog|ri f|r| parametri stocate în baza de date . . . . . . . . 380
Executarea unei interog|ri cu parametri stocate în baza de date . . . . . . . . . 381
..................................................... 392
Modificarea instrucÛiunii SQL a unei interog|ri . . . . . . . . . . . . . . . . . . . . . 393
Pt. cumparare viziteaza:
Crearea unui index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Crearea unei relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
http://www.east.utcluj.ro/mb/mep/antal
ANEXA 1 - Lista principalelor instrucÛiuni VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Bibliografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Pt. cumparare viziteaza:
0264-401667
NU COPIA !.
Obiectivele cursului 1
http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
0264-401667
NU COPIA !.
Ce sunt datele?
http://www.east.utcluj.ro/mb/mep/antal
Introducere
Datele sunt entit|Ûi individuale formate din texte, numere, imagini sau sunete care pot fi
stocate Õi prelucrate pe un calculator. Acestea se obÛin prin observarea Õi m|surarea lumii
reale. Prin ele însele, datele, nu au o semnificaÛie, aceasta rezultând în urma interpret|rii (sau
prelucr|rii) lor.
InformaÛia este semnificaÛia pe care o primesc datele ca urmare a modului lor de interpretare.
Acest curs este proprietatea lui
Pentru a înÛelege diferenÛa, Antal, 33, 1250000 semnific| prea puÛin ca dat|. Dar dac| se
interpreteaz| ca numele unui profesor, Antal, care are vârsta de 33 de ani Õi salariul lunar de
1.250.000 de lei, datele primesc semnificaÛie Õi pot fi numite informaÛii. Aceast| interpretare
nu este unic|, putând exista de multe ori alternative. Uneori buc|Ûica de informaÛie este parte a
unui Õablon informaÛional mai complex.
ANTAL Tiberiu Alexandru.
Este util ca s| privim datele ca materie prim| pentru o reÛet| care, realizat| din proporÛii
Pt. cumparare viziteaza:
diferite, conduce la rezultate diferite.
Concepte de baz|
DefiniÛii:
FiÕier (File): o colecÛie de înregistr|ri grupate pe baza subiectului comun, de exemplu:
• lista clienÛilor (stocata7 în fiÕierul sau în baza de date Clienti);
• lista produselor (stocata7 în fis- ierul sau în baza de date Produse);
• lista facturilor emise (stocata7 în fiÕierul sau baza de date Facturi).
Înregistrare (Record): grup de informaÛii elementare despre un singur articol sau entitate, de
exemplu:
• Clientul - “Horea”; 0264-401667
Produsul - “plac| de baz|”;
NU COPIA !.
•
sau suna la:
O baz| de date despre profesori (care este stocata7 pe disc în fis- ierul Profi) este folosit| pentru
a exemplifica noÛiunile deja prezentate. Înregistr|rile corespund liniilor din tabel, iar
câmpurile coloanelor. De exemplu, primele dou| înregistr|ri sunt liniile care încep cu:
1. ACHIMAS
2. ANCAU
21 Introducere în Microsoft Access - cursul 1
http://www.east.utcluj.ro/mb/mep/antal
• PRENUME DIRECTOR;
• AN NASTERE;
• TITLU DIDACTIC.
O definit-ie mai tehnica7 ar fi: baza de date reprezinta7 una sau mai multe mult-imi de date
0264-401667
NU COPIA !.
Un sistem de gestiune a bazelor de date (SGBD) este un program care permite utilizatorului
definirea, crearea, întret-inerea -si controlul accesului la o baza7 de date, astfel:
! utilizatorii definesc baza de date cu ajutorul unui limbaj pentru definirea
datelor (Data Definition Language);
! utilizatorii pot insera, actualiza, s- terge -si extrage date din baza7 folosind
limbajul de manipulare a datelor (Data Management Language) deseori numit -si
limbaj de interogare (query language);
! asigura7 servicii pentru controlul accesului la baza de date prin:
< sistemul de securitate în vederea bloca7 rii accesului persoanelor
neautorizate la date;
< sistemul de integritate a datelor pentru pa7 strarea consistent-ei datelor
stocate;
< sistemul de accesul concurent la date, etc.
22 Introducere în Microsoft Access - cursul 1
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Pe baza celor spuse, în figura de mai sus se prezinta7 , departamentele pentru vânza7 rile de
produse s- i de contacte. Fiecare departament are propria ei aplicat-ie pentru accesarea bazei de
date prin intermediul SGBD. La nivelul fieca7 rui departament, aplicat-ia de gestionare
realizeaza7 introducerea datelor, întret-inerea datelor -si generarea rapoartelor prin intermediul
SGBD. Deseori, utilizatorii nu sunt interesat-i în a putea accesa întreaga baza7 de date În acest
sens, SGBD are o facilitate numita7 mecanism de vedere (view mechanism), care permite ca
fiecare utilizator sa7 aiba7 o vedere proprie asupra bazei de date (o vedere este, în esent-a7 , o parte
0264-401667
NU COPIA !.
a bazei de date).
sau suna la:
În modelul de date relaÛional, toate datele sunt organizate în tabele (termenul tehnic este cel de
relat-ie), care sunt formate din rânduri (termenul tehnic este de tupla7 ) Õi coloane (uneori
numite Õi câmpuri sau atribute). Tabelul este o colecÛie de rânduri, iar fiecare rând al unui
tabel conÛine aceleaÕi câmpuri. Fiecare tabel are un nume, iar în interiorul tabelului, fiecare
coloan| are un nume. Nu se menÛine o ordine prestabilit| între rândurile unui tabel, ele pot fi
extrase în orice ordine determinat| de valorile din câmpuri. Unele câmpuri pot fi desemnate
drept chei, ceea ce înseamn| c| toate c|ut|rile ale unor valori specifice ale acelui câmp vor
folosi indexarea pentru creÕterea vitezei. Rândurile unor tabele distincte pot fi legate dac| au
23 Introducere în Microsoft Access - cursul 1
aceeaÕi valoare într-un câmp particular din fiecare tabel (se mai zice c| tabelele au o asociere).
O caracteristic| a modelului relaÛional este c| toat| informaÛia din baza de date este
reprezentat| prin valorile stocate în tabele. Datele pot fi manipulate prin algebra relaÛional|.
Limbajul SQL (care va fi tratat într-un capitol urm|tor) este implementarea unei astfel de
http://www.east.utcluj.ro/mb/mep/antal
algebre. SGBD-ul trebuie s| urm|reasc| datele importante pentru gestionarea bazei de date.
De exemplu, va cunoaÕte numele tabelelor Õi numele fiec|rui câmp dintr-un tabel. Acest tip de
informaÛie poart| numele de meta-date (date despre date). Asemenea oric|ror alte date Õi
acestea se vor stoca în tabele. Tabelele care descriu structura bazei de date poart| denumirea
de schema bazei de date. SGBDR-urile mari, au scheme multiple, acestea fiind grupate în
cataloage.
În viaÛa de toate zilele utiliz|m frecvent baze de date, f|r| a fi conÕtienÛi îns|. Iat| câteva
Acest curs este proprietatea lui
exemple:
• cartea de telefoane;
• orarul Õcolii;
• agenda.
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Se contureaz| deja cinci subiecte distincte care corespund la cinci fiÕiere sau tabele:
• Angajat (tabelul Employess);
• Client (tabelul Customers);
• Produs (tabelul Products);
• Comand| (tabelul Orders);
• Detalii comand| (tabelul Order Details).
24 Introducere în Microsoft Access - cursul 1
Este probabil s| fie comenzi cu mai multe produse motiv pentru care avem nevoie de un tabel
legat pentru Detalii comand|.
Tabelele de mai sus se numesc legate între ele prin relaÛii (relationship):
http://www.east.utcluj.ro/mb/mep/antal
• un angajat vinde mai multor clienÛi º unei înregistr|ri din AngajaÛi îi corespund mai
multe înregistr|ri din ClienÛi, conexiunea între acestea facându-se prin Comand|;
• un client comand| unul sau mai multe produse º unei înregistr|ri din ClienÛi îi
corespund mai multe înregistr|ri din Produse, conexiunea între acestea f|cându-se prin
Comenzi Õi Detalii comand|;
• ordinul de comand| conÛine un num|r de detalii specifice comenzii în câmpurile
CustomerID, EmployeeID etc. Õi un câmp de conexiune, OrderID, cu Detalii comand|
unde sunt detaliile fiec|rui produs vândut.
Acest curs este proprietatea lui
Tipuri de relaÛii
Când un client emite o comand|, ea poate fi pentru unul sau mai multe produse, adic| pot fi
mai multe produse pe o singur| comand|. O astfel de relaÛie se numeÕte unu-la-mulÛi (one-
to-many). O relaÛie mai rar| este cea unu-la-unu (one-to-one). Un alt tip de relaÛie este
ANTAL Tiberiu Alexandru.
În tabelul Orders câmpul CustomerID se numeÕte cheie str|in| Õi asigur| leg|tura cu tabelul
Customer în care este cheie primar|. 0264-401667
NU COPIA !.
Codd a pus la punct un set de reguli care aveau ca scop asigurarea independenÛei între
aplicaÛia de interfaÛ| cu utilizatorul Õi modific|rile aduse modelului de date. Modelul
relaÛional foloseÕte un element comun, ca de exemplu CustomerID, pentru a lega rânduri
între care exist| o relaÛie dar se afl| în tabele diferite. Exist| 13 reguli pe care un produs
program trebuie s| le respecte pentru ca s| fie numit Sistem de Gestiune al Bazelor de Date
RelaÛionale (SGBDR). Microsoft Access-ul se conformeaz| la toate cele 13 reguli enumerate
de Codd. Tabelul care urmeaz| prezint| succint aceste reguli:
http://www.east.utcluj.ro/mb/mep/antal
modelului relaÛional. Dac| un SGBD aceast| regul|. Access-ul
este dependent de un instrument de nu foloseÕte numere de
manipulare al datelor la nivel de înregistr|ri.
întregistrare, nu este total relaÛional.
1 Stocarea Toate datele unui SGBD relaÛional se Access-ul îÕi stocheaz|
informaÛiei reprezint| explicit ca valori în tabele. datele în tabelele
Datele nu pot fi stocate prin alte motorului bazei de date
metode. Microsoft Jet.
Acest curs este proprietatea lui
http://www.east.utcluj.ro/mb/mep/antal
inserare, actualizare Õi Õtergere a
datelor, privite ca o mulÛime
relaÛional|
8 IndependenÛa Datele trebuie s| fie fizic Access-ul permite
fizic| a datelor independente de programul aplicaÛie. modificarea obiectelor
Programul aplicaÛie SGBDR trebuie bazei de date f|r|
s| fie în stare s| urm|reasc| alterarea celorlalte
modific|rile fizice la nivelul datelor componete ale Access-
Acest curs este proprietatea lui
9 În Access, o interogare
logic| a datelor trebuie s| fie independente de se poate lega la un
modific|rile f|cute în tabelele de formular sau la un raport
Pt. cumparare viziteaza:
baz|. De exemplu, nu trebuie s| se la fel de simplu ca un
rescrie codul în cazul în care tabelele tabel.
sunt combinate într-o vedere.
10 IndependenÛa Integritatea datelor trebuie s| se poat| DeÕi Microsoft-ul nu a
integrit|Ûii defini într-un limbaj relaÛional Õi s| fie documentat modul în
datelor stocat| în catalog. Constrângeri de care Jet-ul stocheaz|
integritate a datelor trebuie s| poat| fi integrit|Ûile, se pot crea
construite la nivel de aplicaÛie. Acest reguli de integritate via
concept este oarecum str|in modelului SQL. Jet-ul va stoca
relaÛional. În modelul relaÛional, aceste informaÛii în
integritatea trebuie s| fie inerent| proiectul bazei de date 0264-401667
proiectului bazei de date. ca parte a catalogului.
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
putea fi folosit la ocolirea regulilor de manipularea a câte unei
integritate sau a constrângerilor singure înregistr|ri la un
modelului relaÛional. Astfel nu numai moment dat prin
c| SGBDR trebuie s| fie guvernat de intermediu mulÛimilor de
reguli relaÛionale ci aceste reguli întregistr|ri actualizabile
trebuie s| fie Õi primare. (updateable
recordsets). Nu se pot
viola regulie de
Acest curs este proprietatea lui
integritate prin aceste
tehnologii de manipulare
a datelor.
ANTAL Tiberiu Alexandru.
De ce Microsoft Access?
• Microsoft Access-ul este un Sistem de Gestiune a Bazelor de Date RelaÛionale 0264-401667
(SGBDR) scris de firma Microsoft care este Õi produc|toarea sistemului de operare Windows.
NU COPIA !.
Aceast| aplicaÛie vine integrat| în pachetul de programe numit Microsoft Office Professional
împreun| cu programele: Word, Excel, PowerPoint Õi Mail.
• asigur| facilit|Ûi de stocare, sortare, manipulare Õi selecÛie avansate pentru date.
• este stabil în contextul sistemului de operare Windows pentru c| este dezvoltat de
aceeaÕi firm| care scrie sistemul de operare.
• este uÕor de înv|Ûat, asigurând dezvoltarea unor baze de date simple cu un efort minim
(cel mai mic dintre toate bazele de date folosite mai des pe aici: FoxPro, Paradox, Oracle) dar
în acelaÕi timp aprofundat are resurse suficiente pentru a susÛine dezvoltarea unor proiecte
serioase.
• este foarte direct în posibilit|Ûile de manipulare a câmpurilor Õi a tabelelor cu date.
• este foarte r|spândit, motiv din care are scrise o mulÛime de biblioteci de tot felul de
firme terÛe.
num|r mic de utilizatori. El nu poate concura cu Oracle, Informix, DB2 sau Microsoft SQL
Server care sunt sisteme complexe de gestionare ale bazelor de date cu motoare superioare în
termeni de vitez| Õi num|r de utilizatori care pot accesa simultan bazele de date. TotuÕi,
Access-ul poate fi folosit cu succes Õi în acest context pe post de interfaÛ| (front-end
http://www.east.utcluj.ro/mb/mep/antal
package) dintre utilizator Õi aceste SGBD-uri complexe.
EvoluÛia Access-ului
În 1992 Microsoft a lansat Access 1.0 care a fost rapid urmat de versiunea 1.1. AplicaÛia
iniÛial| a fost ieftin| (în jur de 100 USD) fiind competitiv| numai datorit| acestui preÛ, altfel
având o mulÛime de limit|ri.
În aprilie 1994 a ap|rut pe piaÛ| Access 2.0 aceast| versiune eliminând de pe piaÛ| versiunile
Acest curs este proprietatea lui
anterioare. Dup| scurt timp versiunea 2.0 a devenit principala baz| de date pe 16 biÛi.
În septembrie 1995 apare Access 95 (alias versiune 7.0) scris| pentru sistemul de operare
Windows 95. Din nefericire, a fost instabil Õi cu multe erori, Access 2.0 r|mând preferatul
programatorilor.
ANTAL Tiberiu Alexandru.
În noiembrie 1996 apare Access 97 (alias Access 8.0) cu multe îmbun|t|Ûiri faÛ| de Access
Pt. cumparare viziteaza:
2.0 Õi mult mai stabil în contextul sistemului de operare Windows 95/98.
Ultima versiune este Access 2000 ap|rut| în iunie 1999. Despre acesta n-am s| spun decât c|
este un produs program mult superior celorlalte versiuni de Access Õi altor SGBDR-uri din
clasa Access-ului, atât în concepÛie, cât Õi în implementare.
O introducere în Access
Access-ul utilizeaz| aceleaÕi denumiri cu cele prezentate anterior cu o excepÛie îns| Õi anume
29 Introducere în Microsoft Access - cursul 1
FiÕierul se numeÕte Tabel. Aceasta este o alegere normal| din moment ce majoritatea
informaÛiilor se prezint| în practic| sub form| tabelar|.
Forma de prezentare vizual| care urmeaz| se numeÕte Foaie de date (Datasheet) Õi este cea
http://www.east.utcluj.ro/mb/mep/antal
mai comun| pentru prezentarea datelor în Access. Cea mai simpl| baz| de date se prezint|
sub o astfel de form| Õi poate include un num|r imens de date.
Lucrul cu o baz| de date implic| mai mult decât simpla stocare a datelor. Pentru a manipula,
prelucra Õi vizualiza datele sub forma unor informaÛii este necesar un grup de obiecte. Acestea
Pt. cumparare viziteaza:
sunt stocate de c|tre Access într-un container al bazei de date (Database Container) Õi sunt:
formulare, interog|ri, rapoarte, macro-uri, module Õi pagini.
0264-401667
NU COPIA !.
Datele se pot grupa pentru operaÛiile de mai sus dup| cum doreÕte utilizatorul. Uneori,
formularele pot imita perfect documente aflate pe hârtie pentru a uÕura introducerea Õi
interpretarea datelor.
http://www.east.utcluj.ro/mb/mep/antal
?
form| dorit| de utilizator Õi permit:
(Reports)
• gruparea Õi sortarea informaÛiilor;
• calculul de totale Õi medii.
Acest curs este proprietatea lui
macro-uri afiÕeaz| detalii despre felul în care se poate aplica fiecare acÛiune.
Un tip de obiect nou apare numai din Access 2000. Paginile se folosesc
Ce sunt paginile?
pentru a introduce sau afiÕa date prin Internet. Paginile sunt stocate sub
(Pages)
0264-401667
NU COPIA !.
forma unor fiÕiere HTML având datele citite sau scrise din baza de
sau suna la:
date.
• LansaÛi
Adaugarea unei
baze de date în în execuÛie
directorul Access-ul Õi
“Favorites” afiÕaÛi cutia de
dialog Open.
LocalizaÛi Õi
selectaÛi articolul care doriÛi s| fie
ad|ugat în directorul Favorites. În
31 Introducere în Microsoft Access - cursul 1
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
• efectuaÛi clic pe articolul dorit, la noi Northwind.mdb Õi apoi efectuaÛi clic pe butonul
Open pentru a deschide fiÕierul.
32 Introducere în Microsoft Access - cursul 1
http://www.east.utcluj.ro/mb/mep/antal
un Meniu de Control (Control Menu) în partea stâng|, iar în dreapta Butoanele de
Minimizare (Minimize), Refacere (Restore) Õi Închidere (Close). Dedesubt este Bara cu 0264-401667
Meniu (Menu Bar), iar mai jos sunt barele cu instrumente. La pornirea Access-ului în
NU COPIA !.
Meniu se v|d numai dou| submeniuri File (fiÕiere) Õi Help (ajutor), iar majoritatea
sau suna la:
butoanelor de pe bara de instrumente sunt de culoare gri, adic| invalidate (la ap|sarea lor nu
se petrece nimic). Acestea apar din cauz| c| nu este dechis| o baz| de date.
Obiectivele cursului 2
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
http://www.east.utcluj.ro/mb/mep/antal
! cum se deschide o baz| de date la pornirea (lansarea în execuÛie)
Acces-ului;
! cum se deschide o baz| de date dup| ce Access-ul a fost pornit;
! cum se deschide o baz| de date scris| într-o versiune anterioar| de
Access;
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Deschiderea unei efectuaÛi clic pe butonul Open.
baze de date
împreuna7 cu
pornirea
Access-ului
http://www.east.utcluj.ro/mb/mep/antal
date. Ea asigur| o modalitate de acces elegant| Õi rapid| la obiectele bazei de date.
Ôase ferestre permit accesul la tabele (Tables), interog|ri (Queries), formulare (Forms),
rapoarte (Reports), macro-uri (Macros) Õi module (Modules). Fiecare dintre acestea va fi
examinat| în detaliu în cursurile urm|toare. SelecÛia uneia se realizeaz| efectuând clic pe
butonul (numit tab în englez|) cu numele corepunz|tor. AceleaÕi obiecte se pot selecta Õi din
meniul View.
ap|saÛi Ctrl+F4.
sau suna la:
Numele de coloane (column headings) devin vizibile în foaia de date acestea specificând
câmpurile tabelului. Fiecare rând conÛine o înregistrare (record) separat|.
36 Introducere în Microsoft Access: moduri de vizualizare - cursul 2
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
Este probabil ca tabelul s| aib| mai multe coloane decât cele care se pot afiÕa în fereastr|, caz
în care numai cele din stânga vor fi vizibile. Dreptunghiurile gri din dreapta înregistr|rilor se
numesc selectori de înregistr|ri (record selectors). Un simbol s|geat| în selector indic|
înregistrarea curent| (current record). Un asterisc (caracterul *) ocup| selectorul urm|toarei
înregistr|ri vide - înc| necompletate- disponibile.
ANTAL Tiberiu Alexandru.
În partea de jos a ferestrei (unde scrie Record:), imediat deasupra liniei de stare, o bar| pentru
defilare (scroll bar) pune la dispoziÛia utilizatorului butoane de navigare Õi dreptunghiuri cu
Pt. cumparare viziteaza:
num|rul înregistr|rii curente, respectiv cu num|rul total de înregistr|ri. La deschiderea unui
tabel, în mod normal, va fi indicat| prima înregistrare.
Explorarea tabelelor
Se poziÛioneaz| cursorul mouse-ului (de obicei în form| de s|geat|)
Pentru a ne deplasa pe câmpul dorit Õi efectu|m clic pe butonul stâng al mouse-ului.
pe un câmp
Cursorul îÕi schimb| forma funcÛie de tipul câmpului.
Pentru a ne
deplasa folosind
bara pentru
http://www.east.utcluj.ro/mb/mep/antal
defilare
SelectaÛi Go To din
Pentru a ne
deplasa pe o meniul Edit, apoi
înregistrare selectaÛi First, Last,
folosind meniul Next Previous sau
Edit New Record (vezi
Acest curs este proprietatea lui
figura al|turat|).
• Ap|saÛi tasta F5
Pentru a ne
deplasa iar num|rul înregistr|rii
pe o înregistrare se va selecta din bara
specifica de defilare;
ANTAL Tiberiu Alexandru.
;
• Ap|saÛi tasta Enter.
View). Pentru a modifica un tabel trebuie mai întâi s| comutaÛi pe vizualizarea în mod
38 Introducere în Microsoft Access: moduri de vizualizare - cursul 2
proiectare.
Pentru a comuta în
http://www.east.utcluj.ro/mb/mep/antal
modul de • selectaÛi Design View din meniul View
proiectare
sau
• efectuaÛi clic pe simbolul grafic Design View de pe bara de instrumente .
num|rului de înregistr|ri Õi se pot efectua calcule pentru a genera informaÛii care nu sunt
stocate direct în tabele.
Pt. cumparare viziteaza:
Interog|rile pot fi vizualizate, la fel ca Õi tabelele, în mod foaie de date sau în cel de
proiectare.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
vizualizare
bara de instrumente sau
• din modul de proiectare (Design View) efectuaÛi clic pe
simbolul foaie de date (Datasheet View) din bara de instrumente.
Tipuri de formulare
Pt. cumparare viziteaza:
Un formular poate fi copia exact| a unui formular de pe hârtie, ca de exemplu o factur| sau un
orar. O multitudine de tehnici de proiectare permit folosirea de stiluri Õi m|rimi diferite de
caractere, imagini scanate, desene, butoane de comand| sau grafice, toate într-o palet| de
culori variat|.
0264-401667
NU COPIA !.
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
41 Introducere în Microsoft Access: moduri de vizualizare - cursul 2
http://www.east.utcluj.ro/mb/mep/antal
Deschiderea unui formular
• deschideÛi o baz| de date;
Pentru a deschide
un formular • selectaÛi din Database Window butonul Forms;
Acest curs este proprietatea lui
• selectaÛi formularul care va fi deschis - mai jos Customer;
• efectuaÛi clic dublu pe numele formularului sau
• efectuaÛi clic pe pe butonul Open din fereastra bazei de date (Database Window), iar
formularul se va deschide - aceasta este reacÛia implicit| în Access - fiind afiÕat pe ecran în
modul vizualizare (Form View).
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
raport pe ecran, înainte de tip|rire este binevenit|, fiind posibil| ajustarea marginilor
sau suna la:
raportului pentru ca acesta s| intre în pagina hârtiei cât mai bine. Odat| cu evoluÛia tehnicilor
de programare, rapoartele au trecut de faza în care plictisesc, acum fiind posibil ca un raport
s| conÛin| sigla firmei sau alte desene, grafice sau imagini. Avantajul major al rapoartelor
const| în posibilitatea grup|rii, sort|rii Õi realiz|rii de totale pentru oricare dintre câmpurile
bazei rezultând posibilitatea gestion|rii de cantit|Ûi mari de date sub o form| de prezentare
accesibil|. Dac| raportul are mai multe pagini exist| posibilitatea navig|rii printre pagini Õi
m|ririi unor zone ale raportului, asta îns| numai în faza de vizualizare a lui. Atunci când nu
avem prea multa7 experint-a7 în Access, dar suntem cât de cât obis- nuit-i cu editorul de texte
Word, exista7 posibilitatea exportului unui raport în editorul de texte al formei Microsoft sau în
Excel. Aici, posibilita7 -tile de aranjare în pagina7 s- i de îmbuna7 ta7 -tire a imaginii documentului
(raportul Access) sunt mult mai avansate -si mai simplu de folosit decât în cazul rapoartelor
Access. În general, rapoartele pot fi exportate s- i în alte tipuri de formate, câteva dintre acestea
sunt: Ricth Text Format (RTF), HTML sau text obis- nuit.
În figurile care urmeaza7 prezint câteva tipuri de rapoarte extrase din baza de date Nortwind.
44
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
45 Introducere în Microsoft Access: Tabele - cursul 3
Obiectivele cursului 3
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
http://www.east.utcluj.ro/mb/mep/antal
! de ce este necesar| pornirea fazei de proiectare pe hârtie cu creionul;
! cum se creeaz| o baz| de date nou| folosind Generatorul de Tabele
(Table Wizard);
! cum se adaug| câmpuri folosind Generatorul de Tabele;
! cum se redenumesc câmpuri folosind Generatorul de Tabele;
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
dezvoltare al bazei de date se aprofundeaz|. Trecerea direct| la lucrul pe calculator va duce de
multe ori la greÕeli de concepÛie care vor forÛa reproiectarea bazei pornind de la început.
Câmpurile din baz| trebuie documentate pentru ca în cazul unor dezvolt|ri ce se vor face dup|
luni de zile s| nu "intuim" ceea ce am f|cut cândva. La început Õtim doar ceea ce dorim s|
facem Õi ceea ce avem la dispoziÛie, apoi trecem la g|sirea c|ilor prin care se obÛine ceea ce
dorim cu ceea ce avem.
Ce întreb|ri ne punem?
Acest curs este proprietatea lui
În rezolvarea sarcinilor dificile legate de proiectarea bazelor de date exist| un grup de
întreb|ri care pe care proiectantul Õi le pune sau le pune utilizatorului bazei de date.
singur tabel, care ar avea un num|r mare de câmpuri din acest motiv. Un astfel de rând (linie)
este cel prezentat în continuare:
http://www.east.utcluj.ro/mb/mep/antal
Acest mod de abordare are câteva deficienÛe:
1. conduce la dubluri de date: de câte ori acelaÕi client face o nou| comand|, numele Õi
adresa lui se vor repeta în baz|. Stocarea aceluiaÕi nume Õi a aceleiaÕi adrese în mod repetat
(redundanÛa datelor) va duce la risip| de spaÛiu Õi, în plus, se pot face uÕor greÕeli, de
Acest curs este proprietatea lui
exemplu, numele sau adresa clientului pot fi reintroduse eronat din motive de neatenÛie;
2. nu exist| o metod| de predicÛie a num|rului de articole pe care le va comanda clientul,
din acest motiv suntem tentaÛi s| introducem un num|r mare de câmpuri Nume articol x,
Cantitate x, Pret x Õi din nou apare risipa de spaÛiu;
3. se stocheaz| în baz| date care se pot calcula uÕor din celelalte date stocate în baz|, un
ANTAL Tiberiu Alexandru.
Dac| s-a repetat acelaÕi tip de informaÛie într-un tabel, ea trebuie pus|
Unicitatea
câmpurilor într-un alt tabel. Este posibil ca într-un tabel s| avem, pe lâng| alte
câmpuri, câmpurile: Adresa1, Adresa2, Telefon1, Telefon2,
Mobil. Se observ| c| tipul de informaÛie Adresa se repet| de 2 ori iar
tipul de informaÛie Telefon de 3 ori. Aceste câmpuri vor fi separate din tabelul în cauz| Õi
vor fi stocate în tabele diferite. Pentru exemplul prezentat în figura anterioar| astfel de
câmpuri sunt Nume articol x, Cantitate x, Pret x.
http://www.east.utcluj.ro/mb/mep/antal
Pentru exemplul anterior, câmpul Total nu trebuie calculat Õi stocat
Câmpurile nu pot
cont-ine date în baz|, el se poate calcula numai atunci când se tip|reÕte un raport sau
derivate se deschide un formular.
Datele sa7 fie Ar fi util ca, de exemplu, oraÕul, adresa Õi telefonul unui client s| fie
stocate în câmpuri separate pentru ca s| se poat| realiza analize bazate
Acest curs este proprietatea lui
stocate sub forma
logica7 elementara7 pe conÛinutul lor. De exemplu, v| puteÛi întreba câÛi clienÛi din oraÕul
Cluj au cump|rat pl|ci de baz|. Pentru aceÕtia câmpul oraÕ va conÛine
valoarea Cluj. Dac| oraÕul, adresa Õi telefonul sunt puse la "gr|mad|"
într-un singur câmp, analiza pe baza unei porÛiuni din valorile stocate într-un câmp devine
dificil|.
ANTAL Tiberiu Alexandru.
Determinarea relaÛiilor
Pt. cumparare viziteaza:
Dup| ce se cunosc tabelele bazei de date trebuie s| decidem asupra modului de alc|tuire a
relaÛiilor dintre acestea. Desenul realizat anterior va ajuta în parcurgerea acestei etape.
Modalitatea prezentat| pentru proiectarea unei baze de date relaÛionale a fost laic| având
intenÛia de a nu speria cititorul. Pentru c| în esenÛ| tot ce urmeaz| depinde de aceast| etap|
voi relua fazele proiect|rii într-o form| mai teoretic|. Din teoria relaÛional| dezvoltat| de
Codd, ale c|rei reguli au fost prezentate în cursul 1, se pot identifica urm|toarele categorii de
probleme:
• Tabele, unicitate, chei Õi domenii;
• RelaÛii;
• Normalizarea datelor;
• Reguli de integritate.
de coloane care conÛin valori unice pentru fiecare rând din tabel. Access-ul permite setarea
unui câmp ca Õi cheie primar| dac| tabelul este vizualizat în mod proiectare. Toate câmpurile
cu valori unice din tabel se numesc chei candidat (candidate keys), dintre acestea va fi
http://www.east.utcluj.ro/mb/mep/antal
aleas| cheia primar|. O cheie simpl| (simple key) este format| dintr-o singur| coloan|, una
compus| (composite key) din dou| sau mai multe coloane.
S| presupunem c| dorim s| realiz|m o baz| de date prin care s| urm|rim contactele dintr-o
firm|: Acest curs este proprietatea lui
Privind datele de mai sus chei candidate ar putea fi: Nume Contact, Telefon1 Contact
ANTAL Tiberiu Alexandru.
sau E-mail Contact. O regul| de bun simÛ este ca cheia s| fie cât mai simpl|, cât mai
unic| posibil Õi s| nu se modifice în timp. Numele unei persoane se poate modifica în caz de
Pt. cumparare viziteaza:
c|s|torie sau divorÛ, modific|ri sunt posibile Õi pentru numerele de telefoane sau adresele de
e-mail. În acest caz, Access-ul permite folosirea unui câmp de tipul AutoNumber pe post de
cheie primar|. Acest tip de câmp genereaz| o valoare numeric| care se incrementeaz| automat
la fiecare ad|ugare a unei înregistr|ri (rând) noi.
Cheia primar| devine important| atunci când dorim s| o folosim în alte tabele, dup| cum se
observ| în figura al|turat|:
0264-401667
NU COPIA !.
Se observ| c| se poate stoca cheia primar|, IDContact, a unui tabel, TContacte, într-un alt
tabel, mai sus, TTipContact, pentru a reprezenta înregistrarea în acest tabel nou. Acest câmp
introdus forÛat în noul tabel, se va numi cheie str|in| fiind baza pe care formeaz| relaÛiile
între tabele. O cheie str|in| este deci o coloan| care refer|, prin valorile ei, cheia primar|
dintr-un alt tabel. Este important ca cele dou| chei s| aib| aceeaÕi semnificaÛie Õi s| derive din
acelaÕi domeniu. Domeniile reprezint| o mulÛime comun| de valori din care coloanele iau
valori.
RelaÛii
Când definiÛi cheile primare Õi cele str|ine, definiÛi în realitate relaÛii. Dup| Regula nr. 4
relaÛiile trebuie s| fie intergrate la nivelul motorului bazei de date. Access-ul poate lucra cu
urm|toarele tipuri de relaÛii:
• unu la unu (1º1);
• unu la mulÛi (1ºM);
• mulÛi la mulÛi (MºM).
50 Introducere în Microsoft Access: Tabele - cursul 3
http://www.east.utcluj.ro/mb/mep/antal
va naÕte, în general, pentru a ocoli unele neajunsuri ale software-ului SGBDR Õi ca o
necesitate a unei situaÛii din lumea real|. În Access, o relaÛie 1º1, se poate naÕte din motive
de securitate ale unor câmpuri dintr-un tabel sau din cauz| c| num|rul de coloane este limitat
la cel mult 255.
aÕa este Õi Access-ul. Pentru a modela aceast| relaÛie între dou| tabele, este nevoie de un al
treilea tabel, numit tabel de leg|tur|.
Pt. cumparare viziteaza:
Normalizarea datelor
Regulile enunÛate de Codd Õi prezentate anterior (Unicitatea înregistrarilor, Câmpurile
trebuie sa fie dependente functional etc.) într-o form| cât mai accesibil| vor fi reluate în
continuare sub o form| mai tehnic|. S-a spus c| acest proces de proiectare a bazei de date
conform acestor reguli poart| denumirea de normalizare. Codd a enunÛat Õase nivele de
normalizare, în continuare se vor prezenta primele trei, acestea fiind cele care afecteaz|
esenÛial deciziile de proiectare a bazei de date:
• Prima Form| Normal| (1NF);
• A Doua Form| Normal| (2NF);
• A Treia Form| Normal| (3NF).
1NF spune c| toate coloanele unui tabel trebuie s| conÛin| valori atomice. Adic|, fiecare
sau suna la:
câmp poate conÛine numai o valoare de un singur tip, respectiv listele de valori Õi grupurile de
date repetitive sunt interzise. Bazele de date "flat" stocheaz| datele ignorând aceast| regul|
motiv pentru care c|utarea în ele poate deveni greoaie uneori.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
care din nou va exista o relaÛie 1ºM creat| pe baza câmpului IDInfoContact.
0264-401667
NU COPIA !.
Access 2000, în modul foaie de date, exist| posibilitatea vizualiz|rii ierahice a datelor.
Subfoile de date afiÕate pot fi selectate manual în momentul proiec|rii tabelului sau pot fi
determinate automat în baza relaÛiilor create între tabele. În cazul în care exist| o relaÛie, între
http://www.east.utcluj.ro/mb/mep/antal
tabelul curent Õi un alt tabel din baza de date, Access va afiÕa o coloan| în stânga foii de date
cu un + pentru fiecare rând.
Când se face clic pe semnul + al unui rând, înregistr|rile asociate din subfoia de date sunt
afiÕate.
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
proprietate a tabelului. Pentru afiÕarea propriet|Ûilor în mod proiectare selectaÛi din View pe
Properties; propietatea care controleaz| afiÕarea foii de date este Subdatasheet Name.
Implicit, aceasta are valoarea Auto caz în care numele subfoii de date afiÕate se face pe baza
relaÛiilor create în baza de date. În locul lui Auto, dac| se face clic pe proprietate în dreapta
apare o s|geat| în jos. Dac| se face clic pe aceasta poate selecta din list| un alt tabel care s|
fie afiÕat la deschiderea subfoii de date. Implicit subfoile de date nu sunt expandate,
proprietatea Subdatasheet Expanded având valoare No. Dac| aceasta este setat| la Yes,
odat| cu deschiderea tabelului în modul foaie de date, vor fi deschise Õi subfoile de date.
ProprietaÛile Link Child Fields, Link Master Child se folosesc pentru legarea tabelului
principal (Master) cu cel al subfoii de date (Child) în vederea afiÕ|rii ei atunci când Access
nu poate deduce care sunt câmpurile celor dou| tabele pe baza c|rora se face leg|tura între
ele. Probleme de acest fel apar când câmpuri pe baza c|roa Access face automat aceast|
leg|tura sunt redenumite.
Reguli de integritate
Modelul relaÛional defineÕte mai multe reguli, care nu sunt parte a formelor normale, dar sunt
54 Introducere în Microsoft Access: Tabele - cursul 3
necesare în orice baz| de date relaÛionale. Exist| dou| tipuri de reguli de integritate: generale
Õi specifice bazei de date.
http://www.east.utcluj.ro/mb/mep/antal
Reguli de integritate generale
Modelul relaÛional specific| dou| tipuri integrit|Ûi generale - care se aplic| la toate bazele de
date: integritate de entitate Õi integritate referenÛial|. Integritatea de entitate spune c| o cheie
primar| nu poate conÛine valori Null (inexistente). Integritatea referenÛial| spune c| o baz| de
date nu are voie s| conÛin| chei str|ine care nu au o cheie primar| corespondent|. Aceasta
implic|:
• un rând nu se poate ad|uga unui tabel cu o cheie str|in|, numai dac| valoarea referit|
exist| în tabelul respectiv;
dac| o valoare într-un tabel care este referit printr-o cheie str|in| se modific| sau
Acest curs este proprietatea lui
•
întreaga înregistrare este Õtears|, rândurile corespunz|toare din tabelul cu cheia str|in| nu
trebuie s| r|mân| orfane.
Pe baza definiÛiilor din modelul relaÛional, trei opÛiuni sunt disponibile când o cheie primar|
îÕi schimb| valoarea sau rândul care o conÛine este Õters:
ANTAL Tiberiu Alexandru.
Toate aceste opÛiuni se specific| în Access din fereastra de dialog Relationships, care se
selecteaz| din meniul Relationships cu opÛiune Edit Relationship.... OpÛiunea devine activ|
numai dac| dup| deschiderea ferestrei Relationships se va selecta o relaÛie prin clic pe linia
ce leag| cele dou| chei.
0264-401667
NU COPIA !.
importante ca Õi cele discutate pân| acum, ele opresc stocarea unor date false în baz|.
http://www.east.utcluj.ro/mb/mep/antal
Partea dificil| este proiectarea bazei de date, crearea fiind mult mai simpl|. Pentru unele
aplicaÛii standard se poate folosi un Generator pentru a crea toate tabelele dup| care se poate
trece la introducerea datelor în noile tabele. Uneori, deÕi aplicaÛia este standard dorim s|
facem anumite modific|ri. Microsoft-ul a presupus c| toate Û|rile din lume folosesc aceleaÕi
compartiment|ri geografice, aceleaÕi formate pentru telefoane, acelaÕi sistem pentru codurile
poÕtale etc.
Indiferent dac| aplicaÛia se creeaz| f|r| Generator sau cu ajutorul acestuia, trebuie înÛelese
Acest curs este proprietatea lui
noÛiunile de tipuri de date, tabel Õi proprietate de câmp. De asemenea, trebuie st|pânite
noÛiunile de cheie primar| Õi index. Acestea sunt probabil cele mai dificile aspecte legate de
crearea Õi întreÛinerea unei baze de date.
Pentru a crea o
baza7 de date • efectuaÛi clic pe simbolul grafic New din fereastra
folosind aplicaÛiei Access, aceasta va duce la afiÕarea cutiei de dialog New de
Generatorul forma:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
• introduceÛi un nume de fiÕier (File name), iar dac| e cazul, comutaÛi pe un alt director
(Folder) pentru stocarea noii baze de date;
• apoi efectuaÛi clic pe butonul
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
• clic pe butonul de forma pentru a ad|uga câmpul în lista Fields in my new
table;
În figura care urmeaz| am selectat bazele de date cu caracter personal, prin butonul de opÛiune
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Personal, iar din lista afiÕat|, baza de date Addresses, care, fiind prima, se va selecta
automat. Apoi câmpul FirstName a fost ad|ugat.
• când se adaug| un câmp, articolul selectat din lista Sample Fields dispare automat Õi
apare în lista Fields in my new database. Pentru a ad|uga noi articole puteÛi s| efectuaÛi clic 0264-401667
dublu pe articolul dorit;
NU COPIA !.
Redenumirea unui
• selectaÛi câmpul pe care doriÛi s|-l redenumiÛi din lista Fields
câmp folosind in my new database;
Generatorul de • clic pe butonul Rename Field din cutia de dialog iar pe ecran
Tabele se afiÕeaz| cutia de dialog:
Tabele;
• în cutia de text (text box) What do you want to name your table? introduceÛi
numele sub care se va salva tabelul;
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• în condiÛii normale veÛi l|sa Generatorul s| selecteze o cheie primar|, dar dac| doriÛi
puteÛi s| o faceÛi dumneavoastr|;
Pt. cumparare viziteaza:
• clic pe butonul Next pentru a trece la urm|toarea pagin| a Generatorului;
• ultima pagin| a Generatorului
este afiÕat|.
• aici se poate accepta opÛiunea
implicit| pentru trecerea direct la
introducrea datelor în tabelul tocmai
creat sau
• exist| opÛiunea modific|rii
proiectului de tabel (table design) sau
• se pot introduce date în tabel
pe baza unui formular pe care
Generatorul îl va crea automat;
dup| selectarea opÛiunii dorite
•
0264-401667
NU COPIA !.
Dac| aÛi selectat opÛiunea implicit| pentru introducerea datelor direct în tabel, ecranul va fi de
forma:
59 Introducere în Microsoft Access: Tabele - cursul 3
Dac| aÛi fi optat pentru introducerea datelor în tabel prin formularul creat de Generator,
ecranul ar fi fost ceva de genul:
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
• introduceÛi numele de câmp dorit în celula înc| vid| aflat| imediat sub Field Name;
60 Introducere în Microsoft Access: Tabele - cursul 3
de exemplu, aÛi putea introduce Nume, apoi ap|saÛi tasta Tab pentru a trece la urm|toarea
celul|;
• Aceast| celul| se numeÕte Tipul de Dat| (Data Type). Ea permite controlul tipului de
http://www.east.utcluj.ro/mb/mep/antal
dat| care va fi stocat în acest câmp. Clic pe s|geata în jos pentru a afiÕa lista tuturor opÛiunilor
posibile;
În acest caz tipul selectat este Text. Dac|, de exemplu, în câmp doriÛi s| stocaÛi valori
numerice, tipul selectat ar fi fost Number;
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
• clic pe butonul Yes pentru a crea o cheie primar|; în acest caz Access-ul va ad|uga un
nou câmp în tabel cu numele ID Õi de tipul AutoNumber care va acÛiona pe post de
identificator unic al unei înregistr|ri din tabel. Acest câmp poate fi folositor, dar este mai
normal ca noi s| decidem care câmp sau combinaÛie va identifica unic o înregistrare din tabel
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Memo la fel, permite stocarea de caractere alfanumerice, îns| spre deosebire de tipul
Text unde lungimea este fixat|, aici lungimea câmpului este variabil| de la o
înregistrare la alta. În practic| acest tip de dat| se foloseÕte pentru comentarii,
note sau explicaÛii ale c|ror lungime este nedeterminat|;
Number câmpurile de acest tip pot stoca numai valori numerice care pot fi întregi sau
reale. Diferitele tipuri de numere sunt detaliate în tabelul care urmeaz|:
62 Introducere în Microsoft Access: Tabele - cursul 3
http://www.east.utcluj.ro/mb/mep/antal
Byte [0, 255] fa7 ra7 1 octet
întregi
valori
Date/Time tip folosit pentru stocarea de date sau ore. Exist| o varietate de formate ale
datei Õi timpului în care valorile de acest tip pot fi specificate;
OLE Object OLE înseamn| Object Linking and Embeeding. Aceste obiecte sunt desene,
grafice, sunete etc. create cu alte aplicaÛii Õi care sunt stocate în câmpurile unui
tabel Access. Când un câmp legat (linked field) este reîmprosp|tat din
interiorul Access-ului sau al aplicaÛiei originale, modific|rile sunt valabile în
ambele aplicaÛii, dac| obiectul este numai inclus (embeed) reîmprosp|tarea se
face numai în aplicaÛia în care s-au f|cut modific|rile;
LookUp Wizard permite crearea unui câmp prin care utilizatorul poate selecta o valoare
dintr-un tabel diferit sau dintr-o list| de valori.
Propriet|Ûile câmpurilor
Dup| ce aÛi decis asupra tipului de dat| pentru fiecare câmp, trebuie parcurse Õi propriet|Ûile
asociate tipului. Num|rul Õi natura lor este dependent| de tip, iar în unele cazuri, efectuând
clic în partea din dreapta proprietaÛii va ap|rea o s|geat| în jos sau un Constructor de Expresii
(Expression Builder). Clic pe s|geata în jos din dreapta va duce la afiÕarea unei liste de
posibilit|Ûi.
Field Size DefineÕte lungimea câmpului de text. Pentru un câmp numeric exist| 5
posibilit|Ûi. În partea dreapt| se va afiÕa un mesaj de ajutor cu privire la
proprietatea curent|. Pentru cazul în care câmpul va fi asociat (joined) cu unul
de tipul contor (AutoNumber) într-o relaÛie de tipul unu-la-mulÛi este
obligatorie selectarea tipului Long Integer;
63 Introducere în Microsoft Access: Tabele - cursul 3
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Input Mask asigur| un Õablon - o masc| - pentru introducerea datelor. Pentru anumite tipuri
de date se poate folosi un Generator de M|Õti de Intrare (Input Mask
Wizard);
Validation Rule o expresie care controleaz| modul în care noile date sunt introduse în
tabel;
Validation Text un text care se afiÕeaz| dac| regula de validare (Validation Rule) a
datelor este înc|lcat|;
Required dac| are valoarea Yes o dat| trebuie obligatoriu introdus| în acest câmp;
Allow Zero Length se aplic| numai pentru câmpurile de tipul Text, Memo Õi Hyperlink.
Permite stocarea valorii de Õir cu lungimea zero (zero-length string) în
câmp (valoarea se scrie în limbajul de programare al Access-ului ca o
secvenÛ| de dou| ghilimele""). Aceasta este diferit| de valoarea Null pe
care un câmp "o are" dac| nu s-a introdus nimic înc| în el;
Indexed ajut| la creÕterea vitezei în c|ut|ri. Dac| credeÛi c| veÛi efectua c|ut|ri repetate
pe baza unui câmp trebuie s|-l indexaÛi. Valorile sunt Nu (No), Da (Yes -
64 Introducere în Microsoft Access: Tabele - cursul 3
http://www.east.utcluj.ro/mb/mep/antal
fiecare poantor poanteaza7 o înregistrare din baza de date care cont-ine valoarea
cheii stocata7 într-un câmp particular. Indexul este sortat pe baza valorilor din
cheie pentru a permite ca7 utarea rapida7 a unei valori particulare de cheie (de
exemplu, folosind algoritmul de ca7 utarea binara7 ). Index-ul este folosit
"inversat" în sensul ca7 valoarea cheii este utilizat| pentru ga7 sirea înregistra7 rii în
loc sa fie invers. Pentru bazele de date în care înregistra7 rile pot fi sortate pe
baza a mai multor cîmpuri se pot crea indexuri multiple care sînt sortate pe
baza valorilor acelor chei. Un index poate cont-ine goluri pentru a permite
ada7 ugarea de noi intra7 ri pentru sortarea corecta7 fa7 ra7 a realiza deplasarea
Acest curs este proprietatea lui
Dup| cum am mai spus asigur| un Õablon pentru introducerea datelor. Este posibil ca
Generatorul M|Õtilor de Intrare (Input Mask Wizard) s| nu fie instalat !
Pt. cumparare viziteaza:
• înregistr|rile într-un formular sau foaie de date (Datasheet) sunt afiÕate în ordinea
valorilor cheii primare;
• nu este posibil| dublarea unor înregistr|ri fiind garantat| unicitatea lor.
http://www.east.utcluj.ro/mb/mep/antal
O cheie primar| se formeaz| din unul sau mai multe câmpuri.
standard.
Pt. cumparare viziteaza:
Salvarea unui Tabel
• selectaÛi Save din meniul File;
Pentru salvarea
unui tabel • dac| salvaÛi tabelul pentru prima oar|, tastaÛi un nume în cutia
Table Name, apoi ap|saÛi Enter Õi clic pe OK.
Access-ul d| automat un nume tabelului la prima lui salvare. Deoarece
acest nume nu descrie semnificativ tabelul, el trebuie întotdeauna schimbat într-unul mai
sugestiv.
Dac| înc| tabelul nu este salvat, Access va întreba dac| doriÛi s|-l salvaÛi. Toate foile de date
Õi formularele au o ultim| înregistrare vid| indicat| de un asterisc (*) pe coloana selectorului
de înregistr|ri (în stânga primului câmp). În cazul unui tabel nou aceasta este singura
înregistrare.
salva înregistrarea curent| numai la deplasarea pe urm|toarea înregistrare, care acum este din
nou una vid|.
http://www.east.utcluj.ro/mb/mep/antal
Utilizarea formatelor
Proprietatea Format, dupa7 cum am mai spus, permite afis- area datelor sub o forma7 diferita7 de
secvent-a originala7 de caractere folosita7 la introducerea datelor. Formatele variaza7 în funct-ie de
tipurile de date folosite. Unele tipuri de date au formate predefinite, altele, nu au -si trebuie
definite de utilizator, iar în unele cazuri sunt posibile ambele situat-ii. Formatele nu act-ioneaza7
asupra modului de stocare a datelor în tabele ci influent-eaza7 numai modul de afis- are al lor.
Simbol Semnificat-ie
ANTAL Tiberiu Alexandru.
Simbolurile @, & act-ioneaza7 la nivel de caracter, în timp ce simbolurile <, > act-ioneaza7
asupra întregului s- ir de caractere ale câmpului. Daca7 vret-i sa7 fit-i siguri ca7 un nume va fi
întotdeauna afis- at cu majuscule introducet-i în proprietatea Format simbolul >. Daca7 dorit-i sa7
stocat-i un numa7 r de telefon, folosind un câmp de tipul Text, fa7 ra7 sa7 introducet-i liniut-e pentru
gruparea cifrelor din numa7 r, în proprietatea Format vet-i scrie @@-@@-@@. Daca7 de la
taststura7 vet-i introduce 123456, când va7 pozit-ionat-i pe o alta7 înregistrare, valoarea se va afis- a
sub forma 12-34-56. O problema7 ar putea fi numerele de telefoane care nu au fost introduse în
baza de date. Proprietatea Format poate avea doua7 sect-iuni separate prin ;. Prima se foloses- te
0264-401667
NU COPIA !.
pentru formatarea câmpului când acesta cont-ine text, a doua este formatul în cazul în care nu
sau suna la:
s-a introdus o valoare în câmp (lipsa valorii se poate reprezenta printr-un -sir de lungime zero
sau printr-o valoarea speciala7 null). Daca7 pentru proprietatea Format folosim pe
@@-@@-@@[Blue];"neintrodus"[Red], atunci când introducem o valoare un câmp ea va fi
afis- ata7 cu liniut-e în culoarea albastra7 , iar daca7 valoarea lipses- te se va scrie în locul ei
neintrodus în ros- u.
http://www.east.utcluj.ro/mb/mep/antal
Percent 123456.789 78.9% ###.##%
Scientific 123456.789 1.22%+05 ###E+00
Toate formatele de mai sus sunt implicite -si bazate pe setarea proprieta7 -tii Decimal place pe
Auto.
Formatele numerice personalizate pot avea patru sect-iuni: (1) pentru valori pozitive; (2)
Acest curs este proprietatea lui
pentru valori negative; (3) pentru valori zero; (4) pentru valori nespecificate. De asemenea, se
poate specifica o culoare care sa7 ajute la observarea unori valori critice. Daca7 scriem un
formatul #.##0.00[Green]; (-3,330.00)[Red];"zero";"neintrodus", valorile pozitive se vor afis- a
în verde, cele negative în ros- u, cele 0 se vor afis- a ca -si zero, iar cele nespecificate ca -si
neintrodus. Câteva dintre simbolurile care pot fi utilizate într-un câmp personalizat sunt:
ANTAL Tiberiu Alexandru.
punctul (.), virgula (,), 0 (cifra7 care va fi afis- ata7 ca -si 0 întotdeauna, daca7 nu cumva are o alta7
valoare), $ (pentru afis- area semnului $), % (pentru afis- area semnului %).
Pt. cumparare viziteaza:
De asemenea, exist| o multitudine de set|ri ale formatelor de dat| Õi timp care pot fi f|cute de
utilizator, câteva dintre acestea fiind:
: separator de timp (luat din Windows Regional Settings,
SecÛiunea Separator);
/ separator de dat|;
c la fel cu formatul General Date;
d, dd ziua din lun| - unul sau dou| cifrea (1-31);
ddd primele trei litere ale s|pt|mînii (Sun-Sat);
dddd numele complet al zilei (Sunday - Saturday);
ddddd la fel cu Short Date;
dddddd la fel cu Long Date;
w ziua din s|pt|mân| (1-7);
ww s|pt|mîna din an (1-53);
m, mm luna anului - una sau dou| cifre (1-12);
68 Introducere în Microsoft Access: Tabele - cursul 3
http://www.east.utcluj.ro/mb/mep/antal
y num|rul zilei din an (1-365);
yy ultimele dou| cifre ale anului (01-99);
yyyy anul complet (0100-9999);
h, hh ora - una sau dou| cifre (0-23);
n, nn minutul - una sau dou| cifre (0-59);
s, ss secunda - una sau dou| cifre (0-59);
ttttt la fel cu Long Time;
AM/PM sau A/P ora se afiÕeaz| cu 12 ore urmat| de AM/PM;
Acest curs este proprietatea lui
am/pm sau a/p ora se afiÕeaz| cu 12 ore urmat| de am/pm;
AMPM ora se afiÕeaz| cu 12 ore urmat| de specificaÛiile din Windows
Regional Settings, SecÛiunea forenoon/afternoon.
DeÕi utilizatorul poate specifica Õi alte formate pentru tipurile Date/Time, acestea vor fi
afiÕate pe baza set|rilor din fereastra de dialog Regional Setting Properties din Windows
ANTAL Tiberiu Alexandru.
Control Panel. Alte caractere pot fi ad|ugat formatelor, dar acestea trebuie incluse între
ghilimele, de exemplu, formatul mmm dd","yyyy va afiÕa, February 07, 2001 dac| se
Pt. cumparare viziteaza:
introduce data 02/07/01.
Formatele definite de utilizator în cazul tipului Yes/No pot conÛine pân| la trei secÛiuni. Prima 0264-401667
nu are efect asupra datelor Õi trebuie s| fie obligatoriu caracterul ;. Cea de a doua se foloseÕte
NU COPIA !.
pentru afiÕarea valorii On sau True (stocat| în baz| ca Õi -1). SecÛiunea a treia se folseÕte
pentru specificarea afiÕ|rii lui Off sau False (stocat| în baz| ca Õi 0). De exemplu, dac| dorin
s| afiÕam Da în verde Õi Nu în roÕu vom folosi formatul definit astfel: ;"Da"[Green];
"Nu"[Red]. Exist| cîteva probleme în acest caz cu afiÕarea datelor pe baza formatului definit
mai sus. În primul rând, dac| se defineÕte un format, pentru acest tip, de c|tre utilizator
trebuie modificat| Õi proprietatea Display Control din Lookup de la Check Box la Text Box
pentru a vedea datele conform noului format. În al doilea rând, deÕi datele vor fi afiÕate
conform formatului, atunci cînd datele vor fi introduse de la tastatur| trebuie folosite valorile -
1 Õi 0.
adic| _, va fi afiÕat în locul fiec|rui 9 sau 0. Access va ad|uga automat cîte un caracter \ în
faÛa specificatorilor de poziÛie (placeholders ) Õirul format devenind 999"-("9\)99\-000.000.
Masca de intrare poate conÛine cel mult trei secÛiuni separate prin caracterul ;. Prima
http://www.east.utcluj.ro/mb/mep/antal
definieÕte masca în sine. Cea de a doua spune lui Access dac| s| stocheze (dac| ia valoarea 0)
sau nu (dac| ia valoarea 1 sau este vid) Õi masca împreun| cu datele în baza de date. Cea de a
treia secÛiune specific| caracterul pe care Access îl foloseÕte pentru afiÕarea spaÛiilor în masca
de intrare. Implicit, acesta este caracterul underscore. Dac| doriÛi s| folosiÛi spaÛiul acesta
trebuie curpins între ghilimele. Câteva dintre caracterele care se pot folosi în masca de intrare
sunt descrise în continuare:
Caracter Efect
Acest curs este proprietatea lui
de la stânga la dreapta
\ AfiÕeaz| caracterul care urmeaz| f|r| a-l interpreta, ci doar ca Õi un
caracter obiÕnuit
.,:;-/ specificator de poziÛie, separator de mii, dat| Õi timp determinaÛi de
set|rile din secÛiunea Regional Setting a lui Control Panel
Validarea datelor
Validarea datelor const| în limitarea valorilor care pot fi introduse de la tastatur| într-un
câmp. Ea poate fi automat|, de exemplu, se poate verifica dac| într-un câmp numeric a fost
introdus un text sau dac| data introdus| este valid| sau poate fi definit| de utilizator pe baza
unei expresii care se evalueaz| pentru fiecare dat| nou| care se introduce în câmp. Expresia
care este testat| pentru acceptarea valorii introduse se scrie în Validation Rule, iar mesajul de
eroare care va fi afiÕat dac| regula de validare este înc|lcat| se scrie în Validation Text. De
exemplu, dac| tipul câmpului este Date/Time Õi dorim ca data care se introduce s| fie în
domeniul 1/1/1998 Õi 1/1/2000, regula de validare va fi scris| sub forma between #1/1/98#
70 Introducere în Microsoft Access: Tabele - cursul 3
and #1/1/00#. Dac| se doreÕte limitarea datei la cea crent| se va scrie expresia <Date( ). Dac|
avem un câmp numeric, un exemplu de regul| de validare ar fi <100, caz în care vor fi
acceptate numai valori numerice mai mici ca 100. Expresia de validare poate conÛine orice
http://www.east.utcluj.ro/mb/mep/antal
funcÛii scrise de noi sau dintre cele ale limbajului VBA. De exemplu, dac| avem un câmp cu
numele Sex de tipul Text în care dorim s| stoc|m sexul folosind iniÛialele: B - b|rb|tesc, F -
femeiesc, N - nespecificat, regula de validare va fi InStr("BFN",[Sex])>0
În expresia care se scrie pentru a testa valoarea introdusa7 poate sa7 participe s- i numele
câmpului care se testeaza7 , simplu, sau ca s- i paramtru al unei funct-ii, dar nu pot sa7 participe
nume ale altor câmpuri din tabel. De exemplu, în cazul unui câmp de tipul Date/Time, cu
numele DataNast, este corect sa7 scrie o expresie pentru validare de forma
Acest curs este proprietatea lui
Year([DataNast]) < 1977. Aceasta va permite introducerea unor date de nas- tere care
au anul mai mic decât 1977.
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Obiectivele cursului 4
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
http://www.east.utcluj.ro/mb/mep/antal
! cum se editeaz| (Edit) înregistr|rile unui tabel;
! cum se selecteaz| (Select) înregistr|rile dintr-un tabel;
! cum se selecteaz| o înregistrare folosind selectorul de înregistr|ri (Record
Selector);
! cum se selecteaz| un grup de înregistr|ri adiacente;
Acest curs este proprietatea lui
Editarea înregistr|rilor
Exist| o varietate mare de posibilit|Ûi de editare a înregistr|rilor atât pentru formulare (Form)
cât Õi pentru foi de date (Datasheet).
http://www.east.utcluj.ro/mb/mep/antal
Majoritatea operaÛiilor de editare necesit| selectarea datelor în prealabil. Pentru a înlocui
întreg conÛinutul unui câmp, acesta trebuie selectat, apoi se introduce de la tastatur| noul
conÛinut.
PorÛiunea gri din stânga fiec|rei înregistr|ri, într-o foaie de date, se numeÕte selector de
înregistrare (record selector). Urm|toarele simboluri specific| starea unei înregistr|ri:
Acest curs este proprietatea lui
înregistrarea curent|;
înregistrarea se editeaz|;
ANTAL Tiberiu Alexandru.
Pentru a selecta un
grup de stâng al mouse-ului Õi se deplaseaz| cursorul pân| pe ultima
înregistra7 ri
adiacente
• clic pe selectorul de
Pentru a selecta
toate înregistra7 rile înregistr|ri aflat la intersecÛia
unui tabel dintre selectorii de înregistr|ri Õi
coloane;
73 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4
http://www.east.utcluj.ro/mb/mep/antal
unei înregistra7 ri • selectaÛi din meniul Edit (Alt+E);
• selectaÛi Select Record (L).
http://www.east.utcluj.ro/mb/mep/antal
• clic undeva în câmp apoi ap|saÛi F2.
Pentru a selecta un
câmp cu F2
• ap|saÛi F2.
Pentru a deselecta
un câmp
Acest curs este proprietatea lui
• selectaÛi înregistrarea;
• ap|saÛi tasta Delete; 0264-401667
• dac| doriÛi efectuarea Õtergerii clic pe butonul Yes, pentru anularea Õtergerii lansate
NU COPIA !.
clic pe No.
http://www.east.utcluj.ro/mb/mep/antal
Pentru a vizualiza urm|toarea fereastr| de dialog va fi afiÕat|:
seta7 rile curente • modificaÛi oricare dintre aceste opÛiuni implicite apoi
• când eliberaÛi butonul stâng al mouse-ului, câmpul se g|seÕte în noua lui poziÛie;
• salvaÛi tabelul pentru a face modific|rile permanente.
http://www.east.utcluj.ro/mb/mep/antal
Modificarea l|Ûimii (width) unei coloane Õi în|lÛimii
(height) unui rând
Unele din metodele pe care le prezint sunt precise, altele sunt f|cute pentru lucrul "dup| ochi"
dar mai rapide în cazul când dorim numai s| vedem pentru câteva momente ceva ce nu încape
de tot în câmp datorit| l|Ûimii prea mici.
• selectaÛi coloanele;
ANTAL Tiberiu Alexandru.
• selectaÛi coloanele;
Modificarea la7 t-imii
unui grup de • clic pe butonul din dreapta al mouse-ului având cursorul de 0264-401667
coloane adiacente
NU COPIA !.
la "ocupa7 tot"
sau suna la:
mouse poziÛionat pe oricare din câmpurile selectate Õi selectaÛi Column Width; pe ecran
apare fereastra de dialog:
• clic pe butonul drept al mouse-ului, selectaÛi Row Height din lista ap|rut| Õi apoi
introduceÛi noua în|lÛime pentru toate rândurile.
http://www.east.utcluj.ro/mb/mep/antal
Ascunderea (hiding) Õi vizualizarea (un-hiding) coloanelor
Este posibil| ascunderea unor coloane din tabel în cazul în care acestea nu prezint| interes
pentru o anumit| vizualizare particular| de date ale foii de date.
Pentru a vizualiza
o coloana7
ANTAL Tiberiu Alexandru.
• clic pe Format din meniul aplicaÛiei Access selectaÛi UnHide Columns Õi urm|toarea
fereastr| de dialog va ap|rea pe ecran:
• în fereastra de mai sus câmpul cu numele Category Name este ascuns. Pentru a
deveni din nou vizibil activaÛi cutia de selectare (check box) din dreapta numelui câmpului
apoi clic pe Close.
În mod frecvent tabelele au un num|r mai mare de câmpuri decât cele care se pot afiÕa pe
sau suna la:
ecran. În acest caz câmpurile din stânga se pierd din vedere la deplasarea spre dreapta prin
câmpurile tabelului. ÎngheÛarea coloanelor cauzeaz| p|strarea pe ecran ale acestora în timp ce
ne deplas|m prin celelalte coloane de tabel.
Efectele format|rii cuprind liniile pentru delimitarea celulelor (grid lines) pe vertical| Õi pe
orizontal|, culoarea lor Õi a fondului pe care se scrie, efecte de prezentare ale celulelor de
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
tipul: plat (Flat), ieÕit (Raisen) Õi îngropat (Sunken), stilul de caractere folosit la afiÕarea
ANTAL Tiberiu Alexandru.
datelor.
Pt. cumparare viziteaza:
• în
Pentru a selecta
unul dintre secÛiunea Cell
efectele: Flat, Effect a cutie de
Raisen sau Sunken dialog Cell
Effects selectaÛi
unul din
cuvintele Flat, Raisen sau Sunken.
• în
Pentru a modifica
culoarea fondului secÛiunea
(background) Background
Color clic pe
s|geata în jos
apoi selectaÛi din list| culoarea dorit|.
79 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4
http://www.east.utcluj.ro/mb/mep/antal
caractere (Fonts) a
• ap|saÛi butonul OK.
foii de date
La copierea sau mutarea întregistr|rilor într-o foaie de date, Access-ul insereaz| datele în 0264-401667
NU COPIA !.
noile câmpuri în ordinea de apariÛie a coloanelor în foaia de date f|r| a Ûine cont de numele
sau suna la:
câmpurilor. În cazul formularelor, pentru aceleaÕi operaÛii, Access-ul va Ûine cont de numele
de câmpuri ordinea de aranjare a câmpurilor fiind nesemnificativ|.
• ap|saÛi Ctrl+V.
Este posibil| copierea conÛinutului a mai multor câmpuri sau coloane prin Clipboard
aplicând aceleaÕi operaÛii care au fost descrise deja; ceea ce difer| este numai selecÛia.
http://www.east.utcluj.ro/mb/mep/antal
Manipularea obiectelor tabel din fereastra bazei de date
OperaÛiile de editare descrise pân| acum se pot aplica Õi pentru obiectele bazei de date. Fie
lista obiectelor de tipul tabel selectat| (procedurile care urmeaz| se pot aplica pentru toate
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
obiectele bazei de date deÕi vor fi exemplificate, pentru început, folosind obiecte de tipul
tabel).
• selectaÛi una din opÛiunile de inserare. Structure Only pentru a prelua numai structura
tabelului f|r| date, Structure and Data pentru a prelua structura Õi datele din tabelul original,
Append Data to Existing Table pentru a ad|uga datele unui tabel deja existent.
Toate obiectele bazei (Tabele, Formulare, Interog|ri, Rapoarte, Macrouri, Module) de date pot
fi copiate, redenumite sau Õterse.
• selectaÛi
Pentru a s-terge un
obiect obiectul care va
fi Õters;
http://www.east.utcluj.ro/mb/mep/antal
• selectaÛi
Delete din meniul Edit. Fereastra de
dialog care apare pe ecran se prezint|
în continuare:
• clic pe Yes pentru a Õterge
obiectul sau pe No pentru abandonarea
Õtergerii.
Nota7 : Dac| încercaÛi Õtergerea unui tabel care particip| într-o relaÛie cu alte tabele, Access-ul
Acest curs este proprietatea lui
Tip|rirea (Printing)
Tot ceea ce se realizeaz| în Access se poate tip|ri la imprimant|. În continuare se prezint|
ANTAL Tiberiu Alexandru.
numai previzualizarea (preview) Õi tip|rirea (print) foilor de date pentru tabele, interog|ri,
formulare Õi ale definiÛiilor de obiecte.
Pt. cumparare viziteaza:
Cele care urmeaz| presupun c| obiectul în cauz| este fie deschis, fie este selectat din fereastra
bazei de date (Database Window).
• dac| se
Pentru tipa7 rirea
unui formular sau doreÕte tip|rire
foi de date parÛial|,
selectaÛi
înregistr|rile
care se vor tip|ri;
82 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4
http://www.east.utcluj.ro/mb/mep/antal
s| tip|riÛi numai anumite pagini consecutive selectaÛi Pages From Õi introduceÛi num|rul
primei Õi ultimei pagini ale domeniului;
• clic pe OK.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Obiectivele cursului 5
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
http://www.east.utcluj.ro/mb/mep/antal
! cum se începe o c|utare;
! cum se caut| folosind caractere generice (Wildcard);
! cum se g|seÕte o valoare specific|;
! cum se înlocuieÕte o valoare specific|;
! cum se ordoneaz| înregistr|rile unui tabel;
Acest curs este proprietatea lui
http://www.east.utcluj.ro/mb/mep/antal
vizualizat în mod foaie de date trece cu mult de dimensiunea ecranului. Access-ul are câteva
instrumente care simplific| aceast| sarcin|. Dou| dintre acestea sunt Caut| (Find) Õi
ÎnlocuieÕte (Replace). În cursurile care urmeaz| veÛi avea o metod| mult mai puternic| de
c|utare Õi înlocuire a datelor numit| interogare (query). Dac| operaÛia pe care doriÛi s| o
realizaÛi se repet| Õi este complicat|, probabil veÛi dori s| scrieÛi o interogare. G|sirea
informaÛiilor este mai rapid| dac| câmpul pe baza c|ruia se caut| este cheia primar| sau are
un index. Se poate folosi meniul Edit, bara cu instrumente sau tastele "scurt|tur|" pentru
g|sirea informaÛiilor. Înainte de aceasta trebuie s| faceÛi clic în câmpul pe baza c|ruia doriÛi s|
Acest curs este proprietatea lui
faceÛi c|utarea.
• introduceÛi valoarea pe care doriÛi s| o g|siÛi în cutia cu numele Find What:. Exist|
un num|r de opÛiuni care se pot folosi pentru a rafina c|utarea dup| cum urmeaz|:
http://www.east.utcluj.ro/mb/mep/antal
urmeaz|:
exclamare paranteze.
sau suna la:
Caracterele generice sunt f|cute pentru lucrul cu câmpuri de tipul Text, uneori pot fi folosite
cu succes Õi pentru c|utarea în câmpuri de tip Date dar asta numai dac| nu aÛi f|cut modific|ri
în set|rile de regiune (Reginal Settings) pentru tipul respectiv.
Access-ul se mut| pe prima înregistrare al c|rei câmp are valoarea c|utat| Õi afiÕeaz| câmpul
http://www.east.utcluj.ro/mb/mep/antal
distinct (fondul devine negru, caracterele albe pentru a scoate în evidenÛ| prima soluÛia a
c|ut|rii);
• în cutia Find What tastaÛi valoarea care se va înlocui, mai sus Metasoft;
• în cutia Replace With introduceÛi noua valoare, mai sus Metasoft SRL; 0264-401667
NU COPIA !.
• modificaÛi opÛiunile dup| cum este cazul apoi clic pe butonul Find Next;
sau suna la:
Dac| înregistrarea nu este cea dorit|, clic pe Find Next pentru a g|si urm|toarea apariÛie.
Nota7 : dac| nu este activat| opÛiunea Match Whole Field acÛiunea poate deveni periculoas|!
Sortarea înregistr|rilor
http://www.east.utcluj.ro/mb/mep/antal
Dac| doriÛi ca înregistr|rile s| fie afiÕate într-o ordine diferit| selectaÛi Quick Sort. De
exemplu, este posibil ca angajaÛii s| fie afiÕaÛi în ordinea descresc|toare a salariilor Õi la un
moment dat s| doriÛi s|-i afiÕaÛi în ordinea alfabetic|.
Într-un tabel vizualizat ca foaie de date, sortarea se poate realiza pe baza mai multor câmpuri
adiacente, într-un formular îns| suntem limitaÛi la sortarea pe baza unui singur câmp. Dac| aÛi
selectat mai multe câmpuri, cel mai din stânga este câmpul primar de sortare. Din acest motiv
uneori este necesar| rearanjarea ordinii coloanelor înainte de sortare.
Acest curs este proprietatea lui
Nota7 : la sortarea cresc|toare înregistr|rile sunt aranjate începând cu valoarea cea mai mic|, de
exemplu, cifre de la 0 la 9 Õi litere de la A la Z. La sortarea descresc|toare este invers.
³ tabelul iniÛial
0264-401667
NU COPIA !.
³ coloanele selectate
sau suna la:
³ rezultate
Ce este un filtru?
Filtrele sunt interog|ri simple care se aplic| numai tabelelor sau formularelor deschise. Se
utilizeaz| pentru alterarea temporar| a modului de vizualizare a datelor dintr-un tabel pentru:
88 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca
http://www.east.utcluj.ro/mb/mep/antal
• vizualizarea înregistr|rilor care îndeplinesc criterii complexe;
• sortarea înregistr|rilor pe baza conÛinutului câtorva câmpuri;
• sortarea câmpurilor în sensuri diferite (unul ascendent, altul descendent).
• clic pe s|geat| în jos Õi o list| se va desf|Õura, de aici puteÛi selecta o singur| valoare
http://www.east.utcluj.ro/mb/mep/antal
pentru filtrare; în exemplul prezentat eu am selectat Alfreds Futterkiste;
• clic pe pictograma Apply Filter Õi numai înregistr|rile care au câmpul Company
Name identic cu Alfreds Futterkiste vor fi afiÕate;
• clic pe pictograma Remove Filter .
DeÕi exemplul prezentat de mine este simplu, acest mod de filtrare poate produce rezultate
mult mai complexe. De ce? ObservaÛi în figura care urmeaz|, în colÛul din dreapta jos, câteva
butoane care conÛin cuvintele Or.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Dup| ce aÛi completat o valoare de filtrare apare un Or nou. Se vor filtra valori care satisfac
prima condiÛie sau (Or) a doua Õi aÕa mai departe. Între valorile de câmpuri ale aceleiaÕi linii
de filtrare se face Õi logic. Astfel, prima condiÛie se poate citi astfel: selecteaz| acele rânduri
din tabel care au în câmpul Company Name valoarea "Alfreds Futterkiste" Õi (And) în
câmpul Contact Name valoarea "Ofelia Chiorean". La clic pe noul Or valorile setate se
Õterg automat Õi se poate defini o nou| configuraÛie de valori de câmpuri pentru care se face
filtrarea.
0264-401667
NU COPIA !.
nou| de abordare a datelor, unde toate relaÛiile semnificative dintre date se reprezentau prin
valorile datelor Õi nu prin poantori ascunÕi sau prin conexiuni. Viziunea lui Codd a permis
exprimarea interog|rilor într-un format neprocedural adic| independent de structura Õi
http://www.east.utcluj.ro/mb/mep/antal
algoritmii folosiÛi la implementarea bazei de date - un concept pe care Codd l-a numit
independenÛa datelor. Articolul original al lui Codd spunea c| interog|rile despre datele
stocate în formatul relaÛional se puteau exprima fie prin calculul predicatelor de ordinul unu
fie prin utilizarea unei colecÛii de operatori relaÛionali cum sunt asocierea (join) Õi proiecÛia
(projection). În articole ulterioare, a dezvoltat aceste dou| abord|ri sub forma a dou| limbaje
de acces la bazele de date care au devenit cunoscute sub denumirile calcul relaÛional Õi
algebra relaÛional|. Majoritatea muncii din acea perioad| s-a focalizat asupra operatorilor din
algebra relaÛional|.
Acest curs este proprietatea lui
Language, adic| SQL. Diferent-a esent-iala7 dintre SQL s- i alte limbaje consta7 în faptul ca7 în
SQL instruct-iunile specifica7 ce operat-ii se vor face cu datele -si nu modul cum se realizeaza7
Pt. cumparare viziteaza:
acestea. DeÕi SQL-ul a fost dezvoltat de IBM, primul produs comercial bazat pe SQL a fost
produs de o companie mic| numit| Relational Software, Inc., în 1979. Produsul s-a numit
Oracle, iar numele a fost ulterior adoptat Õi de companie, care azi a devenit un gigant.
Dac| baza de date este proiectat| corect este garantat| unicitatea înregistr|rilor prin cheile
primare (primary keys) din tabele. Apoi, aceste chei primare se vor folosi drept chei str|ine
0264-401667
NU COPIA !.
(foreign keys) în alte tabele pentru stabilirea relaÛiilor. Când se creeaz| o relaÛie între dou|
sau suna la:
tabele, tabelul cu cheia primar| se numeÕte tabel primar (primary table) iar tabelul cu cheia
str|in| se numeÕte tabel asociat (related table). Tabelul asociat poate avea la rândul lui o
cheie primar| care se poate folosi într-o alt| relaÛie în care tabelul va fi primar.
DefiniÛiile relaÛionale între tabelele din baz| vor asigura proiectarea cât mai facil| a obiectelor
din baz|. De multe ori rapoartele, formularele sau interog|rile lucreaz| cu date din mai multe
tabele. În acest scop Access-ul trebuie s| cunoasc| cum sunt legate tabelele care particip| în
aceste obiecte.
Dac| s-au creat sau modificat deja relaÛiile din baz|, fereastra se va afiÕa la fel cu ultima ei
afiÕare, astfel se va afiÕa Õi fereastra de dialog Show Table peste aceasta.
91 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca
http://www.east.utcluj.ro/mb/mep/antal
de dialog Show
Table
• dac| fereastra de dialog Show Table nu este deschis| clic pe pictograma Show Table
din bara de instrumente Relationships;
Pt. cumparare viziteaza:
0264-401667
NU COPIA !.
• selectaÛi tabelul care doriÛi s| fie ad|ugat din lista Table. FolosiÛi tasta Ctrl pentru
ad|ugarea mai multor tabele neconsecutive sau tasta Shift pentru ad|ugarea unui grup de
tabele consecutive;
• clic pe butonul Add;
92 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca
Pentru acest exemplu am folosit 3 tabele cu numele: Persoana, Adrese, Telefoane. Câmpurile
IDAdresa din Adrese -si IDPersoana din Persoana sunt de tipul AutoNumber,
http://www.east.utcluj.ro/mb/mep/antal
IDPersoana din Adrese s- i IDAdresa din Telefoane sunt de tipul Long Integer, Remarci
din Adrese este de tipul Memo, celelalte câmpuri sunt de tipul Text. Cheile primare sunt
afiÕate îngroÕat (IDPersoana în tabelul Persoana s- i IDAdresa în tabelul Adrese) în figur|.
Tabelul Telefoane nu are cheie primar|.
Definirea relaÛiilor
Acest curs este proprietatea lui
• trageÛi numele câmpului din primul tabel peste numele
Pentru a crea o
relat-ie între doua7 câmpului din al doilea. Dac| unul dintre câmpurile tabelelor este cheie
tabele primar| va fi afiÕat îngroÕat (bold), veÛi trage cheia primar| pe cheia
secundar| corespunz|toare din al doilea tabel. Tabelul din care se trage
cheia se numeÕte tabel primar (primary table); tabelul peste care se
plaseaz| cheia se numeÕte tabel asociat (related tabel). Fereastra de dialog a relaÛiei se va
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
1. Pentru ad|ugarea unei înregistr|ri în tabelul asociat, tabelul cheii primare trebuie s|
conÛin| o înregistrare a c|rei cheie primar| s| fie identic| cu cheia str|in| corespondent| din
tabelul asociat pentru noua înregistrare. De exemplu, pentru ad|ugarea unei înregistr|ri în
tabelul Adrese, trebuie s| avem prima oar| în tabelul Persoana o înregistrare a c|rei cheie
primar| (IDPersoana) s| fie aceeaÕi cu cheia stra7 ina7 din tabelul Adrese (IDPersoana);
2. Nu se poate Õterge o înregistrare din tabelul primar dac| exist| înregistr|ri
corespondente în tabelul asociat. De exemplu, nu se poate Õterge un nume de persoan| din
Acest curs este proprietatea lui
tabelul Persoana dac| are înregistr|ri stocate în tabelul Adrese, adic| exist| cel puÛin o
înregistrare având valoarea stocat| în câmpul IDPersoana aceeaÕi cu una a lui
IDPersoana din tabelul Persoana.
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Actualizarea
Selectarea opÛiunii "actualizarea cascadat| a câmpurilor legate"
cascadata7 a (Cascade Update Related Fields) înseamn| c| modificarea cheii
câmpurilor legate primare în una din înregistr|rile tabelului primar va fi reîmprosp|tat|
automat de Access în toate câmpurile legate corespondente.
Ambele opÛiuni afecteaz| integritatea referenÛial|, motiv pentru care se vor utiliza cu
precauÛie.
http://www.east.utcluj.ro/mb/mep/antal
Pentru exemplul prezentat, relat-iile finale vor fi cele prezentate în figura care urmeaza7 :
Editarea relaÛiilor
ANTAL Tiberiu Alexandru.
Obiectivele cursului 6
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
http://www.east.utcluj.ro/mb/mep/antal
! conceptele care stau la baza interog|rilor (Queries);
! cum se deschide o interogare (Query);
! cum se creeaz| interog|ri folosind Generatorul de Interog|ri (Query
Wizard);
! cum se selecteaz| câmpurile care vor participa într-o interogare;
Acest curs este proprietatea lui
interog|ri;
! ce sunt asocierile (join);
! ce sunt interoga7 rile cu parametri s- i cele încrucis- ate (crosstab);
! care sunt cele mai importante proprieta7 -ti ale interoga7 rilor.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
loc de unul singur uriaÕ - dar legate între ele, pentru creÕterea eficienÛei Õi evitarea duplic|rii
datelor. De multe ori este necesar| g|sirea unor informaÛii care sunt submulÛimi ale
mulÛimilor de date stocate în tabele. Ele se prezint|, fie sub forma unei submulÛimi de
câmpuri dintr-un tabel, fie sub forma unei submulÛimi de înregistr|ri, fie combinat.
Interog|rile au mai multe forme Õi tipuri. Se pot salva în baz|, asemenea unui tabel sau pot fi
executate numai în memorie. Pot fi create folosind instrucÛiuni ale limbajului SQL
(Structured Query Language) sau prin folosirea unei interfeÛe grafice numit| grila (grid) QBE
Acest curs este proprietatea lui
(Query by Example). O interogare poate prezenta direct datele unui tabel sau poate realiza
anumite grup|ri sau calcule cu datele, înainte de afiÕarea rezultatelor.
vânz|torilor; tabelul Comenzi va conÛine datele la care s-au efectuat vânz|rile; tabelul Detalii
Comenzi va conÛine sumele încasate din vânz|ri. AngajaÛi Õi Comenzi se vor lega prin
Pt. cumparare viziteaza:
num|rul de identificare al angajatului; Comenzi Õi Detalii Comenzi se vor lega pe baza num|rului
de comand|. Vom dori delimitarea înregistr|rilor din Comenzi Õi Detalii Comenzi pentru o
perioad| dat|. De asemenea, suntem interesaÛi numai de rezultatele personalului de la vânz|ri
care a fost angajat în aceeaÕi perioad|. Ideal ar fi ca rezultatele s| fie puse sub forma unui
raport sau, mai sugestiv, sub forma unui grafic. Pâna7 a ajunge la acestea îns|, trebuie ca datele
s| fie extrase din tabelele corespunz|toare, respectând limit|rile impuse. Pentru aceasta se va
folosi o interogare.
Tipuri de interog|ri
În principal, interog|rile din Access pot fi grupate în urm|toarele categorii de baz|:
! Select-ie: sunt cele mai populare; permit selectarea de informaÛii din unul sau 0264-401667
mai multe tabele pe baza unor criterii, crearea unei mulÛimi dinamice pentru afiÕarea
NU COPIA !.
rezultatelor într-o foaie de date în scopul vizualiz|rii Õi analizei; datele din rezultatele
sau suna la:
afiÕate pot fi modificate, aceste modific|ri afectând datele din tabelele originale;
! Totale: sunt o versiune special| de interog|ri de selecÛie; au posibilitatea de a
realiza sume sau de a genera totale (de exemplu, pot num|ra toate înregistr|rile care
îndeplinesc un anumit criteriu) într-o interogare de selecÛie; la selectarea acestui tip de
interogare Access adaug| un rând numit Total în fereastra QBE;
! Act-iune: permit crearea unor noi tabele (Make Tables) sau modificarea unor
date (delete, update Õi apend) din tabelele existente. În cazul interog|rilor de selecÛie
toate modific|rile aduse datelor se fac, individual, la nivelul fiec|rei înregistr|ri, în
cazul interog|rilor de acÛiune mai multe înregistr|ri pot fi modificate în timpul unei
acÛiuni individuale;
! Încrucis- ate: genereaz| informaÛii de sintez|, sub forma unui tabel având
rândurile Õi capetele de coloan| bazate pe câmpurile tabelului. Prin definiÛie, celulele
individuale ale mulÛimii dinamice rezultate sunt de tipul tabelar, adic| se extrag sau se
calculeaz|;
! SQL: aceste interog|ri se scriu în limbajul SQL având tipurile: Union,
Pass-Through Õi Data Definition; se folosesc pentru manipularea bazelor de date
97 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
SQL client/server;
! Topp(n): este un limitator care se poate folosi numai în conjuncÛie cu celelalte
tipuri de interog|ri prezentate; permite specificarea unui procent din num|rul maxim
http://www.east.utcluj.ro/mb/mep/antal
al al înregist|rilor care vor fi afiÕate de o interogare.
Posibilit|Ûile interog|rilor
Interog|rile ofer| posibilitatea de a vizualiza datele, virtual, în orice mod dorit de utilizator.
Majoritatea SGBD-urilor evolueaz| continuu dezvoltând noi Õi tot mai puternice instrumente
în acest scop. Câteva dintre posibilit|Ûile oferite de interog|ri Access sunt:
! Selectarea tabelelor: informaÛiile pot fi obÛinute dintr-un singur tabel sau din
mai multe tabele care sunt legate prin date comune; în ambele cazuri rezultatele sunt
Acest curs este proprietatea lui
prezentate de Access sub forma unei singure foi de date;
! Selectarea câmpurilor: pot fi specificate care câmpuri ale fiec|rui tabel s| fie
prezente în mulÛimea de date dinamic| rezultat|;
! Selectarea înregistra7 rilor: înregistr|rile care vor fi afiÕate în mulÛimea dinamic|
pot fi selectate pe baza unor criterii;
Sortarea înregistra7 rilor: informaÛiile afiÕate în mulÛimea dinamic| de date pot fi
ANTAL Tiberiu Alexandru.
!
afiÕate într-o ordine specific| (cresc|toare sau descrec|toare);
! Realizarea de calcule: interog|rile pot fi folosite pentru realizarea unor calcule
Pt. cumparare viziteaza:
pe baza datelor afiÕate cum sunt: valoare medie, suma, minim etc.;
! Crearea de tabele: se pot crea noi tabele pe baza datelor dintr-o înregistrar; în
acest caz pe baza mulÛimii dinamice, se va crea un nou tabel;
! Crearea de formulare -si rapoarte pe baza unei interoga7 ri: mulÛimea dinamic|
rezultat| poate fi necesar| pentru realizarea unui formular sau a unui raport; în acest
caz, la afiÕare sau tip|rire informaÛiile fiind extrase printr-o interogare vor fi
actualizate cu datele existente în momentul curent în baza de date;
! Crearea de grafice pe baza unei interoga7 ri: se poate realiza reprezentarea
grafic| a datelor dintr-o interogare care s| fie inclus| într-un formular sau raport;
! Folosirea unei interoga7 ri ca -si sursa7 de date pentru o alta7 interogare: se pot crea
noi interog|ri pe baza unor interog|ri deja existente;
! Modificarea unor tabele: interog|rile Access pot avea ca Õi surse de date baze 0264-401667
de date dBASE, Paradox, Btrieve Õi Microsoft SQL Server.
NU COPIA !.
La fiecare execuÛie, interogarea citeÕte datele din sursele de date Õi recreaz| mulÛimea
dinamic|. Întrucât mulÛimea nu se stocheaz|, o interogare reflect| automat orice modificare
98 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
Deschiderea unei interog|ri (Query)
• deschideÛi baza de date (pentru exemplul care urmeaz| Northwind);
• din fereastra bazei de date (Database Window) selectaÛi butonul Query;
• clic dublu pe interogarea care doriÛi s| fie deschis|.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
• selectaÛi opÛiunea Simple Query Wizard, apoi clic pe butonul OK pentru a trece la
pagina urm|toare a Generatorului;
• fereastra de dialog care se va afiÕa va fi de forma:
99 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• clic pe s|geata în jos a cutiei de tip list| (list box) numit| Tables/Queries pentru a
vizualiza toate tabelele Õi interog|rile ale c|ror câmpuri ar putea fi selectate pentru a participa
la interogare; în figura care urmeaz| am selectat tabelul Orders;
• pentru ad|ugarea unui câmp în interogare selectaÛi din cutia tip list| Available Fileds
numele câmpului care va fi ad|ugat, apoi efectuaÛi clic pe s|geata la dreapta ; numele
dispare din list| Õi apare în lista Selected Fields;
0264-401667
NU COPIA !.
• dup| ce aÛi terminat ad|ugarea tuturor câmpurilor faceÛi clic pe butonul Next Õi
urm|toarea fereastra7 de dialog va fi afiÕat|:
100 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Nota7 : În exemplul prezentat au fost selectate câmpuri dintr-un singur tabel. Prezentarea a avut
un rol didactic, dorind s| descriu un principiu prin ea. Dac| doriÛi, puteÛi selecta câmpuri Õi
din mai multe tabele sau interog|ri, dup| cum dicteaz| necesit|Ûile pentru extragerea
informaÛiilor dorite.
0264-401667
NU COPIA !.
În acest caz interogarea trebuie creat| "cu mâna" folosind vizualizarea în modul proiectare.
Acest mod de vizualizare permite specificarea câmpurilor care vor participa la interogare Õi a
criteriilor de selecÛie specifice acesteia.
http://www.east.utcluj.ro/mb/mep/antal
• din fereastra obiectelor bazei de date clic pe butonul Queries;
Crearea interoga7 rii
"cu mâna" • clic pe butonul New pentru afiÕarea listei posibilit|Ûilor de
creare ale unei interog|ri, de aici selectaÛi Design View;
• clic pe butonul OK;
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Pe ecran apare grila interog|rii (Query Grid) peste ea fiind suprapus| fereastra de dialog
Show Table care conÛine lista tabelelor din baz| ce pot participa într-o interogare.
0264-401667
NU COPIA !.
combinaÛii de tabele cu interog|ri, afiÕarea lor simultan| în list| se face prin selectarea
butonului Both. Toate tabelele sau interog|rile vor fi afiÕate în panoul de sus al ferestrei. Ele
apar sub forma unor ferestre mici în care sunt afiÕate câmpurile corespunz|toare lor.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Din zona tabelelor Õi interog|rilor un câmp se poate selecta prin tragerea lui pe gril|, clic
dublu pe numele lui sau prin clic pe numele lui în lista care se afiÕeaz| la ap|sarea s|geÛii în
jos din Field. Se vor afiÕa numai acele câmpuri care au selectat| linia Show din gril|.
Înregistr|rile afiÕate pot fi restricÛionate prin specificarea unor criterii sau filtre specifice unor
câmpuri din înregistrare.
Datele afiÕate de interogare se pot sorta pe baza unuia sau a mai multor câmpuri folosind Sort.
Dac| efectuaÛi clic pe linia Sort se vor afiÕa opÛiunile de sortare cresc|toare (Ascending) Õi
descresc|toare (Descending). Sortarea se face de la stânga la dreapta dac| sunt mai multe
coloane specificate. Dac| doriÛi s| reveniÛi la starea iniÛial|, în care nu se face sortare, selectaÛi
not sorted. 0264-401667
NU COPIA !.
Ordinea de afiÕare a coloanelor se poate modifica prin selectarea coloanelor Õi tragerea lor în
sau suna la:
noua poziÛie.
Uneori doriÛi s| includeÛi câmpuri în interogare dar nu Õi în r|spunsul care va fi afiÕat. Asta în
cazul în care doriÛi s| selectaÛi sau s| sortaÛi înregistr|ri pe baza unui câmp ale c|rui date nu
doriÛi s| apar| ca o coloan| de date în r|spuns. În Show vizualizarea coloanei este automat
activat| la selectarea câmpului, iar pentru inactivare efectuaÛi clic pe dreptunghi Õi semnul U
va disp|rea. Dac| doriÛi reafiÕarea coloanei, clic pe acelaÕi dreptunghi Õi semnul U va ap|rea
din nou, indicând afiÕarea coloanei în cadrul rezultatelor.
Table;
• realizat-i clic dublu pe tabelul cu numele Employees.
http://www.east.utcluj.ro/mb/mep/antal
Dup| ce aÛi terminat crearea interog|rii, lansarea în execuÛie se face
Lansarea în
execut-ie a selectând din meniul Query pe Run. Pentru definiÛia interog|rii care
interoga7 rilor se prezint| în figura urm|toare, din tabelul Employees al bazei de date
Northwind au fost selectate câmpurile EmployeeID, LastName,
FirstName, Title Õi BirthDate. Toate câmpurile vor fi afiÕate
în r|spuns, cu excepÛia ultimului, pentru c| toate dreptunghiurile corespunz|toare din linia
Show sunt bifate (U), mai puÛin ultimul. Sortarea se va face cresc|tor (Ascending) pe baza
conÛinutului câmpurilor LastName Õi FirstName.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
egal = 7 sau =7 EmployeeID Selecteaz| înregistr|rile
care au angajaÛii cu ID
(EmployeeID) egal cu 7.
mai mic < <7 EmployeeID Selecteaz| înregistr|rile
care au angajaÛii cu ID
mai mic cu 7.
mai mare > >7 EmployeeID Selecteaz| înregistr|rile
Acest curs este proprietatea lui
care au angajaÛii cu ID
mai mare cu 7.
mai mic sau <= <=7 EmployeeID Selecteaz| înregistr|rile
egal care au angajaÛii cu ID
mai mic sau egal cu 7.
ANTAL Tiberiu Alexandru.
LastName cu numele
sau suna la:
începând cu 'D'.
între, Õi between, Between 1/1/40 BirthDate Selecteaz| înregistr|rile
and and 31/12/99 care au angajaÛi cu date de
naÕtere (BirthDate) în
domeniul [1/1/40,
31/12/99].
http://www.east.utcluj.ro/mb/mep/antal
întrebare poziÛie cu ?. mat, mac .
asterisc * Orice grup de caractere pe Pentru m*ie se g|sesc martie,
aceeaÕi poziÛie cu *. mamaie, migraÛie.
semnul hash # O singur| cifr| în aceeaÕi Pentru 196# se vor g|si toÛi
poziÛie cu semnul #. anii în domeniul [1960-1969].
Grila interog|rii permite specificarea unor criterii complexe de selecÛie. În exemplele care
urmeaz| se va folosi în continuare baza de date Northwind cu tabelul Products (produse). Se
poate introduce un criteriu mai lung de un singur câmp de exemplu, se poate s| doriÛi selecÛia
tuturor produselor ale c|ror nume încep cu litera P Õi sunt într-un num|r mai mare de 10
buc|Ûi pe stoc. CombinaÛia acestor criterii va fi folosit| pentru definirea interog|rii. Num|rul
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
de criterii poate s| fie oricât de mare. Uneori, este nevoie, în plus, de specificarea unor criterii
alternative. De exemplu, se poate s| doriÛi selectarea tuturor produselor care încep cu litera C
sau P. Num|rul criteriilor alternative este Õi el nelimitat.
http://www.east.utcluj.ro/mb/mep/antal
indiferent de buc|Ûile existente pe stoc. ObservaÛi c| Or-ul (sau-ul) se
aplic| întregii interog|ri Õi nu unei singure coloane. De exemplu, dac| doriÛi s| selectaÛi toate
produsele care încep cu litera P Õi sunt pe stoc în num|r mai mare de 100 sau (Or) încep cu
litera C Õi sunt pe stoc în num|r mai mare de 10 atunci, trebuie repetat criteriul >10 în
UnitsInStoc în linia Or.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Câmpuri calculate
Uneori este necesar s| efectu|m calcule pe baza datelor selectate în rândurile unei interog|ri.
De exemplu, dorim s| cunoaÕtem preÛul ce include TVA-ul pentru fiecare produs. Tabelul
produselor (numit Products) va conÛine numai preÛul net deci va fi necesar| ad|ugarea unui
câmp al c|rui conÛinut va fi calculat pe baza unei expresii aritmetice.
Definirea unui
• clic în primul câmp liber al liniei Field - câmpul urm|tor lui
câmp calculat QuantityPerPrice;
• introduceÛi expresia aritmetic| dorit|; pentru calculul preÛului
cu TVA se înmulÛeÕte preÛul f|r| TVA cu 1.19 (consider|m TVA-ul
107 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
de 19%);
• la ap|sarea tastei Enter sau la clic pe urm|torul câmp liber, expresia este automat
prefixat| de Access cu eticheta Expr1. Aceast| etichet| va fi numele câmpului calculat Õi se
http://www.east.utcluj.ro/mb/mep/antal
va afiÕa în rezultatele interog|rii. Pentru exemplul nostru, vom da numele de PretcuTVA.
Expri: expresie
Acest curs este proprietatea lui
unde Expri este numele coloanei iar expresie este o expresie aritmetic| cu urm|toarele
componente:
Component| SemnificaÛie
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
De asemenea, este posibil| folosirea unor constante numerice sau a funcÛiilor din biblioteca
Access-ului (de exemplu, funcÛia Format pentru formatarea datelor afiÕate în câmpuri sub o
form| special| sau pentru o anumit| ordine de specificare a zilelor, lunilor Õi a anilor unei
date).
PretUnitatecuTVA: [UnitPrice]*1.19
108 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
PretStoccuTVA: [UnitsInStock]*[PretUnitatecuTVA]
StocRamas: [UnitsInStock]-[UnitsOnOrder]
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Interog|ri cu totale
Pt. cumparare viziteaza:
Câmpurile calculate conÛin calcule care opereaz| în cadrul unei înregistr|ri. Ar fi util|
posibilitatea realiz|rii unor calcule care opereaz| cu un grup de înregistr|ri sau chiar cu toate
înregistr|rile. Aceste tipuri de interog|ri care asigur| posibilitatea centraliz|rii (termenul
tehnic este cel de agregare) folosind anumite criterii se numesc interog|ri cu totale. Se pot
folosi pentru a calcula suma valorilor stocate într-o coloan| particular| sau pentru a calcula
subtotale pentru o coloan| dependent| de valorile altei coloane, de exemplu, subtotalul
vânz|rilor în fiecare s|pt|mân|.
Din meniul View activaÛi opÛiunea Totals. O linie nou|, cu numele de Totals, se va ad|uga în
secÛiunea de gril| a interog|rii. Termenul de agregare se foloses- te pentru a desemna operat-ii
cu un grup de obiecte, astfel o funct-ie de agregare act-ioneaza7 asupra unui grup de înregistra7 ri
realizând o oarecare operat-ie matematica7 cu întregul grup. Aceast| linie va fi folosit| pentru a
realiza calcule de mai multe categorii la nivel de coloan| a interog|rii. Unele se realizeaza7 pe
0264-401667
NU COPIA !.
baza unor opt-iuni multiple cum sunt, funct-iile de agregare (câteva dintre acestea fiind: suma
sau suna la:
(sum), media (average), maximul (maximum) etc.) altele, cum sunt, Group By, Expression,
Total Field Record Limit nu au opt-iuni fiind unice.
Categoria Group By
Aceasta7 categorie are o singura7 opt-iune, pe cea Group By. Ea se foloses- te când dorim sa7
specifica7 m ca7 un anumit câmp al ferestrei QBE va fi folosit pentru grupare. Ea este opt-iunea
implicita7 pentru Total. Aceste grupuri de înregistra7 ri vor fi folosite pentru a realiza calcule de
agregare într-un alt câmp al interoga7 rii.
Categoria Expression
Are o singura7 opt-iune, pe Expression. Se foloses- te pentru a crea câmpuri calculate prin
folosirea funct-iilor de agregare.
Categoria Aggregate
Aceasta are noua7 opt-iuni, câteva dintre ele sunt: Sum, Avg, Min, Max etc. Fiecare dintre
aceste opt-iuni realizeaza7 un anumit calcul cu datele -si întorc noi date într-o celula7 a mult-imii
http://www.east.utcluj.ro/mb/mep/antal
dinamice rezultate.
Nota7 : Interog|rile cu totale lucreaz| diferit de cele clasice. Ele nu afiÕeaz| toate înregistr|rile
care satisfac criteriile de selecÛie impuse ci numai totalul acestora. În plus, câmpurile care se
includ în înregistrare trebuie s| fie numai cele necesare, de exemplu, numai câmpurile pe baza
c|rora se vor face calculele Õi câmpurile pe baza c|rora se vor face sort|ri. Includerea altor
câmpuri vor produce confuzie în cazul calculelor.
0264-401667
NU COPIA !.
Pentru exemplificare, prezint în continuare efectul interog|rii cu total Õi tabelul pe baza c|ruia
s-a realizat interogarea. ObservaÛi c| în tabelul Products, furnizorul (Supplier) Exotic
Liquids apare de 3 ori cu urm|toarele preÛuri pe unitate (UnitPrice) în dolari: 18.00, 19.00
Õi 10.00. Gruparea pe baza numelui de furnizori Õi totalizarea preÛurilor pe unitate
(SumOfUnitPrice) face ca în interogare s| apar| o singur| linie cu Exotic Liquids având
totalizate cele trei valori din tabel (18.00 + 19.00 + 10.00 = 47.00) în câmpul
SumOfUnitPrice.
110 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Se poate folosi orice num|r de coloane pentru grupare: se poate realiza gruparea pe Û|ri Õi pe
nume de furnizori. Dac| se realizeaz| gruparea pe baza mai multor coloane, Access lucreaz|
de la stânga la dreapta pentru a determina precedenÛa grup|rilor.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Sa7 presupunem ca7 dorim sa7 acelas- i grup de calcule ca -si înainte, dar
Totale limitate
pentru o perioada de timp limitata7 , de exemplu pentru anul 1997.
Limitarea se va pune pe câmpul Order Date, folosind pe Where în
Total, iar cont-inutul acestuia nu se va mai afis- a în rezultatele obt-inute.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
interoga7 ri de 'normale', cele utilizate pân| acum) de forma:
actualizare
În practic|, este mai s|n|tos ca prima dat| s| definiÛi toate criteriile de selecÛie Õi s| lansaÛi în
execuÛie interogarea. R|spunsul afiÕat pe ecran const| în acele rânduri care se vor modifica
dac| interogarea normal| se transform| în una de actualizare. Dac| criteriile de selecÛie sunt:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
• noile valori afiÕate în cazul unei interog|ri de select-ie vor fi:
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Expresia scris| în UpdateTo este format| din componentele standard discutate deja la
"Definirea unui câmp calculat". La nevoie, pot participa inclusiv constante sau funcÛii 0264-401667
definite în bibliotecile Access.
NU COPIA !.
Nota7 : Dac| realizaÛi o interogare de ad|ugare pe o submulÛime de înregistr|ri a unui tabel, din
punct de vedere practic, este o procedur| s|n|toas| s| specificaÛi criteriile prima oar| într-o
interogare de select-ie. VerificaÛi r|spunsurile afiÕate Õi numai apoi modificaÛi tipul interog|rii,
de la cea de selecÛie la cea de ad|ugare, în urma c|reia linia Append To va fi afiÕat|.
115 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
Pentru realizarea unei interog|ri de creare a unui tabel din meniul
Crearea unei
interogari de Query selectaÛi . Noul nume de tabel poate fi stocat
creare a unui tabel în baza de date curent| sau în una extern|. Specificarea câmpurilor Õi a
criteriilor se face normal. Dup| specificarea lor selectaÛi Run ( )
din meniul Query pentru lansarea în execuÛie a interog|rii. Access va
afiÕa un mesaj prin care ne spune câte înregistr|ri va copia în noul tabel. Ôi aici este necesar|
confirmarea pentru executarea interog|rii.
Acest curs este proprietatea lui
Nota7 : O interogare de creare a unui tabel poate avea ca surs| de date o submulÛime a
înregistr|rilor unui tabel deja existent. Ôi în acest caz procedura de lucru s|n|toas| presupune
vizualizarea înregistr|rilor selectate printr-o interogare de select-ie, apoi transformarea ei în
una de tipul Make-Table.
ANTAL Tiberiu Alexandru.
doua7 tabele (vezi figura urma7 toare) pe baza relat-iei corespunza7 toare din fereatra
sau suna la:
Relationships; aceasta7 linie poarta7 denumirea de asociere -si reprezinta7 o relat-ie între cele
doua7 tabele;
OrderDate pentru a vizualiza fiecare comanda7 fa7 cuta7 de un anumit client, apoi lansat-i în
execut-ie interogarea prin clic asupra lui în bara cu instrumente Query Design;
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
Implicit, Access afis- eaza7 rezultatele interoga7 rii pe baza indexului tabelului cu cheia primara7 .
Daca7 , de exemplu, dorit-i sa7 sortat-i cresca7 tor rezultatele pe baza lui Order Date :
• trecet-i în mod proiectare (Design View);
• pozit-ionat-i cursorul pe rândul Sort al coloanei Order Date din grila QBE s- i
apa7 sat-i tasta F4 pentru a deschide lista derulanta7 ;
• din lista7 selectat-i Ascending; pentru afis- area cresca7 toare a rezultatelor;
• lansat-i în execut-ie interogarea.
Tipuri de asocieri
Relat-iile între doua7 tabele sunt reguli cu privire la tipul lega7 turilor stabilite între tabele -si nu
cu privire la modalitatea de vizualizare a datelor din tabele. Pentru a vizualiza date din mai
multe tabele acestea trebuie sa7 fie legate printr-un câmp comun (sau printr-un un grup de
câmpuri comune). Metoda de legare a tabelelor se numes- te asociere (join). Într-o interogare,
tabelele care au stabilite deja relat-ii sunt asociate, automat. La nivelul interoga7 rii se pot crea
noi asocieri sau se pot modifica cele existente. La fel cum exista7 mai multe tipuri de relat-ii
117 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
! autoasocieri (self-joins);
! asocieri de tip produs cartezian (cartesian joins).
Crearea unei asocieri între tabele defines- te o mult-ime de proprieta7 -ti. Acestea sunt reguli
folosite la afis- area înregistra7 rilor s- i spun lui Access cum sa7 interpreteze orice except-ie (sau o
eventuala7 eroare) între doua7 tabele. De exemplu, cum sa7 realizeze afis- area în cazul în care
ANTAL Tiberiu Alexandru.
sunt înregistra7 ri necorespunza7 toare. Access poate lucra cu mai multe tipuri de asocieri, fiecare
având un comportament specific. Modificarea tipului unei asocieri se realizeaza7 prin
Pt. cumparare viziteaza:
modificarea proprieta7 -tilor acesteia. Pentru aceasta realizat-i clic dublu pe linia care leaga7 cele
doua7 tabele, pe ecran se va afis- a fereastra proprieta7 -tilor asocierii (Join Properties).
0264-401667
NU COPIA !.
Ea are doua7 regiuni, prima are patru liste desfa7 s- urabile (Left Table Name, Right Table
Name, Left Column Name, Right Column Name), iar a doua trei butoane cu opt-iuni.
Butoanele cu opt-iuni controleaza7 proprieta7 -tile asocierii dupa7 cum urmeaza7 :
1. Include înregistra7 rile care au în câmpurile de asociere valori egale;
2. Include TOATE înregistra7 rile din tabelul Customers s- i numai pe acelea din
Orders care au în câmpul de asociere valori egale;
3. Include TOATE înregistra7 rile din Orders s- i numai pe acelea din Customers care
au în câmpul de asociere valori egale.
Prima opt-iune este cunoscuta7 sub numele de asociere interna7 (inner join), urma7 toarele sunt
cunoscute sub denumirea de asocieri externe (outer join).
cap|t o s|geat| care va marca tabelul din care sunt extrase numai înregistr|rile care au valori
comune. De exemplu, dac| în interogarea care afiÕeaz| comenzile unui client se face
modificarea:
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
Autoasocieri (self-joins)
Autoasocierile se realizeaza7 între câmpurile aceluiaÕi tabel. Din acest motiv tabelul va fi
ad|ugat de dou| ori pe postul de surs| de date. Va exista un tabel original Õi o copie a lui.
Asocierile se creeaz| între original Õi copie. De exemplu, dac| într-un tabel stocaÛi cerinÛele
personalului într-un câmp Cerinte Õi aprob|rile cerinÛelor de c|tre conducere în câmpul
Aprobari, atunci se va realiza o asociere între aceste dou| câmpuri ale aceluiaÕi tabel
pentru a g|si care cerinÛe au fost acceptate.
asociere între tabele, Access va combina toate înregistr|rile lui Customers cu toate
înregistr|rile lui Orders. Uneori aceast| operaÛie va dura secunde, alteori chiar minute.
Combinarea fiec|rei înregistr|ri dintr-un tabel, cu fiecare înregistrare a celuilalt, va conduce la
http://www.east.utcluj.ro/mb/mep/antal
produsul cartezian al tabelelor.
Des- i aceasta7 asociere este bine de evitat, voi prezenta în continuare un exemplu în care ea se
poate folosi cu succes.
Fie tabelul Angajati din figura urma7 toare. El are patru câmpuri, Nume, Prenume -si Sectie
sunt de tipul Text, iar Salar este de tipul Number, Double. Se pune problema totaliza7 rii
salariilor pe sect-ii (Sectie) s- i afis- area, în procente, a salarului totalizat pe fiecare sect-ie,
Acest curs este proprietatea lui
raportat la totalul salariilor.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Pentru calculul procentelor din valoarea totala7 a salariilor se creeaza7 o noua7 interogare cu
numele Procente. Aceasta se prezinta7 în figura urma7 toare -si care are câmpurile:
Sectie;
Suma pe sectii: Sum Of Salar;
Suma totala: Sum Of Salar;
Procent pe sectie: [Query Suma pe Sectii].[Sum of
salar]/[Query Suma Totala].[Sum of salar]
0264-401667
NU COPIA !.
Pentru ca la afis- are valorile sa7 fie formatate în procente, proprietatea Format a câmpului cu
numele Procent pe sectie este setata7 la #.##%
Aceasta7 introgare este de tipul produs cartezian. Vet-i observa însa7 ca7 valorile sunt afis- ate
repede întrucât unul dintre tabele cont-ine numai o singura7 întregistrare (suma tutror salariilor).
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
Funct-ia DSum() permite calcularea sumei valorilor unui câmp dintr-un tabel. Mai sus
ANTAL Tiberiu Alexandru.
[Salar] este câmpul al ca7 rui valori vor fi însumate, iar Angajati este tabelul care
cont-ine câmpul în cauza7 . Observat-i ca7 argumentele funct-iei sunt -siruri motiv pentru care ele
Pt. cumparare viziteaza:
trebuie scrie între apostroafe. Funct-ia mai are un argument, opt-ional, prin care se poate
specifica un criteriu pentru selectarea valorilor de însumat. Criteriile de select-ile sunt de
forma "[Nume de câmp] = ' <valoare>' ".
Dou| tabele pot avea mai multe asocieri. De exemplu, dac| dorim s|
Crearea unei
asocieri afl|m clienÛii care au adresa firmei Õi cea la care se face expedierea
multicoloana7 aceeaÕi, se poate crea o interogare de forma:
0264-401667
NU COPIA !.
Interog|ri cu parametri
S| presupunem c| dorim s| scriem o interogare care s| fac| totalul vânz|rilor de produse
122 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Dac| expresia Like "*/*/1996" din figura de mai sus se înlocuieÕte cu cea prezentat| în
fereastra Zoom urma7 toarea7 ( Like "*/*/" + [Introduceti anul]), se obÛine o
interogare cu parametru.
Verificarea corectitudinii tipului valorii introduse pentru parametru se poate face, de c|tre
Access, dac| pentru parametrul cu numele Introduceti anul este specificat tipul
123 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
Integer din Query, Parameters as- a cum vede în figura urma7 toare.
http://www.east.utcluj.ro/mb/mep/antal
Text. În urm| modific|rii acestuia la Integer valorile pe care
Access le va accepta vor fi numai de tipul întreg. Pentru ca
aceast| valoare întreag| s| fie convertit| la un Õir de caractere
care s| poate fi ad|ugat la Õirul "*/*/" trebuie folosite
urm|toarele funcÛii de conversie:
Interog|ri încruciÕate
ANTAL Tiberiu Alexandru.
Interog|rile încruciÕate asigur| crearea unor totale permiÛând în acelaÕi timp Õi stabilirea
exact| a modului în care informaÛiile sunt afiÕate pe ecran. Rezultatele sunt afiÕate sub forma
unui tabel în care rândurile (prin Row Heading), coloanele (prin Coulmn Heading) Õi
Pt. cumparare viziteaza:
valorile (prin Value) plasate la intersecÛia acestora trebuie specificate explicit. Ele au
urm|toarele avantaje:
! permit afiÕarea într-o form| compact| a unor cantit|Ûi mari de date centralizate
asem|n|tor cu Excel;
! datele sunt prezentate într-o form| mai potrivit| pentru crearea de grafice sau
de diagrame cu ajutorul lui Access GraphWizard;
! se pot crea date centralizate în ordine cresc|toare pentru coloane identice, dar
cu mai puÛine rânduri.
Utilizarea acestor interog|ri impune o singur| restricÛie: nu se poate ordona tabelul rezultat
dup| valorile coloanelor calculate. De exemplu, nu se poate crea o interogare care s| afiÕaze
produsele dup| volumul vânz|rilor. Coloanele pot avea valori care duc la conflicte, dar se
0264-401667
NU COPIA !.
poate realiza ordonarea cresc|toare, descresc|toare sau lipsa ordon|rii pentru valorile numelor
sau suna la:
de rânduri din prima coloan|. Access are un generatorul Crosstab Query Wizard pentru
crearea interog|rilor încruciÕate, dar el poate lucra numai cu un singur tabel. RealizaÛi
interogarea încruciÕat| din figura care urmeaz|. La început creaÛi o interogare de selecÛie care
s| conÛin| tabelele de mai jos, apoi folosiÛi Crosstab din Query pentru ca linia Crosstab s|
124 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
fie afiÕat|. SpecificaÛi în continuare cele trei componente (rând, coloan| Õi valoare) ale
interog|rii încruciÕate.
http://www.east.utcluj.ro/mb/mep/antal
Rezultatele interog|rii sunt afiÕate într-un tabel de forma:
Expr1, pe baza formulei de mai sus, va primi numele lunii, format| din trei caractere, în care
s-a f|cut comanda, iar funcÛia Sum() va realiza suma valorilor câmpului corespunz|toare
aceluiaÕi produs într-o lun|. Dac| doriÛi ca valorile s| fie afiÕate ordonate, cresc|tor, dup|
numele produsului, pentru coloana ProductName, selectaÛi din Sort pe Ascending.
0264-401667
NU COPIA !.
Propriet|Ûile interog|rilor
sau suna la:
La crearea unei interog|ri, propriet|Ûile ei pot fi setate din View, Properties. Acestea depind
de tipul interoga7 rii care se creeaza7 s- i de tabelul sau câmpul cu care se lucreeaza7 . Câteva dintre
proprieta7 -tile mai importante sunt prezentate în tabelul care urmeaz|:
Proprietate Descrierea Q S C U D M A
u e r p e a p
e l o d l k p
r e s a e e e
y c s t t - n
t t e e T d
a a
b b
l
e
Description Text care descrie interogarea X X X X X X
125 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
Top Values Num|rul de valori "maxime" sau "minime" X X X
care vor fi întoarse
Unique Values Întoarce numai valori unice în câmpurile X X X
mulÛimii dinamice
Unique Records Întoarce numai înregistr|ri unice în câmpurile X X X X
mulÛimii dinamice
Run Permissions StabileÕte drepturile utilizatorului specificat X X X X X X
Acest curs este proprietatea lui
name
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
Interoga7 ri pentru întreÛinerea bazelor de date
Access are dou| generatoare pentru întreÛinerea bazelor de date:
! Find Duplicate Query Wizard: afiÕeaz| înregistr|rile duplicate, într-un
singur tabel, pe baza unui câmp al tabelului;
! Find Unmatched Query Wizard: afiÕeaz| toate înregistr|rile care nu au
înregistr|ri corespondente într-un alt tabel.
Acest curs este proprietatea lui
Find Duplicate Query Wizard acÛioneaz| asupra unui singur tabel, iar Find Unmatched
Query Wizard compar| înregistr|rile unui table cu cele ale unui alt tabel. Aceste generatoare
sunt afiÕate în lista generatoarelor disponibile atunci când se începe o nou| interogare.
ANTAL Tiberiu Alexandru.
referent-iale, acest tip de interogare va raporta înregistra7 rile care violeaza7 intergritatea.
sau suna la:
127 7 ri - cursul 6
Introducere în Microsoft Access: Interoga
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Opt-iune Descriere
Show Table Names Afis- eaza7 rândul Table în QBE pentru Yes
Output All Fields Afis- eaza7 toate câmpurile surselor de date sau numai câmpurile
din panoul QBE
Enable AutoJoin Foloses- te numele comune de câmpuri pentru crearea automata7
0264-401667
NU COPIA !.
Obiectivele cursului 7
http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
Wizard);
! cum se utilizeaz| vizualiz|rile în modurile de proiectare (Design View),
de formular (Form View) Õi de vizualizare înainte de tip|rire (Print Preview)
ANTAL Tiberiu Alexandru.
ale formularelor;
! cum se creeaz| un formular f|r| Generator;
Pt. cumparare viziteaza:
Formulare (Forms)
http://www.east.utcluj.ro/mb/mep/antal
• Formularele furnizeaz| o metod| prietenoas| de vizualizare a datelor,
acestea pot fi afiÕate folosind diferite tipuri de caractere Õi culori, în afara
acestora mai pot conÛine Õi imagini sau desene;
• Formularele se folosesc pentru afiÕarea Õi tip|rirea datelor;
• Formularele se folosesc pentru ad|ugarea, modificarea Õi Õtergerea
întegistr|rilor din baza de date.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Tabelele furnizeaz| o modalitate convenabil| pentru stocarea datelor, iar interog|rile permit
extragerea unor date care satisfac nevoi particulare.Vizualiz|rile în mod foaie de date
(Datasheet View) a tabelelor Õi interog|rilor furnizeaz| modalit|Ûi pentru afiÕarea Õi
introducerea datelor. Formularele dau utilizatorului mai mult| putere în controlul datelor din
baz|, furnizând în acelaÕi tip Õi o interfaÛ| vizual| mai atractiv|. 0264-401667
NU COPIA !.
În faza de proiectare a formularelor, o varietate de tehnici cum sunt texte adiÛionale, m|rimi Õi
stilul de caractere, culori, imagini scanate, desene, grafice, butoane de comand| care pot fi
folosite pentru a deschide noi formulare sau a închide formulare deschise sau pentru a lansa
interog|ri sau pentru a derula alte operaÛii, sunt folosite pentru a da o nou| imagine procesului
de manipulare a datelor.
Toate datele unui formular au ca surs| unul sau mai multe tabele din
Ce aduc în plus
formularele? baza de date. Structura tabelelor nu este afectat| de proiectul
formularului, dar datele din tabel pot fi modificate prin acÛiuni lansate
în cadrul formularului.
130 Introducere în Microsoft Access: Formulare - cursul 7
http://www.east.utcluj.ro/mb/mep/antal
• antetul formularului (form header): se afis- eaza7 la începutul ferestrei;
• sect-iunea detaliu (detail section): cont-ine controale pentru manipularea
valorilor stocate în sursa de date (tabel sau interogare) - este o sect-iune obligatorie;
• sfârs- itul formularului (form footer): este zona din subsolul formularului.
0264-401667
NU COPIA !.
• în fereastra bazei de date (Database window) clic pe butonul Tables sau Queries;
• clic pe numele tabelului sau interog|rii pe baza c|ruia se va construi formularul sau
• deschideÛi tabelul sau interogarea în orice mod de vizualizare;
http://www.east.utcluj.ro/mb/mep/antal
• clic pe AutoForms ( ) din meniul Insert.
Dup| ce formularul a fost creat, este deschis automat în modul de vizualizare al datelor (Form
View) Õi este gata pentru introducerea sau modificarea datelor din tabel. Dac| în baza de date
Northwind.mdb veÛi selecta tabelul Categories, veÛi obÛine formularul urm|tor:
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Dac| doriÛi s| închideÛi formularul, Access-ul va lansa un dialog pentru confirmarea salv|rii
lui în baza de date.
Este posibil| crearea unui formular cu ajutorul Generatorului de Formulare (Form Wizard).
sau suna la:
Metoda este direct| Õi destul de simplu de utilizat. Proiectul formularului obÛinut se va putea
modifica ulterior.
• în
Pentru a crea un
formular cu Form fereastra bazei
Wizard de date
(Database
Window) clic pe
butonul Forms;
• ap|saÛi butonul New Õi cutia de
dialog New Form va fi afiÕat|:
• selectaÛi Form Wizard;
• selectaÛi un tabel sau o
interogare care va fi sursa de date
pentru formularul care urmeaz| s| fie
creat - eu am selectat tabelul Employees
132 Introducere în Microsoft Access: Formulare - cursul 7
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• clic pe câmpul care doriÛi s| apar| pe formular, apoi clic pe s|geata la dreapta (>)
pentru ca s| fie ad|ugat în secÛiune câmpurilor selectate (Selected Fields);
• repetaÛi procedura de mai sus pentru fiecare câmp care doriÛi s| apar| pe formular;
Dac| este cazul, puteÛi folosi s|geata în jos din secÛiune Tables/Queries a cutiei de dialog
pentru a selecta o surs| de dat| diferit| care va conÛine alte câmpuri;
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
• pentru vizualizarea
formularului în mod proiectare
(Design View), clic pe meniul
View ( ) în timp ce
135 Introducere în Microsoft Access: Formulare - cursul 7
Modul de vizualizare formular sau, mai pe scurt, modul formular este cel pentru care s-a creat
http://www.east.utcluj.ro/mb/mep/antal
formularul. În acest mod se pot introduce sau modifica datele din tabelele Õi interog|rile care
sunt sursele de date ale formularului.
Vizulalizare înainte de tip|rire (Print Preview) permite afiÕarea pe ecran a formei în care se
va tip|ri la imprimant| conÛinutul unui formular.
Vizualizarea
înainte de tiparire
(Print Preview) Pe ecran se va afiÕa o pagin| de imprimant| cu un conÛinut de forma:
Pt. cumparare viziteaza:
0264-401667
NU COPIA !.
În exemplul care urmeaz| voi folosi tabelul Employees din baza de date Northwind.mdb
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• din list| selectaÛi vizualizarea în mod proiectare (Design View), apoi clic pe s|geata
în jos Õi selectaÛi tabelul sau interogarea care va fi sursa de date pentru formular;
Pt. cumparare viziteaza:
• clic pe butonul OK Õi proiectul formularului va fi vizualizat pe ecran.
0264-401667
NU COPIA !.
În exemplul care urmeaz| am folosit formularul Orders din baza de date Nortwind.mdb. În
137 Introducere în Microsoft Access: Formulare - cursul 7
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
• dac| liniarul nu este afiÕat, din meniul View, clic pe comanda Ruler. Dac| liniarul
este afiÕat, un clic pe aceeaÕi comand| va duce la ascunderea lui. Un articol de meniu care are
dou| st|ri distincte Õi stabile, între care comut| la selectare, se numeÕte articol bistabil.
http://www.east.utcluj.ro/mb/mep/antal
AfiÕarea listei de propriet|Ûi (Properties) a unui obiect de pe suprafaÛa formularului
Fiecare obiect de pe suprafaÛa formularului are un set de caracteristici denumite propriet|Ûi.
Acestea sunt afiÕate de Access într-o fereastr| special| sub forma unei liste. Unele propriet|Ûi
pot fi modificate de utilizator arbitrar, altele pot lua numai valori particulare care se pot
selecta din liste speciale.
• pentru afiÕarea listei de propriet|Ûi clic pe Properties din meniul View sau
• din bara de instrumente Form Design, clic pe .
Acest curs este proprietatea lui
Lista câmpurilor pentru formularul Orders, care are ca surs| de date interogarea cu numele
Orders Qry, se prezint| sub forma:
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
este compus dintr-o etichet| (Label) Õi o cutie text (Text box). Eticheta este titlul câmpului
afiÕat pe suprafaÛa formularului Õi se g|seÕte stocat| în proprietatea titlu (Caption) din lista de
propriet|Ûi ale etichetei. Cutia text va stoca datele dintr-un tabel.
Rolul controalelor
Controalele se folosesc pentru introducerea -si afis- area datelor, de asemenea, se mai folosesc
pentru afis- area informat-iilor statice. Fromularele -si rapoartele lucreaza7 cu aceles- i controale. În
cele ce urmeaza7 vor fi discutate controalele pentru formulare. Controalele sunt în realitate
Acest curs este proprietatea lui
ferestre, asemenea tuturor celorlate elemente ale unei aplicat-ii Windows. Le fel ca -si orice alta7
ferestra7 , controlul, poate primi date de la utilizator numai daca7 este activ (are focalizarea). De
exemplu, pentru ca utilizatorul sa7 poata7 introduce date într-o Cutie Text, aceasta trebuie sa7 fi
fost selectata7 în prealabil de utilizator sau printr-o secvent-a7 de program. Unele controale pot
lua valori specificate în timpul proiecta7 rii de ca7 tre utilizator sau în timpul execut-iei aplicat-iei
prin anumite secvent-e de program. Valoarea controlului este cea afis- ata7 de acesta, de
ANTAL Tiberiu Alexandru.
exemplu, o Cutie Text este valoarea afiÕata7 în interiorul cutiei. Toate controalele au
proprieta7 -ti pe care aplicat-ia le poate citi -si modifica.
Pt. cumparare viziteaza:
Editarea controalelor
PoziÛionarea Õi redimensionarea unui control este mai uÕoar| dac| se foloseÕte grila (Grid).
arat|.
• trageÛi cutia pe noua poziÛie, apoi eliberaÛi butonul mouse-ului.
http://www.east.utcluj.ro/mb/mep/antal
Nota7 : Dac|, atunci când faceÛi clic pe un control, menÛineÛi ap|sat butonul din stânga,
cursorul va lua forma mâinii deschise Õi controlul va putea fi mutat imediat.
Nota7 : Dac| aÛi selectat o etichet| Õi ap|saÛi Delete, se va Õterge numai eticheta. Dac| aÛi
selectat o cutie text, la ap|sarea lui Delete se va Õterge atât cutia cât Õi eticheta
Pt. cumparare viziteaza:
corespunz|toare ei.
Nota7 : Dac| repoziÛionaÛi controlul duplicat Õi selectaÛi din nou Duplicate, Access-ul va crea
un al treilea control care va fi poziÛionat aÕa încât cele trei controale s| fie egal distanÛate.
• selectaÛi Cut sau Copy din meniul Edit pentru a plasa controlul în Clipboard;
sau suna la:
• selectaÛi Paste din Edit. Controlul va fi plasat în colÛul din stânga sus al secÛiunii de
detalii a formularului;
• mutaÛi controlul în poziÛia dorit|;
• selectaÛi alinierea (Align) din meniul Format, apoi selectaÛi opÛiunea de aliniere dorit|
din submeniul: .
http://www.east.utcluj.ro/mb/mep/antal
Pentru a modifica spaÛierea dintre controale
• selectaÛi controalele care doriÛi s| fie spaÛiate;
• selectaÛi spaÛiere orizontal| (Horizontal Spacing) sau spaÛiere vertical| (Vertical
Spacing) din meniul Format;
Acest curs este proprietatea lui
• selectaÛi m|reÕte (Increase), micÕoreaz| (Decrease) sau f|-le egale (Make Equal) din
submeniul: .
ANTAL Tiberiu Alexandru.
• poziÛionaÛi cursorul peste marginea din dreapta a oric|rei secÛiuni din formular.
sau suna la:
Cursorul va lua forma unei linii orizontale cu dou| s|geÛi la capete suprapus| peste o linie mai
groas| vertical|;
• trageÛi marginea secÛiunii pân| ce ajungeÛi la dimensiunea dorit|.
Tipuri de controale
Controlul legat afiÕeaz| date dintr-un tabel sau interogare. Se folosesc
Controale legate pentru afiÕarea, modificarea Õi ad|ugarea datelor din tabele. Cel mai
(Bound controls) frecvent folosit control legat este Cutia Text (Text box). Controalele
legate moÕtenesc propriet|Ûi ale tabelului de care sunt legate.
Propriet|Ûile controlului pot fi modificate în formular f|r| afectarea
143 Introducere în Microsoft Access: Formulare - cursul 7
http://www.east.utcluj.ro/mb/mep/antal
(Unbound controls) tipul text, linie, dreptunghi sau imagine. De asemenea, poate accepta
date care nu sunt îns| introduse direct într-un tabel.
Cutie Text (Text Box) Este cel mai utilizat control pe formulare. Se
foloseÕte pentru afiÕarea conÛinutului unui câmp
Õi permite introducrea de la tastatur| de date noi
http://www.east.utcluj.ro/mb/mep/antal
în câmp.
Grup de OpÛiuni Controlul d| posibilitatea selecÛiei unei singure
(Option Group) opÛiuni dintr-un grup. SelecÛia unei opÛiuni din
grup le exclude automat pe celelalte.
http://www.east.utcluj.ro/mb/mep/antal
modifica la deplasarea pe o alt| înregistrare.
Chenar de Obiect Legat Se foloseÕte când doriÛi s| afiÕaÛi un obiect OLE
(Bound Object Frame) sau o imagine ataÕat| unei înregistr|ri. Permite
ad|ugarea sau editarea imaginii sau obiectului,
înregistrare cu înregistrare.
Terminator de Pagin| Controlul defineÕte:
(Page Break) • acÛiuni la ap|sarea tastelor Page
Acest curs este proprietatea lui
Up/Page Down;
• defineÕte linia de sus a paginii noi la
tip|rirea formularului.
Control Tab Permite definirea unui control organizat pe
ANTAL Tiberiu Alexandru.
pagini de forma:
Pt. cumparare viziteaza:
organizat.
146 Introducere în Microsoft Access: Formulare - cursul 7
Alte Controale
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
iniÛial| a Cutiei
Left PoziÛia colÛului stâng a controlului Specific| poziÛia controlului
în sistemul de unit|Ûi curent pe axa orizontal|
Top PoziÛia colÛului de sus a Specific| poziÛia controlului
controlului în sistemul de unit|Ûi pe axa vertical|
curent
Acest curs este proprietatea lui
Width L|Ûimea controlului în sistemul de
unit|Ûi curent
Height În|lÛimea controlului în sistemul
de unit|Ûi curent
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Font Underline Yes/No Caractere subliniate în
control
Text Align General (implicit), Left, Center, Seteaz| alinierea pentru
Right textul din control
Reading Order Context, Left-to-Right, Right-to- Determin| ordinea de citire
Left a caracterelor pe baza limbii
Determin| limbajul de la
Acest curs este proprietatea lui
Keyboard Language System, English
tasatatur| pentru
introducerea de date în
control
Scroll Bar Align System, Right, Left Barele pentru defilare pot fi
ANTAL Tiberiu Alexandru.
controlului în inchi
sau suna la:
În figura ce urmeaz| se prezint| un formular care conÛine mai multe controale Etichet|.
Proprietatea Caption conÛine textul pe care controlul îl afiÕeaz| pe ecran. ÎncercaÛi s| creaÛi
formularul aÕa încât s| fie, în mod formular, vizualizat întocmai ca Õi în figur|. La sfârÕitul
capitolului sunt prezentate toate propriet|Ûile specifice unui formular, o parte trebuie dintre ele
modificate pentru ca aspectul formularului nou s| fie acelaÕi cu cel din exemplu. Propriet|Ûile
formularului vor fi vizibile dac| în modul proiectare se face clic în afara secÛiunilor
149 Introducere în Microsoft Access: Formulare - cursul 7
formularului, apoi clic pe butonul din dreapta Õi din list| selectaÛi Properties.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
un câmp
Inserarea unei valori într-un câmp Deplasat-i punctul de inserare, tastat-i noua data7
Selectarea întregului câmp F2 sau clic dublu
Înlocuirea unei valori existente cu una Selectat-i întregul câmp, apoi introducet-i valoarea
noua7 noua7
Înlocuirea valorii curente, cu cea Cltr+' (apostrof)
Acest curs este proprietatea lui
precedenta7 , introdusa7 într-un câmp
Înlocuirea valorii curente cu cea Ctrl+Alt+Spat-iu
implicita7
Inserarea datei curente în câmp Ctrl+;
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Continuous Form O înregistrare pe pagina7
http://www.east.utcluj.ro/mb/mep/antal
Auto Resize Formularul se deschide
pentru afis- area completa7 a
înregistra7 rii (Yes.No)
Auto Center Centreaza7 formularul la
deschidere (Yes/No)
Border Size Determina7 stilul marginii
Acest curs este proprietatea lui
formularului
colt-ul dreapta-sus al
sau suna la:
formularului
http://www.east.utcluj.ro/mb/mep/antal
Width Afis- eaza7 la7 -timea
formularului; se poate
introduce sau Access o
calculeaza7 pe ma7 sura7 ce se
creeza7 formularul
Picture Numele fis- ierului imagine
bitmap pentru fondul
Acest curs este proprietatea lui
formularului
Picture Type Determina7 daca7 imagimea
este inclusa7 sau legata7
Embedded
formular -si devine parte a
bazei de date
Pt. cumparare viziteaza:
imaginii (neproport-ional) ca
sa7 încapa7 în formular
http://www.east.utcluj.ro/mb/mep/antal
colt-ul stânga-sus a
formularului, raportului sau
a controlului de tip imagine
formularului
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
Yes Caractere de imprimanta7
No Caractere de ecran
Subdatasheet Height Determina7 îna7 lt-imea subfoii
de date expandate
Subdatasheet Expanded Determina7 starea salvata7 a Yes - Starea salvata7 a
Acest curs este proprietatea lui
No - Starea salvata7 a
subfoilor de date este închisa7
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
înregistra7 rile deja salvate
(Yes/No)
Allow Deletions Permite sau opres- te s- tergere
înregistra7 rilor (Yes/No)
Allow Additions Permite sau opres- te
ada7 ugarea de noi înregistra7 ri
(Yes/No)
Acest curs este proprietatea lui
multi-utilizator
http://www.east.utcluj.ro/mb/mep/antal
alte formulare; inactiveaza7
celelalte ferestre; pentru
valoarea Yes, Modal
inactiveaza7 meniurile -si
barele cu instrumente
generând o fereastra7 de
dialog (Yes/No)
Acest curs este proprietatea lui
Cycle Determina7 efectul lui Tab în
ultimul câmp al înregistra7 rii
http://www.east.utcluj.ro/mb/mep/antal
Tag Extra informat-ii despre
formular
Allow Design Changes Determina7 când se pot face
modifica7 ri de proiectare
0264-401667
NU COPIA !.
Obiectivele cursului 8
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
http://www.east.utcluj.ro/mb/mep/antal
! cum se creeaz| un control de tipul cutie combinat| (Combo Box) folosind
cutia cu instrumente (Toolbox);
! cum se utilizeaz| Constructorul de Expresii (Expression Builder) pentru
crearea unui câmp calculat;
! cum se introduce un subformular (Subform) într-un formular;
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Crearea controalelor este mult simplificat| prin utilizarea cutiei cu instrumente. Pentru a
ilustra principiul vom crea un tip de control relativ complex, numit cutie combinat|. Acest tip
de control permite, fie s| se introduc| o valoare de la tastatur|, fie s| se efectueze clic pe o
s|geat| în jos, care va duce la desf|Õurarea unei liste de valori predefinite din care se poate
selecta valoarea dorit|. Denumirea de cutie combinat| se datoreÕte faptului c| acest control
unific| comportamentul a dou| controale distincte: controlul cutie de text (Text Box) Õi
controlul cutie de list| (List Box).
În exemplul care urmeaz|, se va folosi baza de date Northwind în care se va crea un formular
nou pentru ilustrarea procedurii de creare a controalelor.
0264-401667
NU COPIA !.
Dac| cutia cu instrumente (Toolbox) nu este afiÕat| automat, efectuaÛi clic pictograma
din bara de instrumente (Toolbar).
• ap|saÛi butonul stâng al mouse-ului Õi Ûinându-l ap|sat deplasaÛi cursorul spre stânga
jos. VeÛi defini astfel un dreptunghi care reprezint| dimensiunea controlului pe suprafaÛa
formularului;
http://www.east.utcluj.ro/mb/mep/antal
• eliberaÛi butonul stâng al mouse-ului Õi urm|toarea fereastr| de dialog va fi afiÕat|:
• clic pe butonul Next pentru a continua. OpÛiunea selectat| mai sus (I want the combo
box to look up the values in a table or query.) va permite înc|rcarea listei de valori
predefinite ale cutiei dintr-un tabel sau o interogare;
• urm|toarea fereastr| de dialog afiÕat| permite definirea sursei pentru datele pe care
cutia le va afiÕa;
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Urm|toarea fereastr| de dialog care va fi afiÕat| permite controlul l|Ûimii (width) cutiei
combinate.
0264-401667
NU COPIA !.
• în acest caz, cutia trebuie s| fie suficient de lat| ca s| asigure afiÕarea complet| a
tuturor valorilor din list|. Dac| aceast| condiÛie nu este îndeplinit|, poziÛionaÛi cursorul pe
marginea din dreapta a coloanei CategoryName Õi trageÛi marginea spre dreapta pân| ce veÛi
obÛine l|Ûimea dorit|;
163 Introducere în Microsoft Access: Crearea controalelor - cursul 8
http://www.east.utcluj.ro/mb/mep/antal
• ultima fereastr| de dialog permite definirea etichetei asociate cutiei combinate;
0264-401667
NU COPIA !.
Pentru a vizualiza formularul aÕa cum îl vede un utilizator, clic pe pictograma View din
bara de instrumente principal| Õi selectaÛi Form View .
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Pentru a folosi nou creata cutie combinat| clic pe s|geata în jos, iar lista valorilor predefinite
va fi afiÕat| sub forma:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
altele apar pe m|sur| ce noi controale sunt ad|ugate unor secÛiuni. Indiferent de felul acestora,
propriet|Ûile pot fi modificate de cel care dezvolt| formularul. În continuare voi prezenta o
parte din propriet|Ûile unui formular, pentru a înv|Ûa mai multe despre acestea folosiÛi
sistemul de ajutor interactiv (on-line help). DeschideÛi orice formular, apoi vizualizaÛi
formularul în mod proiectare. Pentru exemplul care urmeaz|, din baza de date Northwind,
voi folosi formularul Employees.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
• clic pe butonul din dreapta o singur| dat|, apoi selectaÛi
Properties din list|;
• modificaÛi proprietatea dorit| f|când clic în regiunea din dreapta, pe linia propriet|Ûii
de modificat, unde veÛi introduce noua valoare dorit|.
0264-401667
NU COPIA !.
Dup| ap|sarea lui Next, la forma formularului se va selecta Tabular, iar numele sub care se
salveaz| va fi FOrder Details. Dup| ap|sarea lui Finish, formularul va fi afiÕat pe ecran
astfel:
167 Introducere în Microsoft Access: Crearea controalelor - cursul 8
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
Din bara cu instrumente (Toolbox) selectaÛi controlul Text Box apoi poziÛionaÛi cursorul de
0264-401667
NU COPIA !.
mouse undeva în dreapta formularului, în afara spaÛiului lui, pe o linie cu colÛul din dreapta
sau suna la:
creÕte automat Õi în secÛiunea detaliilor (Detail) apare un nou control care are scris în el
168 Introducere în Microsoft Access: Crearea controalelor - cursul 8
Unbound. El are asociat| Õi o etichet|, aceasta nefiind necesar| va fi Õtears| (în figura
anterioar|, eticheta este pus| peste controlul Quantity; este suficient s| ne poziÛion|m cu
mouse-ul pe ea, clic pe butonul stâng apoi ap|saÛi tasta Delete pentru Õtergerea ei). AfiÕ|m
http://www.east.utcluj.ro/mb/mep/antal
lista propriet|Ûilor noului control Õi în locul lui Text10, scriem Total. Prin aceasta
proprietatea Name primeÕte valoarea Total. Ap|s|m tasta Tab, apoi facem clic pe butonul
din dreapta câmpului gol pentru lansarea Constructorului de Expresii.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Crearea unui câmp • din prima list| selectaÛi obiectul care conÛine controalele sau
calculat folosind câmpurile care vor participa în expresie. Pentru exemplul actual,
Constructorul de
Access-ul selecteaz| automat formularul curent - FOrder Details -
Expresii
169 Introducere în Microsoft Access: Crearea controalelor - cursul 8
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
• clic pe butonul New;
• selectaÛi Generatorul de Formulare (Form Wizard);
• selectaÛi tabelul Products ca surs| de date pentru formular dup| cum se vede mai jos:
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Finish.
0264-401667
NU COPIA !.
• prima oar| veÛi crea un spaÛiu pe formular în care s| fie pus subformularul;
• mutaÛi cursorul de mouse în colÛul din drepta jos a ferestrei formularului Õi trageÛi de
margine pentru a face fereastra mai mare;
• mutaÛi cursorul de mouse pe marginea de sus a barei Form Footer Õi trageÛi bara în jos
pentru a face spaÛiu suficient pentru subformular. Ecranul va avea o form| asem|n|toare cu
cea din figura care urmeaz|:
172 Introducere în Microsoft Access: Crearea controalelor - cursul 8
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• acum suntem gata pentru inserarea subformularului. Dac| cutia cu instrumente nu este
deja afiÕat|, clic pe pictograma Toolbox pentru afiÕare; 0264-401667
• clic pe pictograma Subform/Subreport din cutia cu instrumente;
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
subformular. Pentru exemplul nostru veÛi selecta un formular existent Orders Subform;
• clic pe butonul Next pentru a continua, urm|toarea pagin| va fi afiÕat| dup| cum
urmeaz|:
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Subformularele sunt folosite pentru afis- area într-o singura7 fereastra7 a cont-inutului tabelelor
aflate în relat-ie 1º M. Între tabele Products s- i Order Details exista7 o relat-ie 1º M prin 0264-401667
intermediul câmpului ProductID. Tabelul în care se afla7 cheia primara7 va fi sursa de date
NU COPIA !.
pentru formular, iar tabelul în care se afla7 cheia stra7 ina7 va fi sursa de date pentru subformular.
sau suna la:
Cînd se navigheaza7 printre înregistra7 rile formularului, înregistra7 rile afis- ate în subformular se
modifica7 continuu fiind afis- ate numai acelea care corespund valorilor curente din cîmpul de
lega7 tura7 . Mai sus, pentru prima înregistrare din formular ProducID ia valoarea 1, în
subformular vor fi afis- ate numai acele înregistra7 ri care au în ProducID s- i ele egale cu 1.
Nume SemnificaÛie
Default Value Aceast| valoare este automat inserat| în fiecare înregistrare nou|.
http://www.east.utcluj.ro/mb/mep/antal
Utilizatorul poate introduce pe locul acesteia o alt| valoare dac| este
cazul.
Validation Rule O expresie care limiteaz| domeniul de valori care poate fi introdus.
De exemplu, în cazul unui Salar poate fi >0 and < 1000000. Orice
valoare în afara acestui domeniu nu va fi acceptat|.
Validation Text Un mesaj care va fi afiÕat dac| regula de validare este înc|lcat|.
Acest curs este proprietatea lui
Aceste propriet|Ûi pot fi setate Õi la momentul proiect|rii tabelului. De asemenea, este posibil
ca regulile de validare s| fie diferite decât cele din controalele formularului.
Nota7 : Generatorul M|Õtilor de Intrare se poate folosi numai cu controale de tipul dat| sau
text.
http://www.east.utcluj.ro/mb/mep/antal
controalelor de pe formular în ordinea Tab;
Dac| aceste variante nu sunt suficiente, folosind tehnica tragerii, se poate prinde un nume de
câmp Õi trage pe poziÛia dorit| în list|.
http://www.east.utcluj.ro/mb/mep/antal
butonul de comad| All.
• comutaÛi în mod proiectare (Design View) prin clic pe pictograma View din bara de 0264-401667
instrumente standard Õi selectaÛi Design View;
NU COPIA !.
• dac| cutia cu instrumente nu este afiÕat|, afiÕaÛi cutia cu instrumete Toolbox prin clic
pe pictograma Toolbox;
• clic pe pictograma Command Button din cutia cu instrumente Toolbox;
• folosiÛi tehnica de tragere cunoscut| deja pentru a desena un dreptunghi mic sub
eticheta Description a formularului;
• când eliberaÛi butonul mouse-ului, veÛi vedea prima fereastr| din Generatorul
Butoanelor de Comand| (Command Button Wizard);
• exist| un num|r de categorii (Categories), fiecare categorie având un num|r
disponibil de acÛiuni (Actions). Fiecare acÛiune are definit| câte o pictogram| care poate fi
folosit| pentru butonul nou creat;
• pentru cazul exemplului nostru selectaÛi categoria Form Operations - OperaÛii cu
Formulare;
• din categoria Form Operations, selectaÛi acÛiunea Close Form - Închide Formular.
Pagina din Generator este afiÕat| în figura care urmeaz|;
178 Introducere în Microsoft Access: Crearea controalelor - cursul 8
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
când aceasta este vizualizat| în mod formular. Pentru a folosi întreruperile de pagin| trebuie
s| setaÛi proprietatea DefaultView a formularului la valoarea Single Form.
http://www.east.utcluj.ro/mb/mep/antal
Ada7 ugarea unei • clic pe instrumentul Page Break din cutia cu instrumente
întreruperi de (Toolbox);
pagina7 • clic în formular pe poziÛia în care doriÛi s| puneÛi întreruperea
de pagin|, atenÛie s| nu t|iaÛi prin întrerupere un control;
• un rând de 6 puncte va fi afiÕat pe marginea din stânga pentru a
indica întreruperea de pagin|.
Exemplul urm|tor are ca suport modelul relaÛional obt-inut ca urmare a normaliz|rii prezentate
în cursul 3.
Tabele Õi relaÛii
Numele tabelelor Õi câmpurilor care vor fi create se prezint| în continuare:
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ObservaÛi c| opÛiunea Cascade Delete Related Record este invalidat| pentru c| nu dorim s| 0264-401667
se Õterg| înregistr|rile asociate din TContacte1, dac| cumva se Õterge un tip de contact din
NU COPIA !.
TTipContact.
sau suna la:
Formulare
Primul formular care va fi creat va avea
ca surs| de date tabelul TTipContact Õi se
va salva sub numele de FTTipContact.
http://www.east.utcluj.ro/mb/mep/antal
design of form 'Form1') selectaÛi
butonul Yes, apoi în noua fereastr|, la
Form Name introduceÛi FTTipContact
Õi faceÛi clic pe pe OK. Observat-i ca7 în
colt-ul din stânga sus este afis- at implicit
numele sursei de date. Modificarea
proprieta7 -tii Caption a formularului
permite afis- area unui alt text în locul
Acest curs este proprietatea lui
celui implicit.
aceasta.
Pt. cumparare viziteaza:
În pagina urm|toare, ambele câmpuri
vor fi selecate pentru afis- are în
formular. În varianta finala7 , câmpul
Nume Contact va fi afiÕat în
formular, iar câmpul IDContact va
fi fa7 cut invizibil prin setarea
proprieta7 -tii Visible la No. În ultima
pagin| a generatorului, acolo unde se
cere numele formularului, specificaÛi
numele FTContacte. Noul formular va fi afiÕat pe ecran gata pentru introducerea datelor.
ComutaÛi pe vizualizarea în mod proiectare Õi faceÛi loc pe suprafaÛa formularului pentru a
insera un control de tipul Subform care va avea ca surs| de date tabelul cu numele 0264-401667
TContacte1. Access va crea un subformular care va avea ca surs| de date interogarea de mai
NU COPIA !.
sus. Atunci când Access va cere numele sub care s| salveze interogarea acceptaÛi numele
implicit de TContacte1 subform. RealizaÛi oriunde pe suprafaÛa subformularului clic dublu,
Access va deschide automat, în mod
proiectare, subformularul salvat. VeÛi
avea trei controale Text Box pe
suprafaÛa acestuia cu numele:
IDContact, IDInfoContact Õi Info
Contact. SelectaÛi controlul Text Box
cu numele IDInfoContact, apoi faceÛi
clic pe butonul din drepta. Din meniul
Change To selectaÛi Combo Box.
ObservaÛi c| Text Box s-a transformat
într-un control Combo Box. VizualizaÛi
lista propriet|Ûilor controlului
IDInfoContact. Acesta poate stoca o
valoare numeric| în tabelul TContacte1
care are întotdeauna un corespondent în tabelul TTipContact. Pentru noi ar fi mai simplu ca pe
183 Introducere în Microsoft Access: Crearea controalelor - cursul 8
http://www.east.utcluj.ro/mb/mep/antal
lista afiÕat| în Combo Box. Tabelul care urmeaz| prezint| lista propriet|Ûilor Õi semnificaÛia
lor necesare pentru a face cele descrise mai sus.
control
Column Widths 0";3" L|Ûimea celor dou| coloane. L|Ûimea pentru
prima coloan| este 0, adic| ea nu se vede.
ANTAL Tiberiu Alexandru.
IntroduceÛi numele de contact Vasile Aioanei Õi informaÛiile de contact conform figurii care
urmeaz|. Observat-i ca7 , în figura7 ,controlul IDContact nu este vizibil în subformular întrucât
Pt. cumparare viziteaza:
0264-401667
NU COPIA !.
el a fost ascuns (se realizeaza7 clic pe numele câmpului pentru a selecta coloana, apoi clic pe
butonul din dreapta, din lista7 selectat-i Hide Columns). Totul ar fi în ordine dac| nu va fi
necesar s| folosim cândva un tip de contact care nu este introdus în tabelul TTipContact.
Rezolvarea acestei situaÛii se face ad|ugând în secÛiunea Form Footer a formularului un
buton de comand| care dac| este ap|sat va deschide primul formular (FTTipContact) creat
pentru a permite introducerea unui nou tip de contact. Ôi în acest caz putem fi asistaÛi de un
generator, este suficient s| facem clic pe pictograma Command Button din Toolbox Õi s|
poziÛion|m mouse-ul undeva sub bara pe care scrie Form Footer Õi care marcheaz| începutul
acestei zone. Generatorul va scrie automat codul corespunz|tor deschiderii unui formular dac|
la categorii (Categories) selectaÛi operaÛii cu formulare (From Operations), iar la acÛiuni
(Actions) Open Form (deschide un formular).
La ap|sarea butonului Next veÛi selecta dintr-o list| numele formularului care va fi descris,
adic| pe FTTipContact, apoi folosiÛi Next pân| când ajungeÛi la pagina din figura care
184 Introducere în Microsoft Access: Crearea controalelor - cursul 8
urmeaz|.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Aici puteÛi stabili dac| butonul va avea o imagine sau va conÛine un text ce specific| acÛiunea
lui. Pentru exemplul nostru am ales varianta cu text, iar textul afiÕat de buton este: &Adauga
tip contact. La ap|sarea lui Next va fi afiÕat| ultima pagin| a generatorului, aici vom
introduce textul CAdauga pentru numele Command Button-ului, apoi vom ap|sa Finish.
0264-401667
NU COPIA !.
Ca exerciÛiu, vom mai ad|uga un buton de comand| care corespunde acÛiunii de închidere a
formularului curent (Close Form). În final formularul, dup| un pic de cosmetic|, va ar|ta ca
s- i în figura anterioara7 .
CunoaÕteÛi deja c| un formular poate avea în spatele lui linii de program. ObservaÛi c| în
cazul când introduceÛi tipuri noi de contacte prin butonul Adauga tip contact, acestea nu vor
185 Introducere în Microsoft Access: Crearea controalelor - cursul 8
fi afiÕate imediat în lista tipurilor de contacte din formularul FTContacte decât dac| îl
închideÛi Õi îl redeschideÛi. Pentru evitarea acestei proceduri trebuie scrise câteva linii de
program în formularul FTipContacte. DeschideÛi formularul în mod proiectare, afiÕaÛi lista
http://www.east.utcluj.ro/mb/mep/antal
propriet|Ûilor formularului Õi pentru proprietarea On Close selectaÛi din list|
[EventProcedure], apoi clic pe butonul din dreapta Õi introduceÛi liniile de program:
ÎnchideÛi fereastra de cod cu liniile de mai sus Õi acceptat-i salvarea lor. Acestea spun lui
Access s| reîmprosp|teze informaÛiile afiÕate în controlul IDInfoContact a
Acest curs este proprietatea lui
subformularului [TContacte1 subform] din formularul FTContacte în momentul
când acesta este închis. ÎnchideÛi fereastra de modul apoi, formularul Õi r|spundeÛi cu Yes,
când se cere salvarea modific|rilor pe care le-aÛi f|cut.
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Obiectivele cursului 9
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
http://www.east.utcluj.ro/mb/mep/antal
! cum se deschid Õi se vizualizeaz| rapoarte existente;
! cum se navigheaz| într-un raport;
! cum se vizualizeaz| întreaga pagin| de raport;
! cum se tip|resc rapoarte;
! cum se creeaz| rapoarte folosind AutoReports;
Acest curs este proprietatea lui
http://www.east.utcluj.ro/mb/mep/antal
ecran sau pot fi tip|rite la imprimant|. Pe ecran se vor afiÕa de obicei foile de date Õi
formularele, conÛinutul acestora fiind r|spunsul la o interogare sau o comand|. Formularele
pot fi Õi ele tip|rite, dar pentru majoritatea cazurilor, tip|rirea rapoartelor asigur| metoda
optim| de prezentare a informaÛiilor. Aceasta este adev|rat mai ales în cazul informaÛiilor care
se prezint| sub forma mai multor înregistr|ri Õi în special pentru cazul când se doresc totale
calculate pe baza datelor din înregistr|ri particulare.
Exist| o multitudine de cazuri pentru folosirea rapoartelor, câteva mai comune ar fi: totale
Acest curs este proprietatea lui
periodice ale vânz|rilor, liste de stocuri, liste de restanÛieri la plat|, facturi.
Un raport are mai multe sect-iuni. Acestea se elaboreaza7 , în faza de proiectare a raportului,
prin pozit-ionarea pe suprafat-a sect-iunii de controale. Unele sect-iuni ale rapoartelor sunt
opt-ionale, altele obligatorii. Cîteva dintre tipurile de sect-iuni mai folosite sunt:
antetul raportului (report header): apare o singura7 data7 , la începutul
ANTAL Tiberiu Alexandru.
•
raportului. Cont-ine, de obicei, elemente constante, valori de câmpuri care se vor afis- a
numai pe prima pagina7 a raportului.
Pt. cumparare viziteaza:
• sfârs- itul raportului (report footer): apare o singura7 data7 , la sfârs- itul raportului.
Va cont-ine elemente constante, funct-ii aplicate asupra tuturor câmpurilor sau valori de
câmpuri care sunt concluzii trase pe marginea datelor din raport.
• sect-iunea detaliu (detail): apare pentru fiecare înregistrare din sursa de date
(tabel sau interogare). Va cont-ine detaliile raportului -si este cel mai des formata7 din
câmpuri -si funct-ii.
• sect-iunea de grupuri (group header & footer): cînd mai multe înregistra7 ri au
aceeas- i valoare într-un câmp se poate realiza gruparea lor pe baza cont-inutului
câmpului. Gruparea se poate realiza numai pentru înregistra7 ri consecutive. Din acest
motiv înregistra7 rile trebuie sa7 fie sortate pe baza valorilor cîmpurilor folosite la
grupare (sortarea -si gruparea din rapoarte nu pot fi separata7 în Access). Fiecare grup
are o sect-iunile de antet (header) s- i sfârs- it (footer). Antetul este folosit folosit pentru 0264-401667
afis- area valorilor pentru care se face gruparea, iar sfârs- itul este folosit pentru afis- area
NU COPIA !.
Cel mai simplu mod de creare al unui raport este folosirea Generatoarelor din Access. Exist|
mai multe variante de rapoarte. Metoda cea mai direct| de creare este AutoReport care
genereaz| un raport din câmpurile unui tabel sau a unei interog|ri la simpla ap|sare a unui
buton. Dintre variantele mai complexe sunt rapoartele de forma unei coloane (Single
Column), rapoarte cu grupuri Õi totale (Groups/Totals) Õi rapoartele de form| tabelar|
(Tabular Reports).
Înainte de a începe s| creaÛi rapoarte singuri, ar fi util s| exploraÛi rapoartele din baza de date
Northwind. Le puteÛi vizualiza în mod previzualizare Õi proiectare pentru a v| forma o idee
188 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
• deschideÛi baza de date Northwind Õi clic pe butonul Reports, dup| cum se vede în
figura care urmeaz|:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
• poziÛionaÛi cursorul de mouse oriunde pe suprafaÛa raportului.
Pentru
vizualizarea Acesta va lua forma unei lupe;
întregii pagini • clic pe butonul stâng al mouse-ului. AfiÕarea raportului se va
modifica aÕa încât toat| pagina s| încap| în ferestra de vizualizare a
raportului;
• clic din nou pe butonul stâng pentru reafiÕarea raportului în forma iniÛial| când numai
o porÛiune este vizualizat| din raport. PoziÛia cursorului de mouse determin| zona din pagin|
Acest curs este proprietatea lui
care va fi vizualizat|.
marginile paginii
sau suna la:
• selectaÛi butonul
Margins;
• fixaÛi marginile dorite modificând valorile
numerice din Top (sus), Bottom (jos), Left
(stânga) Õi Right (dreapta) Õi apoi clic pe butonul
OK.
190 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Page;
• fixaÛi opÛiunile dorite
apoi clic pe OK.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• selectaÛi tabelul sau interogarea care va fi sursa de obiecte Õi de date. Pentru exemplul
prezentat am selectat tabelul Orders;
• selectaÛi AutoReport: Columnar;
• clic pe butonul OK Õi raportul formatat pe coloane va fi generat Õi afiÕat pe ecran.
191 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Adaugarea
• nivelele de grupare vor fi discutate mai târziu în cadrul acestui
0264-401667
NU COPIA !.
nivelelor de
grupare (grouping
levels)
194 Introducere în Microsoft Access: Rapoarte - cursul 9
capitol, pentru moment faceÛi clic pe Next pentru a trece de la pagina afiÕat| mai sus la cea de
selectare a câmpurilor de sortare;
http://www.east.utcluj.ro/mb/mep/antal
• pagina care urmeaz| permite selectarea criteriilor de sortarea
Sortarea
înregistrarilor unui cresc|toare sau descresc|toare a înregistr|rilor din rapoarte;
raport • pentru exemplul prezentat, am selectat sortarea cresc|toare,
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Generatorului;
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
de etichete •
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
• urm|toarea pagin| permite definirea dimensiunilor etichetelor
Definirea
dimensiunii s-i a Õi a hârtiei: de tip pagin| (Sheet feed) sau cu tractor (Continuous). Se
tipului etichetei pot modifica unit|Ûile de m|sur| folosite la afiÕarea dimensiunilor
etichetei Õi din Customize se pot defini noi dimensiuni;
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• dup| ce aÛi selectat opÛiunile dorite clic pe butonul Next pentru a continua;
• pagina care urmeaz| permite definirea tipurilor de caractere:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
• clic pe un câmp din Available fields, apoi pe s|geata la dreapta pentru ad|ugarea
ANTAL Tiberiu Alexandru.
câmpului în etichet|;
• repetaÛi procedura de câte ori este nevoie;
Pt. cumparare viziteaza:
• clic pe Next pentru a continua;
0264-401667
NU COPIA !.
• selectaÛi câmpurile pe baza c|rora se face sortarea, apoi clic pe Next pentru a continua;
• ultima pagin| din Generatror va fi afiÕat|, ea permite definirea numelui de raport;
199 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
butonului ;
0264-401667
NU COPIA !.
• clic pe butonul tipului de grafic pe care doriÛi s|-l realizaÛi, apoi clic pe butonul Next;
• în pagina care urmeaz|, trebuie s| decideÛi asupra modului de aranjare a datelor în
grafic;
201 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• puteÛi folosi tehnica de tragere (drag and drop) cu butoanele din dreapta pentru
modificarea câmpurilor din grafic;
• puteÛi efectua clic dublu pe un buton al graficului pentru a modifica modul de
însumare sau grupare a datelor;
• de exemplu, dac| faceÛi clic pe butonul SumOfSubtotal din stânga sus, pe ecran se va
afiÕa o fereastr| de dialog de forma:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Întrucât interogarea, Sales by Year, care este sursa de date a graficului are doi parametri de
tipul dat|, la afiÕarea raportului cu grafic valorile celor doi parametri sunt ceruÛi prin dou|
ferestre de dialog. Pentru prima dat| introduceÛi valoarea astfel:
Dup| ap|sarea butonului OK, pe ecran se va afiÕa un raport cu grafic de forma (menÛionez c|
rezultatele prezentate în continuare sunt generate folosind baza de date Northwind.mdb care
vine cu Access 97 - în versiunile mai noi de Access, perioada pentru care se face
reprezentarea, va trebui schimbat|):
203 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Rapoarte. Pentru prezentarea unor detalii este util ca înregistr|rile unui raport s| fie grupate pe
baza valorilor stocate în unele câmpuri ale raportului. Pot fi definite cel mult 10 nivele de
grupare într-un raport, dac| doriÛi este posibil ca datele s| Õi fie sortate în cadrul grupului.
204 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
În Access, la nivelul rapoartelor, gruparea -si sortarea nu pot fi despa7 rt-ite. Sortarea ne permite
sa7 vizualiza7 m înregistra7 rile într-o ordine diferita7 de cea de introducere a datelor. Des- i datele
afis- ate de raport ar putea fi sortate folosind o interogare, este mai avantajoasa7 sortarea directa7
din raport. Daca7 , dintr-un oarecare motiv, interogarea ar trebui modificata7 , raportul va
continua sa7 afis- eze datele în ordinea corecta7 . Ala7 turi de sortare, numai în rapoarte, apare
posibilitatea grupa7 rii înregistra7 rilor pe baza valorilor comune din câmpuri. Gruparea permite
crearea a unei perechi antet (header), sfârs- it (footer) de grup.
Înainte de crearea unor grupuri trebuie definita7 ordinea de sortare, pentru cel put-in un câmp al
Acest curs este proprietatea lui
raportului, folosind fereastra de dialog Sorting and Grouping. Ea se afis- eaza7 , în modul
proiectare a raportului, selectând din meniul View pe Sorting and Grouping.
ANTAL Tiberiu Alexandru.
de date a raportului În lipsa unei surse de date, lista pentru select-ia câmpurilor de sortare s- i
sau suna la:
grupare va fi vida7 ;
• selectat-i din lista7 câmpul dorit;
• pentru câmpul selectat, din coloana Sort Order, aleget-i Ascending, pentru sortarea
cresca7 toare sau Descending pentru sortarea descresca7 toare.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
Group On: specifica7 modul de grupare a valorilor. Opt-iunile afis- ate depind de tipul de
data7 a câmpului folosit pentru grupare. La gruparea pe baza unei expresii sunt afis- ate
Pt. cumparare viziteaza:
toate opt-iunile, altfel:
- pentru tipuri de date Text:
! Each Value: gruparea se face pentru aceeas- i valoare în câmp
sau în expresie;
! Prefix Character: gruparea se face pentru primele n
caractere ale câmpului.
- pentru tipuri de date Date/Time:
! Each Value: gruparea se face pentru aceeas- i valoare în câmp
sau expresie;
! Year: gruparea se face pentru datele aceluias- i an calendaristic;
! Qtr: gruparea se face pentru pa7 trimile aceluias- i an
calendaristic; 0264-401667
! Month: gruparea se face pentru datele aceleias- i luni;
NU COPIA !.
! Week: gruparea se face pentru datele din aceeas- i sa7 pta7 mîna7 ;
! Day: gruparea se face pentru datele din aceeas- i zi;
! Hour: gruparea pentru aceleas- i ore;
! Minute: grupare pentru aceleas- i minute.
- pentru tipurile AutoNumber, Currency s- i Number:
! Each Value: gruparea se face pentru aceeas- i valoare în câmp
sau expresie;
! Interval: gruparea se face pentru valorile din intervalul
specificat;
! Group Interval: defines- te un interval valid pentru valorile
câmpului sau expresiei folosite la grupare;
! Keep Together: aceasta7 opt-iune face ca sect-iune de antet sa7
nu fie afis- ata7 la sfârs- itul de pagina7 respectiv sect-iunea de sfârs- it sa7 nu
fie afis- ata7 la începutul unei pagini noi;
! Whole Group: tipa7 res- te atetul -si sfârs- itul de grup pe o singura7
pagina7 ;
! With First Detail: opres- te tipa7 rirea cont-inutului
206 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Access permite modificarea ordinii de sortare -si grupare fa7 ra7 a
Operat-ii
elementare cu modifica controalele individuale corespunza7 toare din atetele -si
sect-iuni -sfârs- iturile asociate unei pagini. Pentru aceasta:
• clic pe bara de select-ie a a câmpului sau a expresiei care dorit-i
sa7 fie muata7 în fereastra Sorting and Grouping;
• clic din nou pe bara7 s- i -tinând apa7 sat butonul stâng traget-i rândul pe noua pozit-ie;
• eliberat-i butonul stâng.
S- tergerea unei sect-iuni de antet sau a unui sfârs- it de pagina7 sau de raport, fa7 ra7 afectarea
Acest curs este proprietatea lui
sorta7 rii, se poate face din View, Page Header/Footer respectiv din View, Report
Header/Footer.
Ascunderea unei sect-iuni are rolul pa7 stra7 rii grupa7 rii datelor fa7 ra7 afis- area informat-iilor legate
de grupul în sine -si se realizeaza7 astfel:
ANTAL Tiberiu Alexandru.
Access permite ada7 ugarea de întreruperi de pagina7 pe baza întreruperilor din grupuri, de
asemenea, se pot insera întreruperi în cadrul sect-iunilor, cu except-ia celor de pagina7 . De
exemplu, daca7 dorit-i ca fiecare grup nou sa7 înceapa7 pe o pagina7 noua7 se va folosi proprietatea
Force New Page. Aceasta poate lua urma7 toarele valori:
! None: nu se fort-eaza7 trecerea la pagina7 noua7 (implicit);
! Before Section: sect-iunea curenta7 se va tipa7 ri la începutul unei noi pagini
pentru fiecare grup nou;
! After Section: sect-iunea urma7 toare se va tipa7 ri la începutul unei noi
pagini pentru fiecare grup nou; 0264-401667
! Before & After: combina7 efectele celor doua7 valori anterioare.
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Crearea de controale
Sunt trei tipuri de controale care pot fi puse pe suprafaÛa unui formular: 0264-401667
1. Controale legate (Bound Controls): se folosesc pentru afiÕarea datelor din câmpurile
NU COPIA !.
tabelelor sau a interog|rilor. Valorile pot fi texte, numere, date, valori de adev|r sau logice,
sau suna la:
imagini sau grafice. Cel mai comun control legat este cutia cu text (Text Box). Este mai
eficient ca prima oar| s| creaÛi controalele legate;
2. Controale nelegate (Unbound Controls): se folosesc pentru afiÕarea unor informaÛii
cum sunt texte, linii, dreptunghiuri Õi imagini. Un control nelegat nu este derivat dintr-un
tabel;
3. Controale calculate (Calculated Controls): rezultatul acestora vine din evaluarea
unei expresii.
http://www.east.utcluj.ro/mb/mep/antal
adiacente clic pe ultimul câmp din grup.
grup de câmpuri ÚineÛi ap|sat| tasta Ctrl în timp ce faceÛi
neadiacente clic pe fiecare câmp dorit.
toate câmpurile din Clic pe bara cu titlul listei de câmpuri.
list|
• trageÛi câmpul sau câmpurile pe suprafaÛa raportului acolo unde doriÛi s| fie plasate.
Acest curs este proprietatea lui
Dac| aÛi selectat mai multe câmpuri, ordinea lor este semnificativ|;
O alternativ| la crearea etichetelor este Ûinerea ap|sat| a butonului stâng Õi desenarea unui
dreptunghi, de orice dimensiune, în care se va putea tasta textul dorit.
•
Modificarea
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Pentru a vedea mai multe propriet|Ûi, folosiÛi bara de defilare, prin selectarea butoanelor de
sus (Format, Data, Event, Other, All) puteÛi vedea numai o parte sau toate propriet|Ûile
obiectului selectat.
CanGrow, CanShrink Specific| dac| textul, secÛiunea unui raport sau subraport îÕi
poate modifica dimensiunile pentru a se acomoda la datele pe
care le afiÕeaz|. Nu se poate folosi pentru începuturi (headers)
Õi sfârÕituri (footers) de pagini.
AplicaÛia 1 cu rapoarte
Vom continua aplicaÛia creat| în cursul 8 prin ad|ugarea a dou| rapoarte: primul va afiÕa
numerele de telefoane în format "carte de telefon", iar al doilea adresele de web Õi poÕt|
electronic| din baza de date. În acest scop trebuie s| cre|m dou| interog|ri care vor fi sursele
de date pentru cele dou| rapoarte.
Interog|ri
CreaÛi interogarea din figura care urmeaz| Õi salvaÛi-o sub numele de QMobilTelefon:
210 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
NU COPIA !. Rapoarte
http://www.east.utcluj.ro/mb/mep/antal
CreaÛi un raport folosind Generatorul parcurgând etapele din figuri.
0264-401667
212 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
CreaÛi cel de al doilea raport având ca surs| de date interogarea QMobilTelefon aÕa încât în
mod proiectare s| cont-ina7 sect-iunile -si controalele din figura urma7 toare.
0264-401667
NU COPIA !.
Observat-i ca7 în fereastra Sorting and Grouping numele câmpului Nume Contact apare de
doua7 ori. Pentru fiecare caz se va afis- a antetul câmpului (proprietatea Group Header va lua
http://www.east.utcluj.ro/mb/mep/antal
valoarea Yes), dar, pentru prima aparit-ie proprieta7 -tile vor fi setate dupa7 cum se observa7 în
figura de mai sus.
Raportul face sortarea înregistr|rilor pe baza celor scrise în fereastra Sorting and Grouping.
Se observ| c| înregistr|rile vor fi grupate pe baza câmpului primului caracter (Prefix
Characters) din câmpul Nume Contact, ceea ce înseamn| c| Access-ul începe un grup
nou de câte ori primul caracter din numele contactelor de schimb|. Când aceasta se petrece va
afiÕa valorile din secÛiunea de sfârÕit a grupului (Group Footer) Õi valorile corespunz|toare
Acest curs este proprietatea lui
secÛiunii de început a urm|torului grup (Group Header). Pentru ca Access-ul s| sorteze
numele de contact în cadrul grupului trebuie ca Nume Contact s| fie ad|ugat din nou în
fereastra Sorting and Grouping. La fiecare început de grup nou, în secÛiunea NumeContact
Header, Access-ul va afiÕa o copie mare a primei litere din numele de contact corespunz|tor
grupului actual. Lista propriet|Ûilor pentru controlul din prima secÛiune Nume Contact
Header este cea din figura al|turat|. Proprietatea nume (Name) are valoarea PimaLitera,
ANTAL Tiberiu Alexandru.
iar cea surs| controlului (Control Source) =Left([Nume Contact], 1). Left() este o
funcÛie care extrage un caracter din primul argument, în cazul de faÛ| valoarea din câmpul
Pt. cumparare viziteaza:
[Nume Contact]. Previzualizarea raportului este prezentat| care urmeaza7 .
0264-401667
NU COPIA !.
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Se observ| c| raportul se întinde pe mai multe pagini. Dac| doriÛi s| folosiÛi modul de afiÕare
Introducere în Microsoft Access: Rapoarte - cursul 9
0264-401667
215 Introducere în Microsoft Access: Rapoarte - cursul 9
pe coloane pentru a
face raportul mai
compact (eliminând
http://www.east.utcluj.ro/mb/mep/antal
risipa de hârtie) faceÛi
set|rile urm|toare,
slectând Coulmns din
Page Setup:
Acest curs este proprietatea lui
AÕezarea Coloanelor (Column Layout) determin| dac| coloanele merg de sus în jos Õi apoi
la dreapta (Down) sau de la stânga la dreapta Õi apoi în jos (Across). RealizaÛi aceste
Pt. cumparare viziteaza:
modific|ri Õi raportul va ar|ta ca în figura urm|toare. Dac| doriÛi ca cele scrise în secÛiunile
header Õi footer s| fie afiÕate pe toat| suprafaÛa raportului (cum este Õi în cazul de faÛ|) trebuie
s| setaÛi l|Ûimea suprafeÛei raportului la l|Ûimea întregului raport, apoi plasaÛi controale în
secÛiunile Detail numai cu l|Ûimea pe care o vor avea coloanele. Nu uitaÛi s| invalidaÛi
opÛiunea Same as Detail Õi s| realizaÛi setarea l|Ûimii controalelor aÕa încât fiecare coloan| s|
încap| în l|Ûinea dat|.
În cazul în care doriÛi ca înregistr|rile unui grup s| fie afiÕate împreun| pe aceeaÕi coloan|, nu
ca în figura urm|toare, unde pentru litera M, acestea sunt sparte pe dou| coloane, comutaÛi pe
vizualizarea în mod proiectare al
raportului, iar în fereastra Sorting and
Grouping, pentru primul câmp Nume 0264-401667
Contact, modificaÛi proprietatea cu
NU COPIA !.
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
217 Introducere în Microsoft Access: Rapoarte - cursul 9
AplicaÛia 2 cu rapoarte
Aplicat-ia care urmeaza7 îs- i propune sa7 gestioneze elevii unei clase împreuna7 cu notele pe care
le-au primit. Scopul aplicat-iei este de a înva7 -ta sa7 creat-i, repede, un formular cu subformular -si
http://www.east.utcluj.ro/mb/mep/antal
de a prezenta noi operat-ii care se pot la nivelul rapoartelor. Generatoarele din figurile care
urmeaza7 sunt specifice lui Access 2002 din Microsoft Office XP Professional.
Creat-i doua7 formulare, primul va fi folosit pentru introducerea materiilor de studiu (în tabelul
Materii), al doilea va fi folosit pentru intreoducerea elevilor s- i a notelor pe care aces- tia le-au
primit la anumite materii. Ambele formulare vor fi create folosind generatoare de formulare.
http://www.east.utcluj.ro/mb/mep/antal
va fi tabelul Materii;
• clic pe butonul OK;
clic pe sa7 geata din dreapta -si selectat-i din lista Combo Box, în acest moment, se vor
sau suna la:
•
afis- a noi proprieta7 -ti corspunza7 toare afis- a7 rii valorii acestui câmp prin intermediul unui control
de tipul Combo Box;
• setat-i urma7 toarele proprieta7 -ti:
Nume proprietate Valoare Semnificat-ie
Row Source Materii Sursa de date pentru înregistra7 rile care vor fi
afis- ate de controlul Combo Box.
Bound Column 1 Coloana din sursa de date, la noi tabelul Materii,
care va da valori controlului Combo Box atunci
când se va selecta o valoare din lista afis- ata7 de
acesta
Column Count 2 Numa7 rul de coloane din sursa de date
Column Widths 0, 2 La7 -timea folosita7 pentru afis- area valorilor din
coloanele. Pentru la7 -timea 0 coloana nu se va afis- a.
219 Introducere în Microsoft Access: Rapoarte - cursul 9
List Width 2 La7 -timea folosita7 pentru afis- area tuturor coloanelor.
Salvat-i modifica7 rile aduse tabelului. Acum vom trece la realizarea celui de al doilea formular.
http://www.east.utcluj.ro/mb/mep/antal
• din Objects, selectat-i Forms;
• clic pe New, din lista selectat-i
Form Wizard, iar la "Choose table or
query where the object's data comes
from:" selectat-i tabelul Elevi (vezi
figura ala7 turata7 );
• clic pe OK;
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
• clic pe Finish.
http://www.east.utcluj.ro/mb/mep/antal
Pe ecran se va afis- a formularul:
Pentru ca acest formular sa7 afis- eze media pe semestrul unu s- i pe semestrul doi a elevilor
Datas11
Datas12 0264-401667
NU COPIA !.
Medias1
trecet-i în modul proiectare -si ada7 ugat-i controalele din figura care urmeaza7 .
Observat-i ca7 primele doua7 controale sunt de tipul Text Box "Unbound", acestea vor stoca
doua7 date având numele Datas11 s- i Datas12. Acestea reprezinta7 limita inferioara7 s- i cea
superioara7 pentru definitrea semestrului 1. Urma7 torul control, cu numele Medias1, este
221 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
[Data] >= #" & [Datas11] & "# AND [Data] <= #" & [Datas12] &
"#")/DCount("[Nota]","Note", "[IDElevNota] = " & [IDElev] & "
AND [Data] >= #" & [Datas11] & "# AND [Data] <= #" & [Datas12]
& "#").
El foloses- te funct-iile DSum() s- i DCount() pentru a calcula media unui elev pentru un
anumit semestru. Funct-ia DSum() realizeaza7 suma tuturor notelor, iar funct-ia DCount()
numa7 ra7 câte note sunt într-un semestru (de exemplu, forma generala7 pentru DSum() este
Acest curs este proprietatea lui
DSum("[nume câmp]","nume tabel","criteriu de select -ie"). Aceste
calcule pot fi realizate doar daca7 în controalele Datas11 -si Datas12 sunt stocate date.
Cel mai simplu mod de a pune date în aceste doua7 controale este init-ializarea (prin folosirea
proprieta7 -tii Default Value) lor cu data curenta7 folosind funct-ia Date(). În lipsa unei date
funct-iile de mai sus nu vor putea lucra s- i în locul mediei va fi afis- at textul #Error.
Introducerea datei curente în aceste controale rezolva7 evitarea aparit-iei erorii, dar, în mod
ANTAL Tiberiu Alexandru.
sigur, aceste valori nu delimiteaza7 corect semestrul. Deci, utilizatorul va trebui sa7 modifice
aceste valori la cele corecte. În acest caz apare urma7 toarea problema7 . Valoarea controlului
Pt. cumparare viziteaza:
Medias1 se calculeaza7 pe baza valorilor int-iale din controalele Datas11 s- i Datas12.
Cum aceste valori, sigur, nu sunt bune -si trebuie sa7 le modifica7 m ce se va petrece cu valoarea
din controlul Medias1 ca urmare a modifica7 rii valorilo celor doua7 controle. Daca7 testat-i
efectul modifica7 rii vet-i vedea ca7 nu se petrece nimic, adica7 valoarea lui Medias1 nu se
modifica7 , des- i valorile din Datas11 -si Datas12 au fost schimbate. Pentru ca modifica7 rile
aduse valorilor stocate în acestor controale sa7 duca7 la recalcularea cont-intului Medias1
trebuie sa7 definim doua7 proceduri de tratare a evenimentelor de actualizare a controalelor
Datas11 s- i Datas12. Un eveniment este rezultatul sau consecint-a unei act-iuni realizate de
utilizator. Access ra7 spunde la evenimente prin intermediul unor comportamente definite la
nivelul unor proprieta7 -ti de controale. De exemplu, evenimetul de actualizare a valorilor
stocate într-un control este tratat prin intermediul proprieta7 -tii After Update. Urma7 toarele
etape vor fi parcure pentru ambele controale: 0264-401667
NU COPIA !.
• din lista proprieta7 -tilor, clic pe proprietatea After Update, în dreapta apare o sa7 geata7 în
sau suna la:
jos;
• clic pe sa7 geata în jos, din lista7 selectat-i [Event Procedure];
• clic pe butonul cu cele trei puncte din dreapta;
• tastat-i linia: Me.Medias1.Requery.
Reluat-i etpatele de mai sus -si pentru al doilea control. Linia Me.Medias1.Requery va
face ca Medias1 sa7 fie reactualizat dupa7 terminarea modifica7 rilor aduse valorilor celor doua7
controale. Acest cod este ada7 ugat formularului Elevi s- i, în final, va fi trebuie sa7 fie de forma
urma7 toare.
Ultimul control este unul legat de câmpul IDElev a tabelului Elevi. El va fi invizibil, pentru
aceasta proprietatea Visible, a lui, va fi setata7 la valoarea No. Introducerea lui este necesara7
pentru a selecta din Note numai notelor elevului curent. Acesta este identificat unui prin
valoarea stocata7 în câmpul IDElev a tabelului Elevi. Funct-iile au aceleas- i argumente, primul
este numele tabelului, al doilea este numele câmpului, iar al treilea este condit-ia de respectat
pentru ca valorile câmpului sa7 fie însumate respectiv numa7 rate. Toate argumentele trebuie sa7
fie -siruri de caractere. Acesta este motivul pentru care textele sunt cuprinsa7 între ghilimele.
222 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Codul ada7 ugat pentru
actualizarea lui
Medias1
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Ultimul argument, pe lânga7 buca7 -ti de texte cuprinse între ghilimele mai cont-ine simbolul &
care este un operator pentru prelucrarea -sirurilor. El face concatenarea (ala7 turarea operanzilor,
din doua7 s- iruri face unul singur prin ala7 turarea cont-inutului celor doua7 s- iruri; detalii cu privire
la acest operator se ga7 sesc în cursul 10, care prezinta7 elementele limbajului de programare
VBA).
Pentru realiza calculul mediei pe semestrul doi, vom copia, la dreapta, primele trei controale.
0264-401667
NU COPIA !.
Numele noilor controale vor fi: Datas21, Datas22, Medias2. În modul proiectare formular va
sau suna la:
ara7 ta astfel:
223 Introducere în Microsoft Access: Rapoarte - cursul 9
Întrucât controlul Medias2 va trebuie sa7 lucreze cu valorile din Datas21 s- i Datas22
modificat-i corespunza7 tor expresia de calcul a acestuia. În figura care urmeaza7 se prezinta7
http://www.east.utcluj.ro/mb/mep/antal
rezultatele afis- ate de controalele calculate, pe baze cel spuse pâna7 acum, în cazul concret a
unui elev.
Raportul aplicat-iei, îs- i propune pentru început, sa7 afis- eze tot-i elevii clasei, cu toate notele lor,
sortate s- i grupate pe baza numelui elevilor -si a materiiilor. La nivelul materiilor, notele, vor fi
sortate în ordinea cresca7 toare a datelor. Pe baza celor spuse se poate deduce ca7 raportul va
avea urma7 toarele sect-iuni:
! antet -si sfârs- it de raport (Report Header s- i Report Footer);
! antet -si sfârs- it de pagina7 (Page Header s- i Page Footer);
! antet pentru grupare pe baza câmpului Nume (Nume Header);
! antet pentru grupare pe baza câmpului IDMaterie (IDMaterie Header);
! sect-iune pentru detalii (Detail). 0264-401667
NU COPIA !.
Pe baza elementelor de mai sus, folosit-i generatorul de rapoarte pentru a crea un raport cât
sau suna la:
mai apropiat de cel dorit. Trecet-i, apoi, în modul proiectare s- i modificat-i raportul pentru a-l
aduce la forma din figura care urmeaza7 .
Running Sum Over Group Daca7 se realizeaza7 afis- area unui total -si modul de
calcul al acestuia. În cazul nostru se va realiza o
însumare la nivel de grup, adica7 valoarea afis- ata7
http://www.east.utcluj.ro/mb/mep/antal
de acest control va fi crescuta7 cu 1 pentru fiecare
înregistrare noua7 din grup. Se realizeaza7 astfel
numerotarea fieca7 rei note primite de un elev la o
Acest curs este proprietatea lui materie.
0264-401667
NU COPIA !.
În figura care urmeaza7 , se vede ca7 fiecare nota7 primita7 de un elev, la o anumita7 materie, va
numerotata7 . La trecerea la un nou grup, adica7 la schimbarea materiei, numerorarea se reia cu
valorea calculata7 pentru control, la noi valoarea 1. Prin setarea proprieta7 -tii Running Sum la
valoarea Over Group, la valoarea curenta7 a controlului, care la noi este întotdeauna 1, se
aduna7 valorile anterioare.
Sa7 presupunem, ca7 în raportul urma7 tor, dorim sa7 calcula7 m media
Crearea unui total
la nivel de grup aritmetica7 pentru fiecare materie. Daca7 elevul are mai multe note la o
materie acestea trebuie însumate, apoi suma trebuie împa7 rt-ita7 la
numa7 rul de note. Urma7 toarele etape trebuie parcurse:
225 Introducere în Microsoft Access: Rapoarte - cursul 9
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Source; Nota trebuie sa7 fie un nume de câmp valid din sursa de date; modificat-i proprietatea
sau suna la:
Format la #.00.
Nota7 : Daca7 numele controlului este calculat, trebuie repetata7 expresia de calcul a lui. De
exemplu, daca7 dorim sa7 realiza7 m totalul pentru un control numit PretcuTVA calculat cu
formula [Pret]*[TVA], în loc de =Sum([Pretcu TVA]) se va scrie
226 Introducere în Microsoft Access: Rapoarte - cursul 9
=Sum([Pret]*[TVA]).
În continuare, ne propunem sa7 calcula7 m media generala7 a unui elev. Pentru aceasta, din
http://www.east.utcluj.ro/mb/mep/antal
fereastra Sorting and Grouping, vom selecta pe Nume. Aici, vom seta proprietatea Group
Footer pe Yes. Efectul va fi aparit-ia sect-iunii de sfârs- it (Nume Footer) pentru grupul Nume
în formular. Vom copia în aceasta7 sect-iune controlul care realizeaza7 media aritmetica7 pentru
fiecare materie.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Media generala7 a unui elev va fi calculata7 fa7 cându-se suma tuturor notelor lui, care apoi se va
împa7 rt-i la numa7 rul de note a elevului.
Pt. cumparare viziteaza:
Daca7 dorim sa7 calcula7 m media generala7 a unui elev, fa7 când media aritmetica7 a mediilor la
nivel de materii, strategia de mai sus nu mai este de folos. Urma7 toarele etape trebuie urmate în
acest caz:
• copiat-i controlul care face media aritmetica7 la nivel de materii, în aceeas- i sect-iune, -si
dat-i numele de SumaMedii acestui nou control; apoi, setat-i proprietatea Running Sum la
valoarea Over Group;
• creat-i un nou control de tipul Text Box cu numele ContorMaterii, tot în sect-iunea
IDMaterie Header cu proprietatea Running Sum setata7 la valoarea Over Group;
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Rezultatele vor fi afis- ate astfel:
0264-401667
NU COPIA !.
Obiectivele cursului 10
http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Dartmouth College în 1963. DeÕi din numele limbajului se pare c| a
fost scris pentru a permite programarea cât mai simpl| pentru studenÛi
Õi încep|tori, iniÛial a fost proiectat ca un sistem experimental cu time sharing (time sharing:
facilitate a unui sistem de operare care permite mai multor utilizatori s| execute mai multe
programe concurent, pe un singur procesor sau, în paralel, pe mai multe procesoare. De obicei
fiecare utilizator are propriul lui terminal pentru operaÛii de intrare/ieÕire. time sharing este
multitasking pentru utilizatori multipli. multitasking: o tehnic| folosit| într-un sistem de
operare pentru partajarea unui singur procesor între mai multe programe independente.
Acest curs este proprietatea lui
Programele în multitasking pot fi ale unui singur utilizator sau ale mai multor utilizatori, prin
aceasta se face distincÛia de procesarea paralel| - paralell processing, unde un singur
utilizator execut| mai multe programe pe mai multe procesoare). Cu timpul a devenit cauza
principal| a "reducerii Õi deform|rii mentale" a programatorilor încep|tori. Cazul este
oarecum similar cu cel al limbajului Pascal, când un limbaj proiectat exclusiv cu scop
ANTAL Tiberiu Alexandru.
educaÛional, a fost luat prea în serios. Un novice poate scrie în BASIC programe scurte, de 20-
40 linii, foarte simplu; scrierea unor programe mai lungi este: (a) chinuitoare Õi (b) duce la
Pt. cumparare viziteaza:
formarea unor deprinderi care nu pot fi utilizate în cadrul unor limbaje de programare de nivel
înalt mai puternice.
Macro comenzile ofer| soluÛii rapide Õi simple, dar cu limit|ri multiple. Limbajul VBA ofer|
facilit|Ûi Õi control mai eficace asupra acÛiunilor pe care le derul|m cu datele din baz|.
http://www.east.utcluj.ro/mb/mep/antal
ap|rut. De exemplu, dac| este vorba de un formular (Form) Õi de evenimentul clic (Click) pe
suprafaÛa acestuia, numele procedurii de tratare a evenimentului va fi Form_Click. Dac| în
locul formularului am fi avut un raport (Report), pentru acelaÕi eveniment, numele procedurii
ar fi Report_Click. În cazul unui control, numele acestuia se combin| cu caracterul
underscore (_) Õi cu numele evenimentului pentru a forma numele procedurii de eveniment.
De exemplu, dac| avem un buton cu numele Binchide, procedura de eveniment care trateaz|
evenimentul Click pe buton se va numi Binchide_Click. Numele obiectelor sunt stocate în
proprietatea Name, dac| intenÛionaÛi s| modificaÛi acest nume, trebuie s| o faceÛi înainte de
Acest curs este proprietatea lui
scrierea primei proceduri de eveniment. Dac| modificaÛi numele obiectului dup| ce aÛi scris
cel puÛin o procedur| de eveniment, trebuie s| modificaÛi Õi numele procedurilor scrise pân|
atunci. Din cele discutate observaÛi c| Access-ul foloseÕte aceeaÕi strategie pentru construirea
numelor procedurilor de evenimente:
ANTAL Tiberiu Alexandru.
Cuvintele Sub Õi End Sub marcheaz| începutul Õi sfârÕitul procedurii. Cuvintele care
0264-401667
NU COPIA !.
urmeaz| pe aceeaÕi linie cu Sub sunt numele procedurii de eveniment, iar instrucÛiuni
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
• acceptaÛi set|rile implicite Õi tastaÛi DatadeAzi în cutia de texte Name, apoi clic pe OK.
ANTAL Tiberiu Alexandru.
Access-ul va crea corpul unei funcÛii cu numele DatadeAzi. Dac| în loc de tipul de
0264-401667
NU COPIA !.
subrutin|.
Sub numeprocedur|(parametri)
[instrucÛiuni]
[Exit Sub]
http://www.east.utcluj.ro/mb/mep/antal
[instrucÛiuni]
End Sub
tip poate fi oricare dintre tipurile fundamentale de date (Integer, Long, Single, Double,
Currency, String, Variant sau Obiect). Dac| tipul nu este specificat explicit, parametrul va
avea tipul Variant care poate stoca orice tip de date. Parantezele drepte specific| faptul c|
ANTAL Tiberiu Alexandru.
elementele cuprinse între ele sunt opÛionale. Parantezele rotunde opÛionale dup|
numevariabil| indic| un argument de tipul tablou.
Pt. cumparare viziteaza:
SemnificaÛia elementelor sintactice ale procedurii Function sunt aceleaÕi cu cele ale
procedurii Sub, cu urm|toarele excepÛii:
http://www.east.utcluj.ro/mb/mep/antal
1. procedurile Function, asemenea variabilelor, au tipuri de date care determin| tipul
valorii întoarse;
2. valoarea se întoarce atribuind numelui procedurii Function o valoare în corpul
funcÛiei. Valoarea întoars| de procedura Function prin numele ei se poate folosi în expresii;
3. argumentele procedurii Function se scriu întotdeauna între paranteze rotunde.
Dac| dorim s| scriem o funcÛie ArieCerc pentru calculul ariei unui cerc de raz| R, codul
corespunz|tor unei implement|ri prin procedur| Function este:
Acest curs este proprietatea lui
rapoarte distincte. Numele procedurilor publice trebuie s| fie unice într-o aplicaÛie. Este
sau suna la:
posibil ca o procedur| dintr-un formular sau raport s| aib| acelaÕi nume cu una dintr-un
modul. În acest caz Access-ul va decide asupra procedurii apelate c|utând astfel: formularul
curent, raportul curent, modulele aplicaÛiei. O procedur| privat| poate fi apelat| numai de
proceduri ale modulului din care face parte.
Variabile
Orice program prelucreaz| o mulÛime de valori iniÛiale pentru a produce valorile de ieÕire. De
obicei, trecerea de la valorile iniÛiale la cele de ieÕire se face prin unele temporare, care în
procesul de calcul îÕi modific| valoarea. Aceste valori temporare vor fi stocate în variabile.
Numele de variabil| sugereaz| c| valorile stocate în acestea se modific| pe timpul execuÛiei
aplicaÛiei. VBA foloseÕte variabilele pentru stocarea valorilor. Variabilele sunt asemenea
câmpurilor din tabele au un nume, un tip, dar pot stoca numai o singur| valoare.
Declararea variabilelor
Exist| mai multe metode pentru declararea variabilelor în VBA. Sintaxa declaraÛiei de
variabil| este:
234 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
numevariabil| trebuie s| înceap| cu o liter| Õi nu poate conÛine spaÛii sau punctul zecimal.
http://www.east.utcluj.ro/mb/mep/antal
Programatorul nu trebuie s| declare explicit o variabil| în VBA (iat| dintre "strategiile" care
nu "merg" în limbajele adev|rate - declaraÛia implicit|, de care "beneficiaz| din plin" BASIC-
ul Õi FORTRAN-ul ). Dac| folosiÛi un nume care nu este nume de variabil| deja declarat|,
VBA creeaz| automat o variabil| cu acel nume de tipul Variant. Acest tip poate stoca orice
valoare: num|r, text, dat|, Õir. Atunci când o astfel de variabil| este atribuit| unei variabile de
alt tip, VBA se ocup| de toate conversiile necesare. În cazul când cunoaÕtem ce fel de valori
se vor stoca într-o variabil| este bine s| i se specifice tipul particular. VBA va putea gestiona
mai eficient datele stocate în variabil|. Variabilele declarate cu Dim exist| atât timp cât se
Acest curs este proprietatea lui
execut| procedura în care au fost declarate. La terminarea execuÛiei procedurii, valorile
acestor variabile dispar. În plus, valorile acestor variabile sunt locale procedurii din care fac
parte, adic| nu se pot accesa din alte proceduri. Datorit| acestor caracteristici acelaÕi nume de
variabile poate s| apar| în proceduri disticte far| s| apar| conflicte.
Dim i
ANTAL Tiberiu Alexandru.
1
2 Dim x,y,j As Integer
3 Dim x As Double
Pt. cumparare viziteaza:
4 Dim sir As String
Liniile 1 Õi 2 prezint| declaraÛii pe care NU trebuie s| practicaÛi! În linia 1 tipul a fost omis Õi
este, conform celor spuse, Variant. În linia 2, x Õi y sunt de tipul Variant, iar j de tipul Double,
faptul c| cele trei nume sunt scrise pe aceeaÕi linie nu înseamn| c| toate au tipul ultimei
variabile. Liniile 3 Õi 4 sunt cazul normal, pentru care trebuie s| v| formaÛi un automatism de
scriere. Depanarea programelor este mult mai uÕoar| dac| fiecare variabil| are asociat un tip
particular de dat|, în plus, resursele pentru gestionarea variabilelor sunt folosite mult mai
eficient de VBA rezultând o creÕtere în vitez| a execuÛiei codului Õi o sc|dere a spaÛiului de
RAM folosit pentru stocarea variabilelor.
modifica valoarea variabilei. Se spune c| scopul este local procedurii. Uneori este de dorit ca
o variabil| s| poat| fi folosit| din mai multe proceduri ale aceluiaÕi modul sau chiar din
module diferite. FuncÛie de locul în care este declarat| o variabil| poate avea scopurile:
Scopul unei variabile nu se poate schimba în timpul execuÛiei aplicaÛiei, dar este posibil ca o
variabil| cu acelaÕi nume s| apar| în scopuri diferite.
Pe lâng| scop, variabilele au Õi durat| de existenÛ|. Valorile din variabilele globale sau de
module sunt p|strate cât timp baza de date este deschis| (mai puÛin în cazul când codul este
reiniÛializat). Variabilele locale, exist| numai cât timp procedura în care s-au declarat se
235 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
execut|. Când procedura se termin|, valorile variabilelor locale sunt desc|rcate din RAM iar
spaÛiul alocat acestora este refolosit, dac| este cazul, pentru stocarea altor variabile. La
urm|torul apel al procedurii, toate variabilele locale sunt reiniÛializate. Dac| doriÛi ca VBA s|
http://www.east.utcluj.ro/mb/mep/antal
p|streze valoarea unei variabile locale trebuie s| o declaraÛi Static. De exemplu, în loc de Dim
pi As Double vom scrie Static pi As Double. O astfel de variabil| poate s| apar| numai
în interiorul unei proceduri Õi se foloseÕte, de obicei, pentru acumularea unor valori care altfel
s-ar pierde între apelurile procedurii.
Tipuri de date
Dup| cum aÛi v|zut deja, când se declar| o variabil| se poate specifica un tip de dat|
corespunz|tor ei. Tipul determin| valorile pe care variabila le poate stoca. Dac| tipul nu este
Acest curs este proprietatea lui
specificat, implicit, VBA asociaz| variabilei tipul Variant.
Tipul Variant
La fel cum o cutie cu text poate stoca texte, numere sau date, la fel variabilele de tipul Variant
pot stoca date de tipul numeric, Õir, dat|/or|, valori Null. În general VBA face toate
ANTAL Tiberiu Alexandru.
conversiile necesare când se fac manipul|ri ale datelor de acest tip, totuÕi sunt câteva cazuri
de evitat:
operaÛii aritmetice se pot efectua numai dac| tipul Variant stocheaz| o valoare
Pt. cumparare viziteaza:
1.
numeric|; se poate determina dac| valoarea stocat| într-un tip Variant este numeric| prin
funcÛia IsNumeric()
2. operaÛii cu date se pot efectua numai dac| tipul Variant stocheaz| o dat|; datele pot fi
adunate, sc|zute, sau se poate extrage anul, luna, ziua unei date, pentru ca aceste operaÛii s|
fie corecte se poate folosi funcÛia IsDate() pentru a determina dac| valoarea este de tip dat|.
special|, nu se poate atribui direct, dar este posibil s| atribuim valoarea Empty dintr-o
sau suna la:
variabil| Variant unei alte variabile Variant care Õi-a pierdut-o deja.
Tipuri numerice
Tipul specific| pe lâng| ce fel de valori poate lua o variabil| Õi domeniul în care pot varia
acestea, operatorii care pot avea ca operanzi aceste variabile Õi spaÛiul de RAM ce se foloseÕte
pentru stocarea ei.
236 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
http://www.east.utcluj.ro/mb/mep/antal
Byte 1 octet 0 la 255 0
Boolean 2 octeÛi True sau False False
Integer 2 octeÛi -32,768 la 32,767 0
Long 4 octeÛi -2,147,483,648 la 2,147,483,647 0
Single 4 octeÛi 3.402823E38 la -1.401298E-45 pentru valori 0
negative;
Acest curs este proprietatea lui
1.401298E-45 la 3.402823E38 pentru valori
pozitive
Double 8 octeÛi -1.79769313486232E308 la 0
-4.94065645841247E-324 pentru valori
negative;
ANTAL Tiberiu Alexandru.
4.94065645841247E-324 la
1.79769313486232E308 pentru valori pozitive
Pt. cumparare viziteaza:
Tipul Õir
Variabilele care conÛin un text se declar| de tipul Õir (String).
0264-401667
NU COPIA !.
Ôirul se poate atribui unei variabile de tipul Õir Õi poate fi manipulat prin funcÛii specifice
Õirurilor de caractere.
sir="Salut bade!"
sir=Right$(5)
Implicit, o variabil| de tipul Õir are lungimea variabil|, adic| lungimea ei poate creÕte dac| se
adaug| noi date în variabil|. Este posibil| declararea de variabile Õir cu lungime fix| prin
folosirea sintaxei: String *lungime. De exemplu, o variabil| cu numele linie de 80
de caractere se declar| astfel: Dim linie As String*80. Dac| un Õir mai scurt se
atribuie unuia mai lung, caracterele lips| se completeaz| automat cu spaÛii. Dac| un Õir mai
lung se atribuie unuia mai scurt caracterele în plus se trunchiaz|. Pentru c| Õirurile cu lungime
fix| se completeaz| automat în unele operaÛii cu spaÛii, exist| un set de funcÛii utile pentru
eliminarea acestora: LTrim(), RTrim(), Trim(). Access-ul compar| Õirurile în mod diferit
funcÛie de instrucÛiunea Option Compare specificat| în secÛiunea declaraÛiilor de modul.
237 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
Cele trei posibilit|Ûi pentru specificarea ordinii relative în comparaÛii sunt Option
Compare Database, Option Compare Binary Õi Option Compare Text.
Access-ul insereaz| automat la începutul fiec|rui modul Option Compare Database
http://www.east.utcluj.ro/mb/mep/antal
prin care comparaÛiile de Õiruri în modul se fac pe baza modalit|Ûii de sortare a Access-ului.
Celelate dou| opÛiuni fac ca sortarea s| fie dependent| sau nu de scrierea cu litere mici Õi
majuscule.
Tipul dat|/or|
Variabilele de tipul dat| se stocheaz| pe 8 octeÛi sub form| de numere reale Õi au domeniul
între 1 ianuarie 100 Õi 31 decembrie 9999 Õi ora de la 0:00:00 la 23:59:59. Constantele de
tipul dat| trebuie cuprinse între caractere # înainte de a fi atribuite variabilelor de tipul dat|
Acest curs este proprietatea lui
sub forma #12/21/1999#. Aceste variabile se afiÕeaz| conform set|rilor formatului short date
recunoscute de calculator. Orele vor fi Õi ele afiÕate conform set|rilor formatului de timp
recunoscut de calculator (12 ore sau 24 de ore). Datele pot fi adunate sau sc|zute folosind
funcÛiile DateAdd() Õi DateDiff(). Ziua, luna Õi anul pot fi extrase folosind funcÛiile Day(),
Month() Õi Year(). FuncÛia Now() întoarce data Õi ora curent|. OperaÛii de formatare pot fi
f|cute asupra datelor folosind funcÛia Format(). FuncÛiile DateSerial() Õi TimeSerial() se pot
ANTAL Tiberiu Alexandru.
folosi pentru crearea unor date Õi ore din valori numerice întregi.
Pt. cumparare viziteaza:
Tipul Object
Tipul de dat| obiect se stocheaz| pe 4 octeÛi Õi are ca valoare adresa unui obiect. Folosind
instrucÛiunea Set, o variabil| declarat| de tipul Object va putea stoca adresa oric|rui obiect.
Tabloul
Tabloul ne permite s| referim un grup de variabile de acelaÕi tip cu un singur nume realizând
diferenÛierea lor printr-un num|r numit indice. Tablourile au limite superioare Õi inferioare
pentru indice, iar elementele de tablou sunt alocate continuu între acele limite. VBA aloc|
spaÛiu pentru fiecare indice, din acest motiv nu este bine s| declaraÛi un tablou mai mare decât
este cazul s| fie. Toate elementele tabloului au acelaÕi tip, numit Õi de baz|, mai puÛin când
acest tip este Variant, caz în care elementele pot avea tipuri de date diferite. Tipul de baz|
poate s| fie oricare dintre tipurile prezentate. Exist| trei metode de creare a tablourilor cu
dimensiune fix|:
1. tablou public care are Public în declaraÛia ei;
2. tablou de modul care foloseÕte Dim la nivelul secÛiunii Declarations a modului din
care face parte;
3. tablou de procedur| sau local, care foloseÕte Private într-o procedur| pentru
declararea tabloului.
238 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
Declararea tablourilor
Cea mai simpl| form| de declarare a unui tablou este numele acestuia urmat de limita
superioar| a indicelui, care trebuie s| fie o valoare întreg| de tipul Long.
http://www.east.utcluj.ro/mb/mep/antal
Dim A(10) As Integer 'tablou cu numele A de 1 dimensiune
'cu 11 elemente de tipul Integer,
'indicele poate lua valorile 0,1,2,
'..., 10.
'22.
'domeniul 0, 15.
ObservaÛi c| prima valoare a indicelui este 0, aceast| valoare implicit| se poate schimba
Pt. cumparare viziteaza:
sau
VBA permite lucrul Õi cu tablouri cu mai mult de dou| dimensiuni, îns| în practic| folosirea
lor este mai rar|. O declaraÛie de tablou cu 3 dimensiuni este:
unde Nr_de_elemente este o valoare numeric| întreag| care specific| noul num|r de
elemente al tabloului.
http://www.east.utcluj.ro/mb/mep/antal
InstrucÛiunea ReDim poate s| apar| numai într-o procedur| pentru c|, spre deosebire de Dim
Õi Static, are un efect cu o acÛiune asupra execuÛiei aplicaÛiei. Poate modifica spaÛiul alocat
pentru stocarea elementelor de tablou Õi domeniul de variaÛie al indicelui, dar nu poate
modifica num|rul de dimensiuni al tabloului de la cel definit în primul ReDim.
...
Acest curs este proprietatea lui
Function Test()
...
ReDim Matrice(20,30)
Dac| nu veÛi folosi Preserve, valorile curente stocate în tablou, vor fi distruse în urma
ANTAL Tiberiu Alexandru.
execuÛiei lui ReDim. VBA va reseta valorile tablourilor la Empty pentru Variant, la 0 pentru
tipurile numerice Õi la Õirul de lungime zero, adic| "", pentru tablouri de Õiruri dinamice, iar la
Pt. cumparare viziteaza:
valorile zero ANSI pentru tablourile cu Õiruri cu lungime fix| respectiv la valoarea Nothing
pentru tablourile de obiecte. Dac| tabloul are mai multe dimensiuni, prin folosirea lui
Preserve se va putea modifica numai num|rul de elemente al ultimei dimensiuni ale tabloului.
Constante simbolice
Deseori în programe avem valori numerice care nu se modific|. Pentru creÕterea lizibilit|Ûii
programelor este posibil| înlocuirea acestor valori constante printr-un nume simbolic. Sintaxa
pentru definirea constantelor simbolice este:
În general, sunt folosite pentru valori numerice speciale sau pentru date Õi ore reprezentative
pentru aplicaÛie. numeconstant| respect| regulile de scriere a unui nume de variabil|, iar
expresie este format| din constante numerice sau Õir interconectate prin operatori. Scopul
constantelor simbolice este acelaÕi cu cel al variabilelor.
Constante intrinseci
Constantele simbolice sunt create de programator. Constantele intrinseci sunt definite de cei
care au scris VBA Õi le puteÛi vizualiza folosind Navigatorul de Obiecte (Object Browser).
Numele acestora trebuie s| fie unic Õi sunt disponibile în toate modulele aplicaÛiei.
Operatori
Valorile stocate în variabile rezult| în urma unor expresii. Expresiile sunt formate din
secvenÛe de operatori Õi operanzi. Urm|toarele grupe de operatori sunt predefiniÛi în VBA:
# aritmetici;
# de comparaÛie
# de concatenare
240 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
# logici
Operatori aritmetici
http://www.east.utcluj.ro/mb/mep/antal
SemnificaÛie Simbol Exemplu Remarc|
adunare + a+b a Õi b de orice tip numeric.
sc|dere - a-b a Õi b de orice tip numeric.
înmulÛire * a*b a Õi b de orice tip numeric.
împ|rÛire a/b a Õi b de orice tip numeric.
Acest curs este proprietatea lui
/
împ|rÛire întreag| \ a\b Înainte de împ|rÛire a Õi b sunt rotunjite la
valori întregi, rezultatul este tot un întreg.
ridicare la putere ^ a^b a poate fi orice num|r, b numai unul întreg.
ANTAL Tiberiu Alexandru.
Operatori de comparaÛie
Se folosesc pentru compararea expresiilor.
mai mare sau egal >= a>=b Expresia din exemplu ia valoarea True dac| a
>= b, altfel False.
egal = a=b Expresia din exemplu ia valoarea True dac| a
= b, altfel False.
diferit <> a<>b Expresia din exemplu ia valoarea True dac| a
<> b, altfel False.
Dac| în exemplele de mai sus, una dintre variabilele a sau b ia valoarea Null, expresia de
comparaÛie ia Õi ea valorea Null. Variabilele comparate trebuie s| fie de tip numeric.
Operatori de concatenare
Se folosesc în cazul Õirurilor Õi au ca efect al|turarea a dou| Õiruri. Valoarea întoars| este un
nou Õir care conÛine Õirurile operanzi al|turaÛi.
241 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
http://www.east.utcluj.ro/mb/mep/antal
Õiruri automat.
concatenare + a+b Dac| ambele variabile sunt de tipul Õir, operatorul de
adunare are efect de concatenare.
Operatori logici
George Boole a inventat un sistem matematic bazat valorile de adev|r, adev|rat (True), fals
(False) Õi funcÛiile ÔI (AND), SAU (OR) Õi NU (NOT). FuncÛiile boolene sunt prezentate
prin tabele de adev|r unde 0 reprezint| fals Õi 1 adev|rat.
Acest curs este proprietatea lui
Tabela de adev|r pentru And logic Tabela de adev|r pentru And pe biÛi
0264-401667
NU COPIA !.
Tabela de adev|r pentru Not logic Tabela de adev|r pentru Not pe biÛi
a Not(a) Not 1 0
http://www.east.utcluj.ro/mb/mep/antal
True False 1 1 1
False True 0 1 0
Null Null
Operatorii logici pot lucra cu valori de adev|r sau cu descompunerea binar| a valorilor
numerice ale operanzilor. În acest caz operatori logici se numesc operatori pe biÛi Õi
Acest curs este proprietatea lui
acÛioneaz| asupra a dou| poziÛii identice de biÛi din dou| expresii numerice modificând bitul
corespunz|tor acelei poziÛii conform tabelelor prezentate mai sus.
Let este un cuvânt opÛional, de obicei fiind omis, numevariabil| este obligatoriu Õi este
numele unei variabile sau a unei propriet|Ûi de obiect, iar expresie este cea care produce
valoarea care va fi atribuit|. Iat| câteva exemple de atribuiri:
Dim a As Integer
Dim danu As Boolean
Dim s As String 0264-401667
a=10
NU COPIA !.
danu=True
s="vin alegerile ... trec alegerile"
Valoarea lui expresie poate fi atribuit| variabilei numai dac| este de tip compatibil cu cel al
variabilei. Variabilelor de tipul Variant li se poate atribui orice valoare.
# If...Then
# If...Then...Else
# Select ...Case
If...Then
Se foloseÕte pentru execuÛia condiÛional| a unei instrucÛiuni sau a unui grup de instrucÛiuni. Se
243 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
http://www.east.utcluj.ro/mb/mep/antal
sau
If condiÛie Then
instrucÛiuni
End If
condiÛie este de obicei o comparaÛie, dar poate fi orice expresie care se evalueaz| la o valoare
Acest curs este proprietatea lui
numeric|. Dac| valoarea numeric| este 0, VBA îi atribuie valoarea de adev|r False, dac| este
nenul|, valoarea de adev|r atribuit| de VBA este True. Dac| condiÛie este True se execut|
instrucÛiune sau instrucÛiuni, în caz contrar instrucÛiunile sunt s|rite. ObservaÛi c|
prima form| de scriere permite execuÛia condiÛionat| a unei singure instrucÛiuni, iar cea de a
doua a unui grup de instrucÛiuni.
ANTAL Tiberiu Alexandru.
If...Then...Else
Pt. cumparare viziteaza:
Se foloseÕte pentru execuÛia condiÛiont| a unui grup de instrucÛiuni dintre mai multe grupuri.
If condiÛie1 Then
[instrucÛiuni_1]
[ElseIf condiÛie2 Then
[instrucÛiuni_2]] ...
[Else
[instrucÛiuni_n]]
End If
Prima oar| se testeaz| condiÛie1. Dac| este False, se testeaz| condiÛie2 Õi aÕa mai departe 0264-401667
pân| la g|sirea unei condiÛii True. Când s-a g|sit o astfel de condiÛie se execut| grupul de
NU COPIA !.
instrucÛiuni instrucÛiuni_x, apoi se sare la codul imediat urm|tor lui End If. OpÛional
sau suna la:
se poate un Else la care se va trece numai dac| nu s-a g|sit nici o condiÛie True.
Select...Case
Aceast| instrucÛiune este o alternativ| pentru scrierea de If Then Else -uri lungi asigurând o
citire mai uÕoar| a codului.
Aici, este o singur| expresie de test expresietest care se evalueaz| o dat| la intrarea în
instrucÛiune. VBA compar| valoarea acestei expresii cu valoarile din fiecare Case. Dac| se
g|seÕte o egalitate va executa instrucÛiunile asociate Case-ului respectiv. Listele de expresii
http://www.east.utcluj.ro/mb/mep/antal
listaexpresie conÛin una sau mai multe valori. Dac| exist| mai mult de o valoare în list|,
trebuie separate prin virgule. Fiecare grup de instrucÛiuni instrucÛiuni_x conÛine nici
una, una sau mai multe instrucÛiuni. Dac| mai multe valori din liste distincte sunt egale cu
valoarea de test, grupul de instrucÛiuni corespunz|tor primei liste va fi executat. Grupul de
instrucÛiuni opÛionale corespunz|toare lui Case Else va fi executat dac| nu s-a g|sit în nici
una din liste o valoare egal| cu cea a celei de test.
Nota7 : Select Case evalueaz| pe expresietest o singur| dat| la început, cu If Then ElseIf se
Acest curs este proprietatea lui
pot evalua expresii diferite pentru fiecare ElseIf.
InstrucÛiuni de ciclare
InstrucÛiunile de ciclare permit executarea repetat| a unei instrucÛiuni sau grup de instrucÛiuni
uneori denumite Õi corpul ciclului, atâta timp cât o condiÛie r|mâne adev|rat|. VBA suport|
urm|toarele instrucÛiuni de ciclare:
ANTAL Tiberiu Alexandru.
# Do...Loop
Pt. cumparare viziteaza:
# For...Next
# For Each...Next
# While...Wend
Ciclul Do...Loop
Repet| un grup de instrucÛiuni cât timp o condiÛie este True sau devine True.
Urm|toarele forme de cicluri Do...Loop sunt valide:
Loop
sau
Do
[instrucÛiuni]
[Exit Do]
[instrucÛiuni]
Loop [{While |Until} condiÛie]
condiÛie este o expresie numeric| sau Õir opÛional care este True sau False. Dac| condiÛie ia
valoarea Null este echivalent| cu False. Cuvintele între acolade reprezint| alternative, adic|
unul dintre ele poate s| fie scris. Pentru While instrucÛiuni se execut| atâta timp cât
condiÛie este True, pentru Until instrucÛiuni se execut| cât timp condiÛie nu este True.
Exit Do produce ieÕirea din ciclul Do...Loop înainte de realizarea condiÛiei de p|r|sire a
ciclului. Controlul este dat instrucÛiunii imediat urm|toare ciclului, prima linie dup| Loop sau
Loop [{While |Until} condiÛie]. Al doilea tip de ciclu se execut| cel puÛin o dat| pentru c|
condiÛie, prin care se face testarea termin|ri, se atinge numai dup| execuÛia instrucÛiunilor.
245 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
Ciclul For...Next
Repet| grupul de instrucÛiuni de un num|r de ori.
http://www.east.utcluj.ro/mb/mep/antal
For contor = început To sfârÕit [Step pas]
[instrucÛiuni]
[Exit For]
[instrucÛiuni]
Next [contor]
contor este o variabil| de tip numeric, început este valoarea iniÛial| a lui contor, iar sfârÕit
Acest curs este proprietatea lui
este valoarea final|, pas este o valoare opÛional| fiind cantitatea cu care se modific| contor la
fiecare reluare a ciclului. Dac| pas nu este specificat| se consider| implicit 1. Dac| exist|, pas
poate fi pozitiv sau negativ. instrucÛiuni se execut| cât timp cât contor<=sfârÕit pentru
valori pozitive ale lui pas sau cât timp contor>=sfârÕit pentru valori negative ale lui pas. Exit
For produce saltul la instrucÛiunea imediat urm|toare liniei Next [contor] de terminare a
ANTAL Tiberiu Alexandru.
corpului ciclului For...Next. Un caz clasic de utilizare al ciclurilor For...Next este când un
ciclu este în interiorul altuia, de exemplu:
Pt. cumparare viziteaza:
For i=1 To 7
For j=1 To 10
For k=1 To 9
. . .
Next k
Next j
Next i
[instrucÛiuni]
sau suna la:
[Exit For]
[instrucÛiuni]
Next [element]
element este o variabil| folosit| pentru parcurgerea iterativ| a elementelor din grup. Pentru
colecÛii, element poate fi numai de tip Variant, variabil| obiect generic sau variabil| obiect
specific. grup este numele unei colecÛii de obiecte sau tablou. For Each...Next se începe
numai dac| în grup este cel puÛin un element. Dac| exist| mai multe elemente,
instrucÛiuni sunt repetate pentru fiecare element pân| la parcurgerea tuturor
elementelor, când ciclul se termin| s|rindu-se la instrucÛiunea imediat urm|toare lui. Ôi aici
Exit For produce ieÕirea forÛat| din ciclu cu saltul la instrucÛiunea imediat urm|toare ciclului,
adic| la prima instrucÛiune dup| Next [element].
Ciclul While...Wend
Execut| instrucÛiuni cât tip condiÛie este True.
246 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
While condiÛie
[instrucÛiuni]
Wend
http://www.east.utcluj.ro/mb/mep/antal
condiÛie este o expresie numeric| sau Õir care se evalueaz| la True sau False.
instrucÛiuni reprezint| una sau mai multe instrucÛiuni care vor fi executate cât timp
condiÛie este True. Controlul revine la condiÛie dup| o execuÛie a corpului ciclului format din
instrucÛiuni când se verific| dac| condiÛie este înc| True. Dac| da, procesul se repet|,
altfel se execut| instrucÛiunea urm|toare lui Wend.
S| presupunem c| dorim s| lucr|m cu datele unei facturi într-un modul VBA. Într-un model
simplificat, urm|toarele date ar fi de manipulat pentru fiecare facut|: ID - un num|r care
identific| unic o factur|, ContClient - num|rul de cont al clientului, Valoare - valoarea
de pl|tit, DFactura - data emiterii facturii, DAmanare - data pân| la care plata poate fi
amânat|; DPlata - data pl|Ûii facurii, Expirata - în cazul în care factura expir|. Toate
ANTAL Tiberiu Alexandru.
O metod| de rezolvare a problemei este crearea unui tip de dat| definit| de utilizator care
stocheaz| toate informaÛiile de manipulat prin:
Type Factura
ID As Long
ContClient As String
Valoare As Currency
DFactura As Date
DAmanare As Date
DPlata As Date
Expirata As Boolean
End Type
Pe baza acestui tip de dat| definit de utilizator se pot declara variabile noi, dup| cum
urmeaz|:
TestFactura.ID = 1234
TestFactura.ContClient = "AK72 - 12344"
TestFactura.Valoare = 777.12345
http://www.east.utcluj.ro/mb/mep/antal
TestFactura.DFactura = Date
TestFactura.DAmanare = Date + 30
TestFactura.Expirata = False
Dac| dorim s| lucr|m cu mai multe facturi, tot ce trebuie s| facem, este s| declar|m mai
multe variabile de tipul Factura. Este mult mai simplu s| lucr|m cu mai multe facturi, îns|
ad|ugarea datelor se face, înc|, elementar.
Pentru a elimina aceast| problem| se poate defini un obiect "Factura" care are urm|toarele
Acest curs este proprietatea lui
caracteristici:
! ID, ContClient, Valoare etc. devin propriet|Ûi ale obiectului;
! când se creeaz| un obiect nou, anumite propriet|Ûi primesc automat valori;
! când se atribuie o valoare unei propriet|Ûi se poate scrie o secvenÛ| de cod
VBA pentru validarea valorii;
ANTAL Tiberiu Alexandru.
! obiectului i se pot pot implementa metode (de exemplu, pentru a verifica dac|
o factur| este expirat|).
Pt. cumparare viziteaza:
În tehnica program|rii obiectuale clasa reprezinta7 un Õablon. O variabil| de tipul clas| (uneori
numita7 s- i instant-iere) este un obiect care se creeaz| pe baza Õablonului, el având
caracteristicile descrise de acesta. Aceste caracteristici sunt determinate de proprieta7 -tile Õi de
membrii clasei. Obiectul este o entitate care poate fi programat, manipulat sau controlat. În
Access, formularele, controalele etc. sunt obiecte. O proprietate este o caracteristc| a unui
obiect, în Access, majoritatea propriet|Ûilor pot fi citite Õi scrise. O metod| reprezint| o
acÛiune care poate fi efectuat| de obiect.
•
CFactura;
Tradit-ional, la specificarea numelui unei clase, acesta este prefixat cu un "C". Daca7 clasa
CFactura este deja definita7 , un obiect pe baza clasei se creeaza7 prin linia:
Des- i linia de mai sus creeaza7 obiectul, adica7 aloca7 memorie pentru el, obiectul nu este
instant-iat decât dupa7 ce se refera7 în cod.
Prima sarcina7 , dupa7 crearea unui modul clasa7 , este specificarea acestor variabile interne clasei
care se mai numesc -si membri data7 . De obieci, se declara7 câte o variabila7 interna7 pentru
fiecare data de stocat în obiect respectând regulile:
http://www.east.utcluj.ro/mb/mep/antal
! fiecare variabila7 se declara7 folosind cuvântul cheie Private pentru a face
variabilele disponibile numai în interiorul acelui modul;
! tradit-ional, numele membrilor data7 se prefixeaza7 cu m_ pentru a indica ca7 este
vorba despre un membru al unei clase.
Pentru exemplul nostru se vor declara variabile din figura urma7 toare:
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
End Property
Folosirea lui Public face ca aceast| procedur|, sau proprietate, s| fie vizibil| pentru procese
externe. numeproprietate este numele propriet|Ûii, tipdedat| este tipul de dat| al propriet|Ûii,
iar m_membrudat| este variabila membru dat| care stocheaz| valoarea curent| a propriet|Ûii.
Dac| dorim, se pot ad|uga instrucÛiuni în plus procedurii, deÕi în cazul lui Property Get
este destul de rar.
Acest curs este proprietatea lui
End Property
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
End Property
[instrucÛiuni]
m_membrudat| = ValoareNou|
End Property
este noua valoare pe care utilizatorul vrea s-o atribuie propriet|Ûii, tipdedat| este tipul de dat|
care trebuie folosit pentru valoarea propriet|Ûii, iar m_membrudat| este variabila membru dat|
Pt. cumparare viziteaza:
a c|rei valoare se va modifica. Ôi aici pot fi ad|ugate instrucÛiuni în plus. Acestea testeaz|, de
obicei, noua valoare înainte de a modifica membrul dat|.
http://www.east.utcluj.ro/mb/mep/antal
m_DAmanare = m_DFactura + 30
End Property
mai mare decât data curent|. În caz contrar se afiÕeaz| un mesaj prin care utilizatorul este
avertizat c| nu se poate factura "în trecut" Õi data factur|rii devine data curent|, iar data pân|
la care se face amânarea de plat| este cu 30 de zile în plus faÛ| de cea de emitere a facturii.
Pt. cumparare viziteaza:
Evenimentul Initialize
Acesta apare atunci când se realizeaz| la instanÛierea obiectului de tipul clas|, adic| atunci
când:
! se declar| o variabil| obiect de tipul clasei prin folosirea lui New; evenimentul
apare la prima folosire a variabilei în cod, de exemplu:
Dim test As New CFactura
test.ID = 1234 'evenimentul Initialize apare aici
252 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
! se declar| o variabil| obiect de tipul clasei f|r| cuvântul cheie New, la scrierea
lui Set prin care variabila este egal| cu noua instanÛiere a clasei
Dim test1 As CFactura
http://www.east.utcluj.ro/mb/mep/antal
Set test1 = New CFactura 'evenimentul Initialize
Pentru a folosi acest eveniment se adaug| clasei o procedur| Private care foloseÕte
urm|torul format:
Evenimentul Terminate
Acest eveniment apare atunci când toate referinÛele la obiectul de tipul clas| sunt setate la
Nothing. Se foloseÕte atunci când eliberarea clasa a alocat dinamic memorie Õi aceasta
trebuie eliberat|. Pentru a folosi acest eveniment se scrie, în clasa, o procedur| Private de
0264-401667
NU COPIA !.
forma:
sau suna la:
Utilizarea clasei
Codul care urmeaz| se va crea într-un modul Õi permite verificarea funcÛion|rii clasei.
test.DataFactura = #1/1/2002#
Debug.Print "Data facturii ="; test.DataFactura
test.Actualizare
http://www.east.utcluj.ro/mb/mep/antal
Debug.Print "Este expirata = "; test.EsteExpirata
test.Valoare = 120
Debug.Print "Valoarea facturii este = "; test.Valoare
End Sub
ColecÛii VBA
CloecÛiile VBA furnizeaz| o metod| pentru tratarea unor obiecte definite de utilizator sub
forma unui grup. De exemplu, dac| avem mai multe obiecte de tipul CFactura Õi se doreÕte
realizarea unei acÛiuni este mai simplu dac| aceste obiecte pot fi tratate, grupat, decât,
ANTAL Tiberiu Alexandru.
individual. O colecÛie este, la rândul ei, un obiect cu propriile lui propriet|Ûi Õi metode.
Obiectul colecÛie are urm|toarele caracteristici:
! este un obiect cu propriet|Ûi Õi metode;
Pt. cumparare viziteaza:
! obiecte de tipuri diferite pot fi ad|ugate colecÛiei;
! are dimensiunea variabil|, dup| cum se adaug| sau se Õterg obiecte;
! articolele colecÛiei nu pot fi sortate;
! articolele din colecÛie se pot selecta pe baza unui index care începe cu valoarea
numeric| 1.
Metoda Add se foloseÕte pentru ad|ugarea unui articol în colecÛie, ea are forma general|:
http://www.east.utcluj.ro/mb/mep/antal
De exemplu, pentru ad|ugarea obiectelor test1, test2, test3 de tipul CFactura
colecÛiei testi se va folosi codul:
test1.ContClient = "ab-1234"
test2.ContClient = "bc-5555"
test3.ContClient = "ab-3334"
DeÕi folosirea lui Cheie este opÛional|, utilizarea unor nume pentru identificarea unui articol
de colecÛie este de preferat în locul unui num|r întreg. Num|rul de index nu este foarte sigur
întrucât valoarea lui se poat schimba dac| se Õterg sau se adaug| articole. Argumentele
opÛionale Înainte Õi Dup| se pot folosi pentru a specifica poziÛia obiectelor în colecÛie.
printr-un num|r întreg, numit Õi index, valoarea indexului, pentru primul obiect din colecÛie,
sau suna la:
este 1. Metoda mai simpl| de referire este prin numele cheii. Codul care urmeaz| exemplific|
cele descrise.
Debug.Print testi.Item(2).ContClient
Debug.Print testi(2).ContClient
Debug.Print testi.Item("doi").ContClient
Obiecte specifice ale unei colecÛii por fi Õterse folosind indexul sau valoarea cheii dup| cum
urmeaz|:
http://www.east.utcluj.ro/mb/mep/antal
testi.Remove 2
testi.Remove "trei"
test1.ContClient = "ab-1234"
test2.ContClient = "bc-5555" 0264-401667
test3.ContClient = "ab-3334"
NU COPIA !.
Debug.Print testi.Item(2).ContClient
Debug.Print testi(2).ContClient
Debug.Print testi.Item("doi").ContClient
Debug.Print "----"
For Each test In testi
Debug.Print test.ContClient
Next test
testi.Remove 2
256 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
testi.Remove "trei"
Debug.Print "----"
http://www.east.utcluj.ro/mb/mep/antal
For Each test In testi
Debug.Print test.ContClient
Next test
End Sub
Option Explicit
http://www.east.utcluj.ro/mb/mep/antal
End Function
4
5 testi.Adauga CClient:="ab-1234", ValFact:=777.77
Pt. cumparare viziteaza:
6 testi.Adauga CClient:="bc-5555", ValFact:=333.33
7 testi.Adauga CClient:="ab-3334", ValFact:=555.55
8 Debug.Print testi.Contor
9
10 For i = 1 To testi.Contor
11 Debug.Print testi.Articol(i).ContClient
12 Next i
13
14 For Each test In testi.Facturi
15 Debug.Print test.ContClient
16 Next test 0264-401667
17
NU COPIA !.
18 End Sub
Liniile 10 - 12 prezint| modul de parcurgere a colecÛiei testi folosind ciclul For. Liniile 14
- 16 prezint| modul de parcurgere a colecÛiei testi prin folosirea ciclului For Each. Pentru
ca aceast| metod| de parcurgere s| poat| fi folosit| a fost nevoie de proprietatea Facturi
care s| întoarc| colecÛia curent| de facuri stocat| în membrul dat| m_Facturi.
http://www.east.utcluj.ro/mb/mep/antal
Property Set este o varianta7 de Property Let care permite crearea unor proprieta7 -ti obiect.
Proprieta7 -tile obiect sunt proprieta7 -ti care sunt poantori la obiecte -si nu sunt valori scalare
obies- nuite. Creat-i un nou modul clasa7 cu numele CClient.
AdresaClient = m_AdresaClient
sau suna la:
End Property
http://www.east.utcluj.ro/mb/mep/antal
Pentru testarea clasei creat-i procedura urma7 toare:
11 End With
12
Pt. cumparare viziteaza:
13 Debug.Print "----"
14 With tc.FacturiClient
15 .Adauga tc.ContClient, "100.00"
16 .Adauga tc.ContClient, "200.108"
17 For i = 1 To .Contor
18 Debug.Print .Articol(i).ContClient,E
19 .Articol(i).Valoare
20 Next i
21 End With
22 Debug.Print "----"
23
24 Set fa = tc.FacturiClient
0264-401667
NU COPIA !.
25 For i = 1 To fa.Contor
sau suna la:
26 Debug.Print fa.Articol(i).ContClient,E
27 fa.Articol(i).Valoare
28 Next i
29 End Sub
Atent- ie
În toate secvent-ele de program care urmeaza7 simbolul E
este folosit pentru a marca o linie
http://www.east.utcluj.ro/mb/mep/antal
care, datorita7 lungimii prea mari, nu a putut fi scrisa7 complet pe un singur rând. Pe hîrtie, linia
prea lunga este continuata7 pe linia imediat urma7 toare, dar în program, continuarea trebuie
scris4a în pe locul lui E.
Definit-ia de mai sus este stocata7 în modulul cu numele Module3, iar rezultatul funct-iei este
afis- at în fereastra imediata7 (Immediate window). Vizualizarea acestei ferestre se face selectând
din View, Immediate Window. Deseori, aceasta7 fereastra7 este folosita7 pentru testarea unui
subprogram din interiorul unui modul. O alta7 situatie ar fi calculul valorii unei expresii sau a
unei variabile. Pentru aceasta se va folosi caracterul ? urmat de numele variabilei, expresiei
sau funct-iei dupa7 care se apasa7 tasta Enter. Rezultaul se va afis- a, în fereastra imediata7 , pe
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Aplicat-ii cu instruct-iunea If
If se foloses- te atunci când pe parcursul rezolva7 rii problemei, în secvent-a7 de pas- i de urmat,
trebuie luata7 o decizie. În "vocabularul uman" corespondentul lui If este daca7 . Sa7 presupunem
ca7 dorim sa7 scriem o funct-ie care ga7 ses- te minimul dintre doua7 valori reale. Funct-ia se va primi
numele de min2, pentru ca7 va calcula minimul dintre doua7 valori -si va avea ca parametri pe a
-si b. 0264-401667
NU COPIA !.
daca7 a este mai mic decât b minimul este a, daca7 a este mai mare decât b minimul este b,
daca7 a este mai mic decât b atunci minimul este a, altfel minimul este b,
7 a < b Atunci
Daca If a < b Then
minim = a minim = a
Altfel Else
minim =b minim = b
Terminare If End If
262 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
Pe baza codului de mai sus, se va scrie o funct-ie care sa7 calculeze minimul.
http://www.east.utcluj.ro/mb/mep/antal
If a < b Then
min2 = a
Else
min2 = b
End If
End Function
Daca7 , pe baza funct-iei care ga7 ses- te minimul dintre doua7 valori dorim sa7 scriem o funct-ie, cu
Acest curs este proprietatea lui
numele min3, care ga7 ses- te minumul dintre trei valori, acesta va fi:
End Function
Pt. cumparare viziteaza:
Observat-i ca7 valoarea lui min3 se determina7 prin apelarea de doua7 ori a lui min2. Prima oara7
se ga7 ses- te minimul dintre a s- i b, apoi între minimul dintre a, b s- i c.
Pe baza exemplelor prezentate, scriet-i funct-iile max2 s- i max3 pentru calcularea maximului
dintre doua7 respectiv trei numere. Scriet-i apoi o procedura7 Sub, cu numele minmax3, pentru
calculul valorilor minime -si maxime bazata7 pe funct-iile de mai sus.
0264-401667
NU COPIA !.
Procedura Sub va avea trei argumente de intrare, pe a, b s- i c s- i doua7 de ies- ire, pe vmin s- i
vmax. Observat-i, în fereastra imediata
7 , ca7 des- i pe ultimele doua7 pozit-ii stau parametrii de
263 Introducere în limbajul de programare Visual Basic for Applications - cursul 10
ies- ire, care se calculeaza7 în procedura7 , ei trebuie specificat-i conform sintaxei de scriere a
apelului lui minmax3. Pentru a sca7 pa de aceasta7 scriere ei pot fi declarat-i ca parametrii
opt-ionali dupa7 cum urmeaza7 :
http://www.east.utcluj.ro/mb/mep/antal
Public Sub minmax3v1(a As Double, b As Double, c As Double, E
Optional vmin As Double, Optional vmax As Double)
vmin = min3(a, b, c)
vmax = max3(a, b, c)
Debug.Print "Minimul dintre "; a; b; c; " este "; vmin
Debug.Print "Maximul dintre "; a; b; c; " este "; vmax
Acest curs este proprietatea lui
End Sub
În acest caz, subprogramul cu numele minmax3v1 va putea fi apelat din fereastra imediata7
prin linia minmax3v1 1,2,3.
ANTAL Tiberiu Alexandru.
Se cere s| se scrie o procedur| de tipul funcÛie pentru calculul valorilor lui g(x) Õi una de tipul
subrutin| pentru afiÕarea valorilor ei într-un interval dat, [a,b], în n puncte echidistante.
Întrucât punctele sunt echidistante, se poate determina dinstanÛa între dou| puncte consecutive 0264-401667
considerându-se conoscute a, b Õi n. Aceast| distant| se numeÕte pas de parcurgere a
NU COPIA !.
b−a
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
Else
g = Cos(x) / (x * x - 4)
End If
End If
End Function
If (b < a) Then
ANTAL Tiberiu Alexandru.
For i = 1 To n
x = a + (i - 1) * h
aux = g(x, eroare)
If eroare Then 0264-401667
Debug.Print "Evaluarea functiei a generat eroare E
NU COPIA !.
pentru x = "; x
Else
Debug.Print i; ")"; x; aux
End If
Next i
End Sub
http://www.east.utcluj.ro/mb/mep/antal
Sub test()
Dim re As Double, re1 As Double, re2 As Double
Dim im As Double, im1 As Double, im2 As Double
re1 = 1
im1 = 2
re2 = 3
Acest curs este proprietatea lui
im2 = 4
Procedura pentru adunarea a dou| numere complexe are Õase parametri, primii patru sunt de
Pt. cumparare viziteaza:
intrare, iar ultimii doi sunt de ieÕire. În aceasata variant| de implementare nu exist| nici un
control asupra valorilor de intrare, care, pâna la urm|, pot fi orice valori numerice Õi nu
neap|rat p|rÛile reale Õi imaginare are unor numere complexe. O variant| îmbun|t|Ûit| ar fi
folosirea unui tip de dat| pentru reprezentarea numerelor complexe. CreaÛi un nou modu care
s| fie de forma:
Type complex
re As Double
im As Double
End Type
Sub test1()
Dim c As complex, c1 As complex, c2 As complex
c1.re = 1
c1.im = 2
c2.re = 3
c2.im = 4
c = complex_aduna(c1, c2)
Debug.Print c.re; "+i*"; c.im
End Sub
im. Este clar c| ele reprezint| o pereche Õi nu este corect| folosirea lor independent|. S-a
creat un nou concept, cel de num|r complex. El apare Õi la nivelul funcÛiei ce realizeaz|
adunarea celor dou| numere complexe prin faptul ca se pot declara parametri Õi rezultare de
http://www.east.utcluj.ro/mb/mep/antal
tipul în cauz|. Aceast| abordare este înc| un pas înainte, dar înc| problema nu este rezolvat|
total. OperaÛia de adunare a numerelor complexe este specific| acestora, ar fi normal ca
acestea s| poat| acÛiona numai asupr| numerelor complexe. În varianta prezentat|, funcÛia
complex_aduna() ar putea fi folosit| încorect de cineva care nu Õtie ca ea poate lucra
corect numai cu tipul de dat| complex. SoluÛia este, ca atât datele, cât Õi procedurile care
manipuleaz| datele s| fie folosite pentru definirea unui nou tip de date. În acest scop se va
defini un modul de tipul clasa cu numele CComplex, dup| cum urmeaz|:
Acest curs este proprietatea lui
Private re As Double
Private im As Double
End Property
Pt. cumparare viziteaza:
Public Property Let real(rea As Double)
re = rea
End Property
y.imaginar = 3
y.real = 4
z.aduna x, y
http://www.east.utcluj.ro/mb/mep/antal
z.complex_afis
End Sub
ObservaÛi c|, aici, începând cu operaÛia de atribuire a valorilor complexe, pân| la cea de
afiÕare totul se face sub controlul strict al funcÛiilor specifice clasei CComplex orice
posibilitate de eroare în utilizarea unor date sau funcÛii incorecte fiind exclus|.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Obiectivele cursului 11
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
http://www.east.utcluj.ro/mb/mep/antal
! ce este programarea orientat| pe obiecte;
! cum se acceseaz| obiectele Õi ierarhiile de obiecte în Access;
! care sunt obiectele Access;
! care sunt obiectele pentru accesul la date;
! care sunt propriet|Ûile folosite mai des;
Acest curs este proprietatea lui
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
funcÛii de acces. Obiectele de acest tip sunt create Õi inspectate numai prin apeluri la funcÛiile
de acces. Aceasta permite ca implementarea tipului s| fie modificat| f|r| alte modific|ri de
module în afara celui în care TAD este definit). El este o structur| de dat| încapsulat|
împreun| cu rutinele, numite "metode", care opereaz| asupra datelor. OperaÛii asupra datelor
pot fi efectuate numai prin intermediul acestor metode, care sunt comune tuturor obiectelor ce
s-au n|scut prin instanÛierea aceleiaÕi clase particulare. Denumirea de clas| este folosit| în
POO pentru un prototip de obiect, fiind echivalentul noÛiunii de tip derivat din limbajele
procedurale. O clas| este determinat| de o mulÛime de obiecte cu o structur| Õi un
Acest curs este proprietatea lui
comportament comun. Structura clasei este determinat| de variabilele care reprezint| starea
unui obiect din acea clas|, iar comportamentul ei este dat de metodele asociate clasei. Clasele
se pot afla într-o relaÛie ierarhic|. O clas| poate fi specializarea (o "subclas|") alteia (care este
"superclasa"), poate fi compus| din alte clase sau se poate folosi în alte clase. Fiecare clas| are
o poziÛie în ierarhia de clase. Metodele sau codul unei clase pot fi transferate în josul ierarhiei
ANTAL Tiberiu Alexandru.
unei subclase sau pot fi moÕtenite de la o superclas|. Subclasa este o clas| care este derivat|
dintr-o superclas| prin moÕtenire. Subclasa conÛine toate tr|s|turile superclasei, dar poate
ad|uga noi tr|s|turi sau poate s| le redefineasc| pe unele din cele moÕtenite. Apelurile de
Pt. cumparare viziteaza:
proceduri sunt descrise în POO în termenii transferurilor de mesaje. Un mesaj specific| o
metod| Õi opÛional poate include Õi alte argumente. Când un mesaj este transmis unui obiect,
metoda este c|utat| în clasa obiectului pentru a g|si care este operaÛia de efectuat cu obiectul.
Dac| metoda nu este definit| în clasa obiectului, este c|utat| în superclasele lui pân| când se
ajunge la o superclas| care nu mai este derivat|. Apelurile de procedur| întotdeauna întorc un
obiect rezultat, care poate fi o eroare, la fel este Õi aici, când nu s-a g|sit o superclas| care s|
defineasc| metoda specificat|.
POO a început cu SIMULA-67 în jurul anului 1970. Exemple populare de limbaje orientate pe
obiecte sunt Smalltalk creat la Palo Alto Research Center (PARC) a lui Xerox Õi C++-ul.
O baz| de date Access este format| din obiectele pe care le vedeÛi în fereastra bazei de date
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
e NumeColecÛie![Nume Obiect] este explicit scris Forms![Zi rata]
t ca un membru al
o colecÛiei.
d Parantezele drepte
a sunt necesare dac|
1 numele obiectului
conÛine spaÛii.
M NumeColecÛie("NumeObiect") Numele obiectului Forms("Clienti")
Acest curs este proprietatea lui
2 String pentru a
stoca numele
Pt. cumparare viziteaza:
acesteia.
M NumeColecÛie(index) index specific| Forms(1)
e poziÛia obiectului
t din colecÛie.
o
d
a
3
Fiecare form| sintactic| are avantajele ei. Atunci când referim un singur obiect, de exemplu al
unui formular sau raport, Metoda 1, cu folosirea semnului de exclamare !, este cea mai
simpl|. Dac| dorim s| facem anumite acÛiuni cu un grup de obiecte, ale c|ror nume este 0264-401667
cunoscut, vom folosi Metoda 2. Metoda 3 se foloseÕte, în general, când dorim s| parcurgem
NU COPIA !.
întreaga colecÛie pentru a realiza o acÛiune cu toate obiectele acesteia. Toate obiectele au
propriet|Ûi, metode asociate Õi dac| este cazul, proceduri de evenimente. Fiecare obiect are
o mulÛime de caracteristici denumite propriet|Ûi. Acestea pot controla, de exemplu, modul de
afiÕare al obiectului Õi poziÛia lui pe ecran.
NumeObiect.NumeProprietate
NumeObiect.NumeProprietate = valoare
Forms![Clienti].Caption="Salutare!"
Fiecare colecÛie are o proprietate Count care conÛine num|rul actualizat de obiecte ale
http://www.east.utcluj.ro/mb/mep/antal
colecÛiei. Primul membru are index-ul 0 iar ultimul Count-1. Aceast| proprietate permite
parcurgerea unei colecÛii de obiecte.De exemplu, dac| dorim s| set|m titlurile tuturor
formularelor deschise la "Formular nr. x", unde x este num|rul ordine al formularului din
colecÛie se poate scrie procedura Sub:
Sub ModificaCaption()
Dim i As Integer
For i=0 To Forms.Count-1
Acest curs este proprietatea lui
Forms(i).Caption = "Formular nr. " + str(i)
Next
End Sub
la programe greu de întreÛinut. În plus, uneori se poate s| dorim executarea aceloraÕi operaÛii
cu obiecte diferite. În VBA exist| variabila obiect c|reia se poate asocia un tip de obiect.
Pt. cumparare viziteaza:
Dup| ce variabila a fost declarat| Õi i-a fost atribuit| o valoare se poate folosi asemenea 0264-401667
oric|rei varabile.
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Report Raport sau subraport deschis. Da
Reports ColecÛie de rapoarte deschise. Nu
Screen Ecranul monitorului. Nu
Section SecÛiune de raport sau o colecÛie de secÛiuni. Nu
poart| denumirea de obiecte pentru accesul la date (Data Access Objects sau DAO) Õi pot fi
folosite în procedurile VBA pentru a acÛiona asupra tabelelor sau datelor din tabele,
interog|rilor, relaÛiilor etc. din bazele de date. Tabelul care urmeaz| descrie obiectele de acces
la date utilizate mai des, specificând dac| pot s| participe sau nu într-o declaraÛie de variabil|.
http://www.east.utcluj.ro/mb/mep/antal
Documents ColecÛie de obiecte Document. Nu
Field Câmp al unui tabel, interogare, mulÛime de Da
înregistr|ri, index sau relaÛie.
Fields ColecÛie de obiecte Field ale unui tabel, Nu
interogare, mulÛime de înregistr|ri etc.
Parameter Parametru de interogare. Da
Acest curs este proprietatea lui
Parameters ColecÛie de parametri de interogare. Nu
QueryDef Interogare salvat| în baza de date. Da
QueryDefs ColecÛie de interog|ri salvate în baza de date. Nu
ANTAL Tiberiu Alexandru.
Cele dou| ierarhii prezentate pân| acum nu conÛin obiecte ci ceea ce în capitolul introductiv
numeam clase, adic| prototipuri sau Õabloane de obiecte. Clasa este similar| cu tipul de dat|
Õi descrie caracteristicile unui obiect. Dac| scriem Dim x As Integer, Integer este
tipul de dat|, iar variabila de acel tip este x, dac| scriem Dim spl As Workspace, clasa
este Workspace, iar variabila de acel tip este obiectul spl.
Variabil|Control este numele unei variabile de tipul Control, iar argumetul TipControl
poate fi unul dintre cuvintele rezervate: BoundObjectFrame, CheckBox, ComboBox,
274 Obiecte în Visual Basic for Applications - cursul 11
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Un exemplu de procedur| care afiÕeaz| în fereastra imediat| tipul unui control este:
deschis.
http://www.east.utcluj.ro/mb/mep/antal
Propriet|Ûile obiectului Screen se folosesc la referirea bazei de date, formularului,
raportului, controlului, care la momentul curent este activ, dup| cum urmeaz|:
În documentaÛia tehnic| original|, obiectul curent de interfaÛ| cu utilizatorul care este activ se
ANTAL Tiberiu Alexandru.
frm.Section(acDetail).BackColor = RGB(255,255,0)
End Sub
Sub Form_Open()
ColoreazaFormular Me
End Sub
http://www.east.utcluj.ro/mb/mep/antal
execuÛie (atunci când folosiÛi evenimentul Timer este posibil ca o procedur| a unui formular
deschis s| fie activat| la momente de timp definite de programator, în timp ce pe ecran mai
exist| un alt formular deschis Õi activ, adic| care comunic| cu utilizatorul) .
ColecÛii implicite
Gruparea obiectelor în colecÛii, a plecat în Access, de la ideea c| obiectele pot conÛine alte
obiecte. Aceste leg|turi sunt cele care creeaz| ierarhia de obiecte. De exemplu, o baz| de date
Acest curs este proprietatea lui
conÛine obiecte tipul formular, obiectul formular conÛine la rândul lui obiecte de tipul control
(cutie de text, secÛiune de detalii etc.). Obiectele de acelaÕi tip conÛinute de alte obiecte sunt
grupate în colecÛii. ColecÛiile pot fi privite asemenea unui tablou declarat automat de Access
la ale c|rui elemente ne referim prin denumirea de element de colecÛie. Din moment ce o
colecÛie este un obiect, aceasta are propriet|Ûile Õi metodele ei proprii. Multe obiecte au o
ANTAL Tiberiu Alexandru.
colecÛie implicit| de obiecte care grupeaz| cele mai probabile obiecte ce vor fi folosite. De
exemplu, Forms are o colecÛie implicit| de controale, iar Databases are o colecÛie
Pt. cumparare viziteaza:
implicit| TableDefs. Nu exist| o colecÛie de obiecte controale, ne referim la un astfel de
obiect ca la un membru al colecÛiei implicite a formularului sau raportului. De exemplu,
Forms![Clienti]![IDClient] se refer| la controlul IDClient al formularului
Clienti din colecÛia implicit| de controale a formularului. Când lucraÛi cu DAO colecÛiile
implicite se pot folosi pentru o scriere mai scurt| a obiectului de identificat, deÕi folosind
aceast| scriere relaÛia dintre obiecte devine mai criptic|, de exemplu, o referire la tabelul
TClienti se poate scrie astfel:
DBEngine.Workspaces(0).Databases(0).TableDefs("TClienti")
sau
DBEngine(0)(0)!TClienti
0264-401667
NU COPIA !.
În primul caz, elementele colecÛiilor sunt scrise explicit, în al doilea cunoscându-se colecÛiile
sau suna la:
implicite se trec numai index-urile corespunz|toare. Tabelul care urmeaz| prezint| câteva
dintre obiectele Access Õi DAO împreun| cu colecÛiile implicite:
TableDef Fields
User Groups
http://www.east.utcluj.ro/mb/mep/antal
Workspace Databases
For i = 0 To tbd.Properties.Count - 1
Debug.Print tbd.Properties(i).Name;E
tbd.Properties(i).Value
Next
End Sub
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• la ap|sarea tastei Enter procedura va fi lansat| în execuÛie, iar rezultatle se vor afiÕa
Pt. cumparare viziteaza:
sub linia PropTabel "Orders".
Pentru crearea unei proceduri Sub care s| afiÕeze propriet|Ûile unui formular creaÛi procedura:
For i = 0 To frm.Properties.Count - 1
Debug.Print frm.Properties(i).Name;E
frm.Properties(i).Value
Next
End Sub
http://www.east.utcluj.ro/mb/mep/antal
Next
End Sub
ObservaÛi c| se foloseÕte colecÛia Forms care conÛine numai formularele deschise ale bazei
de date. Din acest motiv, argumentul procedurii PropFromular trebuie s| fie un nume de
formular care este deschis. Pentru ca s| puteÛi deschide formularul Customer Orders din
meniul Window selectaÛi Northwind: Database. Clic pe butonul Forms din fereastra bazei
Acest curs este proprietatea lui
de date, apoi clic dublu pe numele formularului Customer Orders Õi formularul va fi deschis.
Folosind meniul Windows reveniÛi pe fereastra Debug Window, apoi lansaÛi în execuÛie
procedura scriind PropFormular "Customer Orders". Fereastra Debug Window
permite afiÕarea imediat| a valorilor unor variabile din procedurile aplicaÛiei. Figura care
urmeaz| prezint| cele patru ferestre care au fost parcurse folosind meniul Windows pentru a
ANTAL Tiberiu Alexandru.
deschide un formular. Este posibil s| aveÛi deschise mai multe formulare la un moment dat, în
acelaÕi timp puteÛi avea mai multe module deschise între care puteÛi comuta folosind meniul
Pt. cumparare viziteaza:
Windows. Meniul va conÛine numele tuturor obiectelor Access din fereastra bazei de date
care sunt deschise, indiferent de modul lor de vizualizare (foaie de date, proiectare, formular
etc.).
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
InformaÛiile individuale ale unui obiect salvat sunt conÛinute în obiectul Container care are
o colecÛie Documents. Fiecare obiect Document din colecÛia Documents stocheaz|
informaÛii despre un obiect individual. De exemplu, obiectul Container pentru obiectele
Forms are o colecÛie Documents care include câte un obiect Document pentru fiecare
obiect salvat în baza de date. 0264-401667
NU COPIA !.
Nota7 : DeÕi folosesc acelaÕi nume, obiectul Container pentru obiectele Forms Õi colecÛia
Forms sunt obiecte distincte. În primul caz g|sim numai informaÛii legate de formularele
salvate f|r| a conÛine obiectele în sine. ColecÛia Forms conÛine obiectele de tipul Form
deschise. De exemplu, nu se poate folosi obiectul Documents pentru a modifica titlul unui
formular, pentru aceasta trebuie s| ne referim direct la obiect prin colecÛia Forms. Procedura
care urmeaz| afiÕeaz| toate obiectele Õi propriet|Ûile acestora din colecÛia Containers ale
bazei de date curente:
Set db = CurrentDb()
http://www.east.utcluj.ro/mb/mep/antal
For Each ctr In db.Containers
Debug.Print "Nume container:" & ctr.Name
Debug.Print " Proprietati:"
For Each prp In ctr.Properties
Debug.Print " " & prp.Name & " = "; prp
Next prp
Acest curs este proprietatea lui
Next ctr
db.Close
End Sub
ANTAL Tiberiu Alexandru.
Procedura care urmeaz| afiÕeaz| toate formularele salvate în baza de date curent|:
Pt. cumparare viziteaza:
Set db = CurrentDb()
Set con = db.Containers("Forms")
For Each doc In con.Documents
0264-401667
NU COPIA !.
Debug.Print doc.Name
Next doc
db.Close
End Sub
Evenimente
ÔtiÛi deja c| Access-ul foloseÕte modelul orientat pe evenimente pentru interacÛiunea cu
utilizatorul. În acest scop, obiectele Access r|spund la urm|toarele tipuri de evenimente:
http://www.east.utcluj.ro/mb/mep/antal
comportament specific Õi predefinit. De exemplu, în cazul unei cutii de text, se verific|
automat dac| modific|rile aduse datelor sunt corecte, adic| conform regulilor de validare. Am
vorbit deja despre proceduri de evenimente, în figura care urmeaz| se prezint| un obiect
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
•
sau suna la:
• clic pe câmpul din dreapta lui On Open, apoi clic pe s|geata în jos Õi selectaÛi
[Event Procedure];
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Numele procedurii de eveniment este dat conform convenÛiei deja cunoscute, utilizatorul va
introduce codul dorit între liniile Private Sub Form_Open ... Õi End Sub. Este
posibil ca Access-ul s| apeleze o funcÛie definit| de utilizator ca r|spuns la apariÛia unui
eveniment, în acest caz în locul textului [Event Procedure] se va introduce semnul =
urmat de numele procedurii funcÛie.
Tipuri de evenimente
Atunci când utilizatorul deruleaz| o operaÛie cu un obiect, Access-ul lanseaz| o secvenÛ| de
evenimente. De exemplu, când se deschide un formular evenimentele care apar sunt: Open, Load
284 Obiecte în Visual Basic for Applications - cursul 11
http://www.east.utcluj.ro/mb/mep/antal
ca formularul s| devin| activ, se poate afiÕa o bar| de instrumente specific| lui. O parte din
evenimente pot fi anulate, de exemplu, se poate anula deschiderea unui formular dac| anumite
condiÛii nu sunt îndeplinite. Tipurile de evenimente tratate de Access sunt:
de date
BeforeDelConfirm, BeforeInsert, înregistr|rilor.
BeforeUpdate, Change, Current, Delete,
Pt. cumparare viziteaza:
NotInList, Update
http://www.east.utcluj.ro/mb/mep/antal
Intrarea într-un
control controale active secvenÛa de evenimente declanÕate este: Enter -
GotFocus Õi apar între evenimentele Activate Õi Current ale formularului.
Evenimentele apar când controlul primeÕte focalizarea prima oar|.
Dac| se comut| pe un alt formular Õi se revine pe acelaÕi control al formularului, Access-ul
declanÕeaz| numai evenimentul GotFocus pentru control.
Comutarea între
doua7 formulare active, Access-ul declanÕeaz| evenimentele Deactivate Õi Activate ale
deschise primului formular (F1), de pe care se comut| Õi ale celui de al doilea
Pt. cumparare viziteaza:
(F2), pe care se comut| astfel: Deactivate(F1) - Activate(F2). Dac| nu
exist| controale active pe formulare, ordinea declanÕ|rii evenimentelor
este: LostFocus(F1) - Deactivate(F1) - GotFocus(F2) - Activate(F2).
Evenimente de date
Evenimente de date apar când se modific| datele sau înregistr|rile din baza de date.
Când se modific| textul dintr-un control de tipul Text Box sau Combo
Modificarea unui
text într-un Text Box apare evenimentul Change. El apare la fiecare modificare a
Box sau Combo conÛinutului controlului Õi înainte de trecerea pe un alt control sau
0264-401667
NU COPIA !.
În cazul când actualizarea controlului se face prin deplasarea pe o alt| înregistrare sau prin
286 Obiecte în Visual Basic for Applications - cursul 11
selectarea lui Save Record din meniul File, apar evenimentele BeforeUpdate Õi AfterUpdate atât
pentru control cât Õi pentru formular. De exemplu, dac| se adaug| un caracter într-un Text
Box Õi apoi selectaÛi Save Record, secvenÛa de evenimente care apare este: KeyDown -
http://www.east.utcluj.ro/mb/mep/antal
KeyPressed - Change -KeyUp - BeforeUpdate(TB) - AfterUpdate(TB)- BeforeUpdate(F) - AfterUpdate(F).
Dac| acum ne deplas|m, folosind mouse-ul, de pe un câmp TB1 pe unul TB2, secvenÛa
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
apoi se declanÕeaz| evenimentul AfterDelConfirm dac| în fereastra de mai sus s-a ap|sat butonul
Yes.
Dac| confirmarea Õtergerii este deranjant|, este posibil| evitarea afiÕ|rii acesteia. O procedur|
de eveniment BeforeDelConfirm are dou| argumente, Cancel Õi Response:
Cancel = True
Response=AacDataErrContinue
http://www.east.utcluj.ro/mb/mep/antal
End Sub
Setarea valorii Cancel la True face ca procedura s| fie anulat| Õi Õtergerea s| fie evitat|.
Aceasta este posibil pentru c| înainte de Õtergerea efectiv|, datele Õterse se mut| într-o zon|
temporar| de memorie în care sunt p|strate pân| la confirmarea Õtergerii. Dac| evenimentul
BeforeDelConfirm este anulat, datele sunt ref|cute din aceast| zon| temporar|. Pentru evitarea
afiÕ|rii ferestrei de confirmare a Õtergerii se poate seta parametrul Response la valoarea
Acest curs este proprietatea lui
acDataErrContinue.
Exist| proceduri de eveniment cu parametri care prin valori atribuite în corpul lor pot
modifica secvenÛa de prelucrare a evenimentelor care urmeaz| dup| procedura în cauz|. Cele
ANTAL Tiberiu Alexandru.
mai frecvente cazuri sunt când dorim s| anul|m un eveniment asociat unei proceduri de
eveniment. Urm|toarele evenimente fac parte din categoria celor care pot fi anulate:
BeforeDelConfirm, BeforeInsert, BeforeUpdate, DblClick, Delete, Error, Exit, Format, Open, Print, Unload.
Pt. cumparare viziteaza:
Evenimente implicite
Unele tipuri de obiecte sunt folosite mai des pentru anumite acÛiuni c|rora le corespunde un
eveniment specific. De exemplu, un obiect buton va fi cel mai des ap|sat, acÛiunea de ap|sare
va declanÕa evenimentul Click. Pentru a simplifica scrierea procedurilor de evenimente s-au
definit evenimente implicite. Când creaÛi un control, dac| acesta este selectat Õi ap|saÛi
butonul din dreapta al mouse-ului, veÛi vedea un buton Build Event, dac| din lista afiÕat|
selectaÛi Code Builder, Access-ul va crea automat procedura de eveniment corespunz|toare
evenimentului implicit al controlului. Tabelul care urmeaz| prezint| lista evenimentelor
implicite ale obiectelor Access: 0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Rectangle Click
Report Open
Section Format
Subform Enter
BeforeUpdate
Acest curs este proprietatea lui
Text Box
• erori logice: sunt erori care apar datorit| scrierii unor secvenÛe de intrucÛiuni corecte
sintactic Õi care pot fi executate de VBA, dar care logic sunt invalide motiv pentru care produc
rezultate incorecte. Aceste tip de erori pot fi scoase numai prin analiza atent| a rezultatelor
împreun| cu codul care le produce.
'*************************************************************
Rem * NumeTabel este un sir de caractere care contine *
http://www.east.utcluj.ro/mb/mep/antal
Rem * numele tabelului ale carui proprietati vor fi afisate *
proceduri
întrerupere sau a instrucÛiunii Stop în acest scop. La folosirea unui
punct de întrerupere trebuie s| poziÛionaÛi cursorul pe o instrucÛiune
executabil|, apoi clic pe pictograma (Toggle Breakpoint) Õi instrucÛiunea va fi marcat|
ca în figura urm|toare.
290 Obiecte în Visual Basic for Applications - cursul 11
Scoaterea unui punct de întrerupere se face prin poziÛionarea pe instrucÛiunea marcat|, apoi
clic pe aceeaÕi pictogram|.
http://www.east.utcluj.ro/mb/mep/antal
Cazurile de mai sus au fost întreruperi executate voit de programator, dar VBA va suspenda
execuÛia codului Õi în cazul în care apare o eroare la execuÛia unei instrucÛiuni, acestea se
numesc erori în execuÛie.
Not|: Utilizatorul poate întrerupe de la tastatur| execuÛia unui cod prin combinaÛia de taste
Ctrl+Break, de exemplu pentru o porÛiune de program care a intrat într-un ciclu infinit.
Acest curs este proprietatea lui
Dac| eroarea a fost descoperit| Õi am f|cut modific|ri în cod pentru evitarea ei se poate s|
dorim s| actualiz|m valorile stocate în variabilele codului. Pentru aceasta se poate selecta
pictograma Reset, ca urmare toate variabilele numerice îÕi pierd valoarea actual| Õi vor fi
resetate la valoarea 0, variabilele de tipul Variant primesc valoarea Empty, Õirurile cu
lungime variabil| valoarea "" iar cele cu lungime fix| sunt iniÛializate cu valoarea ASCII 0.
ANTAL Tiberiu Alexandru.
Valoarea funcÛiei va fi afiÕat| numai dac| programul întrerupt este continuat în execuÛie pân|
http://www.east.utcluj.ro/mb/mep/antal
la cap|t prin selectatrea pictogramei (Go/Continue).
modificaÛi valorile pe care le iau anumite variabile legate de evenimente pentru ca depanarea
sau suna la:
s| se poate realiza.
Dac| suspendaÛi execuÛia unei proceduri MouseDown, prin folosirea unui punct de întrerupere,
puteÛi elibera butonul mouse-ului sau s| folosiÛi mouse-ul pentru anumite acÛiuni. Dar, când
veÛi continua execuÛia procedurii, aplicaÛia va presupune c| butonul mouse-ului este înc|
ap|sat. Evenimentul MouseUp va apare numai când butonul mouse-ului este ap|sat Õi eliberat
din nou. Când ap|saÛi din nou butonul mouse-ului dup| continuarea execuÛie programului,
evenimentul MouseDown este întrerupt din nou din cauza punctului de întrerupere, astfel,
conform acestui scenariu evenimentul MouseUp nu apare. SoluÛia este scoaterea punctului de
întrerupere. Problema este similar| la KeyDown Õi KeyUp.
Suspendarea execuÛiei în timpul evenimentelor GotFocus sau LostFocus poate conduce la apariÛia
unor mesaje inconsistente, evitarea situaÛiei f|cându-se prin folosirea lui Debug.Print pe
locul punctului de întrerupere.
292
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
293 Tratarea erorilor în VBA s- i Access SQL - cursul 12
Obiectivele cursului 12
http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
- operatorul de reuniune;
Pt. cumparare viziteaza:
- instrucÛiunile de actualizare: UPDATE, DELETE, INSERT
INTO Õi SELECT INTO;
- definiÛia datelor prin instrucÛiunile: CREATE TABLE, CREATE
INDEX, ALTER TABLE Õi DROP.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
apariÛiei unei erori, în loc ca Access-ul s| fie l|sat s| afiÕeze un mesaj de eroare, prin folosirea
unui secvenÛe de cod speciale pentru prinderea erorii (error trapping), acesta este obligat s|
execute o secvenÛ| de cod special| în vederea trat|rii situaÛiei deosebite ap|rute. Tratarea
erorii const|, fie în corectarea automat| a ei, fie prin atenÛionarea utilizatorului asupra unei
secvenÛe de acÛiuni pe care trebuie s| le deruleze pentru evitarea acesteia. În continuare se
prezint| metode de tratatre a erorilor în cursul execuÛiei aplicaÛiei. Erorile datorate scrierii
incorecte ale unor instrucÛiuni se g|sesc în faza de compilare a modulului în cauz|, cele de
execuÛie se rezolv| conform tabelului:
Acest curs este proprietatea lui
respectiv.
În codul VBA Se foloseÕte instrucÛiunea On Error pentru prinderea ei Õi o
Pt. cumparare viziteaza:
porÛiune de program specific| pentru tratarea ei.
http://www.east.utcluj.ro/mb/mep/antal
MsgBox MesEr, vbCritical, "Violare a integritatiiE
referentiale"
Response = acDataErrContinue
End Select
End Sub
Acest curs este proprietatea lui
înainte de scrierea celorlate linii de cod pentru a afla valoarea numeric| în cauz|. Pe ecran, în
ferestra imediat|, vor fi afiÕate valoarea numeric| a erorii Õi prin folosirea funcÛiei Error()
un text corespunz|tor erorii ap|rute, dac| în modul formular se încearc| introducerea unei
valori incorecte. Apoi, aceste linii vor fi transformate în comentarii Õi codul poate fi introdus
0264-401667
NU COPIA !.
în continuare.
sau suna la:
Este posibil| sugerarea unor acÛiuni pe care utilizatorul trebuie s| le fac| pentru evitarea
erorii, de exemplu se poate ad|uga codul DoCmd.OpenForm "FTTipContact" ce va
deschide formularul în care trebuie introduse noile tipuri de contacte. Pentru aceasta
procedura se va scrie sub forma:
http://www.east.utcluj.ro/mb/mep/antal
MesEr = "Conform integritatii referentiale," & NL
MesEr = MesEr & "Pentru IDInfContact dinE
TContacte1"
MesEr = MesEr & "trebuie sa existe o inregistrareE
" & NL
MesEr = MesEr & "TTipContacte."
MsgBox MesEr, vbCritical, "Violare a integritatiiE
Acest curs este proprietatea lui
referentiale"
SendKeys "{ESC}", True
DoCmd.OpenForm "FTTipContact"
Response = acDataErrContinue
ANTAL Tiberiu Alexandru.
Case Else
Pt. cumparare viziteaza:
Response = acDataErrDisplay
End Select
End Sub
Procedura SendKeys transmite ferestrei curente una sau mai multe taste ca Õi când acestea ar
fi tastate prin ap|sare de la tasatatur|. În cazul de mai sus s-a folosit tasta Esc, care va anula
modific|rile f|cute în controlul (sau câmpul) curent.
ad|ugarea codului corespunz|tor trat|rii erorii. InstrucÛiunea On Error va fi codul VBA care
sau suna la:
se va executa, în caz de eroare, ea specificând modul în care va fi tratat| eroarea ap|rut|. Este
posibil ca mai multe instrucÛiuni On Error s| apar| într-o singur| procedur|, dar numai cea
mai recent| este activ|. On Error are mai multe variante care vor fi discutate în continuare.
Sub ProceduraGenericadeTratareaErorilor()
297 Tratarea erorilor în VBA s- i Access SQL - cursul 12
http://www.east.utcluj.ro/mb/mep/antal
-iei lui
'Orice cod care poate genera o eroare în timpul execut
Iesire_in_caz_de_Eroare:
Exit Sub
CodGenericPentruTratareaErorilor:
Acest curs este proprietatea lui
End Sub
Pt. cumparare viziteaza:
Când o eroare apare, controlul este dat etichetei specificate în linia On Error GoTo
CodGenericPentruTratareaErorilor. Eticheta trebuie s| apar| scris| în cadrul
aceleiaÕi proceduri cu instrucÛiunea On Error GoTo
CodGenericPentruTratareaErorilor. Prin convenÛie, codul pentru tratarea erorii se
scrie la sfârÕitul procedurii. Dac| veÛi încerca s| creaÛi un buton de comand| care s| închid|
un formular, codul pe care Generatorul îl scrie pentru procedura de tratare a evenimentului On
Click este:
DoCmd.Close
Exit_Command13_Click:
Exit Sub
Err_Command13_Click:
MsgBox Err.Description
Resume Exit_Command13_Click
End Sub
298 Tratarea erorilor în VBA s- i Access SQL - cursul 12
Trebuie s| folosiÛi o instrucÛiune Exit Sub sau Exit Function pentru a p|stra execuÛia
normal| a liniilor din program. Dac| o eroare a ap|rut controlul este dat porÛiunii de cod care
trateaz| eroarea aceast| fiind o starea special| a procedurii în care:
http://www.east.utcluj.ro/mb/mep/antal
< codul de tratare a erorii definit prin instrucÛiunea On Error GoTo
CodGenericPentruTratareaErorilor nu mai are efect. Aceasta înseamn| c| în
cazul apariÛiei unei erori în porÛiunea de cod care trateaz| prima eroare, noua eroare este
tratat| ca Õi cum nu exist| un cod pentru tratarea acesteia;
< se poate folosi instrucÛiunea Resume (care va fi descris| în paragraful urm|tor) pentru
a reda controlul procedurii principale Õi pentru a relua modalitatea de tratare normal| a
erorilor;
Acest curs este proprietatea lui
< nu se poate executa o instrucÛiune End Sub sau End Function pentru p|r|sirea
codului de tratarea a erorii. Trebuie folosit| explicit una dintre instrucÛiunile Exit Sub sau
Exit Function pentru p|r|sirea procedurii. O tehnologie software comun| spune c| o
procedur| ar trebui s| aib| un singur punct de intrare Õi unul singur de ieÕire, deci o idee ar fi
utilizarea lui Resume etichet| pentru a reda controlul codului principal, într-un punct de
p|r|sire comun mai multor porÛiuni al acestuia.
ANTAL Tiberiu Alexandru.
Kill numefisier
End Sub
Dac| de exemplu, fiÕierul de Õters nu exist|, instrucÛiunea Kill genereaz| o eroare în timpul
execuÛiei procedurii StergeFisier. Datorit| instrucÛiunii On Error Resume Next,
eroarea ap|rut| este ignorat| Õi controlul este dat instrucÛiunii urm|toare, pentru acest caz
instrucÛiunea End Sub.
http://www.east.utcluj.ro/mb/mep/antal
posibilitatea anul|rii codului de tratare a erorilor prin instrucÛiunea On Error GoTo 0.
Resume: red| controlul instrucÛiunii care a generat eroarea. Se foloseÕte atunci când codul de
Acest curs este proprietatea lui
tratare a erorii a rezolvat motivul apariÛiei ei Õi se doreÕte continuarea din locul în care a
ap|rut problema;
Resume Next: se foloseÕte în interiorul codului de tratare al erorii atunci când se doreÕte
ANTAL Tiberiu Alexandru.
Obiectul Err
VBA are un obiect pentru determinarea erorii ap|rute în timpul execuÛiei codului. Câteva
dintre propriet|Ûile obiectului se prezint| în tabelul care urmeaz|.
Err.Description
sau suna la:
Access SQL
http://www.east.utcluj.ro/mb/mep/antal
Limbajul SQL (Structured Query Language) este cel mai popular limbaj neprocedural pentru
accesul la datele stocate în SGBDR-uri pe toate tipurile de calculatoare (calculatoare
personale, profesionale Õi sisteme mari). El asigur| o interfaÛ| între utilizator Õi un SGBDR,
fiind dezvoltat de IBM în 1970 pentru System R (un SGBD dezvoltat într-un proiect de
cercetare la IBM San Jose Research, azi IBM Almaden Research Center, în care s-a introdus
limbajul SQL Õi s-a ar|tat c| SGBDR-urile au performaÛe bune de prelucrare a tranzacÛiilor).
Access-ul sprijin| lucrul cu SQL f|r| a suporta îns| ANSI SQL în totalitate. Primul standard
SQL ap|rut în 1986, descria elementele de baz| ale limbajului pentru definirea Õi manipularea
Acest curs este proprietatea lui
tabelelor. Revizia din 1989 ad|uga limbajului extensii pentru integritatea referenÛial| Õi
constrângerile de integritate generalizat|. O alt| revizie în 1992 furniza facilitatea de
manipulare a schemei bazei de date Õi de administrare a datelor împreun| cu îmbun|t|Ûiri
substanÛiale pentru definirea Õi manipularea datelor.
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
[]
sau suna la:
de câte o bar| vertical| (|). Dac| sunt mai multe se alege una sau
nici una dintre ele. Nu se introduc parantezele sau caracterul bar|.
De menÛionat c| Microsoft Access necesit| în multe cazuri
introducerea de nume între paranteze. Atunci când parantezele sunt
necesare, facând parte din sintaxa variabilei pe care trebuie s-o
d|m, parantezele sunt înclinate, ca în [Tabelul Meu].[Câmpul
Meu].
{} Acoladele includ una sau mai multe opÛiuni, separate de câte un
caracter bar| (|), dac| sunt mai multe nu se introduce paranteza sau
caracterul |.
() Parantezele rotunde indic| repetarea unui articol, o dat| sau de mai
multe ori. Când apare o virgul| împreun| cu o parantez| rotund|,
se introduce virgula între articole.
În general, o comand| este format| dintr-un verb care indic| acÛiunea Õi un num|r de clauze,
302 Tratarea erorilor în VBA s- i Access SQL - cursul 12
care particularizeaz| efectul verbului. Forma general| a unei comenzi SQL este:
<VERB> [<clauza1>][<clauza2>]
http://www.east.utcluj.ro/mb/mep/antal
<VERB> este un cuvânt cheie care specific| operaÛia de executat
<clauza> difer| de la comand| la comand| Õi poate fi fi o construcÛie a utilizatorului sau un
cuvânt cheie a limbajului.
InstrucÛiunea SELECT
Acest curs este proprietatea lui
SELECT este inima limbajului SQL. Se foloseÕte pentru a selecta sau a extrage linii Õi
coloane din tabelele bazei de date. Sintaxa instrucÛiunii SELECT conÛine cinci clauze majore
dup| cum urmeaz|:
ANTAL Tiberiu Alexandru.
Clauza SELECT
Se foloseÕte pentru specificarea coloanelor care s| fie incluse în mulÛimea de înregistr|ri
rezultat|. Numele coloanelor se specific| analog cu cele din grila Access QBE.
0264-401667
NU COPIA !.
expresie poate fi un simplu nume de coloan|, o expresie de nume de coloane sau de funcÛii
SQL de agregare. Similar cu QBD, * Õi aici indic| toate câmpurile unui tabel. DefiniÛia
sintactic| pentru expresie este:
funcÛie: o funcÛie de agregare SQL, cum ar fi AVG, COUNT, MAX, MIN, STDEV, STDEVP,
SUM, VAR, VARP sau orice alt| funcÛie construit| în Microsoft Access sau definit| de
utilizator folosind VBA.
(expresie): o expresie cu unul sau mai mulÛi termeni.
constant|: o constant| alfabetic| sau numeric|. Constanta alfabetic| trebuie inclus| între
ghilimele simple sau duble. Pentru a introduce un apostrof în constanta alfabetic|, e necesar s|
303 Tratarea erorilor în VBA s- i Access SQL - cursul 12
se introduc| apostroful de dou| ori în Õirul literal. Dac| expresia e numeric|, trebuie folosit| o
constant| numeric|. O constant| de tip dat|/timp va fi inclus| între dou| semne pound (#).
nume-coloan|: numele unei coloane dintr-un tabel sau dintr-o interogare. Se poate folosi
http://www.east.utcluj.ro/mb/mep/antal
numele unei coloane sau interog|ri care s-a specificat în articolul FROM din declaraÛie. Dac|
expresia este una numeric|, trebuie folosit| o coloana ce conÛine date numerice. Dac| acelaÕi
nume-coloana apare în dou| sau mai multe dintre tabelele sau interog|rile incluse în
interogare, acesta trebuie modificat cu numele interog|rii, numele tabelului, sau cu unul
corespunz|tor, ca de exemplu [tabelA].[coloana1].
+| -| * | / | \ | MOD: operatori ce definesc calcule. Dac| apar e necesar ca toate subexpresiile
din interiorul unei expresii s| poat| fi evaluate ca date de tip numeric.
Acest curs este proprietatea lui
&: operator folosit pentru concatenarea constantelor alfabetice.
Exemple:
SELECT *
ANTAL Tiberiu Alexandru.
Clauza FROM
DefineÕte tabelele Õi/sau interog|rile prev|zute care reprezint| surse de date pentru
interogarea noastr|.
FROM {{nume-tabel [[AS] alias] | nume-interogare [[AS] alias]} | < tabele asociate >},...
La fel ca la clauza SELECT, unde se putea folosi un nume alternativ (alias) pentru coloan| Õi
FROM-ul permite folosirea de nume alternative. Alias-ul, uneori numit Õi nume de corelare,
se scrie imediat dup| numele tabelului precedat de cuvântul cheie AS. Numele alternative se 0264-401667
folosesc pentru scrierea mai scurt| a unor nume, sunt îns| obligatorii când se specific|
NU COPIA !.
Exemple:
SELECT *
FROM TComenzi;
Clauza WHERE
Clauza restricÛioneaz| (filtreaz|) rândurile întoarse de o interogare. Ea corespunde liniilor
Criteria sau Or din Access QBE. Coloanele referite în WHERE nu trebuie s| fie incluse în
http://www.east.utcluj.ro/mb/mep/antal
lista coloanelor specificate în clauza SELECT. Efectul este identic dac| în QBE se invalideaz|
cutia Show din QBE.
expresie are acelaÕi format cu expresiile Access QBE. Pot fi referite coloane, funcÛii definite
de utilizator Õi operatori în fiecare expresie
Acest curs este proprietatea lui
Exemple:
SELECT ComandaID, ComandaData, ComandaPret
ANTAL Tiberiu Alexandru.
FORM TComenzi
WHERE ComandaPret > 100000;
Pt. cumparare viziteaza:
Clauza ORDER BY
Clauza opÛional| se foloseÕte pentru sortarea rândurilor întoarse de o interogare cu una sau
mai multe coloane. Cuvintele cheie ASC sau DESC specific| sortarea cresc|toare sau
descresc|toare. Sortarea cresc|toare este implicit|. Clauza corespunde liniei Sort din Access 0264-401667
QBE, iar precedenÛa sort|rii este de la stânga la dreapta.
NU COPIA !.
Este posibil| Õi sortarea pe baza valorilor unor expresii. Sortarea pe baza coloanelor indexate
este mult mai rapid| decât pe baza unor expresii oarecare.
Exemple:
SELECT *
FORM TClienti
ORDER BY Nume, Prenume;
SELECT *
FORM TClienti
305 Tratarea erorilor în VBA s- i Access SQL - cursul 12
Asocierea tabelelor
http://www.east.utcluj.ro/mb/mep/antal
Dac| baza de date a fost normalizat| este necesar| crearea unor interog|ri care au ca surs| de
date mai multe tabele. Când se acceseaz| mai multe tabele, în SQL, la fel ca în Access QBE,
tabelele trebuie s| fie asociate (join) pe baza unor coloane pentru a produce rezultate care au
semnificaÛie. Dac| tabelele nu sunt asociate, rezultatul interog|rii va fi produsul cartezian al
tabelelor care sunt sursele de date.
Exist| dou| metode de asociere a tabelelor în Access SQL: prin folosirea clauzei FROM Õi
Acest curs este proprietatea lui
prin clauza WHERE. Asocierea cu WHERE a fost parte a SQL-ului începând cu SQL-89;
asocierea prin FROM este o clauz| ad|ugat| standardului ANSI SQL-92.
Folosind SQL-89, asocierea a dou| tabele, tabel1 Õi tabel2, pe baza coloanelor, coloana1 Õi
ANTAL Tiberiu Alexandru.
SELECT list|-coloane
FROM tabel1 {INNER | LEFT [OUTER] | RIGHT [OUTER]} JOIN tabel2
ON tabel1.coloana1 = tabel2.coloana2
0264-401667
NU COPIA !.
Exemple:
De exemplu, dac| am dori s| select|m câmpurile ComandaID, ComandaData, Nume Õi
Prenume cu toate comenzile care au fost f|cute înainte de 28 iulie 2000, folosind SQL-89
scriem:
http://www.east.utcluj.ro/mb/mep/antal
FROM TComenzi INNER JOIN TClienti
ON TClienti.ClientID = TComenzi.ComandaID
WHERE ComandaData <= #07/28/2000#
Este de preferat folosirea sintaxei lui SQL-92 pentru c| mulÛimile de întregistr|ri nu se pot
actualiza.
Acest curs este proprietatea lui
RIGHT OUTER JOIN, a clauzei FROM pentru asocierea mai multor tabele este:
Pt. cumparare viziteaza:
FROM (... (tabel1 JOIN tabel2 ON condiÛiaA) JOIN tabel3 ON condiÛiaB) JOIN ...)
Asociere non-equi
Asocierile discutate se numesc în literatura de specialitate equi joins, adic| se bazeaz| pe
egalitatea unui câmp cu altul. Asocieri non-equi sunt cele în care se apar operatorii >, <, >=,
<=, <> sau Between.
0264-401667
NU COPIA !.
Lista coloanelor din clauza SELECT poate fi precedat| cu unul dintre predicatele de
cuantificare mutual exclusive: ALL, DISTINCTROW (specific Acces SQL-ului) sau
DISTINCT. Ele controleaz| modul în care sunt tratate valorile Õi înregistr|rile duplicate.
Sintaxa clauzei SELECT cu folosirea acestor predicate este:
Dac| nu se scrie niciunul dintre predicate se presupune implicit ALL. ALL întoarce toate
rândurile care respec| criteriul impus. Nu se fac prelucr|ri speciale pentru asigurarea unicit|Ûii
rândurilor. În Access QBE aceasta se realizeaz| prin setarea propriet|Ûilor UniqueValues Õi
UniqueRecords a interog|rii la valoarea No. Folosirea lui DISTINCT produce eliminarea
rândurilor duplicate în mulÛimea de înregistr|ri rezultat| pe baza coloanelor conÛinute în
clauza SELECT. Când se foloseÕte DISTINCT mulÛimea de înregistr|ri ale interog|rii nu se
poate actualiza, iar performanÛele interog|rii scad. Setarea propriet|Ûii UniqueValues la Yes
307 Tratarea erorilor în VBA s- i Access SQL - cursul 12
în Acces QBE este echivalentul acestui predicat. La folosirea lui DISTINCTROW, se elimin|
întregistr|rile duplicate în mulÛimea rezultat| pe baza tuturor coloanelor din tabele surs|. Nu
are efect dac| interogarea are un singur tabel surs| sau dac| nu întoarce cel puÛin câte o
http://www.east.utcluj.ro/mb/mep/antal
coloan| din fiecare tabel. Predicatul DISTINCTROW este echivalent cu proprietatea
UniqueRecords. Pentru majoritatea tipurilor de interogare pentru care se poate aplica
DISTINCTROW (interog|ri cu mai multe tabele Õi unde cel puÛin un tabel este inclus în
clauza FROM f|r| o coloan| corespondent| în clauza SELECT - adic| un tabel este inclus
f|r| a avea coloane de ieÕire) produce acelaÕi rezultat cu predicatul DISTINCT, cu o singur|
diferenÛ|, mulÛimea de înregistr|ri se poate actualiza.
Agregarea datelor
Acest curs este proprietatea lui
Interog|rile de agregare sunt utile pentru sumarea datelor, calcule statistice, depistarea datelor
greÕite. Acest tip de interog|ri produc mulÛimi de înregistr|ri (recordset) care pot fi numai
citite. Câteva din metodele de construire în Access SQL a interog|rilor de agregare sunt:
• interog|ri de agregare simple cu instrucÛiunea SELECT f|r| clauza GROUP BY;
ANTAL Tiberiu Alexandru.
Aceste interog|ri au în comun folosirea a cel puÛin una dintre funcÛiile de agregare prezentate
în tabelul care urmeaz| în clauza SELECT.
înregistr|ri.
Sum([coloana]) Suma valorilor din coloan|. nu
Min([coloana]) Cea mai mic| valoare din coloan|. nu
Max([coloana]) Cea mai mare valoare din coloan|. nu
First([coloana]) Valoarea coloanei din primul rând al da
mulÛimii de înregistr|ri rezultate.
Last([coloana]) Valoarea coloanei din ultimul rând al da
mulÛimii de înregistr|ri rezultate.
StDev([coloana]) Abaterea standard pentru un eÕantion de nu
populaÛie.
StDevP([coloana]) Abaterea standard pentru o populaÛie. nu
308 Tratarea erorilor în VBA s- i Access SQL - cursul 12
http://www.east.utcluj.ro/mb/mep/antal
VarP([coloana]) VariaÛia statistic| pentru o populaÛie. nu
Este posibil| folosirea unor expresii din combinaÛii de funcÛii de agregare Õi matematice, iat|
câteva exemple:
Pentru a însuma (cu Sum()) valorile absolute (cu funcÛia Abs()) ale câmpului
Cheltuieli scriem: Sum(Abs([Cheltuieli])).
Acest curs este proprietatea lui
Pentru a calcula valoarea medie a costului unor articole putem scrie: Avg([Pret]*
[Cantitate]*(1-[Reducere])).
ANTAL Tiberiu Alexandru.
Exemplu:
SELECT COUNT(ComenziID) AS NumarulTotal, MIN(ValoareComanda) AS
ComandaMinima, MAX(ValoareComanda) AS ComandaMaxima
FROM TComenzi;
Clauza GROUP BY se foloseÕte pentru a defini grupuri de rânduri pentru care se doreÕte
calculul funcÛiei de agregare. Iat| modul în care clauza GROPU BY se intercaleaz| în sintaza
instrucÛiunii SELECT:
SELECT lista-coloane
FROM lista-tabele
[WHERE clauza-where]
[GROUP BY clauza-groupby]
[HAVING clauza-having]
[ORDER BY clauza-orderby]
http://www.east.utcluj.ro/mb/mep/antal
Expresiile din clauza GROUP BY pot referi coloane de tabele, câmpuri calculate sau
constante. Termenii expresiei nu pot fi funcÛii de agregare. Câmpurile din GROUP BY
definesc grupurile întoarse de interogare. La folosirea clauzei GROUP BY, toate câmpurile
din clauza SELECT trebuie s| fie argumente ale unei funcÛii de agregare sau s| fie prezente în
clauza GROUP BY.
Exemplu:
Pentru calculul num|rului comenzi ale unor clienÛi scriem:
Acest curs este proprietatea lui
ClientID NumardeComenzi
1 24
2 14
3 1
4 12
Interog|rile de agregare pot conÛine una din clauzele WHERE sau HAVING sau pe ambele. 0264-401667
Orice criterii din WHERE sunt aplicate înainte de gruparea rândurilor. Din acest motiv clauza
NU COPIA !.
WHERE se poate folosi pentru excluderea rândurilor care nu doriÛi s| fie grupate. Orice
sau suna la:
criterii din HAVING sunt aplicate dup| grupare. Astfel, se pot filtra rânduri pe baza
statisticilor de sumare calculate pe grupuri. Sintaxa pentru clauza HAVING este:
Exemplu:
S| presupunem c| doriÛi s| calculaÛi cantitatea medie comandat| din fiecare articol de un
individ, exculzându-i pe cei care au comandat mai puÛin de 3 articole. Pentru c| se doreÕte
excluderea rândurilor care nu respect| criteriul impus înainte de a se face gruparea lor vom
folosi clauza WHERE astfel:
http://www.east.utcluj.ro/mb/mep/antal
Dac| doriÛi s| realizaÛi aceleaÕi calcule cu eliminarea articolelor din muÛimea de înregistrare
dac|, în medie, mai puÛin de 3 articole au fost vândute pe o comand|, criteriul trebuie aplicat
dup| ce s-au evaluat valorile medii pentru fiecare grup. Pentru aceasta se va folosi clauza
HAVING dup| cum urmeaz|:
Acest curs este proprietatea lui
SELECT DenumireArticol, Avg(Cantitate)
AS CantitateMedieComandata
FROM TArticole INNER JOIN TComenzi ON TArticole.ArticolID=TComenzi.ArticolID
GROUP BY DenumireArticol
ANTAL Tiberiu Alexandru.
instrucÛiune-select1
sau suna la:
UNION[ALL]
instrucÛiune-select2
[UNION[ALL]
instrucÛiune-select3]
[...]
Access-ul pune în corespondenÛ| coloanele din fiecare SELECT pe baza poziÛiilor din
SELECT Õi nu pe baza numelor de coloane. Implicit, Access-ul elimin| înregistr|rile
duplicate. Se poate forÛa includerea dublurilor prin folosirea opÛiunii ALL.
Exemplu:
Dac| dorim s| cre|m o interogare care reuneÕte toate adresele Õi numele elevilor Õi
311 Tratarea erorilor în VBA s- i Access SQL - cursul 12
SELECT Nume & ": " Prenume AS Nume, Adresa, Oras, Cod
http://www.east.utcluj.ro/mb/mep/antal
FROM TProfesori
UNION
SELECT Nume & ": " Prenume AS Nume, Adresa, Oras, Cod
FROM TElevi
Se poate folosi clauza ORDER BY pentru sortarea înregistr|rilor din mulÛimea de înregistr|ri
Acest curs este proprietatea lui
rezultat|. Dac| unele nume de coloane difer|, se va folosi numele din ultimul SELECT pentru
a specifica ordinea din mulÛimea de înregistrare rezultat|.
SELECT Nume
ANTAL Tiberiu Alexandru.
FROM TProfesori
UNION ALL
Pt. cumparare viziteaza:
SELECT NumeElev
FROM TElevi
ORDER BY Nume;
Compatibilitatea interog|rilor
Interog|rile sunt compatibile pentru a fi reunite dac| au acelaÕi num|r de coloane. Access-ul
foloseÕte urm|toarele reguli pentru a le combina:
• pentru coloane cu nume diferite, se foloseÕte numele coloanei din prima interogare;
• pentru coloane cu tipuri de date diferite Access-ul va converti datele coloanelor la un
singur tip de dat| care este compatibil cu toate tipurile de date ale coloanelor.
0264-401667
NU COPIA !.
Subinterog|ri
Este posibil ca o parte a unei instrucÛiuni SELECT s| fie o alt| instrucÛiune SELECT. Tipic,
subinterog|rile se folosesc în clauza WHERE pentru a filtra rezultatele afiÕate de interogare
pe baza valorilor unei alte interog|ri (subinterogarea). Urm|toarele forme sintactice sunt
definite pentru subinterog|ri:
• expresie [NOT] IN (instrucÛiune-select): se foloseÕte pentru a verifica dac| valoarea
unei coloane face parte dintr-o list| de valori.
Exemplu:
S| presupunem c| dorim selectarea num|rului de identificare (ProdusID), a numelui
(Descriere) Õi a preÛului(Pret) pentru toate produsele care care s-au vândut în cantitate
(Cantitate) mai mic| de 7 pentru ca s| renunÛ|m a le mai comercializa.
312 Tratarea erorilor în VBA s- i Access SQL - cursul 12
http://www.east.utcluj.ro/mb/mep/antal
(SELECT ProdusID FROM TProduseDetalii WHERE Cantitate <=6);
Utilizarea operatorului NOT va duce la întoarcerea valorilor care nu sunt în list|. Aceast|
form| de subinterogare poate întoarce numai o singur| coloan|;
Predicat Descriere
f|r| Realizeaz| comparaÛia cu o singur| valoare.
ANTAL Tiberiu Alexandru.
Exemplu:
Dac| dorim s| cunoaÕtem care sunt automobilele mai scumpe decât SKODA:
Exemplu:
Dac| dorim s| g|sim automobilele care nu au fost cump|rate de nici un client, folosind NOT
EXIST scriem:
SQL cu parametri
La fel ca în Access QBE Õi în SQL se pot specifica parametrii care vor fi rezolvaÛi în timpul
http://www.east.utcluj.ro/mb/mep/antal
execuÛiei aplicaÛiei. Sintaxa pentru declaraÛia parametrilor este:
Exemplu:
Acest curs este proprietatea lui
Dac| doriÛi s| afiÕ|m comenzile din tabelul Orders între dou| date Data1 Õi Data2 scriem:
Fiecare parametru trebuie s| aib| un tip de dat| din lista tipurilor SQL prezentate în tabelul
care urmeaz|:
http://www.east.utcluj.ro/mb/mep/antal
corespondenÛ| în Access QBE se prezint| în tabelul care urmeaz|:
Toate fac parte Õi din ANSI SQL, cu excepÛia ultimei, mai precis SELECT INTO este folosit|
ANTAL Tiberiu Alexandru.
cu totul altfel pentru mutarea unui singur rând de date într-o list| de variabile.
Pt. cumparare viziteaza:
InstrucÛiunea UPDATE
Se foloseÕte pentru modificarea valorilor din una sau mai multe coloane ale unui tabel.
Sintaxa este:
UPDATE tabel-interogare
SET coloana1=expresie1 [, coloana2=expresie2] [, ...]
[WHERE criteriu];
datelor. Expresia din clauza SET poate fi o constant| sau rezultatul unor calcule.
sau suna la:
Exemplu:
Pentru a creÕte preÛul produselor care nu sunt automobile din tabelul TProduseDetalii cu 1.05
scriem:
UPDATE TProduseDetalii
SET TProduseDetalii.Pret = [Pret]*1.05
WHERE DescriereProdus Not Like "Automobil*";
Standardul ANSI permite utilizarea subinterog|rilor în clauza SET, în timp ce Access SQL-ul
nu le suport|, dar suport| asocieri, aceasta fiind o deviere de la standard, pentru a asigura o
oarecare echivalenÛ| în funcÛionare.
315 Tratarea erorilor în VBA s- i Access SQL - cursul 12
InstrucÛiunea DELETE
Se foloseÕte pentru Õtergerea rândurilor dintr-un tabel. Sintaxa ei este:
http://www.east.utcluj.ro/mb/mep/antal
DELETE [tabel.*]
FROM clauza-form
[WHERE criteriu];
Folosirea lui tabel.* este opÛional| pentru interog|ri ce se refer| la un singur tabel. Este
posibil| Õtergerea rândurilor din tabel asociate respectând regulile:
Acest curs este proprietatea lui
• se pot folosi datele unui tabel pentru a decide care rânduri s| fie Õterse dintr-un tabel
asociat. Aceasta se realizeaz| folosind o asociere în clauza FROM sau prin folosirea unei
subinterog|ri în clauza WHERE. RelaÛia dintre tabele poate fi 1º1 sau 1ºM;
• se pot Õterge rânduri cu o singur| interogare DELETE dac| tabelele sunt în relaÛia de
ANTAL Tiberiu Alexandru.
1º1;
• se pot Õterge rânduri din tabelele asociate printr-o relaÛie 1ºM cu o serie de interog|ri
Pt. cumparare viziteaza:
DELETE.
Exemplu:
Pentru a Õterge toÛi clienÛii din TClienti care nu au f|cut o comand| în ultimii 3 ani scriem:
DELETE
FROM TClienti
WHERE TClienti.ClientID NOT IN
(SELECT ClientID FROM TClienti WHERE DataComenzii > DateAdd('yyyy',-3,Date()));
0264-401667
NU COPIA !.
Exemplu:
Cea mai simpl| form| este copierea întregului conÛinut al unui tabel (TClienti) în altul
(TClientiNou) scriem:
Dac| doriÛi inserarea unui rând de valori unui tabel se foloseÕte sintaxa:
http://www.east.utcluj.ro/mb/mep/antal
INSERT INTO tabel-interogare [(coloana1 [, coloana2 [, ...]])]
VALUES (valoare1 [, valoare2 [, ...]]);
Dac| referinÛele coloanelor sunt omise trebuie incluse valori pentru fiecare coloan| în ordinea
de apariÛie din definiÛia tabelului. Dac| referinÛele coloanelor sunt scrise, se pot omite coloane
Õi se poate modifica ordinea de apariÛie a valorilor.
Acest curs este proprietatea lui
Exemplu:
Pentru a insera un rând nou în tabelul TProduse scriem:
ANTAL Tiberiu Alexandru.
Exemplu:
Pentru crearea tabelului TComenziVasile scriem:
Atât INSERT INTO cât Õi SELECT INTO pot include orice instrucÛiune SELECT care
produce o mulÛime de întregistr|ri folosind clauza GROUP BY, asocieri, subinterog|ri sau
operatorul UNION.
317 Tratarea erorilor în VBA s- i Access SQL - cursul 12
http://www.east.utcluj.ro/mb/mep/antal
vechea Data Access Objects (DAO). În paragraful care urmeaz| se vor prezenta, într-o
versiune concentrat|, interog|rile DDL. La fel ca Õi în cazul interog|rilor de reuniune, se
lucreaz| interog|ri DDL ce folosesc SQL. Nu exist| un corespondent în Access QBE. De
asemenea, se pot executa interog|ri DDL prin definirea Õi executarea unei definiÛii de
interogare folosind VBA. Tabelul care urmeaz| prezint| 4 instrucÛiuni DDL suportate de
SQL:
Acest curs este proprietatea lui
Tipul de dat| al coloanelor este specificat conform tabelului prezentat în paragraful SQL cu
parametri. Parametrul opÛional dimensiunea permite specificarea lungimii unei coloane text.
Dac| dimensiunea este nespecificat|, valoarea dimensiunii atribuite implicit este de 255. Prin
folosirea lui CREATE TABLE se pot crea dou| tipuri de constrângeri, indexuri simple Õi
multi-coloan|, prin folosirea clauzei CONSTRAINS.
Exemplu:
Pentru a crea un tabel TProduseNoi folosind schema tabelului TProduse scriem:
Clauza CONSTRAINT
În SQL-92, constrângerile se folosesc pentru: restricÛionarea valorilor care pot fi ad|ugate
unui tabel; crearea cheilor primare Õi str|ine; forÛarea valorilor unor coloane s| fie unice
http://www.east.utcluj.ro/mb/mep/antal
(UNIQUE) sau nenule (NOT NULL); crearea regulilor de validare (prin constrângerea
CHECK). Pentru c| singura constrângere pe care Access-ul o suport| este cea legat| de
definiÛia indexurilor, este convenabil s| ne gândim c| în Access clauza CONSTRAINT se
foloseÕte pentru a crea indexuri. Sintaxa pentru crearea unei chei simple este:
CONSTRAINT nume
{PRIMARY KEY | UNIQUE | REFERENCES tabel-str|in [(coloan|-str|in|)]}
Acest curs este proprietatea lui
CONSTRAINT nume
{PRIMARY KEY (coloana1 [, coloana2 [, ...]])
Pt. cumparare viziteaza:
| UNIQUE
| FOREIGN KEY (coloana1 [, coloana2 [, ...]]) REFERENCES
tabel-str|in [(coloan|-str|in|1 [, coloan|-str|in|2 [, ...]])]}
Exemple:
Pentru a crea folosind instrucÛiunea CREATE TABLE tabelul TProduseNoi având un index
unic câmpul DescriereProdus scrie:
CURRENCY);
http://www.east.utcluj.ro/mb/mep/antal
InstrucÛiunea CREATE INDEX
Al|turi de clauza CONSTRAINT din instrucÛiunile CREATE TABLE Õi ALTER TABLE se
poate folosi instrucÛiunea CREATE INDEX (care nu face parte din ANSI SQL) pentru crearea
unui index al unui tabel deja existent. Sinatxa comenzii este:
Cuvântul cheie UNIQUE face ca valorile indexului s| fie unice. PRIMARY permite crearea
ANTAL Tiberiu Alexandru.
unui index cheie primar|. Toate indexurile cheie primar| sunt automat indexuri unice.
IGNORE NULL opreÕte motorul Jet de la crearea unui index cu valori Null. DISALLOW
Pt. cumparare viziteaza:
NULL opreÕte utilizatorul s| introduc| o valoare Null în câmpul index.
Exemplu:
Ad|ugarea unei coloane noi Cantitate tabelului TArticoleNoi se face prin:
http://www.east.utcluj.ro/mb/mep/antal
Sintaxa pentru Õtergerea unui index este:
Nu se poate Õterge un index care particip| într-o relaÛie decât dup| Õtergerea tuturor relaÛiilor
în care particip|.
Acest curs este proprietatea lui
InstrucÛiunea DROP
Se foloseÕte pentru Õtergerea tabelelor sau a indexurilor. Are dou| forme sintactice. Sintaxa
pentru Õtergerea unui tabel din baza de date este:
ANTAL Tiberiu Alexandru.
Obiectivele cursului 13
http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
înregistr|ri;
Pt. cumparare viziteaza:
! cum se creeaz| folosind VBA obiecte ale bazei de date.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
putea derula anumite sarcini speciale. Limbajul de programare VBA împreun| cu obiectele
pentru accesul la date (DAO), asigur| un limbaj de manipulare al datelor, sumar prezentat în
cursul 11. Când creaÛi o baz| de date în Access 2000 acesta va presupune c| doriÛi s| folosiÛi
numai obiectul ADO (care va fi prezentat în cursul 14) Õi va include referinÛe numai c|tre
aceast| bibliotec|. Pentru c| pân| la inclusiv Access 97 politica Microsoft-ului a fost orientat|
c|tre popularizarea lui DAO, voi descrie lucrul cu aceast| bibliotec|, apoi voi descrie Õi
modul de lucrul cu ADO. Dac| în Access 2000 doriÛi s| folosiÛi biblioteca DAO, în timp ce
editaÛi codul VBA, selectaÛi din Tools pe Reference Õi ad|ugaÛi Microsoft DAO 3.6 Object
Acest curs este proprietatea lui
Library în lista referinÛelor selectate. Din cursul 11, cunoaÕteÛi c| obiectul DBEngine - adic|
motorul Jet - este la nivelul cel mai de sus în ierarhia DAO. Toate referinÛele la orice obiecte
DAO încep prin referirea obiectului DBEngine. În cadrul unei aplicaÛii, motorul Jet conÛine o
colecÛie de unul sau mai multe obiecte. Fiecare obiect Workspace conÛine o colecÛie de unul
sau mai multe obiecte Database. Fiecare obiect Database conÛine o colecÛie de obiecte
ANTAL Tiberiu Alexandru.
TableDefs, care la rândul lor conÛin colecÛii de obiecte Fields Õ.a.m.d. Un obiect particular se
poate stoca într-o variabil| Õi poate fi manipulat prin intermediul acesteia. Pentru a referi baza
Pt. cumparare viziteaza:
de date curent| în DAO, soluÛia este plecarea din DBEngine Õi coborârea prin colecÛia
Workspaces pân| la colecÛia Databases, unde prin Databases(0) Access-ul va referi
tocmai baza de date curent|. Conform celor spuse exist| dou| metode de scriere pentru
aceasta:
DBEngine.Workspaces(0).Databases(0)
DBEngine(0)(0) 0264-401667
NU COPIA !.
în plus Access-ul are Õi o funcÛie CurrentDB() care întoarce o referinÛ| la baza de date
curent|. Jet-ul Õi Access-ul sunt dou| produse separate. Jet-ul furnizeaz| serviciile de tip baz|
de date de care are Access-ul nevoie, dar Access-ul are Õi el la rândul lui un grup de servicii
propriu bazat pe Jet care se foloseÕte la proiectarea aplicaÛiilor din interiorul Access-ului.
Access-ul furnizeaz| CurrentDB() pentru referirea bazei de date curente, iar Jet-ul
furnizeaz| DBEngine.Workspaces(0).Databases(0) în acelaÕi scop. În momentul
de faÛ| exist| o problem| subtil| legat| de cele dou| metode de acces. CurrentDB() Õi
DBEngine(0)(0) nu reprezint| intern acelaÕi obiect, deÕi ambele se refer| la aceeaÕi baz|
de date. La fiecare folosire a lui CurrentDB() Access-ul creeaz| intern un obiect nou care
se refer| la baza de date curent|. Dup| ce VBA execut| linia cu aceast| referinÛ| Access-ul
închide automat referinÛa c|tre baza de date (excepÛie face obiectul Recordset) motiv pentru
care, din acel moment în continuare, orice referire la colecÛiile bazei de date curente vor fi
invalide. Pentru codul care urmeaz|, în procedura AsaNu() când se ajunge la doc.Name
apare o eroare fatal|. Obiectul din baza de date care a fost referit nu mai exist|, iar doc devine
o referinÛ| invalid|. Dac| îns| se foloseÕte DBEngine(0)(0) în locul lui CurrentDB()
procedura va lucra corect.
323 Programarea cu obiectul DAO - cursul 13
Sub AsaNu()
Dim doc As Document
http://www.east.utcluj.ro/mb/mep/antal
Set doc = CurrentDb.Containers("Forms").Documents(0)
Debug.Print doc.Name
End Sub
Sub AsaDa()
Dim db As Database
Acest curs este proprietatea lui
Dim doc As Document
Set db = CurrentDb()
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
interog|ri din baza poate folosi SQL; în c|ut|ri rapide pe baza de
de date. majoritatea index.
cazurilor datele pot
fi editate.
Snapshot O copie instantanee Poate fi folosit| Datele nu se pot edita;
a unei mulÛimi de numai pentru toate datele se citesc în
înregistr|ri, valorile parcurgere în avans mulÛime înainte de
sunt o copie fix| a asigurând creÕterea
Acest curs este proprietatea lui
redarea controlului
datelor Õi nu vitezei unor programului, deci nu vor
poantori la acestea. operaÛii. reflecta modific|rile în
regimul de lucru cu
utilizatori multipli
(multiuser); nu permite
ANTAL Tiberiu Alexandru.
Dim rs As Recordset
Set rs = db.OpenRecordset(Sursa, Tip, Optiuni, BlocareEditare)
sau
0264-401667
NU COPIA !.
Dim rs As DAO.Recordset
În primul caz mulÛimea se creeaz| pe baza variabilei db care este tipul obiect baz| de date.
Parametrul Sursa specific| de unde vor veni datele Õi poate fi: un nume de tabel, un nume de
interogare, o instrucÛiune SQL. Pentru cel de al doilea exemplu, obiect este sursa de date Õi
poate fi orice obiect al bazei de date care este deschis Õi întoarce înregistr|ri: tabel, interogare
sau alt| mulÛime de înregistr|ri. Parametrul Tip specific| tipul mulÛimii de înregistr|ri Õi
poate lua valorile pe baza constantelor predefinite din tabelul care urmeaz|:
325 Programarea cu obiectul DAO - cursul 13
http://www.east.utcluj.ro/mb/mep/antal
dbOpenTable Deschiderea unei mulÛimi de înregistr|ri Table.
dbOpenDynaset Deschiderea unei mulÛimi de înregistr|ri Dynaset.
dbOpenSnapshot Deschiderea unei mulÛimi de înregistr|ri Snapshot.
dbOpenForwardOnly Deschiderea unei mulÛimi de înregistr|ri care poate fi
parcurs| numai în sensul avansului (forward-only).
Acest curs este proprietatea lui
Constant| Descriere
Se pot ad|uga numai înregistr|ri noi (se aplic| numai tipului
Pt. cumparare viziteaza:
dbAppendOnly
Dynaset).
dbSQLPassThrough Face ca SQL-ul s| fie transferat direct server-ului pentru
prelucrare (numai pentru tipul Snapshot).
dbSeeChanges Jet-ul genereaz| o eroare dac| un alt utilizator modific|
datele editate la momentul curent (numai pentru tipul
Dynaset).
dbDenyWrite CeilalÛi utilizatori nu pot modifica sau ad|uga înregistr|ri,
toate înregistr|rile tabelului vor fi blocate împreun| cu cele
ale celorlalte tabele care formeaz| sursa de date ale tipului
Dynaset. 0264-401667
NU COPIA !.
dbDenyRead
pentru tipul Table).
dbForwardOnly MulÛimea înregistr|rilor se parcurge într-un singur sens, de la
început la sfârÕit; se foloseÕte când se face o singur|
parcurgere a mulÛimii de înregistr|ri, caz în care datele nu se
copiaz| într-o zon| temporar| de memorie, viteza de
parcurgere fiind mult mai mare (numai pentru tipul Snapshot
Õi nu se foloseÕte în conjuncÛie cu dbOpenForwardOnly).
dbReadOnly Utilizatorul poate vedea datele, ceilalÛi ultilizatori le pot Õi
modifica.
dbInconsistent Permite actualiz|ri inconsistente (numai pentru tipul Dynaset
cu folosirea lui dbInconsistent sau
dbInconsistent).
326 Programarea cu obiectul DAO - cursul 13
http://www.east.utcluj.ro/mb/mep/antal
Parametrul BlocareEditare controleaz| concureÛa utilizatorilor multipli pentru accesul la
noua mulÛime de înregistr|ri. Urm|toarele constante sunt predefinite:
Constant| Descriere
Acest curs este proprietatea lui
dbReadOnly Înregistr|rile pot fi vizualizate de utilizatorul curent, alÛii le pot
modifica (se foloseÕte fie în OpÛiuni fie în BlocareEditare, dar
nu simultan).
dbPesimistic Blocare pesimist|; o pagin| este blocat| la folosirea metodei Edit
Õi va r|mâne blocat| cât timp datele paginii sunt editate. Aceasta
ANTAL Tiberiu Alexandru.
se va face Õi pentru câmpurile din partea mulÛi împreun| dac| se face actualizarea celor din
sau suna la:
parte unu.
http://www.east.utcluj.ro/mb/mep/antal
2. MulÛime de înregistr|ri creat| pe baza unui Õir SQL:
Dim db As Database
Dim rsClienti As RecordSet
Dim sirSQL As String
Set db = CurrentDB()
Acest curs este proprietatea lui
3. MulÛime de înregistr|ri creat| pe baza unui tabel care blocheaz| accesul altor
Pt. cumparare viziteaza:
utilizatori la sursa de date:
Dim db As Database
Dim rsClienti As RecordSet
Set db = CurrentDB()
Dim db As Database
Dim rs As RecordSet
Dim qdf As QueryDef
Dim pr As Parameter
Set db = CurrentDB()
Set qdf = db.QueryDefs("Nume Interogare")
For Each pr In qdf.Parameters
pr.Value = Eval(pr.Name)
Next pr
Set rs = qdf.OpenRecordSet(dbOpenDynaset)
328 Programarea cu obiectul DAO - cursul 13
Ciclul parcurge toÛi parametri obiectului QueryDef (dac| acesta nu are parametri, ciclul nu
se execut|). Pentru fiecare parametru, codul evalueaz| proprietatea Name folosind funcÛia
http://www.east.utcluj.ro/mb/mep/antal
Eval() Õi atribuie valoarea întoars| propriet|Ûii Value a parametrului. În acest fel toate
valorile parametrilor se evalueaz| f|r| a trebui cunoscut în avans num|rul lor.
Codul prezentat este necesar atunci când dorim s| cre|m o mulÛime de înregistr|ri pe baza
unei interog|ri despre care nu Õtim nimic pân| în momentul execuÛiei aplicaÛiei când ar putea
fi necesar| furnizarea unor parametri din definiÛia interog|rii. F|r| acest cod ar trebui s|
cunoaÕtem în avans num|rul Õi valorile acestor parametri. Prin folosirea DAO toÛi parametri
Acest curs este proprietatea lui
necesari pot fi evaluaÛi înainte de crearea muÛimii de înregistr|ri. Obiectul QueryDef are
colecÛia Parameters, unde fiecare element al colecÛiei este un parametru al interog|rii.
Access-ul nu Õtie evalua valorile parametrilor când se creeaz| o mulÛime de înregistr|ri pe
baza unei definiÛii de interogare, deÕi parametrii sunt cunoscuÛi, singura modalitate de
rezolvare fiind codul prezentat deja. De exemplu, dac| avem o interogare care are ca
parametru câmpul Forms!FTContacte![Nume Contact], containerul QueryDef va
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Metoda Move, permite deplasarea înainte sau înapoi, cu un num|r de înregistr|ri, în raport cu
înregistrarea curent| sau cu un marcaj. Dac| obiectul este de tipul Table, deplasarea se face
pe baza valorilor indexului, care se poate modifica prin proprietatea Index. În lipsa unui
index, ordinea înregistr|rilor este nedefinit|. MulÛimile de înregistr|ri, prin propriet|Ûile
AbsolutePosition Õi PercentPosition, permit citirea sau scrierea poziÛiei curente
pe baza datelor din mulÛimea de înregistr|ri. Metodele MoveFirst, MoveLast,
Acest curs este proprietatea lui
MoveNext, MovePrevius au o acÛiune evident|, pentru cazul lui Move îns| treaba
devine ambigu|. Dac| rs este o mulÛime de înregistrare, atunci rs.Move nrrânduri [,
început] specific| deplasarea peste nrrânduri (>0 deplasarea se face înainte, <0
deplasarea se face înapoi), iar parametrul opÛional poate conÛine un marcaj salvat. Dac|
marcajul nu este scris, Access-ul începe deplasarea de la înregistrarea curent|, altfel
deplasarea este relativ| la marcaj.
ANTAL Tiberiu Alexandru.
Pentru ca s| ÕtiÛi la deschiderea unei mulÛimi de înregistr|ri, dac| aceasta are sau nu
înregistr|ri, trebuie s| testaÛi simultan propriet|Ûile BOF Õi EOF astfel (dac| BOF Õi EOF sunt
330 Programarea cu obiectul DAO - cursul 13
http://www.east.utcluj.ro/mb/mep/antal
7 mult
'aici se ajunge numai daca -imea are înregistr|ri
End If
Deseori, în instrucÛiunile de ciclare dorim s| test|m terminarea relu|rii operaÛiei ciclate, iar
dac| mulÛimea nu are înregistr|ri ciclul nici m|car s| nu fie început, codul folosit pentru
aceasta este:
Acest curs este proprietatea lui
Do Until rs.EOF
'operaÛiile ciclate vin aici ...
'undeva aici se face Õi avansul la înregistrarea
'urm|toare, de exemplu cu rs.MoveNext
ANTAL Tiberiu Alexandru.
Loop
Pt. cumparare viziteaza:
Metodele Find necesit| specificarea unui criteriu de selecÛie de forma unei ecuaÛii ce
conÛine nume de câmpuri care iau valori specifice. De exemplu, dac| dorim s| g|sim prima
apariÛie a numelui "Ioan" scriem:
InstrucÛiunea With
Permite executarea unei serii de instrucÛiuni ale unui singur obiect f|r| a specifica în mod
repetat numele obiectului. Sintaxa instrucÛiunii este:
With obiect
331 Programarea cu obiectul DAO - cursul 13
-iuni]
[instruct
End With
http://www.east.utcluj.ro/mb/mep/antal
Dac| dorim, de exemplu s| g|sim toate contactele cu [Nume Contact] = Ioan atunci
trebuie realizat un ciclu care parcurge toate înregistr|rile mulÛimii verificând criteriul dorit
dup| cum urmeaz|:
.FindFirst sircriteriu
Do While Not .NoMatch
Debug.Print ![Nume Contact]
ANTAL Tiberiu Alexandru.
.FindNext sircriteriu
Loop
Pt. cumparare viziteaza:
End With
Proprietatea NoMatch devine True de câte ori operaÛia Find nu reuÕeÕte Õi poziÛia
înregistr|rii curente devine nedefinit|. Dac| c|utarea are ca scop modificarea unor valori de
câmpuri, folosirea unei interog|ri de acÛiune este mai eficient|.
C|utarea în tabele
Metoda Seek se foloseÕte pentru localizarea unei înregistr|ri dintr-o mulÛime indexat| de
tipul Table care satiface un criteriu pentru indexul curent. Sintaxa ei este:
0264-401667
NU COPIA !.
rstabel este o variabil| mulÛime de înregistr|ri care refer| tabelul în care se va c|uta.
Primul parametru, operatorcom, este un Õir de caractere ce specific| operatorul de
comparaÛie Õi poate fi: "=", "<=", "<", ">=", ">". Argumentele cheie sunt una sau mai multe
valori pe care VBA le compar| cu valorile indexului din tabel. Dac| indexul este format
dintr-un singur câmp atunci se foloseÕte pentru comparaÛie numai valoarea cheie1, dac|
indexul este format din dou| câmpuri, atunci se folosesc pentru comparaÛie valorile cheie1
Õi cheie2, etc. Indexul curent trebuie stabilit explicit înainte de folosirea lui Seek. Dac|
indexul localizeaz| un câmp cheie cu valoarea neunic|, Seek va g|si prima înregistrarea care
satisface criteriul.
Sub SeekIndex()
Dim db As Database
332 Programarea cu obiectul DAO - cursul 13
Dim rs As Recordset
http://www.east.utcluj.ro/mb/mep/antal
Set db = CurrentDb()
Set rs = db.OpenRecordset("TContacte", dbOpenTable)
rs.Index = "IDContact"
rs.Seek "=", 1
Acest curs este proprietatea lui
rs.Seek "=", 1
Pt. cumparare viziteaza:
Loop
rs.Close
End Sub
Fiecare mulÛime de înregistr|ri are o singur| înregistrare curent|. Pentru a stoca poziÛia
acesteia se poate stoca marcajul rândului respectiv care este un întreg pe 4 biÛi unic, generat de
sistem, pentru fiecare înregistrare. Valoarea numeric| a marcajului are o semnificaÛie numai
pentru Access, ea nu se poate folosi în cadrul unor expresii aritmetice. Pentru a salva valoarea
unui marcaj se atribuie unei variabile de tipul Variant valoarea propriet|Ûii Bookmark.
Pentru a seta valoarea unui marcaj, se seteaz| valoarea propriet|Ûii Bookmark la valoarea
variabilei. Num|rul marcajelor pentru o mulÛime de înregistr|ri este nelimitat. Acestea asigur|
viteza de manevr| cea mai mare cu înregistr|rile mulÛimii. De exemplu, dac| doriÛi s| v|
poziÛionaÛi de pe înregistrarea curent| pe alta, apoi s| reveniÛi, puteÛi lucra prin dou| metode:
stocaÛi valoarea cheii primare - v| poziÛionaÛi pe o alt| înregistrare, apoi folosiÛi una dintre
metodele Seek sau FindFirst pentru a reveni la înregistrarea original| pe baza valorii
cheii primare salvate; stocaÛi valoarea marcajului - v| poziÛionaÛi pe o alt| înregistrare, apoi
folosiÛi marcajul pentru a reveni la înregistrarea original|. Dac| de exemplu, dorim s| folosim
marcajul înregistr|rii curente dintr-o mulÛime la care apoi s| revenim, codul va fi ceva de
forma:
333 Programarea cu obiectul DAO - cursul 13
Dim bm As Variant
http://www.east.utcluj.ro/mb/mep/antal
bm= rs.Bookmark
-ionare pe prima înregistrare
rs.MoveFirst 'Pozit
-i ca
'Realizat 7utarea dorita
7 ....
7
'Pentru revenire la înregistrarea originala
Acest curs este proprietatea lui
rs.Bookmark=bm
Dup| închiderea mulÛimii de înregistr|ri prin folosirea metodei Close valoarea marcajului
devine invalid|.
ANTAL Tiberiu Alexandru.
Înregistr|rile unei mulÛimi de înregistr|ri apar în ordinea introducerii lor în baza de date. Dac|
se doreÕte afiÕarea datelor într-o ordine specific| se pot folosi mai multe metode de sortare.
Procedura care urmeaz| afiÕeaz| câmpurile indexate, în ordinea specific|rii indexurilor pentru
tabel. Indexurile tabelului cu numele stocat în variabila NumeTabel se obÛin prin
parcurgerea colecÛie de indexuri a obiectului TableDef. Pentru fiecare index din colecÛie,
este extras numele lui Õi numele câmpului indexat împreun| cu valorile câmpului indexat
corespunz|tor fiec|rei înregistr|ri din mulÛimea de înregistrare.
http://www.east.utcluj.ro/mb/mep/antal
Set db = CurrentDb()
Set tdf = db.TableDefs(NumeTabel)
Set rs = db.OpenRecordset(NumeTabel, dbOpenTable)
For Each id In tdf.Indexes
rs.Index = id.Name
Acest curs este proprietatea lui
Debug.Print sircamp
sircamp = ""
rs.MoveNext
Loop
Next id
rs.Close
0264-401667
NU COPIA !.
End Sub
Pentru a testa procedura de mai sus, folosind baza de date ex1.mdb, care conÛine tabelul cu
numele TContacte, scriem AfisareCampuriIndexate "TContacte" în fereastra
imediat|.
Dim db As Database
335 Programarea cu obiectul DAO - cursul 13
Dim rs As Recordset
set rs=db.OpenRecordset("SELECT * FROM TContacte ORDER BYE
[Nume Contact];")
http://www.east.utcluj.ro/mb/mep/antal
În acest caz, mulÛimea de înregistr|ri poate fi creat| numai folosind un obiect baz| de date Õi
un Õir SQL, iar mulÛimea de înregistr|ri rezultat| este implicit de tip Dynaset (eventual de tip
Snapshot dac| se cere explicit aceasta).
Dim db As Database
Dim rs As Recordset 0264-401667
NU COPIA !.
Set db = CurrentDb()
Set rs = db.OpenRecordset("TContacte")
Este posibil| Õi filtrarea înregistr|rilor care vor face parte din mulÛimea de înregistr|ri, în
continuare fiind prezentate dou| metode cu avantajele Õi dezavantajele lor.
http://www.east.utcluj.ro/mb/mep/antal
Filtrarea folosind clauza SQL WHERE
Se poate crea o mulÛime de înregistr|ri prin folosirea instrucÛiunii SQL cu clauza WHERE
astfel:
Sub Filtrare()
Acest curs este proprietatea lui
Dim db As Database
Dim rs As Recordset
Dim fl As Field
ANTAL Tiberiu Alexandru.
Set db = CurrentDb()
Pt. cumparare viziteaza:
Set rs = db.OpenRecordset( _
"SELECT * FROM TContacte WHERE [Nume Contact] Like 'A*';")
Loop
rs.Close
End Sub
Metoda se poate folosi numai când cre|m mulÛimea de înregistr|ri utilizând un obiect al bazei
de date, spre deosebire de celelalte variante de OpenRecordset unde se pot folosi tabele,
interog|ri sau alte mulÛimi de înregistr|ri.
Sub Filtrare1()
Dim db As Database
http://www.east.utcluj.ro/mb/mep/antal
Dim rs As Recordset, rsFil As Recordset
Dim fl As Field
Set db = CurrentDb()
Set rs = db.OpenRecordset("TContacte", dbOpenDynaset)
rs.Filter = "[Nume Contact] Like 'A*'"
Acest curs este proprietatea lui
rs.Close
rsFil.Close
End Sub
0264-401667
NU COPIA !.
3. RealizaÛi modific|rile;
4. FolosiÛi metoda Update pentru salvarea modific|rilor.
http://www.east.utcluj.ro/mb/mep/antal
Sub EditareRand()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Acest curs este proprietatea lui
Set rs = db.OpenRecordset("TContacte", dbOpenDynaset)
With rs
.FindFirst "[Nume Contact] = 'Grisa Marius'"
ANTAL Tiberiu Alexandru.
If .NoMatch Then
Pt. cumparare viziteaza:
MsgBox "Nu exista persoana de contact !",E
vbCritical
Else
.Edit
![Nume Contact] = "Grigore Mariuta"
.Update
End If
rs.Close
End Sub
Sub AdaugareRand()
Dim db As Database
339 Programarea cu obiectul DAO - cursul 13
Dim rs As Recordset
http://www.east.utcluj.ro/mb/mep/antal
Set db = CurrentDb()
Set rs = db.OpenRecordset("TContacte", dbOpenDynaset)
With rs
.AddNew
![Nume Contact] = "Sebastian Corina"
Acest curs este proprietatea lui
.Update
End With
rs.Close
ANTAL Tiberiu Alexandru.
End Sub
Pt. cumparare viziteaza:
Dup| Õtergerea unei înregistr|ri aceasta continu| s| r|mân| înregistrarea curent|, este
necesar| folosirea lui MoveNext pentru a trece la urm|torul rând.
O modalitate de Õtergere a tuturor înregistr|rilor dintr-un tabel este codul care urmeaz|, deÕi
în practic| metoda cea mai bun| este folosirea unei interog|ri pentru Õtergere:
Dim rs As Recordset
http://www.east.utcluj.ro/mb/mep/antal
Set db = CurrentDb()
Set rs = db.OpenRecordset(NumeTabel)
With rs
If .RecordCount > 0 Then
.MoveFirst
Acest curs este proprietatea lui
Do
.Delete
.MoveNext
Loop Until .EOF
ANTAL Tiberiu Alexandru.
End If
Pt. cumparare viziteaza:
.Close
End With
End Sub
Sub Modifica()
Dim db As Database
Dim qdef As QueryDef
Dim sirSQL As String
Set db = CurrentDb()
http://www.east.utcluj.ro/mb/mep/antal
qdef.Execute 'Lansarea interogarii
qdef.Close 'Inchiderea interogarii
End Sub
Sub Modifica1()
Dim db As Database
Dim qdef As QueryDef
ANTAL Tiberiu Alexandru.
Set db = CurrentDb()
End Sub
Dac| metoda Append primeÕte orice Õir nevid (diferit de "" sau f|r| a fi scris), obiectul
rezultat este automat ad|ugat colecÛiei QueryDefs, altfel obiectul rezultat este temporar.
342 Programarea cu obiectul DAO - cursul 13
DefiniÛiile de interogare temporare se folosesc în cazul unor Õiruri SQL pentru obiectele care
nu dorim s| devin| permanente, de exemplu, pentru c| ele la fiecare repetare se modific|
puÛin. Dac| o definiÛie de interogare exist|, nu se poate crea o alta cu acelaÕi nume decât dac|
http://www.east.utcluj.ro/mb/mep/antal
prima este Õtears| - cea de a dou| procedur| exemplific| acest mod de lucru.
mai recent BeginTrans. Cele trei metode sunt ale obiectului Workspace, iar codul care
urmeaz| este un Õablon pentru folosirea acestora în derularea tranzacÛiilor:
Pt. cumparare viziteaza:
Dim ws As WorkSpace
Dim StareTr As Boolean
StareTr = False
Set ws = DBEngine.Workspaces(0)
. . . 0264-401667
NU COPIA !.
ws.BeginTrans
sau suna la:
StareTr=True
ws.CommitTrans
StareTr=False
. . .
Tratare_Eroare:
if StareTr then
ws.Rollback
End If
' alte prelucrari
343 Programarea cu obiectul DAO - cursul 13
În cazul formularelor legate Access-ul are propria lui metod| de tratare a tranzacÛiilor, din
acest motiv nu se pot folosi tranzacÛii în proceduri de evenimente pentru a grupa modific|rile
aduse datelor prin intermediul formularului.
http://www.east.utcluj.ro/mb/mep/antal
DefiniÛia datelor cu DAO
O baz| de date poate fi creat| Õi prin folosirea exclusiv| a metodelor DAO Create... Õi
Append. Acestea permit crearea tuturor obiectelor ce alc|tuiesc o baz| de date.
Acest curs este proprietatea lui
2. DefiniÛi caracteristicile noului obiect prin setarea propriet|Ûilor lui. Unele propriet|Ûi,
de exemplu numele, sunt obligatoriu de setat la crearea obiectului, altele pot fi setate mai
Pt. cumparare viziteaza:
târziu. Majoritatea metodelor Create... au argumente opÛionale care permit specificarea
propriet|Ûilor obligatorii ale noului obiect;
3. FolosiÛi metoda Append pentru ad|ugarea obiectului la colecÛia din care face parte
pentru a-l face permanent parte a bazei de date.
Când obiectul conÛine la rândul lui noi obiecte, de exemplu tabelul conÛine câmpuri, trebuie
creat obiectul primar, se creeaz| subobiectele care fac parte din acesta Õi se adaug| la colecÛia
corespunz|toare, iar în final obiectul primar se adaug| Õi el colecÛiei corespunz|toare lui.
1 Sub CreeazaTabelTel()
2 Dim db As Database
3 Dim tdf As TableDef
4 Dim fl1 As Field
5 Dim fl2 As Field
6 Dim fl3 As Field
7
8 Set db = CurrentDb()
9 Set tdf = db.CreateTableDef("")
10 tdf.Name = "TAdrese"
344 Programarea cu obiectul DAO - cursul 13
11
http://www.east.utcluj.ro/mb/mep/antal
13 Set fl2 = tdf.CreateField("Tip adresa", dbText, 30)
14 Set fl3 = tdf.CreateField("Adresa", dbText, 100)
15
16 With tdf.Fields
17 .Append fl1
18 .Append fl2
Acest curs este proprietatea lui
19 .Append fl3
20 End With
21
22 With db.TableDefs
ANTAL Tiberiu Alexandru.
23 .Append tdf
Pt. cumparare viziteaza:
24 .Refresh
25 End With
26
27 Application.RefreshDatabaseWindow
28 End Sub
Pân| la atingerea liniei 14 tabelul Õi cele trei câmpuri exist| numai în memorie. Pentru ca
aceste obiecte s| devin| permanente trebuie folosit| metoda Append care le va ad|uga unor
colecÛii f|cându-le permanente. Pentru câmpuri, ad|ugarea se face în liniile 16-20, iar pentru
tabel, în liniile 22-25. În linia 24 se foloseÕte metoda Refresh prin care se actualizeaz|
0264-401667
NU COPIA !.
conÛinutul colecÛiei, noul tabel devenind numai în acest mod disponibil Õi pentru alÛi
sau suna la:
utilizatori care lucreaz| cu aceeaÕi baz| de date (regim multiuser). DeÕi tabelul este
disponibil pentru utilizare, Access-ul nu reîmprosp|teaz| conÛinutul fereastrei bazei de date
decât dac| ne poziÛion|m pe o alt| colecÛie Õi apoi revenim pe cea a tabelelor. Pentru a rezolva
aceast| problem| se foloseÕte metoda RefreshDatabaseWindow a obiectului aplicaÛie.
http://www.east.utcluj.ro/mb/mep/antal
Surs| String Sursa de date a unui
tabel ataÕat.
Conexiun String Calea c|tre tabelul
e care este sursa de
date a tabelului
ataÕat.
Acest curs este proprietatea lui
Câmp (Feld) CreateFiled Nume String Numele noului
câmp.
Tip Integer Tipul de dat| al
noului câmp.
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Tip Long Valoare care indic|
sursa datelor (Jet
sau ODBCDirect).
Baza7 de date CreateDatabase Nume String Numele fiÕierului
(Database) care va conÛine baza
de date.
Indirecte String Ôir care specific|
Acest curs este proprietatea lui
date colaterale
(limb|, parol|
implicit|).
OpÛiuni Integer Valoare care
defineÕte dac| noua
ANTAL Tiberiu Alexandru.
personal al noului
utilizator.
Parol| String Parola pentru noul
obiect utilizator.
unui obiect index nou în cazul în care am uitat s|-i set|m una dintre propriet|Ûi;
3. PaÕii 1 Õi 2 se reiau pentru toate câmpurile care vor fi parte a indexului, iar fiecare
câmp index va fi ad|ugat colecÛiei Fields;
http://www.east.utcluj.ro/mb/mep/antal
4. FolosiÛi metoda Append a obiectului TableDef pentru ad|ugarea index-ului în
colecÛia Indexes.
10 Dim db As Database
11
14 Set db = CurrentDb()
15 Set tdf = db.TableDefs(NumeTabel)
16 Set ids = tdf.Indexes
17 0264-401667
NU COPIA !.
18 varCP = GasesteCheiaPrimara(tdf)
sau suna la:
23 Set id = tdf.CreateIndex(NumeCheieP)
24
25 id.Primary = True
26
30
31 ids.Append id
http://www.east.utcluj.ro/mb/mep/antal
32 CreareCheiePrimara = True
33
34 CreareaCheieP_Iesire:
35 Exit Function
36
37 CreareaCheieP_Eroare:
Acest curs este proprietatea lui
38 MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E
39 ")"
40 CreareCheiePrimara = False
41 Resume CreareaCheieP_Iesire
ANTAL Tiberiu Alexandru.
42 End Function
Pt. cumparare viziteaza:
4 Dim id As Index
5
10 End If
11 Next id
12 GasesteCheiaPrimara = Null
13 End Function
8 id.Fields.Append fld
9 End If
http://www.east.utcluj.ro/mb/mep/antal
10 AdaugaCamp = True
11
12 AdaugaCamp_Iesire:
13 Exit Function
14
15 AdaugaCamp_Eroare:
Acest curs este proprietatea lui
16 AdaugaCamp = False
17 Resume AdaugaCamp_Iesire
18 End Function
ANTAL Tiberiu Alexandru.
Sub TestCreareCP()
Pt. cumparare viziteaza:
Debug.Print CreareCheiePrimara("TAdrese", "CheiePrimata",E
"AdreseID", "Tip adresa")
End Sub
O procedur| de tip funcÛie sau subprogram poate avea ultimul parametru precedat de cuvântul
opÛional ParamArray Õi urmat de paranteze rotunde (). În acest fel parametrul se defineÕte
ca un tablou cu elemente de tipul Variant. Aceasta este metoda disponibil| în VBA pentru
a transfera unei funcÛii un num|r variabil de argumente.
FuncÛia AdaugaCamp() adaug| un obiect câmp unui obiect index. Rezultatul întors este
True în caz de reuÕit| sau False altfel.
urmând paÕii:
1. DeschideÛi baza de date în care se va crea relaÛia;
2. Se verific| dac| tabelul primar are o cheie primar|;
http://www.east.utcluj.ro/mb/mep/antal
3. FolosiÛi metoda CreateRelation pentru crearea obiectului relaÛie;
4. CreaÛi un obiect câmp pentru fiecare câmp de cheie primar| a tabelului primar. Pentru
fiecare obiect câmp se seteaz| proprietatea ForeignName ce corespunde numelui
corespunz|tor din tabelul ataÕat;
5. FolosiÛi metoda Append pentru ad|ugarea noi relaÛii în colecÛia Relations a bazei
de date.
Acest curs este proprietatea lui
Tabelul care urmeaz| prezint| constantele predefinite care pot fi date propriet|Ûii
Attributes a obiectului relaÛie:
ANTAL Tiberiu Alexandru.
Constant| Descriere
RelaÛia este 1º 1.
Pt. cumparare viziteaza:
dbRelationUnique
dbRelationDontEnforce Integritatea referenÛial| nu este activat|.
dbRelationInherited RelaÛia dintre tabele este definit| într-o baz| de
date extern|.
dbRelationLeft RelaÛia este de tip asociere la stânga extern|,
aceasta include toate înregistr|rile din primul tabel
(cel din stânga), inclusiv cele care nu au un
corespondent în cel de al doilea tabel.
dbRelationRight RelaÛia este de tip asociere la dreapta extern|,
aceasta include toate înregistr|rile din cel de al 0264-401667
doilea tabel (cel din dreapta), inclusiv cele care nu
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
On Error GoTo CreazaRelatie_Eroare
Set db = CurrentDb()
Set rel = db.CreateRelation("Relatia1", "TContacte", E
"TAdrese", dbRelationLeft Or dbRelationDeleteCascade)
Acest curs este proprietatea lui
CreazaRelatie = True
CreazaRelatie_Iesire:
Exit Function
CreazaRelatie_Eroare:
MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E 0264-401667
")"
NU COPIA !.
CreazaRelatie = False
Resume CreazaRelatie_Iesire
End Function
tabelul face parte din baza de date Access proprietatea lui Connect are valoarea "".
http://www.east.utcluj.ro/mb/mep/antal
1. FolosiÛi metoda CreateTableDef a obiectului baz| de date (Database) pentru a
crea un nou obiect TabelDef pentru tabelul ataÕat. DaÛi tabelului un nou nume prin care va
fi identificat în baza de date local|;
2. SetaÛi propriet|Ûile SourceTableName Õi Connect ale obiectului TableDef
pentru a specifica tabelul extern Õi baza de date care va fi ataÕat|;
3. FolosiÛi proprietatea Append pentru ad|ugarea noului obiect TableDef în baza de
Acest curs este proprietatea lui
date.
În funcÛie de tipul tabelului extern care va fi ataÕat este posibil ca unele informaÛii adiÛionale
s| fie necesare în proprietatea Connect (parol|, nume de utilizator, driver ISAM sau
ODBC). Un cod tipic pentru ataÕarea unui tabel este de forma:
ANTAL Tiberiu Alexandru.
Set db = CurrentDB()
NumeTabel="TAT_Clienti"
Set tdf = db.CreateTableDef(NumeTabel)
With tdf
.Connect";DATABASE=" & "c:\My Documents\Northwind.mdb" 0264-401667
NU COPIA !.
.SourceTableName = "Customers"
sau suna la:
End With
db.TableDefs.Append tdf
http://www.east.utcluj.ro/mb/mep/antal
Set db = CurrentDb()
Set tdf = db.CreateTableDef(NumeTabel)
With tdf
.Connect = ";DATABASE=" & Cale
Acest curs este proprietatea lui
.SourceTableName = NumeTabelExtern
End With
db.TableDefs.Append tdf
ANTAL Tiberiu Alexandru.
vIntoarsedeFunctie = True
Pt. cumparare viziteaza:
CreareTabelAtasat_Iesire:
CreareTabelAtasat = vIntoarsedeFunctie
Exit Function
CreareTabelAtasat_Eroare:
MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E
")"
vIntoarsedeFunctie = False 0264-401667
NU COPIA !.
Resume CreareTabelAtasat_Iesire
sau suna la:
End Function
ReataÕarea tabelelor
De multe ori, din motive independente de voinÛa noastr|, poziÛia tabelelor externe se poate
modifica pe discul folosit pentru stocarea lor. AplicaÛia Access va genera o eroare în execuÛie
dac| unul dintre tabelele externe au fost mutate într-un alt director sau disc. Este util| scrierea
unei funcÛii s| verifice dac| tabelele ataÕate au fost mutate, iar dac| au fost, s| fac| reataÕarea
lor pe baza noii poziÛii ocupate de acestea pe disc. FuncÛia
VerificaAtasareaTabelului() verific| ataÕarea tabelului NumeTable, iar dac|
acesta nu mai este ataÕat, încearc| s|-l ataÕeze folosind calea din parametrul CaleNoua
parcurgând paÕii:
1. Se activeaz| tratarea erorilor în execuÛie (On Error Resume Next);
2. Se încearc| accesarea propriet|Ûii Name din lista de câmpuri ale tabelului dorit;
3. Dac| încercarea este nereuÕit| se apeleaz| funcÛia ReatasareTabel()care va
354 Programarea cu obiectul DAO - cursul 13
încerca reataÕarea tabelului. În cazul în care încercarea este nereuÕit| se afiÕeaz| un mesaj de
eroare Õi se revine cu valoarea False;
4. Dac| încercarea de accesare a reuÕit înseamn| c| tabelul este ataÕat corect Õi se revine
http://www.east.utcluj.ro/mb/mep/antal
cu valoarea True din funcÛie.
VerificaAtasareaTabelului = True
Set db = CurrentDb()
Pt. cumparare viziteaza:
strName = db.TableDefs(NumeTabel).Fields(0).Name
On Error GoTo 0
sau suna la:
End Function
ReatasareTabel = True
Set db = CurrentDb()
Set tdf = db.TableDefs(NumeTabel)
355 Programarea cu obiectul DAO - cursul 13
http://www.east.utcluj.ro/mb/mep/antal
On Error Resume Next
tdf.RefreshLink
ReatasareTabel = (Err = 0)
On Error GoTo 0
End If
Acest curs este proprietatea lui
End Function
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
Obiectivele cursului 14
http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
VBA, formulare Õi rapoarte, obiectele pentru accesul la date, internet/intranet.
preferenÛial pentru accesul la date deÕi codul DAO va continua s| existe Õi s| lucreze corect;
• motorul Jet permite blocare la nivel de înregistrare Õi nu la pagin| ca Õi pân| acum;
Jet-ul are o serie de facilit|Ûi care permit determinarea maÕinii Õi a numelui tuturor
http://www.east.utcluj.ro/mb/mep/antal
•
utilizatorilor care acceseaz| baza de date Õi permite inhibarea leg|rii de noi utilizatori la baza
de date pentru a permite derularea unor operaÛii de întreÛinere a bazei de date;
• Microsoft-ul d| dou| noi modele de obiecte din familia ADO pentru lucrul cu schema
bazei de date Õi întreÛinerea acesteia: ADOX Õi JRO. ADOX permite investigarea Õi
modificarea schemei bazei de date, iar JRO permite compactarea Õi repararea bazelor de date.
În aceast| versiune de Access Generatorul de pagini Web este înlocuit cu pagini pentru
accesul la date. O pagin| pentru accesul la date este o pagin| Web care se poate folosi la
vizualizarea Õi editatrea datelor dintr-o baz| de date Access, MSDE sau SQL Server 7 prin
intermediul lui Internet Explorer 5. Câteva dintre informaÛiile legate de aceste pagini sunt:
ANTAL Tiberiu Alexandru.
• paginile pentru accesul la date se folosesc de capacitatea lui IE5 de legare la datele
unui client;
Pt. cumparare viziteaza:
• pagina pentru accesul la date face parte dint-o pagin| HTML care foloseÕte eXtensible
Markup Language (XML);
• paginile pentru accesul la date pot fi folosite dintr-o baza de date MDB, proiect ADP
sau IE5;
• Access-ul are un Generator pentru proiectarea paginilor pentru accesul la date;
• se poate ataÕa cod scris în limbajele VBscript sau JavaScript paginilor;
• pagina pentru accesul la date poate fi scris| de la zero sau se poate baza pe conÛinutul
unei alte pagini de Web ;
• se pot include componente de Web Office în pagini;
• paginile active pentru accesul la date pot fi folosite pentru navigare Õi editarea 0264-401667
înregistr|rilor unei baze de date Õi pentru realizarea de rapoarte datorit| facilit|Ûilor în
NU COPIA !.
grupare.
Specificarea referinÛelor
http://www.east.utcluj.ro/mb/mep/antal
La crearea unei baze de date noi (fiÕierul are extensia MDB) sau a unui proiect (fiÕierul are
extensia ADP) Access 2000 presupune c| veÛi lucra cu ADO Õi va seta referinÛa din figura
urm|toare c|tre biblioteca Microsoft ActiveX Data Objects 2.1. ReferinÛa se poate seta Õi
manual din editorul de module Visual
Basic al Access-ului selectând din
Tools pe References. Pentru aceasta în
fereastra de dialog References, unde
Acest curs este proprietatea lui
sunt afiÕate sub forma unei liste toate
bibliotecile de obiecte instalate pe
calculator, se activeaz| butonul de
validare corespunz|tor numelui
aplicaÛiei dorite. Dac| validaÛi
ANTAL Tiberiu Alexandru.
Dim rs As Recordset
http://www.east.utcluj.ro/mb/mep/antal
deschise Õi modulele de cod etc. ) cu care Access-ul poate lucra. În cele ce urmeaz|, din
Acest curs este proprietatea lui
punctul de vedere al accesului la date, aceste obiecte vor avea un rol secundar fiind discutate
în principal obiectele care Ûin de ierarhia ADO. Acestea vor fi folosite pentru a interacÛiona cu
motorul bazei de date indiferent dac| acesta este motorul Jet, SQL Server sau motorul MSDE.
Figura care urmeaz| prezint| ca exemplu ierahia pentru obiectul Connection, apoi în ultima
figur| se prezint| colecÛia Properties comun| obiectelor Connection, Command, Recordset
Õi Filed.
ANTAL Tiberiu Alexandru.
sursa de date. Obiectul ADO Command este similar obiectului DAO QueryDef, ambele
putând fi folosite pentru executarea de instrucÛiuni SQL asupra unei surse de date. Obiectul
Recordset este folosit în ambele biblioteci pentru vizualizarea conÛinutului unui tabel sau a
http://www.east.utcluj.ro/mb/mep/antal
rezultatelor execuÛiei unei instrucÛiuni SQL.
Replicarea cu JRO
ANTAL Tiberiu Alexandru.
Modelul JRO conÛine obiecte pentru crearea, modificarea Õi sincronizarea mai multor replici a
unei baze de date. Se poate folosi numai pentru baze de date ale motorului Microsoft Jet.
Pt. cumparare viziteaza:
Replica este obiectul primar folosit pentru crearea de replici noi, pentru modificarea
propriet|Ûilor unei replici Õi pentru sincronizarea replicilor.
Dim i As Integer
aceasta spune Access-ului s| rezerve spaÛiu în RAM pentru stocarea unei valori de tipul întreg 0264-401667
(Integer). În cazul unei variabile obiect (o variabil| care refer| un obiect pentru accesul la date
NU COPIA !.
sau un obiect de interfaÛ| cu utilizatorul) Access-ul creeaz| numai un poantor, adic| aloc|
sau suna la:
spaÛiu suficient numai pentru stocarea unei adrese de obiect. Deci, în Access 2000 dac| scriem
liniile:
variabilele respective nu vor conÛine obiectul în sine ci numai o referint| (un poantor) la
obiect. În acest moment în aceste variabile nu sunt îns| stocate Õi adresele obiectelor, pentru
aceasta trebuie s| scriem codul:
Liniile de mai sus fac ca variabilele obiect s| se refere la câte un obiect actual. Dac| pe
http://www.east.utcluj.ro/mb/mep/antal
parcursul codului scris variabila obiect iese în afara scopului, Access-ul va elibera (obiectul
este Õters din RAM) Õi spaÛiul de RAM corespunz|tor obiectului poantat de variabila
respectiv| în cazul în care aceast| variabil| este singura din cod în care se refer| obiectul.
Dac| aveÛi dubii asupra eliber|rii spaÛiului folosit la stocarea unui obiect aceasta se poate
realiza Õi explicit prin:
Set rs = Nothing
Acest curs este proprietatea lui
Unele obiecte au o metod| Close, aceasta trebuie apelat| înainte de dezalocarea spaÛiului
pentru obiectul în cauz|, deci ordinea va fi:
ANTAL Tiberiu Alexandru.
rs.Close
Set rs = Nothing
Pt. cumparare viziteaza:
Obiectul Connection
Este obiectul din vârful ierarhiei ADO, orice alt obiect se poate folosi numai dac| s-a
specificat conexiunea care va fi folosit| pentru accesul la date. Obiectul corespunde unei
singure conexiuni la un furnizor de date OLE DB. Obiectul Connection poate fi creat explicit
sau se poate crea implicit când se lucreaz| cu un obiect derivat al lui, de exemplu obiectul
Recordset, când este necesar| Õi specificarea informaÛiei de conectare. Dac| codul se scrie în
Access se poate folosi obiectul CurrentProject pentru a obÛine o referinÛ| la conexiunea
bazei de date curente. 0264-401667
NU COPIA !.
con.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= " & CurrentProject.Path & "\db2000-test.mdb"
con.Open
Debug.Print con.ConnectionString
363 Access 2000, ADO -si ADOX - cursul 14
http://www.east.utcluj.ro/mb/mep/antal
iar rezultatul afiÕat în fereastra imediat| este:
Provider=Microsoft.Jet.OLEDB.4.0;Password="";User
ID=Admin;Data Source=C:\My Documents\db2000-test.mdb;
Mode=Share Deny None;Extended Properties="";Locale
Identifier=1033;Jet OLEDB:System database="";Jet
OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet
OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet
Acest curs este proprietatea lui
OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk
Transactions=1;Jet OLEDB:New Database Password="";Jet
OLEDB:Create System Database=False;Jet OLEDB:Encrypt
Database=False;Jet OLEDB:Don't Copy Locale on
Compact=False;Jet OLEDB:Compact Without Replica
ANTAL Tiberiu Alexandru.
Repair=False;Jet OLEDB:SFP=False
Pt. cumparare viziteaza:
Procedura Sub de mai sus foloseÕte proprietatea CurrentProject.Path pentru a
determina calea c|tre baza de date curent| sau fiÕierul proiect. R|spunsul afiÕat conÛine un
num|r foarte mare de propriet|Ûi ale conexiunii, dar singurele necesare pentru realizarea unei
conexiuni sunt numele furnizorului OLE DB (Provider) Õi numele bazei de date care se va
deschide (Data Source).
Debug.Print con.ConnectionString
End Sub
Codul parcurge iterativ fiecare element al colecÛiei Õi foloseÕte un Set implicit pentru a poanta
la variabila obiect corespunz|toare pentru fiecare obiect al colecÛiei. Când ajunge la linia
Next fld, valoarea poantorului se va modifica la urm|torul element al colecÛiei.
364 Access 2000, ADO -si ADOX - cursul 14
http://www.east.utcluj.ro/mb/mep/antal
Dim fld As ADODB.Field
rs.Close
Pt. cumparare viziteaza:
Set rs = Nothing
End Sub
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Public Sub ListareCampuriClasic(NumeTable As String)
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim i As Integer
For i = 0 To rs.Fields.Count - 1
ANTAL Tiberiu Alexandru.
rs.Close
Set fl = Nothing
Set rs = Nothing
End Sub
În general, termenul de cursor este asociat unei instrucÛiuni SQL Õi reprezint| mulÛimea
înregistr|rilor întoarse de c|tre respectiva instrucÛiune. În ADO, se foloseÕte denumirea de
cursor descrie comportamentul poantorului înregistr|rii curente dintr-o mulÛime de
înregistr|ri. Un cursor este obiectul ce permite deplasarea printre înregistr|rile unei mulÛimi
de înregistr|ri. ADO permite folosirea a patru tipuri de cursoare care sunt descrise în tabelul
urm|tor:
http://www.east.utcluj.ro/mb/mep/antal
tabel sau interogare Suport| lucrul cu Împiedic| accesul la
din baza de date. marcaje întotdeauna. înregistr|rile Õterse
de alÛi utilizatori.
Static Copie a unei Întotdeuna suport| Nu reflect|
mulÛimi de marcaje. Singurul tip modific|rile aduse
înregistr|ri aÕa cum de mulÛime de datelor în regimul de
era ea la momentul înregistrare este lucru cu mai mulÛi
cre|rii ei.
Acest curs este proprietatea lui
client-side cursor utilizatori
Forward-only Copie a unei Mai rapid| decât Permite navigarea în
mulÛimi de cursorul static mulÛime numai în
înregistr|ri aÕa cum faÛ|.
era ea la momentul
ANTAL Tiberiu Alexandru.
cre|rii ei.
Pt. cumparare viziteaza:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
7, Conexiune, TipCursor, TipBlocare, Opt
rs.Open Sursa -iuni
ToÛi aceÕti parametri sunt opÛionali Õi pot fi specificaÛi Õi înaintea deschiderii mulÛimii de
înregistr|ri, din acest motiv cele dou| porÛiuni de cod care urmeaz| sunt echivalente: 0264-401667
NU COPIA !.
rs.Connection = CurrentProject.Connection
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Open "Members"
http://www.east.utcluj.ro/mb/mep/antal
printre înregistr|ri Õi trebuie s| fie una dintre constantele prezentate în tabelul care urmeaz|:
Parametrul Opt -iuni spune lui ADO cum s| evalueze parametrul Sursa
7, el poate lua
valorile prezentate în tabelul urm|tor:
http://www.east.utcluj.ro/mb/mep/antal
adCmdStoredProc Spune furnizorului s| evalueze sursa ca un nume de
procedur| stocat| sau ca interogare.
adCmdUnknown Spune ADO-ului s| interogheze furnizorul pentru a
determina dac| sursa este o procedur| stocat|, un nume
de tabel sau o instrucÛiune SQL.
adCmdFile Spune ADO-ului c| parametrul surs| este numele unui
Acest curs este proprietatea lui
fiÕier care conÛine o mulÛime de înregistr|ri persistent|.
Codul pentru deschiderea unei mulÛimi de înregistr|ri pe baza tabelului Members din baza de
date ADDRBOOK.MDB este:
ANTAL Tiberiu Alexandru.
rs.Close
Set fld = Nothing
Set rs = Nothing
End Sub
Numele (Name) Õi valoarea (Value) fiec|rui câmp din prima înregistrare a mulÛimii vor fi
afiÕate în fereastra imediat| prin parcurgerea iterativ| a colecÛiei Fields.
369 Access 2000, ADO -si ADOX - cursul 14
http://www.east.utcluj.ro/mb/mep/antal
1. Crearea unei mulÛimi de înregistr|ri pe baza unui tabel:
Set rs = New ADODB.Recordset
rs.Open "NumeTabel", CurrentProject.Connection
4. Crearea unei mulÛimi de înregistr|ri pe baza unui tabel care permite c|utarea cu
Seek:
rs.CursorLocation=adUseServer
rs.Open "NumeTable", CurrentProject.Connection, adOpenKeyset,E
adLockOptimistic, adCmdTableDirect 0264-401667
NU COPIA !.
Cursorul client
Obiectul ADO Recordset are o proprietate CursorLocation care nu exista în DAO Õi care
afecteaz| funcÛionarea Õi performanÛele mulÛimii de înregistr|ri. NoÛiunea de cursor semnific|
înregistr|rile din cache (termenul de cache se foloseÕte pentru o memorie care stocheaz| date
recent accesate Õi care este proiecat| pentru a creÕte viteza de acces în cazul referirii aceloraÕi
date) sau de poantori la înregistr|ri furnizate de motorul bazei de date la deschiderea unei
mulÛimi de înregistr|ri. ADO suport| lucrul cu dou| tipuri de cursoare: cel client (client-side)
Õi cel server (server-side). Un cursor client se creeaz| pe aceeaÕi maÕin| cu clientul (adic| cu
utilizatorul bazei de date), iar cel server se creeaz| pe aceeaÕi maÕin| cu server-ul, care poate
fi chiar maÕina pe care lucreaz| utilizatorul sau poate fi o maÕin| server oarecare. Dou|
constante sunt definite pentru alegerea cursorului, adUseServer (implicit|) pentru cursorul
server Õi adUseClient pentru cursorul client. Când se specific| cursorul client, ADO
transfer| cererile serviciului Microsoft Cursor Service pentru OLE DB care este proiectat
pentru creÕterea funcÛionalit|Ûii în accesarea înregistr|rilor de la orice furnizor OLE DB.
Serviciul cere în primul pas toate datele de la furnizorul OLE DB folosind o mulÛime de
înregistr|ri cu parcurgere în avans (forward-only) f|r| posibilitatea de modificare (read-only).
370 Access 2000, ADO -si ADOX - cursul 14
Apoi realizeaz| un cache local pentru date Õi le prezint| aplicaÛiei ca o mulÛime de înregistr|ri
static|. În majoritatea cazurilor cursorul client din interiorul unei baze de date Access duce la
realizarea de dou| cache-uri pentru date pe aceeaÕi maÕin|: odat| de motorul Jet, apoi de
http://www.east.utcluj.ro/mb/mep/antal
Serviciul Cursor. TotuÕi, acest cursor extinde funcÛionalitatea obiectului, de exemplu se poate
folosi metoda Sort sau se poate folosi o mulÛime de înregistr|ri deconectat| care va fi mai
târziu reconectat| la baza de date Õi actualizat| în regimul cu o singur| comand| ce modific|
înregistr|ri multiple. În general valoarea implicit| este cea folosit| normal, mai puÛin în cazul
când funcÛionalitatea adus| de cursorul client este necesar|.
Do Until rs.EOF
sau suna la:
rs.Close
Set fld = Nothing
Set rs = Nothing
End Sub
371 Access 2000, ADO -si ADOX - cursul 14
C|utarea înregistr|rilor
http://www.east.utcluj.ro/mb/mep/antal
Atât DAO cât Õi ADO au dou| metode pentru localizarea unei înregistr|ri într-o mulÛime de
înregistr|ri: Find Õi Seek. În ambele cazuri trebuie specificat un criteriu pentru localizarea
înregistr|rii care se îndeplineÕte. Seek are, în general, performanÛe mai bune ca Find pentru
c| lucreaz| cu indexuri la c|utarea poziÛiei înregistr|rilor, dar este limitat la mulÛimile de
înregistr|ri care au index. DAO are metodele FindFirst, FindLast, FindNext Õi
FindPrevious pentru c|utare. ADO are o singur| metod| pe Find care cu ajutorul
parametrilor permite specificarea sensului c|ut|rii Õi poziÛia din care începe c|utarea. Forma
general| a lui Find este:
Acest curs este proprietatea lui
1. Criteriu: este un Õir de caractere de forma unei clauze WHERE format| la fel ca în
expresiile SQL, dar f|r| cuvântul WHERE, de exemplu, PersonID = 3. Poate conÛine
Pt. cumparare viziteaza:
numai un singur nume de câmp, un operator de comparaÛie Õi o valoare;
2. SariRanduri: specific| un deplasament faÛ| de înregistrarea curent| din care va
începe c|utarea. Implicit c|utarea începe de la înregistrarea curent|;
3. SensCautare: ia valoarea adSearchForward (implicit) pentru c|utarea în avans
sau adSearchBackward pentru c|utarea în urm|;
4. Inceput: un marcaj opÛional pentru specificarea locului de început al c|ut|rii.
Implicit c|utarea începe cu înregistrarea curent|.
Next
Debug.Print
http://www.east.utcluj.ro/mb/mep/antal
rs.Find crt, 1
Loop
rs.Close
Set fld = Nothing
Set rs = Nothing
End Sub
Acest curs este proprietatea lui
Tabelul care urmeaz| prezint| echivalenÛa între metodele de c|utare DAO Õi metoda Find
ADO:
Find
Pt. cumparare viziteaza:
FindFirst 0 adSearchForward (dac| nu suntem
poziÛionaÛi pe prima înregistrare se foloseÕte
MoveFirst înainte de Find).
FindLast 0 adSearchBackward (dac| nu suntem
poziÛionaÛi pe ultima înregistrare se foloseÕte
MoveLast înainte de Find).
FindNext 1 adSearchForward
FindPrevious 1 adSearchBackward
DAO Õi ADO folosesc o sintax| diferit| pentru localizarea înregistr|rilor cu valori Null. În
0264-401667
NU COPIA !.
DAO se scria un Õir de forma: "LastName Is Null" sau "LastName Is Not Null". ADO nu
sau suna la:
recunoaÕte operatorul Is se vor folosi în schimb operatorii = Õi <>, adic| scriem: "LastName
= Null" sau "LastName <> Null".
http://www.east.utcluj.ro/mb/mep/antal
predefinite din tabelul care urmeaz|:
rs.Seek 5, adSeekFirstEQ
rs.Close
http://www.east.utcluj.ro/mb/mep/antal
Set rs = Nothing
End Sub
Dac| Seek reuÕeÕte s| localizeze înregistrarea, înregistrarea curent| devine cea care conÛine
valoarea specificat|. Dac| operaÛia nu reuÕeÕte, proprietatea EOF a mulÛimii de înregistrare ia
valoarea True.
Acest curs este proprietatea lui
With rs
.Find "[LastName] = 'Davolio'"
If .EOF Then
MsgBox "Nu exist asa un nume!"
Else
.Fields("LastName") = "Marinica"
375 Access 2000, ADO -si ADOX - cursul 14
.Update
End If
http://www.east.utcluj.ro/mb/mep/antal
End With
rs.Close
Set rs = Nothing
End Sub
Acest curs este proprietatea lui
În DAO era obligatorie folosirea metodei Edit înainte de modificarea unei mulÛimi de
înregistr|ri, în ADO aceasta nici m|car nu mai exist|. ADO nu necesit| folosirea metodei
Update pentru salvarea modific|rilor f|cute, aceasta se realizeaz| automat, mai puÛin dac|
se apeleaz| metoda CancelUpdate. Dac| se modific| o înregistrare Õi încercaÛi s| închideÛi
mulÛimea de înregistr|ri ADO va genera o eroare în execuÛie dac| nu aÛi folosit metoda
ANTAL Tiberiu Alexandru.
Update.
Pt. cumparare viziteaza:
With rs
.AddNew
376 Access 2000, ADO -si ADOX - cursul 14
.Fields("HouseholdName") = "Vasilis"
.Fields("Address") = "Muncii 103-105"
http://www.east.utcluj.ro/mb/mep/antal
.Update
End With
rs.Close
Set rs = Nothing
Acest curs este proprietatea lui
End Sub
Nu este nevoie de folosirea lui Update pentru Õtergerea înregistr|rii, odat| Õtears|
înregistrarea dispare, mai puÛin în cazul în care face parte dintr-o tranzacÛie. În acest caz se
poate reveni asupra Õtergerii. Dup| Õtergere înregistrarea care s-a Õters r|mâne cea curent|, de
exemplu se poate folosi MoveNext pentru deplasarea pe înregistrarea urm|toare. Orice
încercare de a face ceva cu înregistrarea Õtears| va genera o eroare în execuÛie.
Dim rs As ADODB.Recordset
sau suna la:
With rs
If .RecordCount > 0 Then
.MoveFirst
Do
.Delete
377 Access 2000, ADO -si ADOX - cursul 14
.MoveNext
Loop Until .EOF
http://www.east.utcluj.ro/mb/mep/antal
End If
End With
rs.Close
Set rs = Nothing
End Sub
Acest curs este proprietatea lui
Codul prezentat Õterge toate înregistr|rile tabelului Members din baza de date
ADDRBOOK.MDB deÕi metoda nu este cea mai bun| pentru rezolvarea acestei probleme. În
practic| veÛi folosi pentru aceasta o interogare de Õtergere (Delete Query).
ANTAL Tiberiu Alexandru.
Actualiz|ri în grup
Pt. cumparare viziteaza:
Dac| se foloseÕte cursorul client având unul dintre tipurile: adOpenKeyset,
adOpenStatic se poate folosi abilitatea ADO-ului de actualizare unui grup de înregistr|ri.
Adic|, se pot edita înregistr|ri multiple din baza de date dup| care se pot transmite toate
modific|rile furnizorului OLE DB pentru a fi stocate într-o singur| operaÛie. Codul care
urmeaz| va modifica toate înregistr|rile având în câmpul Country stocat| "USA" în
"Transilvania".
With rs
.CursorLocation = adUseClient
.Open "Household", con, adOpenKeyset, E
adLockBatchOptimistic
.Find crt
Do While Not .EOF
.Fields("Country") = "Transilvania"
378 Access 2000, ADO -si ADOX - cursul 14
.Find crt, 1
Loop
http://www.east.utcluj.ro/mb/mep/antal
.UpdateBatch
End With
rs.Close
Set rs = Nothing
End Sub
Acest curs este proprietatea lui
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
With rs
Do Until .EOF
379 Access 2000, ADO -si ADOX - cursul 14
http://www.east.utcluj.ro/mb/mep/antal
Next
Debug.Print
.MoveNext
Loop
.Close
End With
Acest curs este proprietatea lui
Set rs = Nothing
Set con = Nothing
End Sub
ANTAL Tiberiu Alexandru.
With rs
http://www.east.utcluj.ro/mb/mep/antal
Do Until .EOF
For Each fld In .Fields
Debug.Print fld.Value & "' ";
Next
Debug.Print
.MoveNext
Acest curs este proprietatea lui
Loop
.Close
End With
Set rs = Nothing
ANTAL Tiberiu Alexandru.
End Sub
O alt| form| de scriere al aceluiaÕi cod, îns| prin folosirea parametrului Parameters din
obiectul Command în locul metodei Execute este:
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
= #1/28/2000#
http://www.east.utcluj.ro/mb/mep/antal
Set rs = New ADODB.Recordset
rs.Open com, , adOpenForwardOnly, adLockReadOnly,E
adCmdStoredProc
With rs
Do Until .EOF
Acest curs este proprietatea lui
For Each fld In .Fields
Debug.Print fld.Value & "' ";
Next
Debug.Print
ANTAL Tiberiu Alexandru.
.MoveNext
Pt. cumparare viziteaza:
Loop
.Close
End With
Set rs = Nothing
Set con = Nothing
End Sub
O alt| metod|, în cazul în care trebuie s| cre|m o mulÛime de înregistr|ri pe baza unei 0264-401667
interog|ri despre care nu Õtim prea multe este codul:
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
For Each par In com.Parameters
par.Value = Eval(par.Name)
Next
Set rs = com.Execute
Acest curs este proprietatea lui
With rs
Do Until .EOF
For Each fld In .Fields
ANTAL Tiberiu Alexandru.
Set rs = Nothing
Set con = Nothing
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
numai cu interog|ri f|r| parametri. Furnizorul Jet nu va popula corect colecÛia Parametres
a obiectului Command decât dac| obiectul Command este înc|rcat prin ADOX.
Obiectului DAO Database îi corespunde în ADOX obiectul Catalog, iar pentru crearea
unei baze de date se foloseÕte metoda Create. În ADOX, încriptarea Õi versiunea bazei de
date se specific| prin intermediul propriet|Ûilor Encript Database Õi Engine Type.
Linia care urmeaz| creaz| o baz| de date încriptat| cu versiunea 1.1 a motorului Microsoft Jet
prin specificarea propriet|Ûilor descrise mai sus în Õirul de conectare.
Tables:
http://www.east.utcluj.ro/mb/mep/antal
Public Sub AfisareTabele()
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table
End Sub
În DAO colecÛia TableDefs stoca tabele (obiecte TableDef) bazei de date, în ADOX
colecÛia Tables conÛine obiectele Table din baza de date. În ADO îns| colecÛia Tables
poate conÛine Õi obiecte care nu sunt tabele obiÕnuite cum ar fi interog|ri f|r| parametri
(considerate vederi [View] în ADOX). Tabelul care urmeaz| prezint| lista tuturor valorilor pe
care le poate lua proprietatea Type:
Crearea tabelelor
Bazele de date Microsoft Jet pot conÛine tabele locale, acestea având definiÛia Õi datele stocate
în cadrul bazei de date din care sunt referite Õi tabele legate care sunt stocate în baze de date
externe bazei în care sunt folosite, dar prin intermediul unei leg|turi o copie a definiÛiei
tabelului este stocat| în baza de date din care aceasta este referit|.
385 Access 2000, ADO -si ADOX - cursul 14
Strategia pentru crearea unui obiect al bazei de date este sintetic prezentat| în etapele
urm|toare:
1. DeschideÛi obiectul Catalog corespunz|tor bazei de date;
http://www.east.utcluj.ro/mb/mep/antal
2. CreaÛi noul obiect prin definirea unei variabile de tipul obiect respectiv pentru a v|
putea referi la el;
3. DefiniÛi noul obiect prin setarea propriet|Ûilor lui;
4. Ad|ugaÛi prin folosirea lui Append obiectul colecÛiei pentru a-l face permanent parte
a bazei de date.
Acest curs este proprietatea lui
Crearea unui tabel local
Public Sub CreeazaUnTabelADOX()
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table
ANTAL Tiberiu Alexandru.
With tbl
.ParentCatalog = cat
.Name = "Clienti"
.Columns.Append "IDClient", adInteger
.Columns("IDClient").Properties("AutoIncrement") = E 0264-401667
NU COPIA !.
True
sau suna la:
cat.Tables.Append tbl
cat.Tables.Refresh
Application.RefreshDatabaseWindow
386 Access 2000, ADO -si ADOX - cursul 14
End Sub
http://www.east.utcluj.ro/mb/mep/antal
În ADOX nu este necesar| folosirea metodei Create pentru crearea unei coloane înainte de
ad|ugarea ei la colecÛie. Metoda Append va fi folosit| atât pentru crearea cât Õi pentru
ad|ugarea coloanei. Denumirile tipurilor de date pentru coloane sunt diferite faÛ| de DAO Õi
sunt prezentate comparativ în tabelul urm|tor:
dbDate adDate
Pt. cumparare viziteaza:
dbDecimal adNumeric
dbDouble adDouble
dbGUID adGUID
dbInteger adSamllInt
dbLong adInteger
dbLongBinary adLongVarBinary
dbMemo adLongVarWChar
dbSingle adSingle 0264-401667
NU COPIA !.
dbText adVarWChar
sau suna la:
Exist| Õi alte atribute ale unui tabel sau ale unei coloane care nu pot fi setate la crearea
tabelului sau coloanei în DAO numai prin folosirea propriet|Ûii Attributes, în ADO
setarea lor se face cu aceeaÕi proprietate, iar echivalenÛa între propriet|Ûile DAO Õi ADO se
dau în continuare sub form| tabelar|. În noul model de date unele propriet|Ûi au r|mas în
ADO iar altele sunt specifice furnizorului Microsoft Jet.
http://www.east.utcluj.ro/mb/mep/antal
Proprietate Valoare Proprietate Column Valoare
Field DAO ADOX
Attributes dbAutoIncrement AutoIncrement True
Field)
Attributes dbVariableField ColumnAttribute Not adColFixed
Pt. cumparare viziteaza:
Properties a obiectului Table înainte de ad|ugarea lui la colecÛia Tables trebuie setat|
proprietatea ParentCatalog. Setarea este obligatorie pentru ca ADOX s| Õtie de la care
furnizor OLE DB va primi informaÛiile legate de proprietate. Proprietatea Jet OLEDB:
Link Datasource va stoca numai numele Õi calea c|tre baza de date care conÛine tabelul
extern. Alte opÛiuni de conectare sunt specificate în proprietatea Jet OLEDB: Link
Provider String, de exemplu aici se va specifica dac| este cazul numele de utilizator Õi
parola lui pentru conectare la baza de date din care face parte tabelul extern.
Codul urm|tor leag| în baza de date Northwind.mdb tabelul cu numele Clienti din baza de
date bdnoua2000.mdb. Pentru aceasta se va deschide baza de date Northwind.mdb, iar
codul care urmeaz| va fi introdus Õi lansat în execuÛie din cadrul acestei baze de date.
http://www.east.utcluj.ro/mb/mep/antal
cat.ActiveConnection = CurrentProject.Connection
tbl.Name = "Clienti-legati"
Set tbl.ParentCatalog = cat
ObservaÛi în codul de mai sus linia Dim cat As New ADOX.Catalog, aceasta este
echivalenta liniilor:
Codul care urmeaz| adaug| un câmp de tipul Memo tabelului Clienti din baza de date
bdnoua2000.mdb.
cat.ActiveConnection = CurrentProject.Connection
389 Access 2000, ADO -si ADOX - cursul 14
With col
http://www.east.utcluj.ro/mb/mep/antal
.Name = "Observatii"
.Type = adLongVarWChar
End With
cat.Tables("Clienti").Columns.Append col
Acest curs este proprietatea lui
End Sub
ANTAL Tiberiu Alexandru.
cat.ActiveConnection = CurrentProject.Connection
0264-401667
NU COPIA !.
End Sub
http://www.east.utcluj.ro/mb/mep/antal
Crearea Õi modificarea interog|rilor
În DAO obiectul QueryDef era folosit pentru ad|ugarea automat| a interog|rii la colecÛia
QueryDefs. Obiectul Command este într-un fel echivalentul lui QueryDef, dar
interog|rile create cu acesta sunt temporare. Ele trebuie explicit ad|ugate colecÛiei Views sau
Procedures pentru ca acestea s| fie stocate în baza de date. Furnizorul Microsoft Jet
defineÕte interog|rile motorului Jet ca vederi (Views) dac| acestea nu au parametri Õi întorc
înregist|ri.
Acest curs este proprietatea lui
cat.ActiveConnection = CurrentProject.Connection
com.CommandText = "SELECT Clienti.Nume FROM Clienti WHEREE
" & "(((Clienti.Nume) Like ""A*""));"
cat.Views.Append "ClienticuA", com
cat.Views.Refresh
Set cat = Nothing 0264-401667
NU COPIA !.
End Sub
cat.ActiveConnection = CurrentProject.Connection
com.CommandText = "PARAMETERS [Nume client] Text ( 255E
);SELECT" & _
391 Access 2000, ADO -si ADOX - cursul 14
http://www.east.utcluj.ro/mb/mep/antal
cat.Procedures.Refresh
Set cat = Nothing
com.Execute
End Sub
Acest curs este proprietatea lui
urmeaz|:
Pt. cumparare viziteaza:
cat.ActiveConnection = CurrentProject.Connection
Set com = cat.Procedures("ClientiPar").Command
com.CommandText = "SELECT * FROM Clienti;"
'aici se salveaza procedura actualizata 0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
True False adIndexNullsDisallow Valoarea Null nu este
permis| în câmpul
index; nu se adaug| o
intrare index.
False True adIndexNullsIgnore Valoarea Null este
permis| în câmpul
index; nu se adaug| o
intrare index.
Acest curs este proprietatea lui
With ind
.Name = "PrimaryKey"
.Columns.Append "IDClient"
.Columns("IDClient").SortOrder = adSortAscending
.IndexNulls = adIndexNullsDisallow
.PrimaryKey = True
End With
tbl.Indexes.Append ind
393 Access 2000, ADO -si ADOX - cursul 14
http://www.east.utcluj.ro/mb/mep/antal
Set ind = Nothing
End Sub
cat.ActiveConnection = CurrentProject.Connection
With che
.Name = "CategoriiProduse"
.Type = adKeyForeign
.RelatedTable = "Categories"
.Columns.Append "categoryID"
.Columns("CategoryID").RelatedColumn = "CategoryID" 0264-401667
NU COPIA !.
.UpdateRule = adRICascade
sau suna la:
End With
cat.Tables("Products").Keys.Append che
http://www.east.utcluj.ro/mb/mep/antal
Crearea unei aplicaÛii cu formulare, subformulare Õi cod
în Access 2000
AplicaÛia care se prezint| în continuare face gestionarea ratelor pentru poliÛele ce trebuie
pl|tite de c|tre o firm| sau de c|tre o persoan| particular|, asiguratorului. Schema bazei de
date este:
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
Baza de date se va numi curs15.mdb. Des- i este scris| în Access 2002, ea funcÛioneaza7 Õi în
Access 2000. Se vor crea trei tabele, TFirme, TPolite Õi TRate, toate câmpurile vor fi de tipul,
implicit, Text, mai puÛin cele care sunt enumerate în continuare: 0264-401667
NU COPIA !.
Tip/Propriet|Ûi
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
IDPolita Data Type: Number
Field Size: Long Integer
Data ratei Data Type: Date/Time
Achitat Data Type: Yes/No
Acest curs este proprietatea lui
Sincronizarea a dou| subformulare
Formularul pentru introducerea firmelor care au de pl|tit poliÛe este:
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
ObservaÛi c| exist| dou| regiuni în formular, cea de sus, în care datele sunt prezentate mai
sumar, motiv pentru care se poate alege o form| de afiÕare care s| cuprind| mai multe firme Õi
cea de jos, în care pentru fiecare firm| selectat| în regiunea de sus se vor afiÕa toate detaliile
clientului. Formularul p|rinte se numeÕte FFirme, pe suprafaÛ| lui vor fi puse dou|
subformulare care vor avea aceeaÕi surs| de date, tabelul TFirme Õi care vor fi sincronizate
între ele. Formularul p|rinte nu are surs| de date. Din acest motiv proprietatea Record
Source va fi vid|, iar pentru c| f|r| date nu sunt necesare nici instrumentele de navigare
propriet|Ûile corespunz|toare navig|rii vor fi setate la valorile din tabelul care urmeaz|:
396 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
Proprietate Valoare
Scroll Bars Neither
http://www.east.utcluj.ro/mb/mep/antal
Record Selectors No
Navigation Buttons No
Dividing Lines No
0264-401667
NU COPIA !.
permite citirea sau scrierea înregistr|rilor manipulate printr-un formular sau subformular.
Pentru a lega subformularele sf1 Õi sf2 la aceeaÕi surs| de date, în vederea sincroniz|rii lor,
s-a pus linia Set Forms!FFirme!sf2.Form.Recordset =
Forms!FFirme!sf1.Form.Recordset pe evenimentul On Open a formularului
principal. MenÛionez c| aceast| metod| de sincronizare funcÛioneaz| numai în Access 2000 Õi
2002. În figura anterioar| se prezint| formularul FFirme în modul proiectare.
În versiunile anterioare de Access formularul p|rinte afiÕa subformularele sub forma unor
397 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
dreptunghiuri albe. Începând cu Access 2000, subformularele sunt Õi ele afiÕate în modul
proiectare. ObservaÛi c| acestea sunt afiÕate complet, deÕi teoretic ar trebui s| fie un pas
înainte, practic spaÛiul alocat subformularului este mic fiind aproape imposibil s| acÛion|m
http://www.east.utcluj.ro/mb/mep/antal
asupra controalelor lui. Ôi pentru a face lucrurile Õi mai incomode este imposibil s| deschidem
un subformular într-o fereastr| separat| cât timp formularul p|rinte este deschis. Problema se
poate rezolva numai dac| deschideÛi prima oar| subformularul Õi apoi formularul p|rinte. În
aces caz subformularul va fi afiÕat ca un dreptunghi alb în formularul p|rinte, dar va putea fi
editata7 uÕor în propria lui fereastr|.
Pentru subformularul sf1 proprietatea Default View are valoare Datasheet. Pentru
subformularul sf2 urma7 toarele proprieta7 -ti sunt modificate: Default View º Single
Acest curs este proprietatea lui
Form, Record Selectors º No, Navigation Buttons º No, Dividing Lines º No.
Proprietatea Record Source este, pentru ambele subformulare, setat| la TFirme. sf1 va avea
vizibile numai controalele corespunza7 toare câmpurilor Firma, Adresa, Telefon1. Toate
celelalte controale vor fi ascunse cu ajutorul lui Hide. De asemenea, pe evenimentul Double
Click a formularului corespunz|tor lui sf1 se va scrie codul:
ANTAL Tiberiu Alexandru.
pentru a deschide formularul TFirme1 având ca înregistrare curent| chiar firma pe a c|rei
înregistrare s-a dat clic dublu în sf1. Aceasta este o metod| pentru realizarea sincroniz|rii
între dou| formulare independente pe baza valorilor unor controale care conÛin date comune.
În cazul exemplului prezentat este vorba despre conÛinutul lui IDFirma. Deschiderea
formularului FFirma este condit-ionata7 de existent-a unei valori în controlul IDFirma.
Testarea existent-ei acestei valori se face colosind funct-ia IsNull().
Înainte de a trece la discutarea celui de al doilea formular, doresc s| prezint modul de creare a
unui meniu Popup care s| permit| sortarea înregistr|rile din sf1 cresc|toare sau
descresc|toare. Tehnologia de realizare a meniurilor este aceeaÕi în toat| gama de aplicaÛii
Office începâd cu Office 97.
urma7 toare);
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
în acest moment pe suprafaÛa ecranului apare undeva un desen de forma , acesta este
noul meniu . În continuare urmeaz| s|-i complet|m elementele; realizând clic pe butonul
Commands a ferestrei de dialog Customize vor fi afiÕate toate comenzile care pot fi inserate
în noul meniu. În cazul nostru, înainte de a trece mai departe trebuie s| mai realiz|m
urm|toarele:
1. RealizaÛi un modul nou cu numele de Sortare care s| conÛin| codurile funcÛiilor
urm|toare:
Forms!FFirme!sf1.Form.OrderByOn = True
Forms!FFirme!sf1.Form.OrderBy = "[" &E
Screen.ActiveControl.Name & "] ASC"
Set Forms!FFirme!sf2.Form.Recordset =E
Forms!FFirme!sf1.Form.Recordset
End Function
End Function
http://www.east.utcluj.ro/mb/mep/antal
Public Function Nesortate()
Forms!FFirme!sf1.Form.OrderByOn = False
Forms!FFirme!sf1.Form.OrderBy = ""
Set Forms!FFirme!sf2.Form.Recordset =E
Forms!FFirme!sf1.Form.Recordset
End Function
Acest curs este proprietatea lui
2. RealizaÛi urm|toarele macro-uri:
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Selected Toolbar ca7 utat-i -si selectat-i numele Sortare, apoi setat-i pe Type la Menu Bar -si
meniul va deveni vizibil din nou.
• pentru asocierea noului meniu Popup controlului sf1 se intr| în modul de editare al
formularului p|rinte, apoi al subformularului Õi proprietarea Shorcut Menu Bar a
subformularului va fi setat| la Sortare (vezi figura urm|toare).
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
• dac| ne poziÛion|m acum undeva pe suprafaÛa lui sf1 Õi facem clic pe butonul din
dreapta meniul Sortare va fi afiÕat sub forma:
0264-401667
NU COPIA !.
Am v|zut deja c| la realizarea unui dublu clic pe selectorul de înregistr|ri din sf1 a
formularului FFirme, formularul TFirme1 va fi deschis având ca înregistre curent| firma pe
care s-a realizat dublu clic în formularul FFirme. Pentru ca s| se poat| realiza aceast|
http://www.east.utcluj.ro/mb/mep/antal
sincronizare între dou| formulare independente formularul deschis transmite ca s- i parametru
celui care urmeaz| s| fie deschis valoarea din câmpul IDFirma. Al doilea formular
(TFirme1) are scris codul care urmeaz| scris în procedura de eveniment OnOpen pentru
poziÛionarea pe înregistrarea cu acelaÕi IDFirma. Evenimetul Open apare când un formular
este deschis, dar înainte de afiÕarea înregistr|rilor. La prima deschidere a unui formular
evenimentele care apar sunt: Open - Load - Resize - Activate - Current.
Acest curs este proprietatea lui
Private Sub Form_Open(Cancel As Integer)
Dim IDFirma As Long
If Not IsNull(Me.OpenArgs) Then
IDFirma = CLng(Me.OpenArgs)
ANTAL Tiberiu Alexandru.
DoCmd.GoToControl "IDFirma"
Pt. cumparare viziteaza:
DoCmd.FindRecord IDFirma, , True, , True, , True
End If
End Sub
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
se va ga7 si înregistrarea care are acea valoare în controlul IDFirma. Pentru aceasta prima
oara7 , folosind metoda GoToControl, se va muta focusul pe controlul IDFirma din
formular. În continuare, prin folosirea metodei FindRecord, se va ga7 si înregistraeea care
are în controlul curent valoarea specificata7 în primul argument.
Formularul FFirma este prezentat în figura urma7 toare. ObservaÛi c| pe suprafaÛa lui sunt
dou| subformulare sf1, sf2 Õi un control Unbound care are numele IDPolita.
Acest curs este proprietatea lui
Formularul p|rinte (FFirma) are ca surs| de date (Record Source) tabelul TFirme, sf1 pe
tabelul TPolite, iar sf2 pe tabelul TRate. Ambele subformulare vor avea proporietatea Default
View setat| la Datasheet.
Pentru afiÕarea sau introducerea datelor în mai multe tabele care se afl|
ANTAL Tiberiu Alexandru.
Când se folosesc
subformularele? într-o relaÛie 1-M (one-to-may) pot fi folosite subformulare. Un
subformular este un formular legat de formularul din care face parte
Pt. cumparare viziteaza:
putând fi afiÕat în modurile foaie de date (Datasheet view) sau
0264-401667
NU COPIA !.
formular (Form view). Din punctul lor de vedere subformularele sunt formulare, dar din
punctul de vedere al formularului p|rinte sunt simple controale. Pot fi create prin mai multe
metode, cea mai simpl| este tehnologia drag-and-drop, adic| se selecteaz| un formular din
403 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
fereastra bazei de date, apoi se trage pe suprafaÛa unui formular p|rinte. Dac| între tabelele
celor dou| subformulare s-au definit relaÛii Access va crea automat leg|tura între formularul
p|rinte Õi subformular. În cazul nostru leg|tura între formularul p|rinte Õi sf1 se face prin
http://www.east.utcluj.ro/mb/mep/antal
propriet|Ûile LinkChildFields Õi LinkMasterFields care vor fi setate la valoarea
IDFirma. Aceste propriet|Ûi controleaz| relaÛia dintre formularul p|rinte Õi subformular
respectiv modul în care acestea interacÛioneaz|. Numai dac| aceste propriet|Ûi sunt setate
corect deplasarea pe o alt| înregistrare în formularul p|rinte va duce la deplasare pe noile
înregistr|ri corespunz|toare Õi în subformular. O alt| modalitate de creare a unui subformular
este cea deja discutat| prin selectarea controlului Subform din cutia cu instrumente
(Toolbox).
Acest curs este proprietatea lui
În condiÛii normale se pot crea leg|turi numai între formularul p|rinte (principal) Õi
subformulare. În cazul nostru este nevoie de crearea unei leg|turi speciale pentru a putea
sincroniza o înregistrare din subformularul poliÛelor cu înregistr|rile corespunz|toare ratelor
de pl|tit pentru o anumit| polit|. Pentru aceasta este nevoie de un artificiu. Pe suprafaÛa
formularului pa7 rinte se pune un control Text care va fi Unbound pentru ca nu va avea trecut
ANTAL Tiberiu Alexandru.
Forms![NumeFormular]![NumeControlSubformular].Form.
404 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
http://www.east.utcluj.ro/mb/mep/antal
Forms![NumeFormular]![NumeControlSubformular].Form.!E
NumeControlSF
Forms("NumeFormular")("NumeControlSubformular").Form.E
Controls("NumeControlSF")
ObservaÛi c| sintaxa este destul de complicat|, pentru ca s| înÛelegeÛi motivul acestei scrieri
Acest curs este proprietatea lui
Dac| dorim s| set|m o proprietate a unui subformular, de exemplu pe Visible, atunci scriem:
Forms("NumeFormular")("NumeSubformular").Visible = True
0264-401667
NU COPIA !.
except-iilor subformularul sf1 nu are înregistra7 ri. Secvent-a7 de cod care urmeaza7
se va atas- a evenimentului On Current. Ea va fort-a disparit-ia
întregistra7 rilor afis- ate în subformularul sf2.
http://www.east.utcluj.ro/mb/mep/antal
data curent|; numele firmei care în acest formular nu se poate modifica; numa7 rul de rate al
poliÛei care trebuie s| fie cel puÛin 1) Õi pentru a îndruma utilizatorul cu privire la valorile care
trebuie introduse, îns| exist| posibilitatea modific|rii lor în funcÛie de necesit|Ûi.
Dataazi
Datauzi
Acest curs este proprietatea lui
Dataaluna
Datauluna
Dataaan
Datauan
Firma
ANTAL Tiberiu Alexandru.
Rate
Pt. cumparare viziteaza:
Polita
Data
Dup| completarea tuturor controalelor formularului FNou, la ap|sarea butonului Nou, noile
date vor fi generate Õi ad|ugate în cele dou| tabele. Observat-i ca7 , în figura de mai sus, 0264-401667
controlul de tipul Text Box, cu numele Firma, apare invalidat, ca urmare a seta7 rii
NU COPIA !.
proprieta7 -tii Enable la No. De asemenea, cele doua7 subformulare, corespunza7 toare polit-elor -si
ratelor vor avea setate, la nivel de formular, proprietatea Allow Additions la No. Aceasta va
opri introducerea directa7 a datelor de la tastatura7 în aceste subformulare act-iunea fiind
posibila7 , exclusiv, doar prin folosire formularului FNou.
În continuare se vor prezenta dou| moduri de scriere a codului care realizeaz| înscrierea în
tabele, primul folosind DAO Õi al doilea folosind ADO. Pentru p|strarea simplit|Ûii codului
am preferat s| nu lucrez cu tranzacÛii deÕi problema se preteaz| la o astfel de programare
întrucât acÛiunile de ad|ugare trebuie f|cute într-o anumit| ordine (pentru p|strarea integrit|-tii
referenÛiale) Õi nu se pot întrerupe pentru a se face individual Õi independent. În figura de mai
sus au fost scrise numele controalelor folosite în procedurile vor fi prezentate.
Pentru controalele care au valori iniÛiale Õi restricÛii severe de valori care pot fi trecute în locul
celor init-iale prezint propriet|Ûile care trebuie s| fie setate. Fereastra propriet|Ûilor unui
control este "mai ciudat|" întrucât exemplul a fost scris în Office XP.
406 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
aritmetice cu date VBA are funcÛii speciale, în cazul acesta diferenÛ| dintre dou| date este
calculat| folosind funcÛia DateDiff() în linia 33. În liniile 14 Õi 16 funcÛia
DateSerial() este folosit| pentru a crea o valoare de tipul dat| plecând de la o dat|
http://www.east.utcluj.ro/mb/mep/antal
"spart| în zi, luna Õi an". Liniile 35-46 adaug| o înregistrare în tabelul TPolite, iar liniile 50-66
adaug| una sau mai multe înregistr|ri în tabelul TRate prin intermediul ciclului while
controlat prin num|rul de rate stocate în variabila Rate. În DAO, ultima înregistrare ad|ugat|
se poate g|si prin folosirea propriet|Ûii LastModified (vezi linia 44), aceasta întoarce un
Bookmark prin care se poate g|si valoarea lui IDPolita care se genereaz| automat
(întrucât are tipul Autonumber). Prin aceast| valoare se creeaz| leg|tura între TPolite Õi
TRate, deci în câmpul cheie str|in| din TRate aceast| valoare va trebui s| fie aceeaÕi pentru
toate ratele asociate unei anumite polite.
Acest curs este proprietatea lui
2 Dim db As DAO.Database
ANTAL Tiberiu Alexandru.
14 da = DateSerial(Forms!FNou!Dataaan, Forms!FNou!Dataaluna,E
15 Forms!FNou!Dataazi)
16 du = DateSerial(Forms!FNou!Datauan, Forms!FNou!datauluna,E
17 Forms!FNou!Datauzi)
18
23 Exit Sub
24 End If
25
26 If IsNull(Forms!FNou!Rate) Then
408 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
http://www.east.utcluj.ro/mb/mep/antal
30 Exit Sub
31 End If
32
39 rs1.AddNew
40 rs1!Polita = Forms!FNou!Polita
Pt. cumparare viziteaza:
41 rs1!Data = Forms!FNou!Data
42 rs1!IDFirma = Forms!FFirma!IDFirma
43 rs1.Update
44 rs1.Bookmark = rs1.LastModified
45 IDPolita = rs1!IDPolita
46 rs1.Close
47
50 t = "TRate"
51 Set rs2 = db.OpenRecordset(t)
52 While (Rate > 0)
53 rs2.AddNew
54 rs2![Data ratei] = da
55 If (Rate > 1) Then
56 rs2![Denumire rata] = "Rata " + Str(c)
57 c = c + 1
58 Else
59 rs2![Denumire rata] = "Expira"
60 End If
61 rs2![IDPolita] = IDPolita
409 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
62 rs2.Update
63 Rate = Rate - 1
http://www.east.utcluj.ro/mb/mep/antal
64 da = DateAdd("d", d, da)
65 Wend
66 rs2.Close
67 Forms!FFirma!sf1.Requery
68 Forms!FFirma!sf2.Requery
69
Acest curs este proprietatea lui
70 iesire:
71 Exit Sub
72
73 eroare:
ANTAL Tiberiu Alexandru.
74 MsgBox Err.Description
Pt. cumparare viziteaza:
75 Resume iesire
76 End Sub
SecvenÛa de cod care urmeaz| realizeaz| aceeaÕi acÛiune cu cea anterioar|. Exist| îns| o
foarte mare diferenÛ| faÛ| de cea anterioar| datorit| modului de lucru a metodei Update din
ADO. Dac| în cazul lui DAO înregistrarea curent| trebuia g|sit| prin folosirea lui
LastModified, aici, înregistrarea curent| r|mâne curent| Õi dup| apelarea metodei
Update. Din acest motiv în linia 45 s-a scris IDPolita = rs1!IDPolita imediat dup|
aplicarea metodei Update.
0264-401667
NU COPIA !.
13 da = DateSerial(Forms!FNou!Dataaan, Forms!FNou!Dataaluna,E
14 Forms!FNou!Dataazi)
15 du = DateSerial(Forms!FNou!Datauan, Forms!FNou!datauluna,E
http://www.east.utcluj.ro/mb/mep/antal
16 Forms!FNou!Datauzi)
17
25 If IsNull(Forms!FNou!Rate) Then
ANTAL Tiberiu Alexandru.
29 Exit Sub
30 End If
31
34 t = "TPolite"
35 Set rs1 = New ADODB.Recordset
rs1.CursorLocation = adUseClient
36
0264-401667
NU COPIA !.
39 rs1.AddNew
40 rs1!Polita = Forms!FNou!Polita
41 rs1!Data = Forms!FNou!Data
42 rs1!IDFirma = Forms!FFirma!IDFirma
43 rs1.Update
44
45 IDPolita = rs1!IDPolita
46 rs1.Close
47
48
411 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
49 Rate = Forms!FNou!Rate
50 c = 1
http://www.east.utcluj.ro/mb/mep/antal
51 t = "TRate"
52 Set rs2 = New ADODB.Recordset
53 rs2.CursorLocation = adUseClient
54 rs2.Open t, CurrentProject.Connection, adOpenKeyset, E
55 adLockOptimistic, adCmdTable
61 c = c + 1
Pt. cumparare viziteaza:
62 Else
63 rs2![Denumire rata] = "Expira"
64 End If
65 rs2![IDPolita] = IDPolita
66 rs2.Update
67 Rate = Rate - 1
68 da = DateAdd("d", d, da)
69 Wend
70 rs2.Close 0264-401667
NU COPIA !.
74 Forms!FFirma!sf1.Requery
75 Forms!FFirma!sf2.Requery
76
77 iesire:
78 Exit Sub
79
80 eroare:
81 MsgBox Err.Description
82 Resume iesire
412 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
83 End Sub
http://www.east.utcluj.ro/mb/mep/antal
Crearea interog|rilor aplicaÛiei
AplicaÛia va avea dou| interog|ri (Restantieri Õi Restantieri1) care sunt prezentate în figurile
care urmeaz|. Pe baza primei interog|ri se va crea un formular cu numele FRestantieri
(prezentat în modul proiectare) pentru afiÕarea celor care au restant-e la plata ratelor.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
În cele ce urmeaz| vor fi create dou| rapoarte Õi un meniu principal pentru aplicaÛie. ObservaÛi
c| nu exist| înc| butoane pentru deschiderea rapoartelor aceast| operaÛie devenind posibil|
prin intermediul sistemului de meniuri. Cele dou| rapoarte care vor fi create sunt prezentate în
modul proiectare:
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
ÎncepeÛi realizarea unui meniu Toolbar nou cu numele Meniu. CreaÛi pe rând articolele de
meniu Fisiere, Formulare, Rapoarte.
http://www.east.utcluj.ro/mb/mep/antal
Clic pe File din lista Categories a lui Commands, apoi clic pe meniul Fisiere, el se va
desf|Õura, f|r| sa7 conÛin| articole. Folosind tehnica drag-and-drop trageÛi articolele prezentate
în figura care urmeaz| din lista Commands pe suprafaÛa liber| a meniului pân| când va fi
Clic pe butonul din
dreapta -si modificat-i
pe Name: la Fisiere
Acest curs este proprietatea lui
drag-and drop
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
pe articol Õi selectând din lista ap|rut| pe Properties pentru a rescrie textul meniului
(proprietatea Caption) din limba englez| în limba român|.
Uneori între articolele aceluiaÕi meniu pot sa7 apar| linii de separaÛie orizontale. Acestea sunt
afiÕate la activarea propriet|Ûii Begin a Group Ea face ca articolul curent sa7 fi separat, de cel
anterior, printr-o linie orizontal| gri.
Articolelel unui meniu pot fi precedate de un simbol grafic. Exista7 câteva simboluri
predefinite care se pot selecta din Change Button Image. Daca7 acestea nu sunt suficiente, noi
simboluri pot fi create prin selectarea lui Edit Button Image ... .
415 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
http://www.east.utcluj.ro/mb/mep/antal
Proprietatea
Caption
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
rescrierea textelor în limba român| au fost definite meniurile Formulare Õi Rapoarte, acestea
înca nu conÛin articole. Selectând din Commands pe All Forms respectiv pe All Reports 0264-401667
completaÛi cele dou| meniuri astfel:
NU COPIA !.
ModificaÛi numele articolelor din meniurile Formulare respectiv Rapoarte dup| cum
urmeaz|: FFirme $ Firme, FFirma $ Polite/Rate, FRestantieri $ Restantieri, RTFirme
$ Firme, TFirme $ Restantieri. SelectaÛi propriet|Ûile meniului Meniu, apoi realizaÛi
set|rile din figura care urmeaz|. Cea mai important| dintre ele este tipul meniului care de la
Toolbar a fost schimbat în Menu Bar. Dup| realizarea set|rilor meniul se poate trage (prin
drag-and-drop) deasupra meniului Access-ului, iar celelalte meniuri pot fi ascunse astfel încât
aplicaÛia s| aib| un singur meniu.
416 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
Meniul
Meniu
aplicat-iei
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
ObservaÛi c| fereastra bazei de date nu mai este afiÕat|. Dac| aplicaÛia este pornit| Ûinând
0264-401667
NU COPIA !.
ap|sat| tasta Shift efectul este numai cel de deschidere a bazei de date f|r| aplicarea set|rilor
sau suna la:
din Startup. Acest mod de pornire va fi folosit dac| dorim s| mai aducem mici modific|ri
bazei de date finale.
449 Anexa 1 - Lista principalelor instruct-iuni VBA
http://www.east.utcluj.ro/mb/mep/antal
DeÕi în cadrul lucr|rii au fost prezentate Õi utilizate cele mai populare instrucÛiuni VBA lista
lor este mult mai lung|. În cele ce urmeaz| îmi propun s| prezint, într-o form| foarte sumar|,
un set mai extins al intrucÛiunilor VBA f|r| a le acoperi pe toate fiind omise cele "obscure"
sau rar utilizate.
InstrucÛiune Descriere
Acest curs este proprietatea lui
Declare nume
sau suna la:
Libray).
Dim numevariabil| Declar| o variabil| cu numele numevariabil|.
Do ... Loop Reia un grup de instrucÛiuni cât timp o condiÛie
logic| are valoarea True.
DoEvents Transfer| controlul sistemului de operare pentru ca
acesta s| poat| prelucra eventualele evenimente
asincrone ap|rute (ap|sare de taste, clic de mouse).
End cuvântcheie Termin| o procedur|, funcÛie sau o structur| de
control.
Erase tablou Elibereaz| memoria dinamic| alocat| unui tablou
sau reiniÛializeaz| un tablou de m|rime fix|.
Err = num|reroare Seteaz| pe Err (starea erori curente) la
num|reroare.
450 Anexa 1 - Lista principalelor instruct-iuni VBA
http://www.east.utcluj.ro/mb/mep/antal
Exit cuvântcheie IeÕirea dintr-o procedur|, funcÛie sau o structur| de
control.
FileCopy surs|, destinaÛie Copiaz| fiÕierul cu numele surs| în cel cu numele
destinaÛie.
For Each ... Next Parcurge toÛi membrii unei colecÛii.
For ... Next Reia parcurgerea unei instrucÛiuni sau al unui grup
de instrucÛiuni pân| când un contor ajunge la o
Acest curs este proprietatea lui
valoare impus|.
Function Declar| o funcÛie definit| de utilizator.
Get #nrfiÕier, numevariabil| CiteÕte un fiÕier de intrare/ieÕire deschis prin
instrucÛiunea Open în variabila numevariabil|.
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
MkDir cale Creeaz| directorul (directory sau folder) specificat
în cale.
Name numevechi As numenou RedenumeÕte un fiÕier sau un director.
On Error Specific| o rutin| de tratare a erorilor.
On ... Gosub, On ... GoTo Face ramificarea pe o linie pe baza valorii unei
expresii.
Acest curs este proprietatea lui
Open cale, etc. Deschide un fiÕier de intrare/ieÕire.
Option Base 0|1 La nivel de modul determin| valoarea implicit| de
început pentru limita de jos a tablourilor.
Option Compare Text|Binary La nivel de modul determin| modul implicit de
ANTAL Tiberiu Alexandru.
procedur| .
Property Set Seteaz| o referinÛ| la un obiect într-o proprietate
procedur| .
Public numevariabil| Face variabila cu numele numevariabil| disponibil|
în toate procedurile unui modul.
Put #nrfiÕier,numevariabil| Scrie date din numevariabil| într-un fiÕier de
intrare/ieÕire.
Randomize num|r IniÛializeaz| generatorul de numere aleatoare. Dac|
num|r este omis de fiecare dat| se obÛine o nou|
valoare.
ReDim numevariabil| Realoc| memoria unui tablou alocat dinamic.
452 Anexa 1 - Lista principalelor instruct-iuni VBA
http://www.east.utcluj.ro/mb/mep/antal
Reset Închide toate fiÕierele de intrare/ieÕire deschise cu
Open.
Resume Dup| o eroare, reia execuÛia programului din linia
care a cauzat eroarea.
Return vezi Gosub ... Return.
Ôterge directorul specificat în cale.
Acest curs este proprietatea lui
RmDir cale
RSet varsir = sir Realizeaz| alinierea la dreapta a unui Õir într-o
variabil| de tipul String.
SaveSetting numeaplicaÛie, etc. Salveaz| o setare în Registry-ul Windows-ului
pentru aplicaÛia cu numele numeaplicaÛie.
ANTAL Tiberiu Alexandru.
VBA se execut|.
Stop Trece codul VBA în starea de suspendare.
Sub Declar| o procedur|.
Time = timp Seteaz| timpul systemului la timp.
Type numevariabil| Declar| un tip de dat| definit de utilizator (numai la
nivel de modul).
Unload Descarc| un formular definit de utilizator din
memorie.
Unlock #nrfiÕier, domeniuînreg Anuleaz| controlul accesului la un fiÕier de
intrare/ieÕire.
While ... Wend Reia o porÛiune de cod cât timp o condiÛie este
True.
453 Anexa 1 - Lista principalelor instruct-iuni VBA
Width #nrfiÕier, width Atribuie o l|Ûie unei linii de ieÕire într-un fiÕier de
intrare/ieÕire.
http://www.east.utcluj.ro/mb/mep/antal
With ... End With Execut| un grup de instrucÛiuni pentru un obiect
specificat.
Write #nrfiÕier Scrie date într-un fiÕier de intrare/ieÕire.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
F|r| a se dori un grupaj de cele mai utile funcÛii, în cele ce urmeaz| doresc s| prezint câteva
din grupurile de funcÛii VBA folosite mai des la scrierea aplicaÛiilor Access. ExplicaÛiile sunt
sumare, dar dac| numele unei funcÛii a fost identificat în listele prezentate se poate folosi
fiÕierul help VBA pentru explicaÛii mai detaliate Õi exemple de utilizare ale ei.
FuncÛii de conversie
Acest curs este proprietatea lui
DateSerial(an, luna, zi) Valoare de tipul Date specificat| prin an, luna Õi zi.
DateValue(data) Valoare Date a Õirului data.
http://www.east.utcluj.ro/mb/mep/antal
Day(data) Ziua pentru data specificat|.
Hour(timp) Ora pentru timp-ul specificat.
Minute(timp) Minutul pentru timp-ul specificat.
Month(data) Luna pentru data specificat|.
Now Data Õi ora curent| a sistemului.
Acest curs este proprietatea lui
Err
sau suna la:
http://www.east.utcluj.ro/mb/mep/antal
directorul sau fiÕierul nu exist|.
Dir$(cale, atribute) Numele fiÕierului sau directorului, ca Õi String, specificat
prin cale care satisface atributele opÛionale atribut (de
exemplu vbHidden). Întoarce Null dac| directorul sau
fiÕierul nu exist|.
EOF(nrfiÕier) True dac| cap|tul fiÕierului specificat prin nrfiÕier a fost
atins.
Acest curs este proprietatea lui
FileAttr(nrfiÕier, tipîntors) Modul (intrare, ieÕire, ad|ugare, binar etc.)în care a fost
deschis fiÕierul (dac| tipîntors = 1) sau handle-ul fiÕierului
(dac| tipîntors = 2) specificat prin nrfiÕier.
FileDateTime(cale) Data la care fiÕierul specificat prin cale a fost creat sau
ANTAL Tiberiu Alexandru.
FuncÛii financiare
FuncÛie Valoare întoars|
DBB(cost, salvare, viaÛa, perioad|, factor) Deprecierea unui obiect într-o
perioad| specificat| folosind metoda
de calcul cu pant| dubl| (double-
declining method).
FV(rata, nper, plata, pv, tip) Valoarea viitoare a unei investiÛii sau
a unui împrumut.
IPmt(rata, plata, mplata, pv, fv, type) Plata dobânzii pentru o perioad|
specificat| a unui împrumut.
457 Anexa 2 - Lista principalelor funct-ii VBA
http://www.east.utcluj.ro/mb/mep/antal
MIRR(valori, rata_financiar|, rata_reinvestiÛie) Rata modificat| intern| de plat|
pentru o serie de plaÛi Õi facturi.
NPer(rata, plata, pv, fv, tip) Num|rul de perioade pentru o
investiÛie sau un împrumut.
NPV(rata, val1, val2, ...) Valoarea net| prezent| a unei
investiÛii pentru o serie de pl|Ûi Õi
facturi cu o rat| de reducere.
Acest curs este proprietatea lui
FuncÛii matematice
FuncÛie Valoare întoars|
Abs(num|r) Valoarea absolut| a lui num|r. 0264-401667
Atn(num|r) Arctangenta lui num|r.
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Sin(num|r) Sinusul lui num|r.
Sqr(num|r) Rad|cina p|trat| a lui num|r.
Tan(num|r) Tangenta lui num|r.
http://www.east.utcluj.ro/mb/mep/antal
LTrim(Õir) Un Õir Variant far| spaÛiile din partea
stâng|.
LTrim$(Õir) Un Õir String far| spaÛiile din partea
stâng|.
Mid(Õir, început, lungime) lungime caractere, ca Õi Variant, ale lui Õir
plecând de la început.
Acest curs este proprietatea lui
Mid$(Õir, început, lungime) lungime caractere, ca Õi String, ale lui Õir
plecând de la început.
MidB(Õir, început, lungime) lungime octeÛi, ca Õi Variant, ale lui Õir
plecând de la început.
ANTAL Tiberiu Alexandru.
http://www.east.utcluj.ro/mb/mep/antal
Trim(Õir) Un Õir, ca Õi Variant, f|r| spaÛiile din
stânga Õi dreapta lui Õir.
Trim$(Õir) Un Õir, ca Õi String, f|r| spaÛiile din stânga
Õi dreapta lui Õir.
UCase(Õir) Õir converit în litere mari ca Õi Variant.
UCase$(Õir) Õir converit în litere mari ca Õi String.
Acest curs este proprietatea lui
Val(Õir) Num|rul conÛinut în Õir.
Alte funcÛii
ANTAL Tiberiu Alexandru.
sirformat.
GetAllSettings(numeap, sectiune) Extrage din Registry toate set|rile pentru secÛiunea
sectiune.
GetObject(cale, clasa) Obiectul Automation specificat prin cale Õi clasa.
GetSettings(numeap, etc.) Extrage o setare din Registry.
IIf(expr, partetrue, partefalse) Întoarce partetrue dac| expr este True, altfel
partefalse.
Input(num|r, #nrfiÕier) num|r caractere Variant ale fiÕierului de
intrare/ieÕire specificat prin nrfiÕier.
Input$(num|r, #nrfiÕier) num|r caractere String ale fiÕierului de
intrare/ieÕire specificat prin nrfiÕier.
InputB(num|r, #nrfiÕier) num|r octeÛi Variant ale fiÕierului de intrare/ieÕire
specificat prin nrfiÕier.
461 Anexa 2 - Lista principalelor funct-ii VBA
http://www.east.utcluj.ro/mb/mep/antal
InputBox(întrebare, etc.) Cere utilizatorului introducerea unei informaÛii.
IsArray(numevariabil|) True dac| numevariabil| este tablou.
IsDate(expresie) True dac| expresie poate fi convertit| la o dat|.
IsEmpty(expresie) True dac| expresie nu a fost iniÛializat|.
IsError(expresie) True dac| expresie este o valoare de eroare.
Acest curs este proprietatea lui
IsMissing(numeargument) True dac| numele numeargument nu a fost
transferat unei proceduri.
IsNull(expresie) True dac| expresie este Õirul nul ("").
IsNumeric(expresie) True dac| expresie este un num|r.
ANTAL Tiberiu Alexandru.
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667