Sunteți pe pagina 1din 427

5 CUPRINS

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

Ce este o baz| de date? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21


Tipuri de relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
ANTAL Tiberiu Alexandru.

Regulile relaÛionale ale lui Codd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24


Pt. cumparare viziteaza:
Scopul unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

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

Lansarea în execuÛie a Microsoft Access-ului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30


Fereastra principal| a Access-ului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Obiectivele cursului 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
0264-401667
NU COPIA !.

sau suna la:

Deschiderea unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Fereastra bazei de date Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Închiderea unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Deschiderea unui tabel (Table) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Explorarea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Vizualizarea tabelelor în mod proiectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Introducere în interog|ri (Queries) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Introducere în formulare (Forms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39


Tipuri de formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6 CUPRINS

Deschiderea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41


Vizualizarea în modul proiectare (Design View) . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

http://www.east.utcluj.ro/mb/mep/antal
Închiderea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Introducerea în rapoarte (Reports) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Obiectivele cursului 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Proiectarea bazei de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46


Ce întreb|ri ne punem? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Acest curs este proprietatea lui
Clarificarea a ceea ce dorim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Reguli generale de proiectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Determinarea relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Teoria proiect|rii bazelor de date relaÛionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48


Tabele, unicitate, chei Õi domenii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ANTAL Tiberiu Alexandru.

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

Crearea unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 0264-401667


Ad|ugarea de câmpuri folosind Generatorul de Tabele (Table Wizard) . . . . . . . . . . 56
NU COPIA !.

sau suna la:

Crearea unui tabel f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59


Definirea tipurilor de câmpuri ale unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Propriet|Ûile câmpurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Proprietatea Masc| de Intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
.................................................................. 64
Stabilirea cheii primare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

Salvarea unui Tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Ad|ugarea de înregistr|ri unui Tabel vizualizat în modul foaie de date . . . . . . . . . . . . . . . . 65

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

Formatarea în cazul tipului Yes/No . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

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.

Vizualizarea Õi setarea valorilor implicite pentru foile de date . . . . . . . . . . . . . . . . . . . . . . . 74


Pt. cumparare viziteaza:
Redefinirea ordinii de afiÕare a coloanelor unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Reordonarea câmpurilor unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Modificarea l|Ûimii (width) unei coloane Õi în|lÛimii (height) unui rând . . . . . . . . . . . . . . . 76

Ascunderea (hiding) Õi vizualizarea (un-hiding) coloanelor . . . . . . . . . . . . . . . . . . . . . . . . . 77

ÎngheÛarea (freeze) coloanelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Formatarea celulelor din foaia de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Copierea (copy), mutarea (move) câmpurilor Õi înregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . 79


0264-401667
NU COPIA !.

sau suna la:

Manipularea obiectelor tabel din fereastra bazei de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

Tip|rirea (Printing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Obiectivele cursului 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

C|utarea Õi înlocuirea informaÛiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84


C|utarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

Caractere generice (Wildcards) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

G|sirea unei valori specifice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

Înlocuirea unor valori din câmpuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86


8 CUPRINS

Sortarea înregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

http://www.east.utcluj.ro/mb/mep/antal
Ce este un filtru? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Filtrarea înregistr|rilor prin selecÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Filtrarea înregistr|rilor prin formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Scurt istoric al bazelor de date relaÛionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Definirea relaÛiilor în Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90


Acest curs este proprietatea lui

Deschiderea ferestrei cu relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90


Ad|ugarea tabelelor în fereastra relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Definirea relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Integritate ReferenÛial| (Referential Integrity) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93


ANTAL Tiberiu Alexandru.

Editarea relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Pt. cumparare viziteaza:

Obiectivele cursului 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

Ce sunt interog|rile (Queries)? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Tipuri de interog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Posibilit|Ûile interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Ce sunt mulÛimile dinamice (dynaset)? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Deschiderea unei interog|ri (Query) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 0264-401667


NU COPIA !.

sau suna la:

Crearea unei interog|ri folosind Generatorul de Interog|ri Simple (Simple Query Wizard)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Crearea unei interog|ri f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101


Grila interog|rii (Query Grid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Operatori logici pentru criterii de selecÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Folosirea textului în criteriul de selecÛie - caractere generice (Wildcards) . . . . . . . 105
Criterii multiple Õi alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Câmpuri calculate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Interog|ri cu totale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Categoria Group By . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Categoria Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Categoria Total Field Record Limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Categoria Aggregate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Interog|ri de actualizare (Update Queries) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113


9 CUPRINS

Interog|ri de ad|ugare (Append Queries) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

http://www.east.utcluj.ro/mb/mep/antal
Interogarea de creare a unui tabel (Make-Table Query) . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

Interog|ri cu mai multe tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117


Tipuri de asocieri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Asocieri interne (inner joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Asocierea extern| la dreapta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Asocierea extern| la stânga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Acest curs este proprietatea lui
Autoasocieri (self-joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Asocierea de tip produs cartezian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Interog|ri cu parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
ANTAL Tiberiu Alexandru.

Interog|ri încruciÕate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125


Pt. cumparare viziteaza:
Propriet|Ûile interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

Interogri pentru întreÛinerea bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128


Find Duplicate Query Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Find Unmatched Query Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

OpÛiuni pentru proiectarea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

Obiectivele cursului 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130


0264-401667
NU COPIA !.

Formulare (Forms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131


sau suna la:

Aspectul vizual (Form Layout) al formularului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Crearea unui formular cu AutoForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Crearea unui formular cu Generatorul de Formulare (From Wizard) . . . . . . . . . . . . . . . . . 133

Moduri de vizualizare a formularelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

Crearea unui formular f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Vizualizarea ferestrei în mod proiectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138


Fereastra modului proiectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
AfiÕarea sau ascunderea liniarului (Rulers) . . . . . . . . . . . . . . . . . . . . . . . . . 140
AfiÕarea listei de propriet|Ûi (Properties) a unui obiect de pe suprafaÛa
formularului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
10 CUPRINS

AfiÕarea listei câmpurilor (Field List) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140


AfiÕarea cutiei cu instrumente (Toolbox) . . . . . . . . . . . . . . . . . . . . . . . . . . 140

http://www.east.utcluj.ro/mb/mep/antal
AfiÕarea codului din spatele formularului . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Manipularea proiectului de formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141


Rolul controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Editarea controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Pentru a fixa poziÛia controalelor la punctele grilei . . . . . . . . . . . . . . . . . . . . . . . . . 142
Pentru mutarea controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Pentru mutarea independent| a cutiei text sau etichet| . . . . . . . . . . . . . . . . . . . . . . 142
Acest curs este proprietatea lui
Pentru a redimensiona un control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Pentru a Õterge un control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Pentru a multiplica un grup de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Pentru a muta sau copia controale folosind meniul Edit . . . . . . . . . . . . . . . . . . . . . 143
Pentru selectarea a dou| controale adiacente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
ANTAL Tiberiu Alexandru.

Pentru a selecta un grup de controale neadiacente . . . . . . . . . . . . . . . . . . . . . . . . . . 143


Pentru alinierea unui grup de controale între ele . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Pentru a modifica spaÛierea dintre controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Pt. cumparare viziteaza:
Pentru a salva un formular cu toate modific|rile f|cute asupra controalelor lui . . . 144
Pentru a modifica dimensiunea unei secÛiuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Pentru a modifica l|Ûimea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Pentru a modifica l|Ûimea formularului Õi dimensiunea unei secÛiuni simultan . . . 144

Tipuri de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

Cutia cu instrumente (Toolbox) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

Propriet|Ûile de legate de afiÕarea controalelor Etichet| Õi Cutie Text . . . . . . . . . . . . . . . . 148

Navigarea între câmpurile formularului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 0264-401667


NU COPIA !.

sau suna la:

Tehnici de editare a datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Lista proprietilor unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Obiectivele cursului 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Crearea unei cutii combinate (Combo Box) folosind cutia cu instrumente (Toolbox) . . . . 162
Crearea unui formular cu o cutie combinat| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Modificarea propriet|Ûilor unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Crearea unui câmp calculat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Crearea unui formular cu subformular (Subform) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

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

Butoane de comand| (Command Buttons) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178


Ad|ugarea unui buton de comand| la un formular . . . . . . . . . . . . . . . . . . . . . . . . . 179

Întreruperi de pagin| (Page Break) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

AplicaÛie cu formulare Õi controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182


Acest curs este proprietatea lui
Tabele Õi relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Obiectivele cursului 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

Generalit|Ûi despre Rapoarte (Reports) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189


ANTAL Tiberiu Alexandru.

Deschiderea Õi vizualizarea unui raport existent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190


Pt. cumparare viziteaza:

Tip|rirea (Printing) rapoartelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

Crearea unui raport folosind AutoReport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

Crearea unui Raport folosind Generatorul de Rapoarte (Report Wizard) . . . . . . . . . . . . . . 194

Generatorul de etichete (Label Wizard) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

Generatorul de Grafice (Chart Wizard) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

Nivele de grupare (Grouping Levels) în rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 0264-401667


NU COPIA !.

sau suna la:

Rapoarte f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208


Crearea de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Setarea propriet|Ûilor raportului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

AplicaÛia 1 cu rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211


Interog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

AplicaÛia 2 cu rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

Obiectivele cursului 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

Limbajul de programare Visual Basic for Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . 231


12 CUPRINS

Programarea orientat| pe evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

http://www.east.utcluj.ro/mb/mep/antal
Proceduri de evenimente (Event Procedures) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Proceduri definite de utilizator (General Procedures) . . . . . . . . . . . . . . . . . . . . . . . 232

Proceduri de tip Sub Õi Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233


Procedura de tip Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Procedura de tip Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Proceduri private (Private) Õi publice (Public) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Acest curs este proprietatea lui
Variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Declararea variabilelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Scop Õi durat| de existenÛ| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237


ANTAL Tiberiu Alexandru.

Tipul Variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237


Tipuri numerice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Tipul Õir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Pt. cumparare viziteaza:
Tipul dat|/or| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Tipul Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Tipul parametru de procedur| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Tabloul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Declararea tablourilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Tablouri cu mai multe dimensiuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Alocarea dinamic| a spaÛiului pentru stocarea tablourilor . . . . . . . . . . . . . . . . . . . . 240

Constante simbolice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

Constante intrinseci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 0264-401667


NU COPIA !.

sau suna la:

Operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Operatori aritmetici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Operatori de comparaÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Operatori de concatenare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Operatori logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

Controlul execuÛiei programului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244


InstrucÛiunea Let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
InstrucÛiuni pentru decizie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
If...Then . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
If...Then...Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Select...Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
InstrucÛiuni de ciclare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Ciclul Do...Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Ciclul For...Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Ciclul For Each...Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
13 CUPRINS

Ciclul While...Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

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

ColecÛii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255


Crearea unei colecÛii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ANTAL Tiberiu Alexandru.

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

AplicaÛii VBA cu funcÛii Õi clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262


Aplicaii cu instruciunea If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
AplicaÛii cu instrucÛiunea For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Realizarea unei clase pentru lucrul cu numere complexe . . . . . . . . . . . . . . . . . . . . 266
0264-401667
NU COPIA !.

sau suna la:

Obiectivele cursului 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

Ce este programarea orientat| pe obiecte? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

Obiecte Õi ColecÛii în VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

Variabilele de tipul obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Obiecte Microsoft Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Obiecte pentru accesul la date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

Determinarea tipului unui obiect de tipul Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

Unele propriet|Ûi ale obiectelor folosite mai des . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276


Propriet|Ûile obiectului Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
14 CUPRINS

Propriet|Ûi ale formularelor Õi rapoartelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

http://www.east.utcluj.ro/mb/mep/antal
ColecÛii implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

Propriet|Ûi ale obiectelor Õi colecÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

Obiectele Container Õi Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

Evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Acest curs este proprietatea lui
Tipuri de evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

Evenimente specifice formularelor Õi controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

Evenimente de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287


ANTAL Tiberiu Alexandru.

Evenimente implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289


Pt. cumparare viziteaza:
Erori Õi proceduri de tratare a erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Instrumente pentru depanare (Debugging tools) . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
ExecuÛia pas cu pas a procedurilor (Stepping) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Fereastra pentru Depanare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Depanarea procedurilor de evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Aplicaie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

Obiectivele cursului 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

Tratarea erorilor în VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296


Folosirea evenimentului Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
0264-401667
InstrucÛiunea On Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NU COPIA !.

298
sau suna la:

InstrucÛiunea On Error GoTo etichet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298


InstrucÛiunea On Error Resume Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
InstrucÛiunea On Error GoTo 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
InstrucÛiunea Resume Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Obiectul Err . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Ierarhii ale codului pentru tratarea erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

Access SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302


Cum se foloseÕte Access SQL-ul? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Sintaxa comenzilor SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
InstrucÛiunea SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Clauza SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Clauza FROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Clauza WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Clauza ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Asocierea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
15 CUPRINS

Asociere multipl| (Multiple Joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308


Asociere non-equi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

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.

DefiniÛia datelor cu SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319


InstrucÛiunea CREATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Pt. cumparare viziteaza:
Clauza CONSTRAINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
InstrucÛiunea CREATE INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
InstrucÛiunea ALTER TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
InstrucÛiunea DROP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Interog|ri SQL Pass-Through . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

Obiectivele cursului 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Lucrul cu mulÛimi de înregistr|ri (sets of records) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

Obiectul mulÛime de înregistr|ri (recordset) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325


Crearea unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
0264-401667
ConsistenÛa Õi inconsistenÛa actualiz|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NU COPIA !.

328
sau suna la:

Moduri de creare a mulÛimilore de înregistrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328


Parcurgerea unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
G|sirea num|rului de înregistr|ri din mulÛime . . . . . . . . . . . . . . . . . . . . . . 331
Testarea limitelor mulÛimii de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . 331
C|utarea unor înregistr|ri specifice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
InstrucÛiunea With . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
C|utarea în tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Utilizarea marcajelor (bookmark) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Sortarea înregistr|rilor dintr-o mulÛime de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . 335
Sortarea prin folosirea propriet|Ûii Index . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Sortarea prin folosirea clauzei SQL ORDER BY . . . . . . . . . . . . . . . . . . . . 336
Sortare folosind proprietatea Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Filtrarea mulÛimilor de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Filtrarea folosind clauza SQL WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Filtrarea prin proprietatea Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Editarea datelor unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
16 CUPRINS

Modificarea unei înregistr|ri existente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339


Ad|ugarea unei înregistr|ri noi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

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

DefiniÛia datelor cu DAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345


Crearea obiectelor bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Crearea unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Tabelul metodelor Create... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Acest curs este proprietatea lui
Crearea unui Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Crearea unei relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
AtaÕarea tabelelor din bazele de date externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
AtaÕarea unui tabel extern unei baze de date Access . . . . . . . . . . . . . . . . . . 354
ReataÕarea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
ANTAL Tiberiu Alexandru.

Obiectivele cursului 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358


Pt. cumparare viziteaza:
Ce aduce nou Access 2000? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
VBA în Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Formulare Õi rapoarte în Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Accesul la date în Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Facilit|Ûile internet Õi intranet ale lui Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . 360

ADO sau DAO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360


Specificarea referinÛelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Noua ierarhie de obiecte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Manipularea datelor prin ADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
DefiniÛia datelor Õi securitatea cu ADOX . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Replicarea cu JRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
0264-401667
NU COPIA !.

sau suna la:

Utilizarea variabilelor obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Obiectul Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

Enumerarea obiectelor unei colecÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

Lucrul cu mulÛimile de înregistr|ri în Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

Deschiderea unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368


Crearea obiectelor mulÛime de înregistrare . . . . . . . . . . . . . . . . . . . . . . . . . 371
Cursorul client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Navigarea printre înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
C|utarea înregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Editarea datelor unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Modificarea unei înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Ad|ugarea unei înregistr|ri noi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
17 CUPRINS

Ôtergerea unei înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378


Actualiz|ri în grup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

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

Definirea Õi înc|rcarea schemei bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385


Crearea unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Înc|rcarea informaÛiilor legate de schema bazei de date . . . . . . . . . . . . . . . . . . . . . 385
Crearea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Acest curs este proprietatea lui
Crearea unui tabel local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Crearea unui tabel legat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Modific|ri aduse tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Crearea Õi modificarea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Crearea unei interog|ri stocate în baza de date folosind colecÛia Views . . . 392
Crearea unei interog|ri stocate în baza de date folosind colecÛia Procedures
ANTAL Tiberiu Alexandru.

..................................................... 392
Modificarea instrucÛiunii SQL a unei interog|ri . . . . . . . . . . . . . . . . . . . . . 393
Pt. cumparare viziteaza:
Crearea unui index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Crearea unei relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

Crearea unei aplicaÛii cu formulare, subformulare Õi cod în Access 2000 . . . . . . . . . . . . . . 396


Sincronizarea a dou| subformulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Sincronizarea a trei formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Ad|ugarea, prin cod, de date în dou| tabele aflate în relaÛie one-to-many . . . . . . . 406
Crearea interog|rilor aplicaÛiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Crearea rapoartelor aplicaÛiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

Ce este tehnologia ActiveX Automation? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420


Automation Server Õi Automation Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
0264-401667
NU COPIA !.

Modul de lucru cu obiectele Automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420


sau suna la:

Crearea Õi definirea unei referinÛe la o alt| aplicaÛie. . . . . . . . . . . . . . . . . . . 420


Modele de obiecte Õi navigatorul de obiecte . . . . . . . . . . . . . . . . . . . . . . . . 422
Creare variabilelor de tipul obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Legare în avans Õi legare târzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
FuncÛiile CreateObject Õi GetObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Argumentele Clasa pentru aplicaÛiile din Microsoft Office . . . . . . . . . . . . 430
Automation cu Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
Inserarea datelor într-un document Word . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Inserarea datelor într-un document Word folosind bookmark-uri . . . . . . . . 435
Automation cu Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

Pagini pentru accesul la date (Data Access Pages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446


Crearea unei PAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Crearea unei PAD simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Folosirea generatoarelor pentru crearea de PAD . . . . . . . . . . . . . . . . . . . . . 447
Create data access page in Design view . . . . . . . . . . . . . . . . . . . . . . 447
18 CUPRINS

Create data access page by using wizard . . . . . . . . . . . . . . . . . . . . . 448


Edit Web page that already exists . . . . . . . . . . . . . . . . . . . . . . . . . . 448

http://www.east.utcluj.ro/mb/mep/antal
ANEXA 1 - Lista principalelor instrucÛiuni VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451

ANEXA 2 - Lista principalelor funcÛii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456


FuncÛii de conversie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
FuncÛii pentru dat| Õi timp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
FuncÛii pentru tratarea erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
FuncÛii pentru manipularea fiÕierelor Õi directorilor . . . . . . . . . . . . . . . . . . . . . . . . 457
Acest curs este proprietatea lui
FuncÛii financiare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
FuncÛii matematice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
FuncÛii pentru prelucrarea Õirurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Alte funcÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
ANTAL Tiberiu Alexandru.

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466

Bibliografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


19 Introducere în Microsoft Access - cursul 1

Obiectivele cursului 1

http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:

! concepte legate de: baze de date, tabele Õi relaÛii;


! termenul baz| de date relaÛional| (Relational Database);
! care sunt regulile relaÛionale ale lui Codd;
! avantajele utiliz|rii bazelor de date;
Acest curs este proprietatea lui
! elementele de baz| ale Access-ului: Tabele (Tables), Formulare (Forms),
Rapoarte (Reports), Macro (Macros) Õi Module (Modules);
! cum se lanseaz| în execuÛie Access-ul Õi obiectele care exist| pe fereastra
principal| a aplicaÛiei Access.
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


20 Introducere în Microsoft Access - cursul 1

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:

• Factura - “NR 0011”.

Câmp (Field): dat| individual| elementar| stocat| într-o înregistrare, de exemplu:


• în fiÕierul Clienti - Nume, Adresa, Telefon;
• în fiÕierul Produse - Cod produs, Descriere, Pret;
• în fiÕierul Facturi - Cod produs, Nume vanzator, Data, Ora.

Câmpurile se definesc, precis, în termenii tipului datelor pe care pot s| le conÛin| s- i a


dimensiunii maxime ce se poate stoca în acel câmp.

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

Fiecare înregistrare stocheaz| categorii de informaÛii elementare în urm|toarele câmpuri:


• NUME DIRECTOR;

http://www.east.utcluj.ro/mb/mep/antal
• PRENUME DIRECTOR;
• AN NASTERE;
• TITLU DIDACTIC.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Ce este o baz| de date?


O definit-ie simpla7 pentru o baz| de date este: O colect-ie structurata7 de date interconectate
relat-ional prin unul sau mai multe subiecte.

O definit-ie mai tehnica7 ar fi: baza de date reprezinta7 una sau mai multe mult-imi de date
0264-401667
NU COPIA !.

sau suna la:

persistente structurate, asociate de obicei cu un software pentru editarea -si select-ia


datelor.

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.

Pt. cumparare viziteaza:

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:

Un sistem de gestiune a bazelor de date relat-ionale (Relational Database Management


System - RDBMS) este o un sistem de gestiune a bazelor de date care foloseÕte modelul
relaÛional dezvoltat de E. F. Codd în 1970.

Un model de date este un formalism matematic cu o notaÛii pentru descrierea structurilor de


date - organizarea datelor - Õi a mult-imii de operat-ii folosite pentru manipularea datelor.

Î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.

Bazele de date comune se prezint| sub dou| forme:


1. baza de date simpla7 (flat database) - se foloseÕte pentru stocarea unor liste
Pt. cumparare viziteaza:
simple ce pot conÛine date redundante, asemenea unor pagini dintr-o agend| în care
unele informaÛii se repet|;
2. baza de date relat-ionala7 (relational database) - se foloseÕte pentru stocarea
datelor în fiÕiere cu referinÛe încruciÕate pentru eliminarea redundanÛei. Din acest
motiv g|sirea, analiza, gestionarea Õi protecÛia datelor este mai simpl| pentru c|
acestea apar o singur| dat| în baz|.

0264-401667
NU COPIA !.

sau suna la:

S| presupunem c| într-o firm| se Ûine pe calculator evidenÛa angajaÛilor, clienÛilor Õi a


produselor sau a serviciilor pe care acesta le comercializeaz|. Pentru a obÛine un produs sau
un serviciu clientul trebuie s| fac| o comand|.

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.

mulÛi-la-mulÛi (many-to-many) care în Access nu este permis|. Ea se poate transforma în


relaÛii unu-la-mulÛi prin folosirea unui tabel intermediar de leg|tur|. În figura anterioar| 1
Pt. cumparare viziteaza:
indic| partea de “unu” din relaÛie iar simbolul infinit 4 reprezint| partea de “mulÛi”.

În relaÛia unu-la-mulÛi dintre tabelele ClienÛi-Comenzi (Customers-Orders) câmpul de leg|tur|


între tabele este CustomerID. În tabelul ClienÛi este Õi cheie primar|. Cheia primar|
identific| unic fiecare înregistrare din tabel. În unele cazuri aceasta se poate realiza prin
folosirea unui singur câmp (de exemplu CustomerID) alteori se foloseÕte o combinaÛie de
orice num|r de câmpuri (de exemplu OrderID + NrLinie poate identifica unic o
înregistrare în tabelul Order Details). Pe baza datelor din tabele trebuie s| se g|seasc| o
combinaÛie de câmpuri care s| asigure identificarea unic| a înregistr|rilor din tabel.

Î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 !.

Regulile relaÛionale ale lui Codd


sau suna la:

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:

Nr. Nume regula7 Descriere Implementare Access


25 Introducere în Microsoft Access - cursul 1

0 Principul de Orice SGBD RelaÛional (SGBDR) Access-ul a fost primul


baz| trebuie s| gestioneze întreaga baz| de SGBD care rula sub
date numai prin posibilit|Ûile Windows Õi respecta

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

2 Garantarea Fiecare element de dat| trebuie s| fie Access-ul respect|


accesului accesibil logic printr-o combinaÛie de aceast| regul| prin
forma: cheie primar|, nume de tabel Õi folosirea Cheii Primare
nume de câmp. (Primary Key).
ANTAL Tiberiu Alexandru.

3 Lipsa Valorile vide (Null) trebuie s| fie Access-ul suport| lucrul


informaÛiei suportate explicit. Null-urile cu valori Null pentru
Pt. cumparare viziteaza:
reprezint| informaÛia lips| sau descrierea informaÛiilor
imposibil de aplicat. lips|.
4 Catalogul de Descrierea bazei de date sau catalogul Catalogul rezid| în
sistem trebuie s| se fac| la nivelul logic sub motorul bazei de date
forma unor valori în tabele. Limbajul Microsoft Jet. Se poate
relaÛional (SQL) trebuie s| poat| folosi OpenSchema din
acÛiona asupra proiectului bazei de ADO pentru interogarea
date în acelaÕi mod în care acÛioneaz| catalogului de sistem.
asupra datelor stocate în structur|. Limbajul DDL SQL al
motorului bazei de date
Microsoft Jet ofer|
posibilitatea cre|rii
0264-401667
NU COPIA !.

tabelelor, cheilor etc.


sau suna la:

5 Limbaj Un SGBD trebuie s| suporte un limbaj Access-ul, prin motorul


cuprinz|tor clar pentru manipularea datelor (SQL) Jet, asigur| SQL pentru
care asigur| modalit|Ûi cuprinz|toare manipularea datelor,
pentru manipularea datelor, definirea crearea vederilor (Select
datelor, definirea vederilor, Queries), constrângerile
constrângerile de integritate, limit|rile de intergritate
de tranzacÛii Õi de autorizare. (Relationships Õi
CREATE
CONSTRAINT).
6 Actualizarea Toate vederile trebuie s| poat| fi Access a fost primul
vederilor actualizate de sistem. Într-un SGBD SGBD pe PC-uri care a
total relaÛional majoritatea vederilor permis interog|ri de
ar trebui s| se poat| actualiza. actualizare (Update
Query).
26 Introducere în Microsoft Access - cursul 1

7 Actualiz|ri la Un SGBDR trebuie s| fac| mai mult Access-ul suport|


nivel de decât simpla extragere a datelor. interog|ri de acÛiune
mulÛime Trebuie s| aib| capacitatea de (Action Query).

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

pe "sub aplicaÛie". De exemplu, ului. Jet-ul are motor de


programul SGBDR nu se va modifica stocare logic.
dac| un index se adaug| sau se Õterge
dintr-un tabel.
IndependenÛa Pe cât este posibil, aplicaÛiile software
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

11 IndependenÛa Capacit|Ûile SGBDR nu au voie s| fie Pentru c| motorul Jet


distribuÛiei limitate datorit| distribuÛiei unor stocheaz| regulile de
componente ale acestuia în baze de integritate la nivel de
date separate. motor, alte componente
ale motorului nu
afecteaz| regulile de
integritate.
27 Introducere în Microsoft Access - cursul 1

12 InexistenÛa Dac| un SGBDR are un limbaj de Access-ul permite


submin|rilor manipulare "a unei singure înregistr|ri folosirea lui DAO Õi
la un moment dat", acest limbaj nu va ADO pentru

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.

Scopul unei baze de date


O baz| de date electronic| permite utilizatorului efectuarea aceloraÕi operaÛii ca în cazul unei
Pt. cumparare viziteaza:
baze de date stocat| pe hârtie, în plus, datorit| suportului electronic ofer| avantajele:
• vitez| m|rit|, simplitate în folosire, posibilitatea stoc|rii unor cantit|Ûi mari de date;
• permite introducerea Õi editarea comod| a datelor, sortarea uÕoar| a datelor Õi c|utarea
simpl| a datelor;
• permite preg|tirea unor rapoarte precise într-o form| dorit| de utilizator despre
informaÛiile stocate;
• asigur| partajarea datelor cu alte pachete software, în reÛele de calculatoare asigur| Õi
partajarea informaÛiilor între utilizatori, sc|zând mult timpul pentru duplicarea datelor;
• asigur| securitatea datelor prin protecÛie împotriva accidentelor software Õi hardware.

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 !.

sau suna la:

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.

Cât "poate duce" Access-ul?


Pentru a r|spunde la aceast| întrebare trebuie s| l|murim "clasa" sistemelor de gestionare a
bazelor de date din care face parte Access-ul. Access-ul este un SGBD pentru calculatoare
desktop, adic| calculatoare care "stau pe biroul cuiva", deci care deservesc un utilizator sau un
28 Introducere în Microsoft Access - cursul 1

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.

Compatibilitatea între versiuni


Versiunile de Access de pe piaÛ| sunt practic produse distincte pentru c| nu asigur|
compatibilitatea de la nou la vechi. O baz| de date scris| într-o versiune b|trân| se poate
converti la una mai nou|, dar invers nu se poate. Erau dou| soluÛii pentru aceast| problem|: se
p|stra o copie veche a bazei de date care va fi convertit| la versiunile noi sau se va deschide
versiunea veche a bazei cu un Access nou, îns| numai în modul de citire (read only). La 0264-401667
realizarea conversiei Access-ul încearc| s| transforme cât mai bine posibil obiectele vechi în
NU COPIA !.

corespondentul lor nou, dar Õi aici apar des probleme.


sau suna la:

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.

Acest curs este proprietatea lui

Introducere în instrumentele Accessului


ANTAL Tiberiu Alexandru.

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.

Formularele se folosesc pentru introducerea, editarea sau vizualizarea


Ce sunt fomularele
? datelor la nivel de înregistrare.
(Forms)

0264-401667
NU COPIA !.

sau suna la:

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.

O interogare este o întrebare


Ce sunt despre date, de exemplu:
interogarile ?
• câte pl|ci de baz|
(Query)
defecte au fost cump|rate?
• câÛi bani mai am în
cont?

La fiecare interogare din baza de date se extrag


ultimele date (cele mai proaspete) legate de
30 Introducere în Microsoft Access - cursul 1

informaÛia cerut| de noi.

Rapoartele se folosesc la tip|rirea Õi afiÕarea imformaÛiilor din baza de


Ce sunt rapoartele date. Rapoartele permit producerea rezultatelor cu informaÛia într-o

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

Un macro este un grup de comenzi Access care rezolv| o sarcin|


Ce sunt macro-
urile? concret|. De exemplu, pentru a crea un buton care deschide un raport
(Macros) se poate folosi un macro care se lanseaz| în acÛiunea "OpenReport".
ANTAL Tiberiu Alexandru.

Macro-urile se pot folosi pentru a seta valoarea unui câmp pe baza


valorii altui câmp (acÛiunea "SetValue"), pentru a verifica îndeplinirea
anumitor condiÛii înainte de salvarea unei înregistr|ri (acÛiunea "CancelEvent"). Ecranul de
Pt. cumparare viziteaza:

macro-uri afiÕeaz| detalii despre felul în care se poate aplica fiecare acÛiune.

Acestea stocheaz| funcÛiile sau programele scrise de utilizator. Tot ce


Ce sunt modulele?
(Modules) se poate realiza cu un macro se poate realiza Õi cu un modul, dar f|r|
interfaÛa de macro-uri care asigur| un dialog prietenos cu utilizatorul.
Modulele sunt mult mai puternice Õi esenÛiale pentru scrierea unor
aplicaÛii în regim multiuser (baze de date cu utilizatori multipli) pentru c| macro-urile nu pot
trata erorile din regim de lucru. Majoritatea utilizatorilor încep s| lucreze cu macro-urile pân|
când realizeaz| limit|rile lor, în final, oprindu-se definitiv la module.

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.

Lansarea în execuÛie a Microsoft Access-ului


• LocalizaÛi simbolul Microsoft Access din meniul Start al Windows-ului sau
• ExecutaÛi clic pe simbolul
Microsoft Access de pe desktop
(dac| acesta exist|).

• 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

exemplul care urmeaz| baza de date Northwind a fost selectat|;

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

• efectuaÛi clic pe butonul Add to Favorites (afiÕat în interiorul cutiei de dialog


Open);
Pt. cumparare viziteaza:

• veÛi vedea o list| de forma care permite ad|ugarea


articolului selectat prin Add Selected Item to Favorites în directorul Favorites.

• pentru a deschide un fiÕier din Favorites, prima oar| afiÕaÛi


Deschiderea unei
baze de date din fereastra de dialog Open;
directorul Favorites
• dac| efectuaÛi clic pe simbolul Look in Favorites (afiÕat
în interiorul cutiei de dialog Open) orice articol care l-aÛi ad|ugat va fi
afiÕat în fereastra de dialog astfel:

0264-401667
NU COPIA !.

sau suna la:

• 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

Fereastra principal| a Access-ului


Fereastra principal| a aplicaÛiei Access urmeaz| caracteristicile oric|rei aplicaÛii Microsoft
Windows. O Bar| cu Titlu (Title Bar) este afiÕat| în cea mai de sus porÛiune a ecranului cu

http://www.east.utcluj.ro/mb/mep/antal
un Meniu de Control (Control Menu) în partea stâng|, iar în dreapta Butoanele de

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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.

Bara cu instrumente conÛine butoane care permit selectarea direct|


Bara cu
instrumentele
(pun la dispoziÛia utilizatorului scurt|turi) a unor comenzi din bara cu
Access meniu aflate în submeniuri. Exist| mai multe bare cu instrumente care
se pot activa - efectul activ|rii fiind afiÕarea lor pe ecran - prin
selectarea lui View din Toolbars. Dac| înc| nu cunoaÕteÛi semnificaÛia
butonului pe care doriÛi s|-l ap|saÛi, ÛineÛi mouse-ul pe buton un timp Õi un scurt mesaj de
ajutor, în limba englez|, va fi afiÕat.
33 Introducere în Microsoft Access: moduri de vizualizare - cursul 2

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

! cum se închide o baz| de date;


! cum se deschide un tabel Õi modul de navigare în acesta;
! cum se vizualizeaz| un tabel în mod de proiectare (Design View);
ANTAL Tiberiu Alexandru.

! care sunt principiile de utilizare ale interog|rilor (Queries);


! cum se deschid formularele (Forms) Õi pentru ce se utilizeaz|;
Pt. cumparare viziteaza:

! cum se vizualizeaz| un formular în mod de proiectare;


! care sunt principiile de utilizare ale rapoartelor (Reports).

0264-401667
NU COPIA !.

sau suna la:


34 Introducere în Microsoft Access: moduri de vizualizare - cursul 2

Deschiderea unei baze de date


Din cutia de dialog Open selectaÛi o baz| de date deja existent| Õi apoi

http://www.east.utcluj.ro/mb/mep/antal
Deschiderea unei efectuaÛi clic pe butonul Open.
baze de date
împreuna7 cu
pornirea
Access-ului

Din meniul File selectaÛi Open


Deschiderea unei
baze de date dupa7 Database. ObservaÛi c| în
pornirea dreapta textului Open
Acest curs este proprietatea lui
Access-ului database este scris Ctrl+O.
Aceasta este scurt|tura c|tre
comanda din meniu. Ea se
execut| prin Ûinerea ap|sat| a tastei Ctrl Õi ap|sarea
scurt| a tastei O, dup| care ambele taste se elibereaz|
ANTAL Tiberiu Alexandru.

Õi are ca efect selectarea lui Open Database din


meniul File mai scurt, numai prin ap|sarea unui grup
Pt. cumparare viziteaza:
de taste (trecerea prin meniu este ocolit|).

Nota7 : Bazele de date recente vor fi afiÕate într-o list|,


în figura al|turat| este numai una singur| Northwind,
de unde pot fi deschise efectuând clic pe numele lor.

O alt| variant| este selectarea

simbolului grafic Open


database din bara de instrumente
Standard. Când se deschide
fereastra de dialog Open,
selectaÛi numele bazei de date din
0264-401667
NU COPIA !.

lista - în figura al|turat| s-a


sau suna la:

selectat Order Entry1 - Õi


efectuaÛi clic pe butonul Open.

DeschideÛi baza de date în mod obiÕnuit, cu oricare din procedurile


Deschiderea unei
baze de date descrise mai sus, fereastra de dialog va cere din partea dumneavoastr|
creata7 cu o confirmarea conversiei bazei de date vechi în cea nou| - opÛiunea
versiune Convert Database - sau p|strarea formatului original Õi deschiderea
anterioara7 de bazei de date - opÛiunea Open database. Dac| baza de date este
Access
deschis| f|r| a fi convertit| în formatul lui Access 97 datele din ea se
pot edita dar nu se pot modifica proiectele formularelor, tabelelor Õi
rapoartelor. Toate datele salvate vor putea fi utilizate în versiunea
anterioar| de Access sub care s-a proiectat baza de date. În cazul în care se realizeaz|
conversia, obiectele din baza de date vor putea fi manipulate din Access97 dar nu vor mai fi
recunoscute de versiunile anterioare de Access.
35 Introducere în Microsoft Access: moduri de vizualizare - cursul 2

Fereastra bazei de date Access


Fereastra bazei de date Access apare în fereastra aplicaÛiei Access la deschiderea bazei de

http://www.east.utcluj.ro/mb/mep/antal
date. Ea asigur| o modalitate de acces elegant| Õi rapid| la obiectele bazei de date.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Ô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.

Închiderea unei baze de date


Pentru a închide o baz| de date Access:
• selectaÛi Close din meniul File sau
• efectuaÛi clic în Meniul de Control al aplicaÛiei Access Õi selectaÛi Close sau 0264-401667
• efectuaÛi clic dublu pe butonul Meniului de Control sau
NU COPIA !.

ap|saÛi Ctrl+F4.
sau suna la:

Deschiderea unui tabel (Table)


• în fereastra bazei de date Access efectuaÛi clic pe butonul Tables;
• în lista tabelelor efectuaÛi clic dublu pe numele tabelului care doriÛi s| fie deschis sau
• efectuaÛi clic pe numele tabelului Õi apoi clic pe butonul Open;
• tabelul este vizualizat sub forma unei foi de date (Datasheet view) care este modul de
vizualizare implicit pentru tabele în Access.

La deschiderea tabelului Meniul Õi Bara cu Instrumente se schimb| automat pentru a


include opÛiunile care sunt relevante pentru tabele.

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 Pentru a ne deplasa de la o înregistrare la alta, se poate folosi una


prin tabel folosind din metodele:
tastatura
0264-401667
NU COPIA !.

sau suna la:

Apas| tasta (ele): Pentru a te deplasa pe:


Tab Câmpul urm|tor.
Shift+Tab Câmpul anterior.
Home Primul câmp al înregistr|rii curente.
End Ultimul câmp al înregistr|rii curente.
 Înregistrarea urm|toare.
 Înregistrarea anterioar|.
Ctrl+Home Primul câmp al primei întregistr|ri.
Ctrl+End Ultimul câmp al ultimei înregistr|ri.
Page Up / Page Down Pagina anterioar|/Pagina urm|toare.
37 Introducere în Microsoft Access: moduri de vizualizare - cursul 2

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.

folosind tastatura • IntroduceÛi


num|rul înregistr|rii pe
Pt. cumparare viziteaza:
care doriÛi s| v| plasaÛi.

;
• Ap|saÛi tasta Enter.

Vizualizarea tabelelor în mod proiectare


La deschiderea unui tabel acesta este vizualizat, implicit, ca o foaie de date (Datasheet
View). La crearea unui tabel, implicit, acesta este vizualizat în mod proiectare (Design 0264-401667
NU COPIA !.

sau suna la:

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 .

• selectaÛi Datasheet View din meniul View sau


Pentru a comuta în
modul foaie de • efectuaÛi clic pe simbolul grafic Datasheet View din bara de
Acest curs este proprietatea lui
date instrumente.

Introducere în interog|ri (Queries)


O interogare este o modalitate de a extrage informaÛii din baza de date. Se pot extrage date din
tabele distincte Õi se pot combina împreun|. Se pot specifica criterii pentru limitarea
ANTAL Tiberiu Alexandru.

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.

interogare vizualizata7 în mod foaie de date interogare vizualizat| în mod proiectare

0264-401667
NU COPIA !.

sau suna la:

O interogare cu parametru (Parameter Query) este cea care cere


Ce este o interogare
cu parametru?
introducerea unui criteriu din partea utilizatorului în mod interactiv.
Când utilizatorul lanseaz| interogarea aceasta va afiÕa o fereastra7 de
dialog sau mai multe pentru introducerea criteriilor necesare. Un
exemplu simplu ar fi domeniul datelor pentru care se doreÕte aflarea
vânz|rilor.
Deschiderea unei • deschideÛi fereastra bazei de date (Database Window);
interogari în mod • efectuaÛi clic pe butonul Queries;
proiectare
• efectuaÛi clic pe butonul Design din fereastra bazei de date.
39 Introducere în Microsoft Access: moduri de vizualizare - cursul 2

• din modul de vizualizare foaie de date (Datasheet View)


Schimbarea efectuaÛi clic pe simbolul grafic mod de proiectare (Design View) din
modului de

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.

Introducere în formulare (Forms)


Formularele (Forms) asigur| o prezentare prietenoas| a datelor din
Ce sunt
formularele? baz|. Modurile de utilizare ale formularelor sunt multiple: ad|ugare,
Õtergere sau modificare de date; afiÕarea datelor; controlul modului Õi a
Acest curs este proprietatea lui
ordinii în care utilizatorul are acces la date; afiÕarea de mesaje;
tip|rirea de informaÛii. De asemenea, formularele se pot folosi pentru alc|tuirea unui sistem
de meniuri pentru ghidarea utilizatorului prin orice operaÛii dorite. Toate formularele se
bazeaz| pe datele unuia sau mai multor tabele a c|ror structur| r|mâne neafectat| de
modalitatea de prezentarea vizual| a formularului.
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

Microsoft Access pune la dispoziÛia utilizatorului Generatoare de Formulare (Form


Wizard), câteva exemple, din baza de
date NorthWind, rezultate prin
folosirea acestor generatoare se
prezint| în continuare:
40

NU COPIA !.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

http://www.east.utcluj.ro/mb/mep/antal

sau suna la:


Introducere în Microsoft Access: moduri de vizualizare - cursul 2

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

Vizualizarea în modul proiectare (Design View)


Un formular poate s| fie format pe baza câmpurilor unui singur tabel sau pe baza câmpurilor
din mai multe tabele. În ambele cazuri, toate sau numai o parte din câmpuri pot s| ocupe loc
în spaÛiul formularului. Vizualizarea în modul foaie de date (Datasheet View) permite
afiÕarea datelor stocate în tabel. Vizualizarea în modul proiectare (Design View) permite
modificarea sau crearea obiectelor de pe suprafaÛa formularului.

• efectuaÛi clic pe butonul Datasheet View din bara de


Pentru a comuta
pe vizualizarea în instrumente standard (standard toolbar) sau
mod foaie de date • selectaÛi din meniul aplicaÛiei Access pe View, apoi
DatasheetView.
42 Introducere în Microsoft Access: moduri de vizualizare - cursul 2

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui

• efectuaÛi clic pe pictograma Design View din bara de


Pentru a comuta
pe vizualizarea în instrumente standard sau
mod proiectare • selectaÛi View din meniul aplicaÛiei Access, apoi Design View.
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

• efectuaÛi clic pe pictograma Form View din bara de


Pentru a comuta
pe vizualizarea în instrumente standard sau
mod formular • selectaÛi View din meniul aplicaÛiei Access, apoi Form View.
43 Introducere în Microsoft Access: moduri de vizualizare - cursul 2

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Închiderea unui formular


• efectuaÛi clic pe butonul Close (vezi figura anterioar|) al
Pentru a închide
formularului sau
un formular
• selectaÛi din meniul aplicaÛiei Access, File, apoi Close sau
• selectaÛi Close (vezi figura anterioar|) din meniul de Control
al formularului (în stânga sus) sau
• ap|saÛi Ctrl+F4.

Introducerea în rapoarte (Reports)


Rapoartele sunt modul tradiÛional de vizualizare a rezultatelor din bazele de date. DeÕi se pot
vizualiza Õi pe ecran, de regul| sunt create pentru a fi listate la imprimant|. Vizualizarea unui
0264-401667
NU COPIA !.

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 !.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

http://www.east.utcluj.ro/mb/mep/antal

sau suna la:


Introducere în Microsoft Access: moduri de vizualizare - cursul 2

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

! cum se creeaz| un tabel f|r| Generator;


! cum se adaug| câmpuri f|r| Generator;
! cum se defineÕte tipul de date al câmpurilor;
ANTAL Tiberiu Alexandru.

! cum se descrie semnificaÛia câmpului;


! cum se salveaz| un tabel nou;
Pt. cumparare viziteaza:
! cum se foloseÕte Generatorul M|Õtilor de Intrare (Input Mask Wizard);
! cum se editeaz| Masca de Intrare;
! cum se defineÕte Cheia Primar| (Primary Key);
! cum se adaug| înregistr|ri tabelului vizualizat în mod foaie de date.

0264-401667
NU COPIA !.

sau suna la:


46 Introducere în Microsoft Access: Tabele - cursul 3

Proiectarea bazei de date


Metoda clasic| Õi sigur| de proiectare a unei baze de date pentru persoanele f|r| experienÛ|
este hârtia Õi creionul. Timpul petrecut în aceast| faz| se justific| pe m|sur| ce procesul de

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.

Trebuie stabilit de ce se doreÕte baza de date Õi ce se aÕteapt| de la ea.


Ce se dores-te?
Aici cel mai important este definirea rezultatelor, adic| a ieÕirilor pe
ANTAL Tiberiu Alexandru.

care aceasta le produce. Problemele serioase apar pentru c| mulÛi


proiectanÛi decid asupra conÛinutului bazei de date f|r| s| Õtie exact ceea ce trebuie s| fac|
Pt. cumparare viziteaza:
aceasta.
Cunoscând ceea ce se doreÕte se pot analiza datele disponibile pentru a
Ce avem la
dispozit-ie? decide asupra modului de structurare în termeni de tabele Õi
câmpuri.

Aceast| întrebare cere proiectantului s| g|seasc| toate prelucr|rile


Ce este de fa7 cut?
necesare pentru obÛinerea ieÕirilor dorite: c|ut|ri, sort|ri Õi calcule.

Clarificarea a ceea ce dorim


În aceast| faz|, pe hârtie desen|m figuri geometrice în care scriem denumirile obiectelor ce
intervin în naraÛiunea subiectului de rezolvat, eventual putem încerca s| schiÛ|m pe hârtie
fluxurile de date într-o form| foarte sintetic|. Dac| baza de date este proiectat| pentru
altcineva, ar|taÛi aceste desene persoanelor în cauz| pentru ca s| fiÛi convinÕi c| aÛi înÛeles
0264-401667
NU COPIA !.

corect problema de rezolvat.


sau suna la:

De exemplu, Vasile este patronul unei mici firme


de calculatoare. El cump|r| produse de la
furnizori. Are angajaÛi. Magazinul este structurat
pe categorii de produse (pl|ci de baz|,
microprocesoare, memorii, discuri, imprimante
etc.). Comenzile pentru clienÛi pot fi pentru unul
sau mai multe produse. Firma fiind mic| nu Ûine
marf| pe stoc, produsele fiind cump|rate de la
furnizori numai pe baz| de comenzi.

Reguli generale de proiectare


Tabelele sunt formate din coloane (câmpuri), fiecare conÛinând o informaÛie specific| (de
exemplu: nume_client, preÛ) Õi rânduri (în unele c|rÛi numite Õi linii sau înregistr|ri) care
colecteaz| toat| informaÛia particular| despre o persoan|, un loc sau despre ceva în general.
TentaÛia general| este aceea de a pune toate informaÛiile care descriu o problem| într-un
47 Introducere în Microsoft Access: Tabele - cursul 3

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.

astfel de câmp este Total.


Pt. cumparare viziteaza:
Pentru minimizarea num|rului acestor probleme se realizeaz| o etap| numit| normalizare
care const| în organizarea câmpurilor în tabele Õi definirea relaÛiilor între tabele prin
intermediul câmpurilor. Teoria matematic| a normaliz|rii este riguroas| Õi complicat|, dar
testele care se pot aplica pentru a verifica dac| proiectarea bazei s-a f|cut corect sunt simple Õi
se prezint| în continuare sub forma unor reguli.

Fiecare tabel ar trebui s| aib| o cheie primar|. O cheie primar| este


Unicitatea
întregistra7 rilor
un câmp sau o grupare de câmpuri care permite identificarea în mod
unic a înregistr|rilor. Cheia primar| se defineÕte de c|tre proiectant Õi
asigur| unicitatea înregistr|rilor. Dac| l|saÛi Access-ul s| defineasc|
cheia primar| el va introduce un câmp num|r|tor (numit Counter Field în Access 95 Õi
AutoNumber de la Access 97 în sus) la începutul fiec|rei înregistr|ri. Valoarea acestuia se va 0264-401667
incrementa automat la introducerea unei înregistr|ri noi în tabel. DeÕi aceast| metod|
NU COPIA !.

garanteaz| unicitatea înregistr|rii, ea nu asigur| neap|rata distincÛie a dou| înregistr|ri, cu


sau suna la:

execepÛia valorii stocate în câmpul num|r|tor.

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.

Fiecare câmp dintr-o înregistrare trebuie s| fac| parte din subiectul


Câmpurile trebuie
sa7 fie dependente înregistr|rii. Dac| nu este aÕa atunci, fie este redundant, fie face parte
funct-ional dintr-un alt tabel.
48 Introducere în Microsoft Access: Tabele - cursul 3

Trebuie s| fie posibil| modificarea oric|rui câmp al unei înregistra7 ri


Câmpurile trebuie
sa7 fie f|r| afectarea altor câmpuri.
independente

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.

Exist| trei tipuri de relaÛii: unu-la-unu (one-to-one), unu-la-mulÛi (one-to-many) Õi mulÛi-


la-mulÛi (many-to-many). În proiectul final îns|, relaÛiile mulÛi-la-mulÛi trebuie s| dispar| Õi
s| fie înlocuite prin crearea unui tabel adiÛional rezultând dou| tabele unu-la-mulÛi. AnaliÕtii
de sistem folosesc notaÛii diferite pentru descrierea relaÛiilor. În Microsoft Access se folosesc
urm|toarele notaÛii:
• o linie indic| o relaÛie între dou| tabele;
• un 1 la cap|tul unei linii marcheaz| partea de unu din relaÛie;
• simbolul 4 la cap|tul unei linii marcheaz| partea de mulÛi din relaÛie.
0264-401667
Teoria proiect|rii bazelor de date relaÛionale
NU COPIA !.

sau suna la:

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.

Tabele, unicitate, chei Õi domenii


În modelul relaÛional, tabelele, sunt o reprezentare a unor entit|Ûi din lumea real|. Fiecare
tabel trebuie s| reprezinte o colecÛie de un singur tip de entitate. Entit|Ûile pot fi obiecte,
procese sau evenimente din lumea real|. De exemplu, un astfel de obiect poate fi un client, o
factur|, un produs etc. Dup| Regula nr. 1 toate datele trebuie stocate în tabele, iar dup|
Regula nr. 2 tabelul trebuie s| fie constituit din rânduri Õi coloane unice. Modalitatea de
garantare a unicit|Ûii fiec|rui rând este cheia primar| (Primary Key) - o coloan| sau un grup
49 Introducere în Microsoft Access: Tabele - cursul 3

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 !.

sau suna la:

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

RelaÛii unu la unu


Dou| tabele sunt în relaÛie unu la unu, dac| pentru fiecare rând dintr-un tabel, exist| cel mult
unul, în cel|lalt tabel al relaÛiei. În practic| relaÛiile unu la unu sunt rare, o astfel de relaÛie se

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.

RelaÛii unu la mulÛi


Este cea mai comun| relaÛie Õi apare când un tabel are zero, una sau mai multe rânduri
corespunz|toare în cel|lalt tabel, dar pentru fiecare înregistrare din cel de al doilea tabel exist|
exact un singur rând în primul tabel. Aceste relaÛii mai sunt numite Õi copil-p|rinte.
Acest curs este proprietatea lui

RelaÛii mulÛi la mulÛi


Dou| tabele au o relaÛie mulÛi la mulÛi când pentru fiecare rând din primul tabel pot fi mai
multe rânduri în al doilea Õi pentru fiecare rând în cel de al doilea tabel, pot fi mai multe
rânduri în primul tabel. Majoritatea SGBDR nu permit modelarea direct| a relaÛiilor MºM,
ANTAL Tiberiu Alexandru.

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).

Prima Form| Normal|


0264-401667
NU COPIA !.

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.

Tabelul TContacte nu este în 1NF:

Tabelul TContacte1 este în 1NF, dar nu este în 2NF:


51 Introducere în Microsoft Access: Tabele - cursul 3

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui

A Doua Form| Normal|


Un tabel care este pus în 1NF se zice c| este în 2NF dac| toate câmpurile care nu sunt chei
sunt total dependente de cheia primar|. Cu alte cuvinte tabelul trebuie s| stocheze date legate
numai de o singur| entitate, iar acea entitate trebuie s| fie complet descris| de cheia ei
primar|. Dac| consider|m o cheie primar| compus| din câmpurile: IDContact,
ANTAL Tiberiu Alexandru.

IDInfoContact Õi Info Contact, se observ| c| Nume Contact nu este dependent| de


câmpurile IDInfoContact Õi Info Contact ale cheii primare. Pentru c| este dependent|
Pt. cumparare viziteaza:
numai de câmpul IDContact din cheia primar|, tabelul nu este în 2NF. Pentru a-l pune în
2NF, se pune toat| informaÛia legat| de contact într-un tabel nou, TContacte1, Õi vom stabili o
relaÛie de tipul 1ºM între cele dou| tabele. Cele dou| tabele puse în 2NF sunt prezentate în
continuare.

0264-401667
NU COPIA !.

sau suna la:

A Treia Form| Normal|


Cele dou| tabele sunt în 2NF, dar nu Õi în 3NF. Un tabel este în 3NF dac| este în 2NF Õi toate
câmpurile necheie sunt mutual independente. Un exemplu bun de astfel de dependenÛ| este un
câmp calculat. DependenÛe care nu rezult| în urma calculelor pot, de asemenea, s| existe între
câmpurile unui tabel. În tabelul TContacte1 se stocheaz| câmpurile IDInfoContact Õi Tip
52 Introducere în Microsoft Access: Tabele - cursul 3

Contact. ObservaÛi c| atunci când se cunoaÕte valoarea lui IDInfoContact se cunoaÕte


automat Õi valoarea lui Tip Contact, din acest motiv tabelul nu este în 3NF. Pentru a
ajunge la 3NF tabelul TContacte1 trebuie spart în dou| tabele, TContacte1 Õi TTipContact, între

http://www.east.utcluj.ro/mb/mep/antal
care din nou va exista o relaÛie 1ºM creat| pe baza câmpului IDInfoContact.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

Subfoi de date (subdatasheets)


Uneori, când se realizeaz| vizualizarea datelor dintr-o foaie de date, dorim s| vedem
înregistr|rile, din alte tabele, care sunt în relaÛie cu cele ale tabeului curent. Începând cu
53 Introducere în Microsoft Access: Tabele - cursul 3

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.

Acest curs este proprietatea lui

Când se face clic pe semnul + al unui rând, înregistr|rile asociate din subfoia de date sunt
afiÕate.
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

Subfoaia de date care se afiÕeaz| se defineÕte în modul proiectare al tabelului, fiind o


sau suna la:

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.

• Disallow: modificarea este strict interzis|;


• Cascade: pentru actualiz|ri, modificarea este propagat| în cascad| la toate tabelele
Pt. cumparare viziteaza:
dependente. La Õtergere, rândurile din toate tabelele dependente vor fi Õterse Õi ele;
• Nullify: pentru Õtergere, cheile str|ine dependente vor primi valoarea Null.

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 !.

sau suna la:

Reguli de integritate specifice bazei de date


Toate regulile de integritate care nu sunt de entitate sau referenÛiale se grupeaz| sub termenul
specific bazei de date sau specific unei afaceri. Acest tip de regul| este specific| fiec|rei baze
de date în parte Õi vine din regulile procesului care s-a modelat. Aceste reguli sunt la fel de
55 Introducere în Microsoft Access: Tabele - cursul 3

importante ca Õi cele discutate pân| acum, ele opresc stocarea unor date false în baz|.

Crearea unei baze de date

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 • din meniul File selectaÛi New Database sau


ANTAL Tiberiu Alexandru.

baza7 de date • ap|saÛi Ctrl+N sau


• efectuaÛi clic pe simbolul grafic New Database din bara de
Pt. cumparare viziteaza:
instrumente standard (Standard toolbar).

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 !.

sau suna la:

• selectaÛi simbolul grafic Blank Database din interiorul cutiei General ;


• efectuaÛi clic dublu pe simbolul Blank Database Õi cutia de dialog File New
Database va fi afiÕat| sub forma:
56 Introducere în Microsoft Access: Tabele - cursul 3

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.

Create, iar ecranul se va modifica


ca în figura al|turat|, afiÕând
Pt. cumparare viziteaza:
fereastra principal| a noii baze de
date Access; numele de curs3, pe
care l-am dat bazei de date se
observ| în colÛul strânga sus;
• în fereastra bazei de date
(Database Window) efectuaÛi clic
pe butonul Tables;
• apoi efectuaÛi clic pe butonul
New.
• în cutia de dialog New
Table selectaÛi opÛiunea Table
Wizard din list|: 0264-401667
NU COPIA !.

sau suna la:

• clic pe butonul OK.

Ad|ugarea de câmpuri folosind Generatorul de Tabele (Table Wizard)


• clic pe unul din butoanele de opÛiuni în colÛul din stânga-jos al cutiei de dialog, puteÛi
selecta Business sau Personal;
57 Introducere în Microsoft Access: Tabele - cursul 3

• selectaÛi un tabel din lista Sample Tables;


• selectaÛi un câmp pe care doriÛi s|-l ad|ugaÛi prin clic pe numele câmpului în lista
Sample Fields;

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.

Pt. cumparare viziteaza:

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 !.

sau suna la:

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:

• introduceÛi noul nume în acest câmp apoi ap|saÛi butonul OK;


• dup| ce aÛi ad|ugat toate câmpurile (AddressID - AdreseID, FirstName -
Prenume, LastName - Nume, SpouseName - Nume sotie, Address -
Adresa, City - Oras, Postal Code - Cod postal, Country -Tara)
efectuaÛi clic pe butonul Next, atunci se va afiÕa urm|toarea pagin| a Generatorului de
58 Introducere în Microsoft Access: Tabele - cursul 3

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 !.

se apas| butonul Finish.


sau suna la:

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.

Pt. cumparare viziteaza:

Crearea unui tabel f|r| Generator


• în Database Window clic pe butonul Table;
Pentru a crea un
tabel fara • clic pe butonul New;
Generator • în cutia de dialog New Table, selectaÛi Design View apoi clic
pe butonul OK.

0264-401667
NU COPIA !.

sau suna la:

• tabelul va fi vizualizat în mod proiectare dup| cum urmeaz|;

• 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;

Acest curs este proprietatea lui

Î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.

• ap|saÛi tasta Tab pentru a trece la celula urm|toare;


Pt. cumparare viziteaza:
• acesta este un câmp opÛional al c|rui conÛinut explic| funcÛia
Descrierea câmpului în baza de date Õi care va fi folosit mai târziu în tabelele
semnificat-iei
câmpului bazei;

• ap|saÛi tasta Tab Õi veÛi putea ad|uga noi câmpuri, tipuri de


Ada7 ugarea de noi
câmpuri date Õi descrieri în tabel;

• clic pe simbolul grafic Close în colÛul dreapta sus al ferestrei de


Salvarea noului
tabel proiectare al tabelului iar când vedeÛi cutia de dialog care întreb| dac|
doriÛi s| salvaÛi datele, clic pe butonul Yes; 0264-401667
NU COPIA !.

sau suna la:

• acum trebuie s| specificaÛi numele tabelului;

• introduceÛi numele dorit (Nume si virsta), apoi clic pe butonul OK;


• Access-ul îÕi va oferi suportul pentru definirea unei chei primare;
61 Introducere în Microsoft Access: Tabele - cursul 3

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.

Õi s| îl facem cheie primar| înainte de salvarea tabelului;


• în acest moment veÛi vedea tabelul stocat ca un articol din lista Tables al bazei de date
Pt. cumparare viziteaza:
(vezi figura urm|toare).

0264-401667
NU COPIA !.

sau suna la:

Definirea tipurilor de câmpuri ale unui tabel


Exist| multe tipuri de date. La vizualizarea câmpurilor din baza de date în mod proiectare se
pot vedea sub forma unei liste toate tipurile de date disponibile.

Text permite stocarea caracterelor alfanumerice sau a oric|ror alte caractere;

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

Denumire tip Domeniu de valori Precizie în SpaÛiu de


zecimale stocare

http://www.east.utcluj.ro/mb/mep/antal
Byte [0, 255] fa7 ra7 1 octet
întregi
valori

Integer [-32768, 32767] fa7 ra7 2 octeÛi


Long Integer [-2147483648, 21474836647] fa7 ra7 4 octeÛi
Single [-3.4x1038, 3.4x1038 ] 7 4 octeÛi
valori
reale

Double [-1787x10308, 1787x10308,] 15 8 octeÛi


Acest curs este proprietatea lui

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;

Currency tip folosit pentru dolari, lire, lei etc.;


ANTAL Tiberiu Alexandru.

AutoNumber o valoare numeric| ce pleac| de la 1 Õi este incrementat| automat pentru


Pt. cumparare viziteaza:
fiecare înregistrare nou|. Se foloseÕte deseori ca tip pentru cheile primare;

Yes/No un tip de dat| logic. Se foloseÕte pentru stocarea de valori Adev|rat/Fals,


Da/Nu, Activ/Inactiv etc.;

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;

HyperLink tip pentru stocarea de hiperleg|turii URL (adrese Internet);


0264-401667
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:


Format controleaz| forma de afiÕare a datelor Õi numerelor. Exist| un set de formate
predefinite care se pot selecta dintr-o list|;

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);

Caption text care va fi afiÕat ca denumire a câmpului în capetele de tabele, etichete de


pe formulare sau în antetele de rapoarte;

Default Value o valoare ce se insereaz| automat în câmp la crearea înregistr|rii;


pentru tipurile numerice este setat| automat la 0. Utilizatorul poate 0264-401667
introduce oricând o alt| valoare în locul acesteia;
NU COPIA !.

sau suna la:

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

Duplicates OK) Õi Da (Yes - No Duplicates). Cheile primare sunt automat


indexate Õi cu proprietatea Indexed setat| pe No Duplicates. Un index este o
secvent-a7 de perechi (cheie, poantor), stocat| într-un fiÕier intern special, în care

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

intra7 rilor care nu sînt în pozit-ia corecta7 . Fereastra de indexuri se poate


vizualiza, individual, pentru fiecare tabel în modul proiectare din View,
Indexes.

Proprietatea Masc| de Intrare


ANTAL Tiberiu Alexandru.

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:

• în modul proiectare al tabelului, selectaÛi câmpul pentru care


Lansarea
Generatorului doriÛi s| definiÛi o masc| de intrare. Din propriet|Ûi selectaÛi Input
Ma7 s-tilor de Intrare Mask apoi clic pe butonul cu cele 3 puncte de la cap|tul liniei m|Õtii
de intrare; Clic aici

• aceasta va afiÕa Generatorul M|Õtilor de


Intrare (vezi figura ala7 turata7 );

• selectaÛi formatul dorit apoi clic pe Next,


parcurgeÛi intrucÛiunile ecranelor intermediare, iar
când ajungeÛi la cel final clic pe Finish; 0264-401667
NU COPIA !.

sau suna la:

• pentru editarea m|Õtii


Editarea Ma7 s-tii de
Intrare afiÕate de Generatorul
M|Õtilor de Intrare selectaÛi
masca dorit| apoi clic pe Edit
List. RealizaÛi modific|rile dorite (eventual utilizând
sistemul de ajutor interactiv "on-line help") apoi activaÛi Õi salvaÛi modific|rile f|cute;

• clic pe meniul Help al Access-ului;


Pentru detalii ale
codurilor din • selectaÛi Contents and Index;
masca7 • selectaÛi butonul Index;
• tastaÛi InputMask Property;
• clic pe butonul Display.

Stabilirea cheii primare


Cheia primar| identific| unic fiecare înregistrare din tabel Õi asigur| urm|toarele avantaje:
• un index este creat automat pentru cheia primar|. Aceasta creÕte viteza în citirea Õi
sortarea datelor. Deseori cheia primar| este folosit| în stabilirea relaÛiilor;
65 Introducere în Microsoft Access: Tabele - cursul 3

• î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.

Setarea unui câmp


• vizualizând Tabelul în mod proiectare (Table Design View),
ca s-i Cheie selectaÛi câmpul care va fi f|cut cheie primar|. EfectuaÛi fie clic
Primara undeva pe câmp fie pe selectorul din stânga numelui de câmp;
• selectaÛi Primary Key din meniul Edit sau
• clic pe simbolul grafic Primary Key din bara de instrumente
standard.
Acest curs este proprietatea lui

• vizualizând Tabelul în mod proiectare (Table Design View),


Setarea mai
multor câmpuri ca selectaÛi primul câmp prin selectorul din stânga lui. ÚineÛi ap|sat| tasta
s-i Cheie Primara Ctrl Õi clic pe fiecare selector al câmpurilor dorite;
• selectaÛi Primary Key din meniul Edit sau
• clic pe pictograma Primary Key din bara de instrumente
ANTAL Tiberiu Alexandru.

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.

Ad|ugarea de înregistr|ri unui Tabel vizualizat în modul


foaie de date
Dup| ce aÛi terminat etapa de proiectare a tabelului se pot ad|uga înregistr|ri în acesta prin 0264-401667
NU COPIA !.

comutarea pe vizualizarea în modul foaie de date (Datasheet View).


sau suna la:

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.

• poziÛionaÛi cursorul în primul câmp al înregistr|rii vide;


Pentru ada7 ugarea
de înregistra7 ri • introduceÛi o valoare apoi ap|saÛi Tab pentru trecerea la
unui tabel în mod câmpul
foaie de date urm|tor,
repetaÛi
procedura
pentru toate câmpurile;
• când aÛi ajuns la ultimul
câmp, ap|sarea tastei Tab mut|
cursorul pe primul câmp al unei
noi înregistr|ri vide. Access va
66 Introducere în Microsoft Access: Tabele - cursul 3

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.

Formatarea pentru tipurile Text -si Memo


Acest curs este proprietatea lui
Simbolurile din tabelul urma7 tor sunt folosite de Access pentru la formatarea datelor stocate în
câpuri de tipurile Text s- i Memo.

Simbol Semnificat-ie
ANTAL Tiberiu Alexandru.

@ Caracter sau spat-iu care trebuie specificat.


& Caracter ca nu este obligatoriu de specificat.
Pt. cumparare viziteaza:

< Fort-eaza7 afis- area tuturor caracterelor cu litere mici.


> Fort-eaza7 afis- area tuturor caracterelor cu litere mari.

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.

Formatarea pentru tipurile Number s- i Currency


Pentru tipurile Number s- i Currency exista7 mai multe formate predefinite -si o mult-ime de
simboluri care pot fi folosite pentru crearea unor formate definite de utilizator. Tabelul care
urmeaza7 prezinta7 câteva dintre formatele predefinite:

Tip format Numa7 r introdus Numa7 r afis- at Definit-ia formatului


General 123456.789 123456.7 ######.#
Currency 123456.789 $123,456.78 $###,##0.00
67 Introducere în Microsoft Access: Tabele - cursul 3

Fixed 123456.789 123456.78 ######.##


Standard 123456.789 123,456.78 ###,###.##

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:

Formatarea pentru tipurile Date/Time


Posibilit|Ûile de formatare ale tipurilor Date/Time sunt cele mai multe existând Õapte opÛiuni
predefinite:
! General Date: (Implicit) Valoarea afiÕat| depinde de cea introdus|;
introducerea numai a unei date duce la afiÕarea numai a datei, la fel Õi în cazul unei
ore; formatul standard pentru dat| Õi timp este: 2/17/01 10:19 PM;
! Long Date: AfiÕarea se face conform set|rilor din Windows Regional Settings,
SecÛiunea Long Date; un exemplu ar fi: Wednesday, February 10, 2001;
! Mediu Date: 17-Feb-01;
! Short date: Conform set|rilor din Windows Regional Settings, SecÛiunea
Short Date; 2/17/01;
! Long Time: Conform set|rilor din Windows Regional Settings, SecÛiunea
0264-401667
NU COPIA !.

Time; 10:19:17 PM;


sau suna la:

! Medium Time: 10:19 PM;


! Short Time: 22:19.

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

mmm primele trei caractere ale lunii (Jan-dec);


mmmm numele complet al lunii (January-December);
q data afiÕat| din 4 trimestre (1-4);

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.

Formatarea în cazul tipului Yes/No


Access stocheaz| datele de tipul Yes/No într-un fel mai puÛin aÕteptat. Valoarea Yes este
stocat| ca Õi -1, iar cea No ca Õi 0. În lipsa unor set|ri de formatare acestea sunt valorile care
trebuie introduse Õi afiÕate. Cu ajutorul formatelor valorile de tipul Yes/No pot fi aduse la o
form| mai uÕor de recunoscut Õi de manipulat. Cele trei formate predefinite sunt:
! Yes/No: (Implicit) afiÕeaz| -1 pentru Yes Õi 0 pentru No;
! True/False: stocheaz| -1 pentru True Õi 0 pentru False;
! On/Off: stocheaz| -1 pentru On Õi 0 pentru Off.

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 !.

sau suna la:

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.

Utilizarea m|Õtilor de intrare


Masca de intrare permite creÕterea controlului cu privire la caracterele introduse într-un câmp.
Ea permite definirea unui Õablon care va fi folosit pentru introducerea datelor în câmp.
Ôablonul va fi afiÕat pe ecran înainte ca utilizatorul s| introduc| datele în câmp. ConÛinutul
Õablonului nu se salveaz| în baza de date împreun| cu datele introduse. De exemplu, dac| s-a
definit o proprietate masc| de intrare de forma 999-(9)99-000.000 parantezele rotunde Õi linia
se afiÕeaz| pe poziÛiile corespunz|toare la introducerea datelor, iar caracterul underscore,
69 Introducere în Microsoft Access: Tabele - cursul 3

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

0 Cifr| între 0 Õi 9 obligatoriu de introdus; nu se pot folosi semnele - Õi +


9 Cifr| sau spaÛiu opÛional|; nu se pot folosi semnele - Õi +
# Cifr| sau spaÛiu opÛional|; caracterele neintroduse sunt comverite în
spaÛii; se pot folosi semnele - Õi +
ANTAL Tiberiu Alexandru.

L Liter| între A Õi Z obligatoriu de introdus


Pt. cumparare viziteaza:

? Liter| între A Õi Z opÛional|


A Cifr| sau liter| obligatoriu de introdus
a Cifr| sau liter| opÛional|
& Orice caracter sau spaÛiu obligatoriu de introdus
C Orice caracter sau spaÛiu opÛional
> ConverteÕte toate literele care urmeaz| la majuscule
< ConverteÕte toate literele care urmeaz| în litere mici
ForÛeaz| completarea m|Õtii de intrare de la dreapta la stânga când
!
0264-401667
NU COPIA !.

caracterele din partea stâng| sunt opÛionale; implicit completarea se face


sau suna la:

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


71 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

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

! cum se selecteaz| toate înregistr|rile dintr-o foaie de date;


! cum se va selecta o coloan|;
! cum se selecteaz| coloane adiacente;
ANTAL Tiberiu Alexandru.

! cum se Õterge (Delete) o înregistrare;


! cum se Õterge conÛinutul unui câmp;
Pt. cumparare viziteaza:

! cum se înlocuieÕte (Replace) conÛinutul unui câmp;


! cum se vizualizeaz| Õi selecteaz| opÛiunile unei foi de date (Datashheet);
! cum se redefineÕte ordinea coloanelor în tabele;
! cum se ascunde (Hide) sau se vizualizeaz| (Un-hide) o coloan|;
! cum se îngheaÛ| (Freeze) coloanele;
! cum se mut| (Move) sau copiaz| (Copy) câmpurile sau înregistr|rile;
! cum se previzualizeaz| (Preview) o foaie de date.
0264-401667
NU COPIA !.

sau suna la:


72 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

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 este selectat|;

înregistrarea se editeaz|;
ANTAL Tiberiu Alexandru.

ultima înregistrare (este vid|).


Pt. cumparare viziteaza:

Selectarea înregistr|rilor cu mouse-ul


• clic pe selectorul de înregistrare; înregistarea selectat| mai jos
Pentru a selecta o
înregistare
folosind selectorul
de înregistra7 ri

are culoarea de fond neagr|. 0264-401667


NU COPIA !.

• clic pe selectorul primei înregistr|ri, se Ûine ap|sat butonul


sau suna la:

Pentru a selecta un
grup de stâng al mouse-ului Õi se deplaseaz| cursorul pân| pe ultima
înregistra7 ri
adiacente

înregistrare care dorim s| fac| parte din grup sau


• clic pe selectorul primei înregistr|ri din grup Õi în timp ce se Ûine ap|sat| tasta Shift,
clic pe ultima înregistrare din grup.

• 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

Selectarea înregistr|rilor folosind tastatura


• poziÛionaÛi-v| folosind tastele 6, 7 pe înregistrarea dorit|;
Pentru select-ia

http://www.east.utcluj.ro/mb/mep/antal
unei înregistra7 ri • selectaÛi din meniul Edit (Alt+E);
• selectaÛi Select Record (L).

• ap|saÛi Ctrl+A sau


Pentru select-ia
tuturor • din meniul Edit (Alt+E) selectaÛi Select All Records (A).
înregistra7 rilor
Acest curs este proprietatea lui
Selectarea câmpurilor cu mouse-ul
• clic la un cap|t al câmpului Õi cu butonul stâng al mouse-ului
Selectarea unui
câmp prin tragere ap|sat se deplaseaz| cursorul pân| pe cel|lat cap|t; deplasarea
(dragging) mouse-ului cu butonul ap|sat va fi numit| în continuare tragere
(dragging).
ANTAL Tiberiu Alexandru.

• se plaseaz| mouse-ul la începutul câmpului. Cursorul îÕi va


Pt. cumparare viziteaza:
Selectarea unui
câmp prin cursor modifica forma într-un semn plus "+";
• clic pe butonul stâng al mouse-ului.

• se va selecta un prim câmp cu ajutorul mouse-ului;


Selectarea unor
câmpuri adiacente • Ûinând tasta Shift ap|sat| ne folosim de tastele pentru
deplasarea cursorului (6, 7, 8, 9) pentru a selecta câmpuri în sensul
indicat de respectivele taste.

Selectarea coloanelor cu mouse-ul


• deplasaÛi cursorul mouse-ului pe selectorul de coloan|. Forma
Pentru a selecta o
coloana7 cu
mouse-ul
0264-401667
NU COPIA !.

sau suna la:

cursorului se va schimba într-o s|geat| neagr| care arat| în jos;

• clic pe butonul din stânga.

• clic pe selectorul de coloan| apoi cursorul se trage peste


Pentru a selecta selectorii coloanelor adiacente sau
coloane adiacente
• clic pe selectorul de coloan| Õi Ûinând ap|sat| tasta Shift, clic
pe ultima coloan| care va fi selectat|.
74 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

Selectarea câmpurilor Õi coloanelor de la tastatur|


• ap|saÛi tasta Tab pentru a selecta câmpul din dreapta sau
Selectarea unui
câmp cu tasta Tab • Shift+Tab pentru a selecta câmpul din stânga celui curent.

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

• selecteaz| un câmp cu F2;


Pentru a selecta un
câmp folosind • ÛineÛi ap|sat| tasta Shift;
tastele "cu • ap|sarea uneia dintre cel 4 taste "cu s|geÛi" va produce
sageata7 " selectarea câmpului adiacent aflat în sensul s|geÛii.
ANTAL Tiberiu Alexandru.

Ôtergerea înregistr|rilor Õi a câmpurilor


Pt. cumparare viziteaza:
Pentru a s-terge o
înregistrare

• 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 !.

sau suna la:

clic pe No.

• selectaÛi câmpul apoi ap|saÛi tasta Delete.


Pentru a s-terge
cont-inutul unui
câmp

• selectaÛi conÛinutul câmpului apoi introduceÛi noul conÛinut.


Pentru a înlocui
cont-inutul unui
câmp

Vizualizarea Õi setarea valorilor implicite pentru foile de


date
La crearea unui tabel dimensiunile coloanelor Õi liniilor corespund unor set|ri implicite. De
75 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

exemplu, este o l|Ûime implicit| pentru coloane Õi o în|lÛime standard a rândurilor.

• clic pe meniul Tools, selectaÛi Options apoi Datasheet Õi

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

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

validaÛi f|când clic pe butonul OK. 0264-401667


NU COPIA !.

sau suna la:

Redefinirea ordinii de afiÕare a coloanelor unui tabel


Uneori este de dorit modificarea ordinii în care Access-ul afiÕeaz| coloanele unui tabel.

• selectaÛi coloana Õi eliberaÛi butonul stâng al mouse-ului;


Mutarea unor
coloane • clic pe selectorul de câmp Õi trageÛi coloana pe noua poziÛie. Pe
m|sur| ce deplasaÛi coloana, o bar| mai groas| vertical| indic| poziÛia
curent| a coloanei care este în curs de mutare;
• eliberaÛi butonul stâng al mouse-ului.

Reordonarea câmpurilor unui tabel


Având dat un tabel uneori se doreÕte reordonarea modului în care câmpurile sunt aranjate.
• comutaÛi pe vizualizarea în mod proiectare (Design View) Õi
Pentru a reordona
câmpurile din
selecta Û i câmpul care doriÛi s| fie repoziÛionat prin clic pe selectorul de
tabel câmp (butonul din stânga numelui de câmp);
• trageÛi Õi l|saÛi câmpul pe noua lui poziÛie; o bar| orizontal|
groas| va ar|ta poziÛia curent| a câmpului care se mut|;
76 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

• 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.

• plasaÛi cursorul mouse-ului pe linia din dreapta numelui


Modificarea la7 t-imii
câmpului; cursorul va lua forma unei bare verticale scurte intersectat|
Acest curs este proprietatea lui
(width) unei
coloane de o s|geat| cu dou| capete;
• trageÛi marginea coloanei, în stânga sau dreapta, la dimensiunea
pe care o doriÛi.

• selectaÛi coloanele;
ANTAL Tiberiu Alexandru.

Modificarea la7 t-imii


unui grup de • trageÛi marginea coloanei celei mai din dreapta în noua poziÛie
coloane adiacente sau
Pt. cumparare viziteaza:
• clic pe butonul din drepta al mouse-ului, selectaÛi Column
Width din lista ap|rut| Õi introduceÛi noua l|Ûime.

• plasaÛi cursorul mouse-ului peste linia din drepta selectorului


Modificarea la7 t-imii
coloanei la "ocupa7 de câmp, cursorul va lua forma ;
tot" (best fit)
• clic dublu pe butonul din stânga mouse-ului Õi automat l|Ûimea
coloanei se va modifica astfel încât toate datele din ea s| fie complet
vizibile

• 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 Best Fit.

• plasaÛi cursorul de mouse peste linia de separaÛie dintre doi


Modificarea
îna7 lt-imii (height) selectori de rând;
rândului • trageÛi linia pe noua poziÛie, în|lÛimile tuturor rândurilor se vor
modifica automat la cea specificat| sau
77 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

• 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.

• selectaÛi coloana pe care doriÛi s| o ascundeÛi;


Pentru ascunderea
unei coloane • clic pe Format din meniul Access-ului apoi selectaÛi Hide
Columns; coloana va disp|rea din vizualizare f|r| îns| ca datele din
aceasta s| fie afectate.
Acest curs este proprietatea lui

Pentru a vizualiza
o coloana7
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• 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.

ÎngheÛarea (freeze) coloanelor


0264-401667
NU COPIA !.

Î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.

• selectaÛi coloana sau coloanele;


Pentru înghet-area
(freeze) unei • selectaÛi Freeze Columns din Format sau
coloane • clic pe butonul drept al mouse-ului într-o coloan| Õi selectaÛi
Freeze Column.

• selectaÛi Unfreeze All Columns din Format.


Pentru
dezghet-area
(unfreeze) unei
coloane

Formatarea celulelor din foaia de date


78 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

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:

• din Format selectaÛi Cell. Pe ecran se va afiÕa fereastra de


Pentru setarea
formata7 rilor unei dialog Cell Effects;
celule
• în secÛiunea Gridlines Shown a cutiei de dialog selectaÛi,
Pentru afis-area
(display) sau pentru afiÕare sau deselectaÛi, pentru ascunderea liniilor, pe Horizontal
ascunderea (hide) sau Vertical.
liniilor (gridlines)

• în secÛiunea Gridline Color clic pe s|geata în jos Õi selectaÛi


Pentru modificarea
culorilor (Color) din list| culoarea dorit|.
liniilor 0264-401667
NU COPIA !.

sau suna la:

• î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

• din Format selectaÛi Fonts, fereastra de dialog cu numele Fonts se va afiÕa;


• selectaÛi tipul (Font), stilul (Font style), m|rimea (Size)
Pentru modificarea caracterelor dorite din listele corespunz|toare;
tipului de

http://www.east.utcluj.ro/mb/mep/antal
caractere (Fonts) a
• ap|saÛi butonul OK.
foii de date

Copierea (copy), mutarea (move)


câmpurilor Õi înregistr|rilor
Deja trebuie s| fiÛi familiarizaÛi cu procedura selecteaz| apoi manipuleaz|. Datele care se
doresc copiate (copy), mutate (move) sau Õterse (cut) în fereastra de lucru temporar|
Acest curs este proprietatea lui
(Clipboard) se vor selecta în prealabil, apoi de aici se pot dirija c|tre noua destinaÛie. La fel
ca în cazurile anterioare, atât tastatura cât Õi mouse-ul pot fi folosite în acest scop.

Denumire Din Din De la AcÛiune


în român| meniu Edit Toolbar tastatur|
ANTAL Tiberiu Alexandru.

T|iere Cut Ctrl+X Mut| datele selectate în Clipboard.


Pt. cumparare viziteaza:

Copiere Copy Ctrl+C Copiaz| datele selectate în


Clipboard.

Inserare Paste Ctrl+V Insereaz| datele din Clipboard în


noua zon| selectat| începând din
poziÛia curent| a cursorului.

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|.

• selectaÛi datele care urmeaz| a fi copiate sau mutate;


Pentru a copia
date dintr-un • selectaÛi Copy din meniul Edit sau
câmp în Clipboard • clic pe simbolul grafic Copy din Toolbar sau
• ap|saÛi Ctrl+C.

• selectaÛi datele care vor fi mutate;


Pentru a ta7 ia date
din câmp în • selectaÛi Cut din Edit sau
Clipboard • clic pe simbolul grafic Cut din Toolbar sau
• ap|saÛi Ctrl+X.
Pentru a insera
cont-inutul din • clic în câmpul destinaÛie unde doriÛi ca datele s| fie inserate;
Clipboard într-un • selectaÛi Paste din meniul Edit sau
câmp • clic pe simbolul grafic Paste din Toolbar sau
80 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

• 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.

Pt. cumparare viziteaza:

obiectele bazei de date deÕi vor fi exemplificate, pentru început, folosind obiecte de tipul
tabel).

• selectaÛi tabelul care va fi copiat;


Pentru a copia un • selectaÛi Copy din meniul Edit sau
tabel
• clic pe simbolul grafic Copy din Toolbar;
• selectaÛi Paste din meniul Edit sau
• clic pe simbolul grafic Paste din Toolbar; 0264-401667
NU COPIA !.

• în fereastra de dialog introduceÛi numele noului tabel;


sau suna la:

• 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 obiectul care va fi redenumit;


Pentru a redenumi
un obiect • selectaÛi Rename din Edit;
• introduceÛi un nou nume pentru obiect (acesta se scrie peste
numele celui existent);
• ap|saÛi tasta Enter.
81 Introducere în Microsoft Access: Operatii cu înregistrari - cursul 4

• 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

va afiÕa un mesaj de eroare iar Õergerea nu se va realiza.

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).

• selectaÛi Print Preview din meniul File sau


Vizualizarea unui
formular sau foi de • clic pe simbolul grafic Print Preview din Toolbar.
date
Prima pagin| a foii de date sau a formularului se va afiÕa pe ecran.
FolosiÛi butoanele de navigaÛie din colÛul stânga jos pentru a trece la
paginile urm|toare.

• deschideÛi foaia de date din Print Preview;


Pentru a vedea o
sect-iune marita7 a • poziÛionaÛi cursorul de mouse pe suprafaÛa foii de date. Acesta
0264-401667
NU COPIA !.

foii de date va lua forma unei lupe;


sau suna la:

• clic pe butonul stâng al mouse-ului. Access-ul va m|ri zona


selectat|;
• clic pe butonul mouse-ului
pentru a vedea din nou întreaga pagin|.

Not|: Se poate folosi butonul Zoom din


bara de instrumente Zoom pentru a
m|ri sau
micÕora zone
din ecran.

• 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

• selectaÛi Print din meniul File sau


• clic pe simbolul grafic Print, acesta va afiÕa fereastra de dialog Print:
• selectaÛi domeniul paginilor (Print Range) Õi num|rul de copii (Copies). Dac| doriÛi

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


83 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

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

! cum se sorteaz| înregistr|rile prin formulare;


! cum se filtreaz| înregistr|rile unui tabel vizualizat ca foaie de date;
! cum se Õterge filtrul;
ANTAL Tiberiu Alexandru.

! înÛelege conceptele care stau în spatele relaÛiilor (Relationships);


! cum se deschide fereastra relaÛiilor;
Pt. cumparare viziteaza:

! cum se adaug| tabele în fereastra relaÛiilor;


! cum se creeaz| o relaÛie între dou| tabele;
! ce este conceptul de Integritate ReferenÛial| (Referential Integrity);
! cum se vizualizeaz| toate relaÛiile din baz|;
! cum se vizualizeaz| o relaÛie particular|;
! cum se Õterg relaÛiile;
! cum se Õterge un tabel din fereastra relaÛiilor.
0264-401667
NU COPIA !.

sau suna la:


84 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

C|utarea Õi înlocuirea informaÛiei


C|utarea
G|sirea informaÛiilor într-un tabel mic nu este o problem|, dar ce facem când tabelul

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.

• clic în câmpul pe baza c|ruia doriÛi s| faceÛi c|utarea;


Începerea ca7 uta7 rii
• selectaÛi Find din meniul Edit sau
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• clic pe pictograma Find din bara de instrumente standard sau


• clic Ctrl+F, pe ecran va apare fereastra de dialog Find in field: 'numele câmpului';

• 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|:

Denumire opÛiune SemnificaÛie


0264-401667
NU COPIA !.

sau suna la:

Match Implicit este selectat| Match Whole Field, adic| întregul


conÛinut al câmpului trebuie s| fie identic cu valoarea pentru
a fi g|sit. Celelalte opÛiuni sunt: Any Part of Field - orice
parte din câmp Õi Start of Field - începutul câmpului.
Search Permite selectarea sensului de c|utare în raport cu poziÛia
curent| a cursorului: Up - în sus, Down - în jos, All - peste
tot.
Match Case Dac| este activat| se Ûine cont de literele mari Õi mici.
Search Fields as Formated Se va selecta dac| doriÛi s| c|utaÛi informaÛia dup| cum este
formatat| Õi nu dup| cum este stocat| în tabel.
Search Only Current Field Dac| nu sunteÛi siguri de câmpul în care se afl| informaÛia
sau dac| valoarea poate s| apar| în mai multe câmpuri
inactivaÛi aceast| opÛiune.
85 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

Caractere generice (Wildcards)


Dac| nu sunteÛi siguri asupra tuturor caracterelor din valoarea pe care doriÛi s| o c|utaÛi - ceea
ce introduceÛi în cutia Find What - puteÛi folosi în locul acestora caractere generice dup| cum

http://www.east.utcluj.ro/mb/mep/antal
urmeaz|:

Denumire Scriere SemnificaÛie


Semn de întrebare ? Orice caracter aflat pe aceeaÕi poziÛie cu ?.

De exemplu, pentru ma?a se va g|si: mama, mana


Acest curs este proprietatea lui
Asterisc * Orice grup de caractere pe aceeaÕi poziÛie cu *.

De exemplu, pentru m*a se va g|si: mama, mana,


maneta, mecanica etc.
Hash # Se foloseÕte pentru o singur| cifr| de pe aceeaÕi poziÛie
ANTAL Tiberiu Alexandru.

De exemplu, 19#7 corespunde numerelor întregi 1907,


Pt. cumparare viziteaza:
1917, 1927, 1937, ... 1997.
Paranteze drepte [] Cuprind unul sau mai multe caractere când dorim ca în
c|utare s|-l includem pe unul dintre acestea.

De exemplu, pentru I[oa]n se va g|si Ion, Ian


Minus - Se foloseÕte pentru specificarea unui domeniu de
caractere, domeniul trebuie specificat în ordinea
cresc|toare

De exemplu, pentru I[a-o]n se va g|si Ian, Ien, ..., Ion.


Semn de ! Specific| toate caracterele cu excepÛia celor din
0264-401667
NU COPIA !.

exclamare paranteze.
sau suna la:

De exemplu, pentru I[!oa]n se vor g|si Ien etc. dar nu se


vor g|si Ion, Ian

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.

G|sirea unei valori specifice


• tastaÛi valoarea de g|sit în cutia Find What;
Ga7 sirea unei valori
specifice
Nota7 : la ad|ugarea unei înregistr|ri într-un tabel, dac| într-un câmp nu
s-a introdus nimic, Access-ul va stoca valoarea null în câmp. Dac| s-a
introdus un spaÛiu sau "", Access-ul consider| data introdus| un Õir de lungime zero. Dac|
doriÛi g|sirea unei valori null introduceÛi textul Null, dac| doriÛi g|sirea unui Õir de lungime
zero introduceÛi "".
86 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

• clic pe butonul Find First sau ap|saÛi tasta Enter;

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);

• clic pe Find Next pentru a g|si urm|toarea apariÛie cu aceeaÕi


Ga7 sirea valoare sau
urma7 toarei aparit-ii • clic pe Close pentru a termina c|utarea;
de aceeas-i valoare • ap|saÛi Shift+F4 sau
dupa închiderea
cutiei de dialog
• clic pe pictograma Find Next (dac| este disponibil) din bara de
Acest curs este proprietatea lui
instrumente standard.

Înlocuirea unor valori din câmpuri


ANTAL Tiberiu Alexandru.

• clic pe câmpul pentru care se face c|utarea;


Ga7 sirea s-i
înlocuirea unei • selectaÛi Replace din meniul Edit sau
ap|saÛi Ctrl+H, pe ecran apare fereastra de dialog:
Pt. cumparare viziteaza:
valori •

• î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| valoarea exist| Access-ul o va g|si Õi se va poziÛiona pe prima apariÛie a ei afiÕând-o


distinct.

• clic pe butonul Replace;

Dac| înregistrarea nu este cea dorit|, clic pe Find Next pentru a g|si urm|toarea apariÛie.

• clic pe Close pentru a închide fereastra de dialog "Replace in field: ...:".

• clic în câmpul pentru care se face c|utarea;


Pentru a ga7 si s-i
înlocui toate • selectaÛi Replace din meniul Edit sau
aparit-iile ale unei • ap|saÛi Ctrl+H;
valori • în cutia Find What tastaÛi textul care va fi înlocuit;
• în cutia Replace With tastaÛi noul text;
• clic pe butonul Replace All.
87 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

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

• selectaÛi coloana sau coloanele pe baza c|rora doriÛi s| sortaÛi


Sortarea
înregistrarilor unui înregistr|rile;
tabel în modul de • selectaÛi Sort din meniul Records apoi selectaÛi Sort
vizualizare foaie Ascending sau Sort Descending din submeniu dup| cum doriÛi
de date
ANTAL Tiberiu Alexandru.

sortarea cresc|toare sau descresc|toare sau


• clic pe simbolurile grafice Sort Ascending sau Sort
Pt. cumparare viziteaza:
Descending din bara de instrumente standard.

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.

• selectaÛi câmpurile pe baza c|rora se va face sortarea;


Sortarea
înregistrarilor pe • clic pe unul dintre simbolurile grafice Sort Ascending sau Sort
baza mai multor Descending din bara de instrumente standard.
câmpuri

³ 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

• filtrarea înregistr|rilor nedorite;


• îngustarea grupului de date asupra c|rora ne focaliz|m, de exemplu, dintr-o perioad|
de ani putem p|stra numai unul singur;

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).

Filtrarea înregistr|rilor prin selecÛie


• deschideÛi tabelul;
• clic în celula care conÛine articolul pe baza c|ruia se va face filtrarea;
- aici m-am poziÛionat pe o
Acest curs este proprietatea lui
celul| a câmpului Company
Name care conÛine valoarea
Alfreds Futterkiste
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• clic pe pictograma Filter by Selection din bara de instrumente.


- au fost afiÕate numai
înregistr|rile care conÛin
valoarea Alfreds Futterkiste în
câmpul Company Name

• clic pe pictograma Remove Filter .

Filtrarea înregistr|rilor prin formulare 0264-401667


NU COPIA !.

• deschideÛi un tabel al bazei de date, iniÛial tabelul va fi de forma:


sau suna la:

• clic pe pictograma Filter by Form , tabelul va lua o form| nou|:


89 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

ObservaÛi s|geata în jos din câmpul Company Name.

• 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.

Pt. cumparare viziteaza:

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 !.

sau suna la:

Cu aceste configuraÛii definite valorile afiÕate sunt:

Scurt istoric al bazelor de date relaÛionale


Înainte de 1970, bazele de date erau un domeniu în care utilizatorii navigau urm|rind poantori
(pointers) de la o înregistrare la alta pe niÕte drumuri fixate, eventual prin plasarea unor
"indicatori de stare curent|", care erau folosiÛi în cazul când navigatorul se pierdea, în vederea
reg|sirii drumului fixat de la care deviase. În 1970, E.F. Codd a propus o paradigm| total
90 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

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

Proiectele numite System R Õi Ingres au implementat prototipuri care ar|tau c| modelul


relaÛional se putea folosi pentru manipularea unor cantit|Ûi enorme de date. În loc s|
implementeze algebra sau calculul relaÛional, proiectanÛii lui System R, au dezvoltat un nou
limbaj al bazelor de date, care iniÛial s-a numit Structured English Query Language sau
SEQUEL iar azi, din motive de politic| comercial|, se numeÕte Structured Query
ANTAL Tiberiu Alexandru.

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.

Definirea relaÛiilor în Access


Cum am spus în capitolul de proiectare a bazei de date, trebuie determinate tabelele Õi relaÛiile
dintre acestea împreun| cu tipul relaÛiilor care se vor folosi. Dup| ce tabelele au fost create
prin procedurile descrise deja, trebuie create relaÛiile dintre acestea. Pentru aceasta trebuie
prima oar| deschis| fereastra relaÛiilor (Relationship window).

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.

Deschiderea ferestrei cu relaÛii


Pentru a deschide fereastra relaÛiilor (Relationship window), deschideÛi fereastra bazei de
date (Database window), apoi clic pe pictograma relaÛiilor din bara de instrumente
standard.

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

Ad|ugarea tabelelor în fereastra relaÛiilor


• deschideÛi fereastra relaÛiilor;
Ada7 ugarea
folosind fereastra

http://www.east.utcluj.ro/mb/mep/antal
de dialog Show
Table

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

• 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 !.

sau suna la:

• 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|.

• clic pe butonul Close.

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.

afiÕa sub forma:


Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

• clic pe butonul Create. RelaÛia va fi afiÕat| sub forma:


93 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

Integritate ReferenÛial| (Referential Integrity)


Dac| o cheie primar| Õi o cheie str|in| se folosesc pentru legarea a dou| tabele se zice c|
lega7 tura se bucur| de integritate referenÛial|. Adic| urm|toarele condiÛii sunt forÛate:

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

În majoritatea cazurilor forÛarea integrit|Ûii referenÛiale este de dorit. Pentru exemplul


prezentat, activarea integrit|Ûii referenÛiale va shimba forma de afiÕare a relaÛiei dup| cum se
observ| în figura anterioara7 .

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.

Selectarea opÛiunii "Õtergerea cascadat| a înregistr|rilor legate"


S,tergerea
cascadata7 a (Cascade Delete Related Records) înseamn| c| Õtergerea înregistr|rii
înregistrarilor care are cheia primar| duce la Õtergerea automat| a înregistr|rilor
legate legate corespondente din toate tabelele legate.
94 7 utare, sortare în tabele -si intergritatea referent-iala7 - cursul 5
Introducere în Microsoft Access: Ca

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 :

Acest curs este proprietatea lui

Editarea relaÛiilor
ANTAL Tiberiu Alexandru.

• deschideÛi fereastra relaÛiilor;


Vizualizarea
• selectaÛi Show All din meniul relaÛiilor sau
Pt. cumparare viziteaza:
tuturor relat-iilor
• clic pe pictograma Show All Relationships din bara de
instrumente Relationships.

• deschideÛi fereastra relaÛiilor;


Vizualizarea
relat-iilor unui • clic pe Show Direct Relationships din bara de
singur tabel
instrumente Relationships sau
• selectaÛi Show Direct din meniul relaÛiilor.

• deschideÛi fereastra relaÛiilor;


S,tergerea unei
relat-ii • clic pe linia relaÛiei care leag| cele dou| tabele;
• ap|saÛi tasta Delete. 0264-401667
NU COPIA !.

sau suna la:

• deschideÛi fereastra relaÛiilor;


S,teregerea unui
tabel din fereastra • clic pe tabelul care va fi scos;
relat-iilor • ap|saÛi tasta Delete.
95 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

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

! cum se construieÕte o interogare în mod proiectare (Design View);


! cum se construieÕte o interogare având calcule de totale;
! cum se adaug| înregistr|ri la un tabel folosind o interogare;
ANTAL Tiberiu Alexandru.

! cum se actualizeaz| datele folosind o interogare;


! cum se creeaz| un tabel nou pe baza rezultatelor de ieÕire ale unei
Pt. cumparare viziteaza:

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 !.

sau suna la:


96 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

Ce sunt interog|rile (Queries)?


Un Sistem de Gestiune a Bazelor de Date (SGBD) este folosit, în principal, pentru stocarea Õi
reg|sirea informaÛiilor. Modelul relaÛional stocheaz| datele în mai multe tabele distincte - în

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.

S| presupunem c| doriÛi s| ÕtiÛi cum stau angajaÛii departamentului de vânzare la capitolul de


vânz|ri, pentru o anumit| perioad| particular|. Probabil, informaÛia va trebui extras| din trei
tabele: Angajati, Comenzi Õi Detalii Comenzi. Tabelul AngajaÛi va fi necesar pentru numele
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

Ce sunt mulÛimile dinamice (dynaset)?


Toate interog|rile au una sau mai multe surse de date, acestea pot fi tabele sau interog|ri.
Înregistr|rile care rezult| dintr-o interogare sunt afiÕate într-o foaie de date ale c|rei
înregistr|ri se numesc dynaset (mulÛime dinamic| de date). Acestea au acelaÕi aspect cu un
tabel deschis în modul foaie de date. Aceast| mulÛime este dinamic| (uneori, se mai numeÕte
virtual|) Õi nu se stocheaz| în baza de date. La închiderea interog|rii mulÛimea dinamic|
înceteaz| s| mai existe. DeÕi mulÛimea dinamic| nu mai exist|, datele pe baz| c|reia s-a
generat r|mîn în continuare în tabele. La execuÛia interog|rii, Access plaseaz| datele rezultate
în mulÛimea dinamic|. La salvarea interog|rii, informaÛiile nu se salveaz|; numai structura
interog|rii este salvat| (sursele de date, câmpurile, ordinea de sortare, limit|rile etc.).
Avantajele acestui mod de lucru sunt:
# un spaÛiu mai mic este folosit pentru stocare;
# interogarea foloseÕte cea mai actual| variant| a datelor de la ultima ei execuÛie.

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

adus| datelor de la ultima ei execuÛie în timp real într-un mediu multi-utilizator.

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.

Pt. cumparare viziteaza:

Crearea unei interog|ri folosind Generatorul de Interog|ri


Simple (Simple Query Wizard)
• în fereastra bazei de date, clic pe butonul Queries;
• clic pe butonul New pentru afiÕarea cutiei de dialog New Query;

0264-401667
NU COPIA !.

sau suna la:

• 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.

Pt. cumparare viziteaza:

• 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 !.

sau suna la:

• 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.

Pt. cumparare viziteaza:

• clic pe butonul Finish pentru terminarea proiectului interog|rii. Rezultatele se vor


afiÕa ca în figura urm|toare.

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 !.

sau suna la:

Crearea unei interog|ri f|r| Generator


Access-ul are un num|r mare de Generatoare care ajut| la definirea interog|rilor. TotuÕi, în
marea majoritate a cazurilor aceste Generatoare sunt inadecvate pentru interog|ri complexe.
101 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

Î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.

Pt. cumparare viziteaza:

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 !.

sau suna la:

• din list| selectaÛi tabelul Customers apoi ap|saÛi butonul Add;


• clic pe butonul Close pentru a închide fereastra de dialog.

Grila interog|rii (Query Grid)


Interogarea poate avea ca Õi sursa7 de date unul sau mai multe tabele. Acestea sunt afiÕate dac|
în fereastra de dialog Show Table este selectat butonul Tables. Dac| este necesar, interog|ri
deja existente pot s| formeze surse de date pentru interog|rii care se creeaz|. Ele sunt afiÕate
în fereastra de dialog Show Table dac| este selectat butonul Queries. Se pot crea Õi
102 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

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.

Pt. cumparare viziteaza:

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.

ObservaÛi c| în figura care urmeaz| sursa de date a interog|rii s-a


Modificarea sursei
de date a modificat de la tabelul Customers la tabelul Employees. Etapele parcurse
interoga7 rilor pentru aceast| modificare sunt:
• realizaÛi clic, în panoul de sus, pe tabelul Customer;
• ap|saÛi tasta Delete, toate câmpurile tabelului
Customers, din panoul de jos, Õi tabelul Customers, din panoul
de sus, vor disp|rea;
• din meniul Query, folosind opt-iunea Show Tables, deschidet-i fereastra Show
103 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

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.

Pt. cumparare viziteaza:

Rezultatele sunt afiÕate sub forma:

0264-401667
NU COPIA !.

sau suna la:

Operatori logici pentru criterii de selecÛie


Operatorii logici permit construirea unor criterii complexe de selecÛie ale înregistr|rilor din
tabele. SemnificaÛia lor este uÕor de înÛeles, mai problematic| este îns| modul lor de utilizare
în Access.
104 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

SemnifcaÛie Scriere Exemplu Câmp la care SemnificaÛie


se aplic|

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.

mai mare >= >=7 EmployeeID Selecteaz| înregistr|rile


care au angajaÛii cu ID
Pt. cumparare viziteaza:
sau egal
mai mare sau egal cu 7.
diferit <> <>7 EmployeeID Selecteaz| înregistr|rile
care au angajaÛii cu ID
diferit de 7.
sau or "King" or LastName Selecteaz| înregistr|rile cu
"Peacock" angajaÛii care au în câmpul
LastName stocat King
sau Peacock .
asemenea like Like "D*" LastName Selecteaz| înregistr|rile
care au angajaÛii în câmpul 0264-401667
NU COPIA !.

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].

Folosirea textului în criteriul de selecÛie - caractere generice (Wildcards)


Dac| nu sunteÛi siguri asupra caracterelor din Õirul c|utat (la fel ca în
Ca7 utarea folosind cazul cutiei de c|utare Find What) se pot folosi caracterele generice
caracterele
generice
cu urm|toarele semnificaÛii:
105 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

SemnificaÛie Scriere Se foloseÕte pentru Exemplu


semn de ? Orice caracter pe aceeaÕi Pentru ma? se g|sesc mai,

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].

Criterii multiple Õi alternative


Acest curs este proprietatea lui

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

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.

Rezultatele selecÛiei sunt:


106 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

Se pot forma combinaÛii de criterii multiple Õi de criterii alternative.


Combinarea
criteriilor De exemplu, dorim selectarea tuturor produselor care încep cu litera P
Õi sunt pe stoc într-un num|r mai mare de 10 sau încep cu litera C

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.

Pt. cumparare viziteaza:

Rezultatele selecÛiei sunt:

0264-401667
NU COPIA !.

sau suna la:

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.

Sintaxa complet| pentru câmpurile calculate este:

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.

[nume_de_câmp] Un nume de câmp al unuia dintre tabelele care iau parte la


interogare, cuprins între paranteze dreptunghiulare.
Pt. cumparare viziteaza:
* Operatorul de înmulÛire.
/ Operatorul de împ|rÛire.
+ Operatorul de adunare.
- Operatorul de sc|dere.
() Paranteze rotunde pentru a indica ordinea de efectuare a operaÛiilor
într-o expresie complex|.

0264-401667
NU COPIA !.

sau suna la:

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).

Expresii care au fost calculate în interogarea prezentat| sunt:

PretUnitatecuTVA: [UnitPrice]*1.19
108 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

PretStoccuTVA: [UnitsInStock]*[PretUnitatecuTVA]
StocRamas: [UnitsInStock]-[UnitsOnOrder]

Rezultatele se afiÕeaz| sub forma:

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 Total Field Record Limit


Aceasta are o singura7 opt-iune, pe Where. Ea permite specificarea unui criteriu de limitare
pentru un câmp agregat. Limitarea se realizeaza7 înainte de executarea opt-iunii de agregare.
109 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

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.

Modalitatea cre|rii unei interog|ri cu totale este simpl|: selectaÛi


Acest curs este proprietatea lui
Crearea unei câmpurile Õi criteriile asemenea ca la interog|rile normale, apoi
interoga7 ri cu totale
specificaÛi ce se va petrece în linia Totals pentru fiecare câmp. În
condiÛii normale veÛi selecta prima oar| pe Group By pentru un câmp
- acesta formând grupul pentru care se vor realiza calculele - apoi veÛi specifica un calcul
pentru câmp. În exemplul urm|tor, din baza de date Northwind, am folosit tabelul Products.
ANTAL Tiberiu Alexandru.

Gruparea s-a realizat pe baza câmpului SupplierID Õi conÛinutul tuturor câmpurilor


UnitPrice pentru înregistr|rile cu acelaÕi SupplierID au fost însumate prin folosirea
Pt. cumparare viziteaza:
funct-iei de agregare Sum în linia Totals.

0264-401667
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:

Se pot efectua orice num|r de calcule într-o interogare cu total. Se


Calcule multiple de
agregare poate, de exemplu, realiza gruparea pe furnizori (SupplierID) Õi
calcula suma pe baza câmpului UnitPrice Õi valoarea medie pe
baza câmpului UnitsInStoc (unit|Ûi pe stoc).

0264-401667
NU COPIA !.

sau suna la:

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.

În tabelul Orders a bazei de date Northwind nu exista7 un câmp care sa7


Totale de expresii
afis- eze valoarea totala7 a unei comenzi. Interogarea va avea ca -si sursa7
de date doua7 tabele, pe Orders s- i pe Order Details, iar valoarea totala7 a
111 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

unei comenzi va fi calculata7 pe baza expresiei care urmeaza7 .

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


Cantiate comandata: Sum([Quantity]*[UnitPrice]*(1-[Discount]))

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 !.

sau suna la:

Interog|ri de actualizare (Update Queries)


Interog|rile de actualizare permit modificarea rapid| a unui num|r de înregistr|ri dintr-un
tabel. Înregistr|rile actualizate depind de criterii specificate de utilizator. S| presupunem c| în
baza de date Northwind dorim s| modific|m preÛul pe unitate (Unit Price) pentru
categoria de produse care au CategoryID cuprins în domeniul [1,7] din tabelul Products.
Modificarea se va face numai pentru furnizorii a c|ror SupplierID are valoarea mai mic|
112 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

sau egal| cu 6. Toate aceste restricÛii vor fi specificate în linia de criterii.

• realizaÛi o interogare de selecÛie (Select Query sunt interog|rile


Crearea unei

http://www.east.utcluj.ro/mb/mep/antal
interoga7 ri de 'normale', cele utilizate pân| acum) de forma:
actualizare

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• selectaÛi din meniul Query opÛiunea Update Query ; în zona grilei


interog|rii apare o nou| linie numit| Update To. SpecificaÛi regulile pentru actualizarea unei
coloane sau l|saÛi libere câmpurile corespunz|toare coloanelor unde nu doriÛi modific|ri.
Uneori este util| includerea unor coloane în interogare, pentru care se vor specifica criteriile
de selecÛie f|r| a dori ca aceste coloane s| fie actualizate de interogare.

Î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 !.

sau suna la:

r|spunsurile afiÕate vor fi:


113 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.

Pt. cumparare viziteaza:

• acum, dup| procedura descris| anterior, transform|m interogarea normal| în una de


actualizare. Fereastra QBE specific| este prezentat| în figura urm|toare. Aici în linia Update
To a câmpului UnitPrice s-a introdus formula 1.1*[UnitPrice]. Ea defineÕte noile
valori ale câmpului dup| execuÛia interog|rii de actualizare. Lansarea în execuÛie se face la fel
ca în cazul interog|rilor normale prin selectarea lui Run din meniul Query. Înainte de
execuÛia interog|rii de actualizare Access-ul deruleaz| un dialog cu utilizatorul în care îl
avertizeaz| asupra num|rului de înregistr|ri care se vor modifica; dac| totul este în ordine
selectaÛi butonul OK al cutiei de dialog. Dac| doriÛi abandonarea interog|rii de actualizare
selectaÛi No Õi înregistr|rile nu vor fi modificate.
0264-401667
NU COPIA !.

sau suna la:


114 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

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.

Pt. cumparare viziteaza:

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 !.

sau suna la:

Interog|ri de ad|ugare (Append Queries)


Interog|rile de ad|ugare copiaz| rezultatele unei interog|ri într-un tabel. Tabelul destinaÛie
trebuie s| aib| aceleaÕi câmpuri cu cele incluse în interogare.

Pentru crearea unei interog|ri de ad|ugare selectaÛi pe


Crearea unei
interogari de din meniul Query. Se poate specifica tabelul la care
adaugare se face ad|ugarea împreun| cu localizarea lui care poate fi în baza de
date curent| sau într-o alt| baz| de date. Dup| setarea câmpurilor Õi
criteriilor, interogarea se lanseaz| în executie normal, prin selectarea
lui Run din meniul Query. Access va afiÕa un mesaj referitor la num|rul de înregistr|ri care
vor fi ad|ugate, fiind necesar| confirmarea ad|ug|rii pentru ca aceasta s| aib| loc efectiv.

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

Interogarea de creare a unui tabel (Make-Table Query)


Interogarea de creare a unui tabel creeaz| un tabel nou Õi copiaz| rezultatele interog|rii în el.
Acest tip de interogare lucreaz| la fel cu interogarea de ad|ugare.

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.

Interog|ri cu mai multe tabele


Pt. cumparare viziteaza:
Majoritatea bazelor de date ajung s| fie organizate, ca urmare a procesului de normalizare,
sub forma a mai multor tabele. RelaÛiile între aceste tabele sunt stabilite pe baza cheilor
primare Õi str|ine folosind comanda Relationships din Tools în fereastra bazei de date. Dup|
crearea tabelelor Õi a relaÛiilor între acestea se poate trece la crearea unor interog|ri care s|
aib| ca surs| de date mai multe tabele. Prin ad|ugarea de mai multe tabele unei interog|ri se
pot vizualiza informaÛiile acelor tabele ca Õi cînd ar fi stocate într-un singur tabel.

• deschidet-i baza de date Northwind.mbd;


Crearea unei
interoga7 ri cu doua7 • în fereastra bazei de date facet-i clic pe Queries;
tabele • clic pe New pentru a crea o interogare noua7 , iar din fereastra
New Query selectat-i Design View;
• din fereastra de dialog Show Table realizat-i clic dublu pe 0264-401667
tabelele Customers s- i Orders, apoi închidet-i fereastra; Access creeaza7 automat o linie între cele
NU COPIA !.

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;

• realizat-i clic dublu pe urma7 toarele câmpuri: CompanyName, OrderID,


116 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

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

rezultatele interoga7 rii se afis- eaza7 sub forma:


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

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

exista7 s- i mai multe tipuri de asocieri, câteva dintre acestea sunt:


! asocieri interne (inner joins);
! asocieri externe (outer joins);

http://www.east.utcluj.ro/mb/mep/antal
! autoasocieri (self-joins);
! asocieri de tip produs cartezian (cartesian joins).

Asocieri interne (inner joins)


Asocierea implicita7 în Access este cea interna7 (inner join), denumita7 uneori -si asociere
echivalenta7 (equi-join). Ea spune lui Access sa7 selecteze toate înregistra7 rile celor doua7 tabele
care au aceeas- i valoare în câmpurile prin care se face asocierea. Daca7 sunt ga7 site înregistra7 ri
care nu au valori comune ale câmpurilor folosite la asociere acestea sunt excluse din mult-imea
dinamica7 nefiind afis- ate în foaia de date. Aceste înregistra7 ri excluse pot fi ga7 site selectând din
Acest curs este proprietatea lui

generatorul de interoga7 ri tipul "Find Unmatched Query".

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 !.

sau suna la:

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).

Asocierea extern| la dreapta


Asocierile externe sunt folosite pentru afiÕarea tuturor înregistr|rilor unui tabel Õi numai a
celor comune din cel|lalt. Când se creeaz| o asociere extern|, lina de asociere va avea la un
118 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

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

Õi se realizeaz| afiÕarea rezultatelor f|r| activarea opÛiunilor de sortare se obÛin 832 de


înregistr|ri, existând dou| înregist|ri care nu au corespondent în tabelul Orders (una dintre
acestea se observ| în figura care urmeaz|).
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

Asocierea extern| la stânga


Aceast| asocierea corespunde opÛiunii 3 din fereastra de dialog Join Properties. Ea permite
afiÕarea înregistr|rilor orfane. Acest tip de înregistr|ri sunt cele care nu permit activarea
integrit|Ûii referenÛiale. În exemplul prezentat, din forma s|geÛii care leag| cele dou| tabele, se
observ| c| integritatea referenÛial| este activat|, deci folosirea acestei asocieri nu va genera
rezultate noi faÛ| de opÛiunea 1.

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.

Asocierea de tip produs cartezian


Dac| se adaug| cele dou| tabele Customers Õi Orders într-o interogare, dar nu se specific| o
119 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

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.

Prima metoda7 de rezolvare a problemei necesita7 realizarea a doua7 interoga7 ri cu numele


Query Suma pe Sectii s- i Query Suma Totala prezentate în figurile care urmeaza7 :
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


120 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.

Pt. cumparare viziteaza:

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 !.

sau suna la:

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).

O alta7 metoda7 de rezolvare a problemei ar fi scrierea unei interoga7 ri de forma:


121 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui

Aici câmpul, Procent pe sectie, este calculat folosind formula:


[Sum of salar]/DSum("[Salar]","Angajati")

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 !.

sau suna la:

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

pentru anul 1996.

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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.

Parametrul este [Introduceti


anul], iar atunci când interogarea se
executa7 , pe ecran se afis- eaza7 textul 0264-401667
Introduceti anul s- i se as- teapta7
NU COPIA !.

pâna7 când se introduce o valoare


sau suna la:

numerica7 . Uneori pot sa7 apara7 probleme


la formatul câmpurilor de tipul
Data/Time. Observat-i ca7 separatorul în
expresia de tipul data7 este caracterul "/".
Pentru ca datele sa7 fie formatate
folosind acest caracter -si nu cel din
Regional Settings al lui Windows
realizat-i clic pe numele câmpului
OrderDate, apoi realizat-i clic pe
butonul din dreapta -si selectat-i
Properties. În ferestra Field Properties
setat-i valoarea proprieta7 -tii Format la
mm/dd/yyyy.

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.

Implicit, Access consider| parametrii interog|rilor de tipul

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:

Like "*/*/"+Trim(Str([Introduceti anul]))

Funct-ia Str() transforma7 numa7 rul întreg introdus de la


Acest curs este proprietatea lui

tastatura7 într-un -sir de caractere, iar funct-ia Trim() elimina7


spat-iile care intercaleaza7 s- irul.

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:

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Câmpul Expr1 se calculeaz| pe baza expresiei:


Expr1: Format([OrderDate],"mmm")

Câmpul Vinzari se calculeaz| prin formula:


Vinzari: Sum([Order Details].[Quantity]*
[Order Details].[UnitPrice])

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

Output All Fields AfiÕarea tuturor câmpurilor din tabelul care X X X


este sursa de date în interogare

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

Source database Numele bazei de date externe pentru toate X X X X X X


tabelele/interog|rile
Source Connect Numele aplicaÛiei folosite pentru conectarea la X X X X X X
Str baza de date extern|
ANTAL Tiberiu Alexandru.

Record Locks Blocarea înregistr|rilor când interogarea se X X X X X X


Pt. cumparare viziteaza:
execut| (de obicei pentru cele de acÛiune)
ODBC Time-out Num|rul de secunde înainte de a raporta X X X X X X
eroare la deschiderea bazei de date
Filter Filtrul se încarc| automat împreun| cu X
interogarea
Order By Ordinea de sortare se încarc| automat cu X
interogarea
MaxRecords Num|rul maxim de înregistr|ri întors de baza X
de date ODBC
SubDatasheet Numele subfoii de date X X
0264-401667
X X
NU COPIA !.

name
sau suna la:

Link Child Numele câmpurilor din subinterogare X X X X X


Fields
Link Master Numele câmpurilor din tabelul principal X X X X X
Fields
Subdatasheet În|lÛimea maxim| a subfoii de date X X X X X
Height
Subdatasheet Înregistr|rile sunt iniÛial afiÕate expandat? X X X X X
Expanded
RecordSet Type Tipul mulÛimii de înregistr|ri, specific| dac| X
tabelele pot fi editate
Destination Numele tabelului destinaÛie X X
Table
126 7 ri - cursul 6
Introducere în Microsoft Access: Interoga

Destination DB Numele bazei de date destinaÛie X X


Dest Connect Str Ôirul pentru conectare la baza de date X X

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.

Find Duplicate Query Wizard


Generatorul permite crearea unei interog|ri care raporteaz| înregist|rile unui tabel care
Pt. cumparare viziteaza:
oprezint| dubluri pentru unul sau mai multe câmpuri ale tabelului. Access va cere care sunt
câmpurile de verificat, apoi mai cere un grup de alte câmpuri care vor fi afiÕate de interogare.
Pe baza rezultatelor, se pot determina viola7 rile de chei datorit| duplic|rii valorilor. Atunci
când avem un tabel "primit", pentru care trebuie s| cre|m o cheie, iar aceast| interogare
afiÕeaz| înregist|ri, avem siguri valori Null sau înregistr|ri duplicate.

Find Unmatched Query Wizard


Generatorul permite crearea unor interog|ri pentru afiÕarea înregist|rilor va7 duve Õi orfane
între dou| tabele. O înregistrate este orfan| dac| în tabelul din partea de "mulÛi" nu are
corespondent în tabelul din partea de "unu". O înregistrare este v|duv| dac| în partea de "unu"
a unei relaÛii "unu la mulÛi" nu exist| înregistrarea corespondent| în cel|lat tabel. Access cere
numele celor doua7 tabele de comparat, câmpul de lega7 tura7 între ele -si câmpurile tabelului 0264-401667
"unu" care vor fi afis- ate. Daca7 se creeaza7 relat-ii între tabele -si se încearca7 setarea integrita7 -tii
NU COPIA !.

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

OpÛiuni pentru proiectarea interog|rilor


Exista7 mai multe opt-iuni de proiectare implicite care pot fi specificate la proiectarea unei
interoga7 ri. Acestea se vizualizeaza7 prin selectarea din Tools a lui Options, apoi prin

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

selectarea lui Tables/Queries.


Tabelul care urmeaza7 descrie opt-inile implicite de proiectare a interoga7 rilor prezentate în
figura de mai sus.

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 !.

de asocieri între doua7 tabele care nu au relat-ii. Tipul câmpurilor


sau suna la:

trebuie sa7 fie identic


Run Permissions Restrict-ioneaza7 vizualizarea rezultatelor interoga7 rii într-un
mediu multi-utilizator. Pentru Owner rezultate pot fi va7 zute
numai de creatorul interoga7 rii
SQL Server Compatible Validata7 , opt-iunea genereaza interoga7 ri care respecta7 sintaxa
ANSI-92 SQL
128 Introducere în Microsoft Access: Formulare - cursul 7

Obiectivele cursului 7

http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:

! conceptele de baz| legate de aspectul vizual al formularelor (Form


Layout Types);
! cum se creeaz| un formular cu aplicaÛia AutoForm;
! cum se creeaz| un formular cu Generatorul de Formulare (Form
Acest curs este proprietatea lui

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:

! cum se utilizeaz| vizualizarea în mod proiectare a formularelor;


! cum se deschide un formular existent în mod proiectare;
! cum se afiÕeaz| lista propriet|Ûilor (Property List);
! cum se afiÕeaz| lista câmpurilor (Field List);
! cum se afiÕeaz| cutia cu instrumente (Toolbox);
! cum se afiÕeaz| codul din spatele formularului (Code Behind the Form);
! cum se selecteaz| Õi manipuleaz| controalele (Control) Õi etichetele
(Label); 0264-401667
NU COPIA !.

! cum se modific| dimensiunea unei secÛiuni (Section);


sau suna la:

! cum se modific| l|Ûimea (width) unui formular;


! ce sunt controalele nelegate (Unbound), legate (Bound) Õi calculate
(Calculated);
! cum se deschide cutia cu instrumente Õi care sunt instrumentele de baz|
folosite în formulare;
129 Introducere în Microsoft Access: Formulare - cursul 7

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.

Pt. cumparare viziteaza:

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 !.

sau suna la:

Î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.

Formularele sunt folosite într-o multitudine de scopuri:


• afiÕarea datelor;
• introducerea datelor în baza de date;
• editarea (modificarea Õi Õtergerea) datelor;
• tip|rirea datelor la imprimant|;
• formarea unui sistem de meniuri pentru utilizatorul bazei de date.

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

Vizualizat în modul proiectare, formularul pune la dispozit-ia programatorului mai multe


sect-iuni pe suprafat-a ca7 rora pot fi plasate obiecte de control, denumite, pe scurt, controale.
Sect-iunile cele mai folosite sunt:

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.

Proiectarea formularelor este mult uÕurat| de generatoarele de formulare (Form Wizards).

Aspectul vizual (Form Layout) al formularului


Acest curs este proprietatea lui
Exist| o varietate de moduri de prezentare ale aspectului unui formular. Generatorul de
formulare ofer| patru tipuri de aspecte. Fiecare poate fi modificat, între anumite limite îns|,
pentru a satisface cât mai bine un aspect particular.

Tipuri de aspecte ale formularelor


ANTAL Tiberiu Alexandru.

Coloan| (Columnar) Tabel (Tabular)


Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

Foaie de date (Datasheet) Aliniat (Justified)

Crearea unui formular cu AutoForm


AutoForm creeaz| un formular pe care se vor afiÕa toate câmpurile Õi înregistr|rile tabelului
sau interog|rii selectate. Fiecare câmp apare pe o linie separat| cu o etichet| în stânga lui.
131 Introducere în Microsoft Access: Formulare - cursul 7

• î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.

Pt. cumparare viziteaza:

Dac| doriÛi s| închideÛi formularul, Access-ul va lansa un dialog pentru confirmarea salv|rii
lui în baza de date.

Crearea unui formular cu Generatorul de Formulare


(From Wizard)
0264-401667
NU COPIA !.

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

din baza de date Northwind.mdb;


• clic pe butonul OK pentru afiÕarea paginii urm|toare din Generator;

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• 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;

• eu am selectat câmpurile conform figurii urm|toare:

0264-401667
NU COPIA !.

sau suna la:

• când toate câmpurile dorite au fost ad|ugate ap|saÛi butonul Next;


133 Introducere în Microsoft Access: Formulare - cursul 7

• urm|toarea pagin| permite selecÛia aspectului (layout) formularului;

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• selectaÛi opÛiunea dorit| apoi clic pe butonul Next;


• urm|toarea pagin| va afiÕa o list| cu stilurile predefinite de formulare:

0264-401667
NU COPIA !.

sau suna la:

• selectaÛi una dintre opÛiuni, apoi clic pe Next;


• urm|toarea pagin| permite specificarea numelui formularului care va fi creat Õi
opÛiunile finale pentru utilizarea formularului;
134 Introducere în Microsoft Access: Formulare - cursul 7

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• clic pe butonul Finish pentru crearea formularului;


• dac| aÛi p|strat opÛiunea "Open the form to view or enter information", atunci
formularul va fi afiÕat pe ecran astfel:

0264-401667
NU COPIA !.

sau suna la:

Moduri de vizualizare a formularelor


Modul de vizualizare proiectare (Design View) sau, mai pe scurt,
Vizualizarea în
modul proiectare modul
(Design View) proiectare
permite
ad|ugarea,
modificarea Õi Õtergerea obiectelor
de pe suprafaÛa formularului.
Formularul creat anterior este
prezentat în modul proiectare în
figura al|turat|.

• pentru vizualizarea
formularului în mod proiectare
(Design View), clic pe meniul
View ( ) în timp ce
135 Introducere în Microsoft Access: Formulare - cursul 7

formularul este afiÕat în fereastra bazei de date.

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.

Pentru • pentru a trece în modul formular, din meniul View, selectaÛi


vizualizarea Form View ( ).
formularului în
mod "formular"
(Form View)
Acest curs este proprietatea lui

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.

• clic pe Print Preview ( ) din meniul File.


ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

Crearea unui formular f|r| Generator


Este posibil s| nu folosim Generatorul pentru crearea întregului formular, ci s| construim
numai un schelet de baz|. Exist| cazuri când formularul pe care îl dorim difer| foarte mult de
tipurile pe care Generatorul le poate crea, în acest caz veÛi construi formularul de la "zero".
• în fereastra bazei de date, clic pe butonul Forms;
Pentru a crea un
formular fara • clic pe butonul New, acesta va duce la afiÕarea ferestrei New
Generator Form;
136 Introducere în Microsoft Access: Formulare - cursul 7

Î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 !.

sau suna la:

Vizualizarea ferestrei în mod proiectare


• deschideÛi o baz| de date astfel încât s| fie afiÕat| fereastra
Deschiderea unui
formular existent bazei de date (Database Window);
în modul • clic pe butonul Form;
proiectare • deschideÛi formularul pe care doriÛi s|-l vizualizaÛi;
• clic pe meniul View, de aici selectaÛi Design View.

În exemplul care urmeaz| am folosit formularul Orders din baza de date Nortwind.mdb. În
137 Introducere în Microsoft Access: Formulare - cursul 7

figura urm|toare acesta este vizualizat în modul formular.

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

AcelaÕi formular, vizualizat în mod proiectare arat| astfel:

0264-401667
NU COPIA !.

sau suna la:

Fereastra modului proiectare


Fereastra modului proiectare conÛine un num|r de elemente vizuale cu care trebuie s| fiÛi
familiarizaÛi.

AfiÕarea sau ascunderea liniarului (Rulers)


138 Introducere în Microsoft Access: Formulare - cursul 7

• 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

La deschiderea unui formular,


obiectul selectat este chiar formularul,
lista propriet|Ûilor lui se prezint| sub
forma:
ANTAL Tiberiu Alexandru.

AfiÕarea listei câmpurilor (Field


Pt. cumparare viziteaza:
List)
Sursa de date a formularului este fie
un tabel, fie o interogare. Ar fi
incomod dac| utilizatorul ar trebui s|
memoreze numele câmpurilor de date
ale sursei. AfiÕarea listei de câmpuri
ale sursei de date rezolv| aceast|
problem|. Dac| doriÛi ca unul din
câmpurile listei s| apar| pe suprafaÛa
formularului este suficient s|-l trageÛi
din list| pe suprafaÛa formularului.
• pentru afiÕarea listei câmpurilor, clic din meniul View pe Field List sau
• din bara de instrumente Form Design, clic pe .
0264-401667
NU COPIA !.

sau suna la:

Lista câmpurilor pentru formularul Orders, care are ca surs| de date interogarea cu numele
Orders Qry, se prezint| sub forma:

AfiÕarea cutiei cu instrumente (Toolbox)


Bara cu instrumente grupeaz| obiectele standard, numite Õi controale (controls) care pot fi
aÕezate pe suprafaÛa unui formular.
• pentru afiÕarea barei cu instrumente clic pe Toolbox din meniul View sau
• din bara de instrumente Form Design, clic pe ;
139 Introducere în Microsoft Access: Formulare - cursul 7

• bara de instrumente se va afiÕa sub forma:

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui

AfiÕarea codului din spatele formularului


Obiectele bazei de date Õi cele ale unui formular pot fi manipulate prin intermediul limbajului
de programare Visual Basic for Applications (VBA). InstrucÛiunile corespunz|toare
obiectelor unui formular pot fi vizualizate astfel:
ANTAL Tiberiu Alexandru.

• clic pe Code din meniul View sau


• din bara de instrumente Form Design, clic pe .
Pt. cumparare viziteaza:

Pentru formularul Orders, codul din spatele lui este de forma:

0264-401667
NU COPIA !.

sau suna la:

Manipularea proiectului de formular


Dup| ce aÛi creat un formular cu Generatorul, puteÛi muta, ad|uga sau Õterge unele câmpuri.
Principiul de lucru este acelaÕi cu cel uzitat în toate aplicaÛiile Microsoft: selecteaz|, apoi
manipuleaz|.
140 Introducere în Microsoft Access: Formulare - cursul 7

Controalele pe care Access-ul le pune pe suprafaÛa unui formular, în urma folosirii


Generatorului, se numesc controale legate. Aceasta înseamn| c| ele sunt legate de
câmpurile tabelelor sau interog|rilor care au fost selectate drept surs| de date. Un control legat

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).

Clic undeva pe suprafaÛa controlului. Dac| aÛi f|cut clic pe o etichet|,


Selectarea unui
control cu veÛi observa opt puncte de form| dreptunghiular| în colÛurile
mouse-ul cutiei etichet| (Label box) Õi la mijloacele laturilor cutiei care permite
modificarea dimensiunilor cutiei (sizing handles). În colÛul din stânga
sus se observ| un punct mai mare (move handle), el apare atât la
etichet| cât Õi la cutia text. Dac| faceÛi clic pe suprafaÛa cutiei text veÛi observa cele opt
dreptunghiuri în aceleaÕi poziÛii caracteristice, de data aceasta pe chenarul cutiei de text Õi
unul singur în colÛul stânga sus al cutiei etichet|. Acest punct mai mare în colÛurile din stânga
0264-401667
NU COPIA !.

sus permite deplasarea individual| sau în grup a celor dou| cutii.


sau suna la:

PoziÛionarea de pe un control pe altul se face prin ap|sarea tastei Tab.

Pentru a fixa poziÛia controalelor la punctele grilei


• selectaÛi Format din meniu;
• selectaÛi articolul de meniu Snap to Grid. Dac| aceast| opÛiune este activat| sub
forma toate controalele care se vor crea vor fi fixate în punctele grilei.

Pentru mutarea controalelor


• având selectate un grup de controale, plasaÛi cursorul pe latura controlului. Forma
cursorului se va schimba într-o mân| deschis|;
• trageÛi controlul în noua poziÛie, apoi eliberaÛi butonul mouse-ului.

Pentru mutarea independent| a cutiei text sau etichet|


• având selectat un control sau un grup de controale, plasaÛi cursorul peste dreptunghiul
din stânga sus (move handle) al unui control. Cursorul îÕi va schimba forma într-o mân| care
141 Introducere în Microsoft Access: Formulare - cursul 7

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.

Pentru a redimensiona un control


• selectaÛi un control, poziÛionaÛi cursorul pe unul dintre punctele de redimensionare
(sizing handles). Forma cursorului se va modifica într-o linie cu s|geÛi la ambele capete
indicând sensurile în care se poate efectua tragerea;
• clic pe butonul stâng al mouse-ului Õi trageÛi de punct, redimesionând obiectul la o
Acest curs este proprietatea lui
dimensiune mai mare sau mai mic|.

Pentru a Õterge un control


• clic undeva pe control;
• ap|saÛi tasta Delete.
ANTAL Tiberiu Alexandru.

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.

Pentru a multiplica un grup de controale


• selectaÛi controlul sau controalele;
• selectaÛi Duplicate din meniul Edit. O copie a controalelor va ap|rea imediat
dedesubtul controalelor originale.

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.

Pentru a muta sau copia controale folosind meniul Edit


selectaÛi controlul;

0264-401667
NU COPIA !.

• 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|;

Pentru selectarea a dou| controale adiacente


• clic într-un punct în afara grupului Õi trageÛi cursorul peste controalele de selectat. Pe
m|sur| ce mutaÛi cursorul el va desena un dreptunghi în jurul grupului selectat. Toate
controalele care sunt cuprinse în interiorul dreptunghiului sau sunt intersectate de laturile lui,
vor fi selectate.

Pentru a selecta un grup de controale neadiacente


• ÛineÛi ap|sat| tasta Shift pe m|sur| ce selectaÛi fiecare control. Dac| din eroare aÛi
selectat un control nedorit selectaÛi-l din nou, efectul va fi deselectarea lui.

Pentru alinierea unui grup de controale între ele


• selectaÛi controalele de aliniat;
142 Introducere în Microsoft Access: Formulare - cursul 7

• 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.

Pentru a salva un formular cu toate modific|rile f|cute asupra


controalelor lui
Pt. cumparare viziteaza:
• selectaÛi Save din meniul File;
• introduceÛi numele formularului;
• ap|saÛi Enter, apoi clic pe OK.

Pentru a modifica dimensiunea unei secÛiuni


Dac| modificaÛi poziÛia controalelor sau ad|ugaÛi noi controale formularului este posibil s|
doriÛi modificarea dimensiunilor unei secÛiuni de formular.
• poziÛionaÛi cursorul peste marginea de jos a secÛiunii. Forma cursorului se va modifica
la o linie vertical| cu dou| s|geÛi la capete suprapus| peste o linie oriozontal| mai groas|;
• trageÛi marginea secÛiunii pân| când ajunge la dimensiunea dorit|.

Pentru a modifica l|Ûimea unui formular


0264-401667
NU COPIA !.

• 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|.

Pentru a modifica l|Ûimea formularului Õi dimensiunea unei secÛiuni


simultan
• poziÛionaÛi cursorul peste colÛul din dreapta jos a secÛiunii. Cursorul va lua forma unui
plus cu s|geÛi la fiecare extremitate;
• trageÛi colÛul secÛiunii Õi formularului pân| 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

propriet|Ûilor originale ale tabelului.

Controlul nelegat este f|r| surs| de date. El poate afiÕa informaÛii de


Controale nelegate

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.

Controlul calculat are datele derivate dintr-o expresie.


Controale calculate
(Calculated
controls)
Acest curs este proprietatea lui
Cutia cu instrumente (Toolbox)
Controalele care pot fi plasate pe formulare sunt grupate în cutia cu instrumente.

• dac| cutia cu instrumente nu este afiÕat|, din View selectaÛi


Pentru a deschide
cutia cu Toolbox; acesta va fi afiÕat| sub forma: ;
ANTAL Tiberiu Alexandru.

instrumente • poziÛionaÛi Õi redimensionaÛi


(Toolbox) cutia dup| preferinÛe.
Pt. cumparare viziteaza:

Descrierea sumara7 a instrumentelor este prezentata7 în tabelu care urmeaza7 :

Nume instrument Pictogram| Descriere 0264-401667


NU COPIA !.

SelecÛie de Obiecte Când simbolul este selectat, permite selectarea,


sau suna la:

(Select Objects) mutarea Õi redimensionarea controalelor

Generatoare de Generatoarele de Controale permit crearea


Controale (Control simpl| ale urm|toarelor tipuri de controale:
Wizards) • Cutie List| (List Box);
• Cutie Combinat| (Combo Box);
• Grup de OpÛiuni (Option Group);
• Buton de Comad| (Command Button).

Etichet| (Label) Pictograma se foloseÕte la crearea unui text care


nu se modific|. Majoritatea controalelor au
ataÕate automat, la creare, o etichet|. Sunt utile
la afiÕarea unui text undeva pe suprafaÛa
formularului.
144 Introducere în Microsoft Access: Formulare - cursul 7

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.

Buton Bistabil (Toggle Controlul permite, selectarea sau deselectarea


Button) unei opÛiuni. Atât text, cât Õi desene pot fi
Acest curs este proprietatea lui

folosite pentru a specifica semnificaÛia lui.

Buton de OpÛiune Acest control permite, fie selectarea, fie


(Option Button) deselectarea unei opÛiuni. Un punct negru este
afiÕat dac| opÛiunea este selectat|.
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


Buton de SelecÛie Acest control permite, fie selectarea, fie
(Check Box) neselectarea unei opÛiuni. Semnul "bifat" U este
afiÕat în caz de selecÛie. Butoanele de SelecÛie
nu sunt mutual exclusive în selecÛie, adic| se
poate s| fie simultan selectate mai multe.
Cutie Combinat| Controlul va afiÕa o list| de opÛiuni disponibile.
(Combo Box) PuteÛi vedea opÛiunile efectuând clic pe s|geat|
în jos din dreapta cutiei. Alternativ, puteÛi
introduce, la fel ca în Cutia Text, o opÛiune care
nu apare în list|, Access-ul modificând
elementul de list| afiÕat la cel mai apropiat de
textul introdus. Dac| nu aÛi activat proprietatea 0264-401667
NU COPIA !.

Limit To List la crearea Cutiei Combinate,


sau suna la:

noua valoare introdus| va fi salvat| în tabel.


Buton List| (List Box) Permite afiÕarea unor variante de opÛiuni sub
forma unei liste prin care se poate defila. Numai
valorile din list| pot fi selectate.
Buton de Comand| Se foloseÕte pentru lansarea unei acÛiuni.
(Command Button) AcÛiunea este efectuat| pentru c| butonul este
legat de o serie de comenzi denumite "Macro"-
uri sau Subprograme.
Imagine (Image) Permite inserarea unei imagini în formular.
145 Introducere în Microsoft Access: Formulare - cursul 7

Chenar de Obiect Se foloseÕte când doriÛi s| afiÕaÛi un obiect OLE


Nelegat (Unbound sau o imagine ca parte a unui proiect de
Object Frame) formular. Obiectul va r|mâne acelaÕi, el nu se va

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:

Subformular/Subraport Pentru afiÕarea unei relaÛii unu-la-mulÛi se


(Subform/Subreport) insereaz| un Subformular în formular. De
obicei, unu este în formularul principal, iar
mulÛi în subformular.
Linie (Line) Permite ad|ugarea de linii cu scopul de a face
formularul mai atractiv Õi mai bine organizat.

Dreptunghi (Rectangle) Permite ad|ugarea unor dreptunghiuri cu scopul 0264-401667


de a face formularul mai atractiv Õi mai bine
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:

Propriet|Ûile de legate de afiÕarea controalelor Etichet| Õi


Cutie Text
DeÕi, în principal, propriet|Ûile prezentate în continuare sunt specifice acestor dou| controale
Õi celelalte controale au, o parte dintre, aceste propriet|Ûi.

Proprietate OpÛiune Descriere


Format Formate numerice, dat| Õi time Determin| modul de afiÕ|re
al valorii
0264-401667
NU COPIA !.

sau suna la:

Decimal Places Auto, 1-15 Determin| num|rul de


zecimale afiÕate
Visible Yes/No Pentru Yes controlul este
afiÕat; pentru No este
invizibil
Display when Always, Print Only, Screen Only Determin| când anume se
afiÕeaz| controlul
Scrollbars None, Vertical, Horizontal, Both Specific| afiÕarea barelor
pentru deplasare
Can Grow Yes/No Permite creÕterea cutiei dac|
mai multe linii de text sunt
introduse
147 Introducere în Microsoft Access: Formulare - cursul 7

Can Shrink Yes/No Permite micÕorarea cutiei


dac| num|rul de linii este
mai mic decât dimensiunea

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.

Back Style Transparent , Normal Determin| dac| fondul


controlului este transparent
Pt. cumparare viziteaza:
sau opac (normal)
Back Color Orice culoare disponibil| Specific| culoarea pentru
interiorul controlului sau a
secÛiunii
Special Effect Flat, Raisen, Sunken, Shadowed, Determin| modul de afiÕare
Etched, Chiseled a secÛiunii sau controlului
Border Style Transparent, Solid, Dashed, Dots Determin| afiÕarea
transparent| sau opaca a
marginilor unui control
Border Color Orice culoare disponibil| Culoarea marginii 0264-401667
controlului
NU COPIA !.

sau suna la:

Border Width Hairline, 1 pt - 6 pt Specific| grosimea


marginilor controlului
Fore Color Orice selecÛie din fereastra afiÕat| Specific| culoarea textului
din control sau pe cea folsit|
la tip|rire
Font Name Orice tip de caracter disponibil Numele tipul de caractere
(depinde de instalare) folosit pentru afiÕarea
valorilor controlului
Font Size Orice m|rime disponibil| M|rimea caractelelor foloste
pentru afiÕarea valorilor
controlului
Font Weight Extra Light, Light, Normal, L|Ûimea liniei folosit| de
Medium, Semi-Bold, Bold, Extra Windows pentru afiÕarea Õi
Bold, Heavy tip|rirea caracterelor
148 Introducere în Microsoft Access: Formulare - cursul 7

Font Italic Yes/No Caractere înclinate în


control

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.

aÕezate în stânga sau drepta


controlului în funcÛie de
limb|
Pt. cumparare viziteaza:

Numeral Shapes System, Arabic, National, Context Forma numerelor pentru


limbile arab| Õi hindi
Left Margin Marginea stâng| a
controlului în inchi
Right Margin Marginea dreapt| a
controlului în inchi
Top Margin Marginea de sus a
controlului în inch
Bottom Margin Marginea de jos a
0264-401667
NU COPIA !.

controlului în inchi
sau suna la:

Line Spacing SpaÛierea, în inchi, între


liniile de tetxt
Is Hyperlink Yes/No Specific| dac| un control
este sau nu hiperleg|tur|
(pentru Yes textul este
ablastru Õi subliniat Õi la clic
duce la conectarea la
Internet)

Î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.

Pt. cumparare viziteaza:

Navigarea între câmpurile formularului


Navigarea într-un formular este aproape identica7 cu cea dintr-o foaie de date. În mod
formular, cel mai simplu mod de pozit-ionare în vederea modifica7 rii unor date este clicul pe
câmpul dorit. Întrucât pot fi afis- ate numai atâtea câmpuri câte încap pe ecran, mai multe
tehhnici de navigare pot fi folosit pentru deplasarea în cadrul formularului sau între
înregistra7 ri, câteva dintre acestea sunt prezentate în tabelul urma7 tor. Daca7 formularul se
întinde pe mai multe pagini, se va afis- a o bara7 de defilare pe verticala7 (vertical scroolbar).
0264-401667
NU COPIA !.

Efect Combinat-ie de taste


sau suna la:

Câmpul urma7 tor


Tab, 6,9 sau Enter
Câmpul anterior
Shift+Tab, 7,8
Primul câmp al înregistra7 rii curente Home sau Ctrl+Home
Ultimul câmp al înregistra7 rii curente End sau Ctrl+End
Pagina urma7 toare PgDown sau Next Record
Pagina anterioara7 PgUp sau Previous Record

Tehnici de editare a datelor


Tehnicile de editare a datelor se prezinta7 în tabelul urma7 tor:
150 Introducere în Microsoft Access: Formulare - cursul 7

Tehnica de editare Combinat-ie de taste


Deplasarea punctului de inserare într-
Apa7 sarea lui 7 sau a lui 6

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.

Inserarea orei curente în câmp Ctrl+:


Pt. cumparare viziteaza:
Inserarea unei întreruperi de linie în Ctrl+Enter
câmpurile de tipul Text sau Memo
Inserarea unei înregistra7 ri noi Ctrl++ (plus)
S- tergerea înregistra7 rii curente Ctrl+- (minus)
Salvarea înregistra7 rii curente Shift+Enter sau deplasarea pe o alta7 înregistrare
Anularea modifica7 rii fa7 cute în Esc sau butonul Undo
înregistrarea curenta7

Lista proprieta7 t-ilor unui formular 0264-401667


Proprieta7 -tile formularului afecteaza7 modul de afis- are a întregului formular. Cele mai
NU COPIA !.

sau suna la:

importante proprieta7 -ti sunt prezentate în tabelul urma7 tor:

Proprietate Descriere -si opt-iuni Descriere opt-iune


Caption Text afis- at în bara cu titlul
formularului
151 Introducere în Microsoft Access: Formulare - cursul 7

Default View Determina7 modul de


vizualizare al formularului
în execut-ie

http://www.east.utcluj.ro/mb/mep/antal
Continuous Form O înregistrare pe pagina7

Datasheet Maxim înregistra7 ri pe


pagina7 (Implicit)

PivotTable Afis- eaza7 valorile câmpului


orizontal sau vertical, apoi
Acest curs este proprietatea lui
calculeaza7 suma pe coloana7
sau rând

PivotChart Analiza grafica7 a datelor


ANTAL Tiberiu Alexandru.

Allow Form View Validarea vizualiza7 rii în


mod formular (Yes/No)
Pt. cumparare viziteaza:

Allow Datasheet View Validarea vizualiza7 rii în


mod foaie de date (Yes/No)
Allow Pivot Table View Validarea vizualiza7 rii în
mod tabel pivot (Yes/No)
Allow Pivot Chart View Validarea vizualiza7 rii în
mod grafic pivot (Yes/No)
Scroll Bars Determina7 afis- area barelor
pentru defilare

Neither Nu se afis- eaza7 0264-401667


NU COPIA !.

sau suna la:

Horizontal Only Se afis- eaza7 numai cea


orizontala7

Vertical Only Se afis- eaza7 numai cea


orizontala7

Both Ambele bare sunt afis- ate

Record Selectors Determina7 afis- area


selectorilor verticali de
înregistra7 ri (Yes/No)
Navigation Buttons Determina7 afis- area
butoanelor de navigare
(Yes/No)
152 Introducere în Microsoft Access: Formulare - cursul 7

Dividing Lines Determina7 afis- area de linii


între sect-iunile vizibile ale
formularului

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

None Fara7 margine sau elemente


de margine (bare de defilare
sau navigare)
ANTAL Tiberiu Alexandru.

Thin Margine subt-ire, nu se poate


redimensiona
Pt. cumparare viziteaza:

Sizable Seta7 ri normale de formular

Dialog Margine groasa7 , cu bara de


titlu; nu se poate
redimensiona; se foloses- te
pentru ferestre de dialog
Control Box Determina7 afis- area meniului
de control (Restore, Move
Size) (Yes/No)
Min Max Buttons None Nu se afis- eaza7 butoane în 0264-401667
NU COPIA !.

colt-ul dreapta-sus al
sau suna la:

formularului

Min Enabled Se afis- eaza7 butonul de


minimizare

Max Enabled Se afis- eaza7 butonul de


maxbimizare

Both Enabled Se afis- eaza7 butoanele de


minimizare -si maximizare
Close Button Determina7 afis- area
butonului Close în colt-ul
dreapta-sus în meniul de
control (Yes/No)
153 Introducere în Microsoft Access: Formulare - cursul 7

What's This Button Determina7 afis- area, la


apa7 sa7 rea lui Shift+F1, a
Screen Tips

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

Imaginea este inclusa7 în


ANTAL Tiberiu Alexandru.

Embedded
formular -si devine parte a
bazei de date
Pt. cumparare viziteaza:

Linked Imaginea este doar legata7 .


Access stocheaza7 locat-ia
imaginii -si o încarca7 la
fiecare deschidere a
formularului
Picture Size Mode Determina7 modul de afis- are
a imaginii

Clip Afis- eaza7 imaginea cu


dimensiunile ei actuale 0264-401667
NU COPIA !.

Stretch Modifica7 dimensiunile


sau suna la:

imaginii (neproport-ional) ca
sa7 încapa7 în formular

Zoom Actualizeaza7 dimensiunile


imaginii ca sa7 încapa7 în
formular proport-ional; poate
rezulta o imagine care nu
ocupta7 întreaga lungime sau
la7 -time din formular
154 Introducere în Microsoft Access: Formulare - cursul 7

Picture Alignemet Determina7 alinierea imaginii

Top Left Imaginea se afis- eaza7 în

http://www.east.utcluj.ro/mb/mep/antal
colt-ul stânga-sus a
formularului, raportului sau
a controlului de tip imagine

Top Right Imaginea se afis- eaza7 în


colt-ul dreapta-sus a
formularului, raportului sau
a controlului de tip imagine
Acest curs este proprietatea lui

Center Imaginea este centrata7 în


formular, raport sau în
controlul de tip imagine
(implicit)
ANTAL Tiberiu Alexandru.

Bottom Left Imaginea se afis- eaza7 în


colt-ul stânga-jos a
Pt. cumparare viziteaza:
formularului, raportului sau
a controlului de tip imagine

Bottom Right Imaginea se afis- eaza7 în


colt-ul dreapta-jos a
formularului, raportului sau
a controlului de tip imagine

Form Center Imaginea formularului este


centrata7 orizontal, în raport
cu la7 -timea -si vertical, în
raport cu îna7 lt-imea 0264-401667
NU COPIA !.

formularului
sau suna la:

Picture Tiling Se foloses- te pentru afis- area


ala7 turata7 a unor imagini mici
(Yes/No)
Grid X Numa7 rul de puncte pe inch
la afis- area grilei pe X
Grid Y Numa7 rul de puncte pe inch
la afis- area grilei pe Y
155 Introducere în Microsoft Access: Formulare - cursul 7

Layout for Print Determina7 daca7 formularul


foloses- te caractere de ecran
sau de imprimanta7

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

tuturor foilor de date subfoilor de date este


dintr-un table sau interogare expandara7

No - Starea salvata7 a
subfoilor de date este închisa7
ANTAL Tiberiu Alexandru.

Orientation Determina7 orientarea vederii


Pt. cumparare viziteaza:
Right to Left Afis- area -si funct-ionarea se
face de la dreapta la stânga

Let to Right Afis- area -si funct-ionarea se


face de la stânga la dreapta
Movable Determina7 daca7 formularul
poate fi mutat (Yes/No)
Record Source Determina7 locul în care se
afla7 datele afis- ate de
formular sau unde vor fi
stocate noile date. Poate fi 0264-401667
NU COPIA !.

un formular sau o interogare


sau suna la:

Filter Se foloses- te pentru a


specifica afis- area unei
submult-imi de înregistra7 ri
când se aplica7 un filtru
formularului
Order By Permite specificarea unui
câmp pentru ordonarea
datelor afis- are
Allow Filters Permite ca utilizatorul sa7
poata7 afis- a date filtrate
(Yes/No)
156 Introducere în Microsoft Access: Formulare - cursul 7

Allow Edits Permite sau opres- te editarea


datelor facând formularul
read-only pentru

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

Data Entry Se foloses- te pentru afis- area


înregista7 rilor salvate

Yes/No Numai înregistra7 rile noi sunt


afis- ate/Toate înregistra7 rile
ANTAL Tiberiu Alexandru.

sunt afis- ate


Pt. cumparare viziteaza:
Recordset Type Permite actualizarea
formularelor multi-tabel

Dynaset Numai câmpurile tabelului


implicit pot fi ediate

Dynaset (Inconsistent) Câmpurile tuturor tabelel


pot fi editate

Snapshot Nu se poate edita nici un


câmp
Record Locks Specifica7 metoda de blocare 0264-401667
NU COPIA !.

a înregistra7 rilor în regim


sau suna la:

multi-utilizator

No Locks Înregistrarea se blocheaza7


numai în timpul salva7 rii

All Records Toate înregistra7 rile


formularului sunt blocate în
timpul folosirii lui

Edited Record Blocheaza7 numai


înregistrarea în curs de
editare
157 Introducere în Microsoft Access: Formulare - cursul 7

Modal Se foloses- te atunci când


formularul trebuie închis
înainte de a face operat-ii cu

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

All Records Tab permite trecerea la


urma7 toarea întegistrare
ANTAL Tiberiu Alexandru.

Current Record Tab face revenirea pe


primul câmp al înregistra7 rii
Pt. cumparare viziteaza:
curente
Current Page
Tab face deplasarea de pe
ultimul câmp al înregistra7 rii
pe primul câmp al paginii
curente

Menu Bar Se foloses- te pentru


specificarea unui meniu
alternativ
Toolbar Se foloses- te pentru 0264-401667
NU COPIA !.

specificarea unei bare cu


sau suna la:

instrumente. Se poate crea o


bara7 cu instrumente prin
selectarea opt-iunii
Customize din comanda
Toolbar a meniului View.
Shortcut Menu Permite activarea
scurta7 turilor de meniu
Shortcut Menu Bar Permite specificarea unui
meniu cu scurta7 turi
alternativ
Help File Numele fis- ierului de ajutor
(help), compilat, atribuit
formularului
158 Introducere în Microsoft Access: Formulare - cursul 7

Help Context Id ID-ul punctului de intrare


contextual din fis- ierul de
ajutor

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

Design View Modifica7 ri se pot face doar


în modul proiectare
Acest curs este proprietatea lui

All Views Modifica7 ri se pot face în


toate modurile vizualizare
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


159 Introducere în Microsoft Access: Crearea controalelor - cursul 8

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

! cum se seteaz| valoarea implicit| (Default Value) a unui control;


! cum se seteaz| regula de validare (Validation Rule) Õi textul de validare
(Validation Text) pentru un control;
ANTAL Tiberiu Alexandru.

! cum se defineÕte o masc| de intrare (Input Mask);


! cum se modific| ordinea Tab-urilor;
Pt. cumparare viziteaza:

! conceptele de Macro-uri (Macros) Õi Evenimente (Events);


! cum se foloseÕte un buton de comand| (Command Button) într-un
formular;
! cum se adaug| un buton de comand| la un formular.

0264-401667
NU COPIA !.

sau suna la:


160 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Crearea unei cutii combinate (Combo Box) folosind cutia


cu instrumente (Toolbox)

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).

Crearea unui formular cu o cutie combinat|


Acest curs este proprietatea lui

Î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.

• deschideÛi baza de date Northwind;


Crearea unui
ANTAL Tiberiu Alexandru.

formular nou • clic pe butonul Forms;


• clic pe butonul New;
• asiguraÛi-v| c| din list| este selectat| vizualizarea în mod
Pt. cumparare viziteaza:
proiectare (Design View);
• clic pe butonul OK;

Pe ecran va ap|rea un formular gol de forma:

0264-401667
NU COPIA !.

sau suna la:

Dac| cutia cu instrumente (Toolbox) nu este afiÕat| automat, efectuaÛi clic pictograma
din bara de instrumente (Toolbar).

Crearea cutiei • clic pe pictograma cutiei combinate (Combo Box) din


combinate (Combo cutia cu instrumente;
Box) • poziÛionaÛi cursorul în zona de centru a formularului;
161 Introducere în Microsoft Access: Crearea controalelor - cursul 8

• 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|:

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• 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 !.

sau suna la:

• pentru acest exemplu, asiguraÛi-v| c| tabelul Categories este selectat înainte de


ap|sarea butonului Next;
• fereastra de dialog care va fi afiÕat| permite selectarea unui câmp care va fi sursa
162 Introducere în Microsoft Access: Crearea controalelor - cursul 8

datelor ce vor fi afiÕate în cutia combinat|;

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• pentru acest exemplu selectaÛi CategoryName, apoi clic pe s|geata la dreapta


pentru ad|ugarea acestui câmp în lista Selected Fields;
• clic pe Next pentru continuare;

Urm|toarea fereastr| de dialog care va fi afiÕat| permite controlul l|Ûimii (width) cutiei
combinate.

0264-401667
NU COPIA !.

sau suna la:

• î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

• clic pe butonul Next pentru a continua;


• urm|toarea fereastr| de dialog permite ca Access-ul s| stocheze valoarea selectat| din
cutia combinat| pentru ca ulterior s| fie refolosit|. Pentru exemplul nostru clic pe Next;

http://www.east.utcluj.ro/mb/mep/antal
• ultima fereastr| de dialog permite definirea etichetei asociate cutiei combinate;

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• pentru acest exemplu, pe locul lui CategoryName introduceÛi textul Numele


Categoriei;
• clic pe butonul Finish pentru p|r|sirea Generatorului cu generarea controlului cutie
combinat|.

Formularul complet va ar|ta vizualizat în mod proiectare, astfel:

0264-401667
NU COPIA !.

sau suna la:


164 Introducere în Microsoft Access: Crearea controalelor - cursul 8

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.

Pt. cumparare viziteaza:

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 !.

sau suna la:

• închideÛi formularul Õi salvaÛi-l sub numele de F1-TEST.


165 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Modificarea propriet|Ûilor unui formular


Un formular are mai multe secÛiuni, atât formularul, secÛiunile, cât Õi controalele care sunt
poziÛionate în diferite secÛiuni au propriet|Ûi individuale. Unele propriet|Ûi sunt predefinite,

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

Pe ecran va ap|rea fereastra propriet|Ûilor

sub forma listei ala7 turate.


166 Introducere în Microsoft Access: Crearea controalelor - cursul 8

• plasaÛi cursorul de mouse oriunde în zona gri din afara unui


Pentru a modifica
proprieta7 t-ile unui formular sau deasupra liniarului (Ruler), dac| acesta este vizualizat;
formular • clic dublu pe butonul stâng al mouse-ului sau

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|.

Crearea unui câmp calculat


La proiectarea tabelelor am precizat c| este de evitat crearea unor câmpuri care stocheaz| date
derivate sau calculate din alte date. De obicei, metoda eficient| este calcularea valorii dorite
Acest curs este proprietatea lui
pe baza unor expresii aritmetice. Access-ul are o component| numit| Constructor de Expresii
(Expression Builder) care asigur| scrierea corect| a expresiilor pe care nu le ÕtiÛi introduce
corect, de exemplu din motive sintactice. Constructorul de Expresii poate fi folosit atât în
cazul formularelor, cât Õi în cazul interog|rilor Õi rapoartelor. Exemplul care urmeaz|
foloseÕte tabelul Order Details din baza de date Northwind. Din câmpurile Unit Price,
ANTAL Tiberiu Alexandru.

Quantity Õi Discount se va calcula un câmp nou, numit Total = [Unit Price] *


[Quantity] * [Discount]. Folosind Generatorul de Formulare (Form Wizard) se va
Pt. cumparare viziteaza:
crea un formular nou pe baza tabelului Order Details care va conÛine urm|toarele câmpuri:
ProductID, Unit Price, Quantity Õi Discount.

0264-401667
NU COPIA !.

sau suna la:

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

Se trece la vizualizarea în mod proiectare (View ± Design View), când formularul se va


afiÕa astfel:
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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:

sus al controlului Discount Õi ap|saÛi butonul stâng al mouse-ului. L|Ûimea formularului va

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.

Pt. cumparare viziteaza:

Pe ecran se va afiÕa o fereastr| de forma:

0264-401667
NU COPIA !.

sau suna la:

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

vizualizat în mod proiectare;


• din cea de a doua list| selectaÛi UnitPrice, iar din cea de a treia Value;
• clic pe butonul Paste, iar expresia va fi afiÕat| astfel:

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• clic pe operatorul *. Procedând conform celor descrise construiÛi expresia:


[UnitPrice] * [Quantity] * [Discount];
• clic pe butonul OK.

ConÛinutul propriet|Ûii Control Source (Sursa Controlului) va deveni =[UnitPrice] *


[Quantity] * [Discount]. Aceasta înseamn| c| valoarea acestui control nu se va lua
dintr-un tabel sau interogare ci se va calcula pe baza expresie anterioare. Pentru ca formularul
s| afiÕeze o etichet| deasupra coloanei controlului Total, din secÛiunea Form Header, copiaÛi
controlul Detail Õi modificaÛi proprietatea Caption a noului control etichet| la Total. Apoi
aliniaÛi-l pe vertical| la controlul cutie de text Total Õi pe orizontal| la controalele etichet| din
secÛiunea Form Header. Vizualizat în mod formular, formularul FOrder Details va deveni: 0264-401667
NU COPIA !.

sau suna la:

Crearea unui formular cu subformular (Subform)


În exemplul care urmeaz| vom folosi baza de date Northwind Õi vom crea un formular nou
care va conÛine un control de tipul subformular.
170 Introducere în Microsoft Access: Crearea controalelor - cursul 8

• deschideÛi baza de date Northwind;


Crearea
formularului nou • clic pe butonul Form;

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.

Pt. cumparare viziteaza:

• clic pe butonul OK;


• ad|ugaÛi câmpurile conform figurii de mai jos:

0264-401667
NU COPIA !.

sau suna la:

• clic pe butonul Next pentru a continua;


• în continuare folosiÛi forma implicit| - Columnar - de pe pagina urm|toare a
Generatorului;
171 Introducere în Microsoft Access: Crearea controalelor - cursul 8

• clic pe butonul Next;


• selectaÛi stilul Stone de pe aceast| pagin|, apoi clic pe Next;
• în pagina actual| daÛi numele de Formular cu Subformular formularului, apoi clic pe

http://www.east.utcluj.ro/mb/mep/antal
Finish.

Noul formular va fi afiÕat sub forma prezentat| în figura urm|toare:


Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• comutaÛi vizualizarea în mod proiectare (Design View) prin


Crearea unui
subformular clic pe pictograma View (de pe Toolbar). Formularul va fi afiÕat dup|
cum urmeaz|:

0264-401667
NU COPIA !.

sau suna la:

• 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.

Pt. cumparare viziteaza:

• 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 !.

• folosiÛi tehnica tragerii pentru a crea un dreptunghi pe suprafaÛa formularului pe locul


sau suna la:

unde doriÛi s| fie poziÛionat subformularul;


• în momentul în care eliberaÛi butonul mouse-ului, Generatorul de Subformulare îÕi va
173 Introducere în Microsoft Access: Crearea controalelor - cursul 8

afiÕa prima pagin|;


• selectaÛi opÛiunea Forms;
• folosiÛi s|geata în jos pentru a selecta din list| formularul care va fi folosit ca

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.

Pt. cumparare viziteaza:

• în cazul exemplului nostru acceptaÛi opÛiunea implicit|, apoi clic pe Next;


• în final, trebuie s| daÛi un nume subformularului, acceptaÛi numele implicit de Orders
Subform Õi clic pe butonul Next pentru a trece la urm|toarea pagin| a Generatorului;
• formularul va fi vizualizat în mod proiectare dup| cum urmeaz|:

0264-401667
NU COPIA !.

sau suna la:

• clic pe pictograma View de pe bara de instrumente standard Õi selectaÛi Form View.


174 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Formularul împreun| cu subformularul vor fi afiÕate astfel:

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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.

Implementarea regulilor de integritate specifice bazei de


date sau controlul datelor stocate în baz|
La proiectarea formularelor, acestea trebuie s| permit| introducerea cât mai simpl| a datelor,
de asemenea este tot sarcina noastr| s| facem cât mai grea introducerea unor date incorecte.
Exist| o limit| a controlului care poate fi exercitat asupra datelor culese, dar exist| multe
posibilit|Ûi pentru verificarea corectitudinii datelor introduse. De exemplu, dac| doriÛi s| citiÛi
un num|r, puteÛi face imposibil| introducerea unor caractere str|ine. Când câmpul
corespunz|tor din tabel este o dat|, puteÛi asigura neacceptarea unor date invalide, de exemplu
31/11/00 (noiembrie are 30 de zile). Propriet|Ûile controalelor care permit aceste verific|ri
sunt:
175 Introducere în Microsoft Access: Crearea controalelor - cursul 8

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.

• vizualizaÛi lista propriet|Ûilor (Property Sheet) controlului;


Setarea lui Default
Value • selectaÛi de sus butonul Data;
ANTAL Tiberiu Alexandru.

• clic pe Default Value - Valoare Implicit|;


• tastaÛi o expresie sau
Pt. cumparare viziteaza:
• clic pe butonul Constructorului de Expresii (Expression Builder).

• vizualizaÛi lista propriet|Ûilor (Property Sheet) controlului;


Setarea lui
Validation Rule • selectaÛi de sus butonul Data;
• clic pe Validation Rule - Regula de Validare;
• tastaÛi o expresie sau
• clic pe butonul Constructorului de Expresii (Expression Builder).

• vizualizaÛi lista propriet|Ûilor (Property Sheet) controlului;


Setarea lui
Validation Text • selectaÛi de sus butonul Data;
• clic pe Validation Text - Text de Validare Õi introduceÛi
mesajul dorit.
0264-401667
NU COPIA !.

• vizualizaÛi lista propriet|Ûilor (Property Sheet) controlului;


sau suna la:

Setarea lui Input


Mask • selectaÛi de sus butonul Data;
• clic pe Input Mask - Masca de Intrare;
• tastaÛi o Masca de Intrare sau
• clic pe butonul Generatorului M|Õtilor de Intrare (Input Mask Wizard).

Nota7 : Generatorul M|Õtilor de Intrare se poate folosi numai cu controale de tipul dat| sau
text.

Modificarea ordinii Tab-urilor


Ordinea Tab-urilor specific| modul în care ne putem deplasa între controalele unui formular.
Ea specific| plasarea pe urm|torul control când de exemplu, un câmp este plin sau am ap|sat
una din tastele Tab sau Enter. La crearea unui formular, Access-ul stocheaz| ordinea
Tab-urilor în ordinea ad|ug|rii controalelor pe formular. Dac| doriÛi s| modificaÛi aceast|
ordine, în special pentru a permite utilizatorului s| se plimbe într-o ordine cât mai natural|
între controale, Access-ul ofer| o astfel de facilitate.
176 Introducere în Microsoft Access: Crearea controalelor - cursul 8

• deschideÛi formularul în mod proiectare;


Modificarea ordinii
Tab-urilor • selectaÛi Tab Order din meniul View;
• veÛi vedea o fereastr| de dialog care va conÛine numele

http://www.east.utcluj.ro/mb/mep/antal
controalelor de pe formular în ordinea Tab;

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


• clic pe butonul Auto Order pentru a defini ordinea de la stânga la drepta sau de sus
în jos.

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|.

Butoane de comand| (Command Buttons)


Butoanele de comand| sunt folosite pentru iniÛierea unui grup de acÛiuni. Grupul de acÛiuni
poate fi de dou| feluri: macro sau procedur| de eveniment (Event Procedure).

Macro-ul este o secvent-a de acÛiuni grupate împreuna7 prin înregistare


Ce este un macro?
(recorded) într-o secvenÛ| particular|, pentru a fi lansate în execuÛie la 0264-401667
NU COPIA !.

orice moment ulterior înregistr|rii.


sau suna la:

Procedura de eveniment este un subprogram de tip subrutin| scris în


Ce este procedura
de eveniment? limbajul de programare Visual Basic, care realizeaz| o operaÛie
particular|, de exemplu g|sirea înregistr|rii urm|toare.
177 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Pentru a exemplifica utilizarea butoanelor de comand|, din baza de date Northwind,


deschideÛi formularul Customer Phone List. Pentru a vedea detaliile clienÛilor care încep cu
litera T, clic pe butonul de comand| T, pentru a vedea toate numerele de telefon, clic pe

http://www.east.utcluj.ro/mb/mep/antal
butonul de comad| All.

Ad|ugarea unui buton de comand| la un formular


În exemplul care urmeaz| vom ad|uga un buton de comand| unui formular din baza de date
Northwind:
• deschideÛi baza de date Northwind, clic pe butonul Forms, apoi selectaÛi Õi deschideÛi
formularul Categories. Formularul este prezentat mai jos.
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• 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 !.

sau suna la:

• 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.

Pt. cumparare viziteaza:


• clic pe butonul Next pentru a continua;
• urm|toarea pagin| a Generatorului va fi afiÕat|. Ea permite ad|ugarea unui text sau a
unei pictograme pe butonul de comand|;

0264-401667
NU COPIA !.

sau suna la:

• acceptaÛi opÛiunea implicit| Õi faceÛi clic pe Next;


• ultima pagin| a formularului va fi afiÕat|. Aceasta permite definirea numelui butonului
de comand|. În cazul nostru acest nume va fi CIesire;
179 Introducere în Microsoft Access: Crearea controalelor - cursul 8

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


• clic pe butonul Finish pentru ca Generatorul s| creeze butonul de comand|;
• formularul, conÛinând proasp|tul buton de comand| va fi vizualizat în mod proiectare.
• pentru a vedea cum arat| formularul în mod formular (Form View), clic pe View din
meniu, apoi selectaÛi Form View;

0264-401667
NU COPIA !.

sau suna la:

• clic pe buton Õi formularul va fi închis. Se va cere confirmarea salv|rii modific|rilor


aduse formularului. Selectarea lui Yes va duce la ad|ugarea permanent| a butonului de
comand| în formular.

Întreruperi de pagin| (Page Break)


Dac| un formular se întinde pe o suprafaÛ| mai mare decât în|lÛimea ecranului, se poate
utiliza întreruperea de pagin| pentru a realiza afiÕarea conÛinutului formularului pe pagini.
Utilizatorul va ap|sa tastele Page Up sau Page Down pentru a se deplasa pe pagina urm|toare
180 Introducere în Microsoft Access: Crearea controalelor - cursul 8

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|.

AplicaÛie cu formulare Õi controale


Acest curs este proprietatea lui

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.

Nume tabel Nume câmp Tip/Proprieta7 Ûi


Pt. cumparare viziteaza:
TContacte IDContact Data Type AutoNumber
PrimaryKey
Nume Contact Data Type: Text
Field Size: 100
TContacte1 IDContact Data Type: Number
Field Size: Long Integer
IDInfoContact Data Type: Number
Field Size: Long Integer
Info Contact Data Type: Text
Field Size: 255
0264-401667
NU COPIA !.

sau suna la:

TTipContact IDTipContact Data Type: AutoNumber


PrimaryKey
Tip Contact Data Type: Text

Fereastra relaÛiilor este:

Pentru tabelele TContacte Õi TContacte1 relaÛia este definit| astfel:


181 Introducere în Microsoft Access: Crearea controalelor - cursul 8

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui

Pentru tabelele TTipContact Õi TContacte1 relaÛia este definit| astfel:


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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.

Etapele de parcurs sunt:


• din fereastra bazei de date
selectaÛi butonul Forms, apoi clic pe
New;
• în ferestra New Form faceÛi
selecÛiile din figura al|turat|;
• noul formular va fi afiÕat, iar în
continuare introduceÛi datele conform
figurii care urmeaz|:
• închideÛi formularul al|turat, iar
182 Introducere în Microsoft Access: Crearea controalelor - cursul 8

când veÛi fi întrebat dac| doriÛi s|


salvaÛi modific|rile în noul formular
(Do you want to save changes to the

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.

În continuare vom crea pe baza


tabelului TContacte un formular nou cu
numele FTContacte. Figura ala7 turata7
prezint| selecÛiile care se fac pentru
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

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

lâng| valorile numerice corespunz|toare tipului de contact s| se afiÕeze Õi numele acestora.


Controlul Combo Box va afiÕa lista tuturor tipurilor de contacte Õi va introduce în controlul
IDInfoContact valoarea numeric| corespunz|toare unui anumit tip de contact selectat din

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.

Nume proprietate Valoare SemnificaÛie


Row Source TTipContact Sursa de date pentru valorile pe care controlul
Combo Box le va afiÕa în list|
Column Count 2 Num|rul de coloane care vor fi afiÕate în
Acest curs este proprietatea lui

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 !.

sau suna la:

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.

Pt. cumparare viziteaza:

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 !.

sau suna la:

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:

On Error Resume Next


Forms!FTContacte![TContacte1 subform].Form!IDInfoContact.Requery

Î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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


186 Introducere în Microsoft Access: Rapoarte - cursul 9

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

! cum se creeaz| un raport organizat pe coloane folosind AutoReport;


! cum se creeaz| rapoarte folosind Generatorul de Rapoarte (Report
Wizard);
ANTAL Tiberiu Alexandru.

! cum se adaug| nivelele de grupare (Grouping Levels) într-un raport;


! cum se sorteaz| înregistr|rile unui raport;
Pt. cumparare viziteaza:

! cum se specific| forma (layout) raportului;


! cum se specific| stilul raportului;
! cum se foloseÕte Generatorul de Etichete (Label Wizard);
! cum se foloseÕte Generatorul de Grafice (Chart Wizard);
! cum se creeaz| un raport f|r| Generator;
! cum se creeaz| o cutie de text;
! cum se creeaz| o etichet|;
! cum se seteaz| propriet|Ûile rapoartelor. 0264-401667
NU COPIA !.

sau suna la:


187 Introducere în Microsoft Access: Rapoarte - cursul 9

Generalit|Ûi despre Rapoarte (Reports)


Dup| cum am discutat în primele cursuri, proiectarea unei baze de date începe cu ce anume
dorim de la aceasta, de exemplu, cum s| fie afiÕate rezultatele. InformaÛiile pot fi afiÕate pe

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 !.

sau suna la:

unor concluzii specifice respectivului grup de înregistra7 ri.


• sect-iunea pagina7 (page): fiecare pagina7 scoasa7 la imprimanta7 are un antet -si un
sfârs- it. De exemplu, în sfîrs- itul de pagina se poate afis- a numa7 rul pagini de raport.

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).

Gruparea permite identificarea Õi organizarea datelor pe grupe logice Õi calcularea de totale


locale sau globale pe baza unor valori comune. Sunt permise cel mult 10 nivele de grupare.
De asemenea, este posibil| includerea unor subrapoarte ca parte a unui raport.

Î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

general| despre modul în care sunt construite.

Deschiderea Õi vizualizarea unui raport existent

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

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


• clic dublu pe raporul care doriÛi s| fie vizualizat, pentru exemplul nostru am selectat
raportul Catalog;

0264-401667
NU COPIA !.

sau suna la:


189 Introducere în Microsoft Access: Rapoarte - cursul 9

• folosiÛi barele de defilare (scroll bars) din dreapta Õi partea de


Pentru deplasare
în pagina jos a ferestrei pentru a v| poziÛiona pe diferite porÛiuni ale paginii.
vizualizata7

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|.

• folosiÛi butoanele de navigare (navigation buttons) din colÛul


Pentru deplasarea
pe o pagina noua7 stânga-jos al raportului pentru vizualizarea altor pagini ale raportului:
;
ANTAL Tiberiu Alexandru.

• clic pe s|geat| la dreapta pentru a trece la pagina urm|toare;


• clic pe s|geata la dreapta urmat| de o bar| vertical| pentru a s|ri la ultima pagin|;
Pt. cumparare viziteaza:
• clic pe s|geata la stânga pentru a trece la pagina anterioar|;
• clic pe bara vertical| urmat| de s|geata la stânga pentru salt la prima pagin|.

Tip|rirea (Printing) rapoartelor


Înainte de prima tip|rire a raportului este posibil s| doriÛi modificarea marginilor paginii sau a
orient|rii acesteia. Orientarea portret (Portrait) este cea normal|, dup| cum Õi numele
sugereaz|, un format A4 apare cu latura mai lung| pe vertical|. Varianta alternativ| de
orientare peisaj (Landscape) are latura mai lung| pe orizontal|. Odat| ce orientarea paginii a
fost fixat|, aceasta va fi salvat| în raport. Dup| aceast| setare raportul poate fi tip|rit la
imprimant| sau poate fi închis Õi tip|rit ulterior, f|r| ca setarea s| se piard|.

• clic pe meniul File Õi 0264-401667


Pentru a modifica
selectaÛi Page Setup.
NU COPIA !.

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

• clic pe meniul File Õi


Setarea opt-iunilor
de tipa7 rire a selectaÛi Page Setup;
paginilor • selectaÛi butonul

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.

Pt. cumparare viziteaza:


Setarea opt-iunilor
• clic pe meniul File Õi selectaÛi Page Setup;
de tipa7 rire pe • selectaÛi butonul Columns;
coloane • modificaÛi opÛiunile Number of Colums (num|rul coloanelor),
Row Spacing (spaÛierea dintre rânduri) etc. apoi clic pe OK. Pentru
activarea tip|ririi de rapoarte sau etichete pe coloane trebuie ca
valoarea setat| în Number of Colums s| fie mai mare decât 1.

Crearea unui raport folosind AutoReport


• deschideÛi baza de date Northwind Õi efectuaÛi clic pe butonul
Crearea unui
raport de tip Reports;
coloana7 cu • clic pe butonul New;
AutoWizard
0264-401667
NU COPIA !.

sau suna la:

• 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.

Pt. cumparare viziteaza:

• deschideÛi baza de date Northwind Õi efectuaÛi clic pe butonul


Crearea unui
raport de tip Reports;
tabelar cu • clic pe butonul New.
AutoWizard • selectaÛi tabelul sau interogarea care va fi sursa de obiecte Õi de
date. Pentru exemplul prezentat am selectat tabelul Orders;
• selectaÛi AutoReport: Tabular;

0264-401667
NU COPIA !.

sau suna la:

• clic pe butonul OK Õi raportul sub form| de tabel va fi generat Õi afiÕat pe ecran.


192 Introducere în Microsoft Access: Rapoarte - cursul 9

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Crearea unui Raport folosind Generatorul de Rapoarte


(Report Wizard)
• deschideÛi baza de date Northwind;
Crearea unui
raport folosind • clic pe butonul Reports din fereastra bazei de date;
Generatorul de • clic pe butonul New Õi se va afiÕa fereastra de dialog New
Rapoarte Report;
0264-401667
NU COPIA !.

sau suna la:

• selectaÛi tabelul sau interogarea care va fi sursa de date a raportului;


• clic pe Report Wizard;
• clic pe butonul OK;
• urm|toarea pagin| a Generatorului va fi afiÕat|;
193 Introducere în Microsoft Access: Rapoarte - cursul 9

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• clic pe câmpul care doriÛi s| fie inclus în raport, apoi clic pe


Selectarea
câmpurilor care s|geata la dreapta pentru ad|ugarea câmpului în secÛiunea Selected
vor fi incluse în Fields a ferestrei de dialog;
raport • repetaÛi procedura de mai sus pentru toate câmpurile care doriÛi
s| apar| în raport, în figura de mai sus am inclus câmpurile,
CompanyName, ContactName, Address Õi City.
• clic pe butonul Next pentru a continua;

Adaugarea
• nivelele de grupare vor fi discutate mai târziu în cadrul acestui
0264-401667
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:

prima oar| pe baza câmpului CompanyName Õi apoi pe baza câmpului ContactName;


• urm|toarea pagin| a Generatorului permite specificarea formei de afiÕare a raportului;

• puteÛi selecta dintre formele de afiÕare: coloan| (Columnar),


Determinarea
formei de afis-are a tabel (Tabular) Õi aliniat (Justified); 0264-401667
raportului
NU COPIA !.

sau suna la:


195 Introducere în Microsoft Access: Rapoarte - cursul 9

• se poate seta Õi orientarea paginii la portret (Portrait) sau peisaj (Landscape);


• la7 Ûimea câmpurilor se poate ajusta automat încât raportul s| încap| pe pagin|;
• dup| ce aÛi selectat opÛiunile dorite clic pe Next pentru a trece la pagina urm|toare a

http://www.east.utcluj.ro/mb/mep/antal
Generatorului;

• pagina care urmeaz| permite selecÛia unui stil de afiÕarea a


Pentru definirea
stilului raport câmpurilor din raport, pentru exemplul prezentat selectaÛi Compact;
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• dup| ce aÛi selectat stilul, clic pe butonul Next pentru a continua;


• urm|toarea pagin| este Õi ultima ea permiÛând denumirea raportului;

0264-401667
NU COPIA !.

sau suna la:

• introduceÛi la numele raportului RClienÛi;


• implicit este selectat| opÛiunea previzualizare raport (Preview the report);
• clic pe butonul Finish pentru a genera Õi previzualiza raportul.
196 Introducere în Microsoft Access: Rapoarte - cursul 9

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Generatorul de etichete (Label Wizard)


Deseori bazele de date conÛin liste cu adresele firmelor Õi indivizilor care particip| în diferite
tranzacÛii. Unul dintre rapoartele care pot fi create pe baza acestor date specifice sunt
etichetele cu adrese.

• deschideÛi baza de date Northwind;


Crearea unei liste
din fereastra bazei de date selectaÛi butonul Reports;
0264-401667
NU COPIA !.

de etichete •
sau suna la:

• clic pe butonul New Õi se va afiÕa fereastra de dialog New


Report;
• selectaÛi tabelul sau interograrea care va fi sursa de obiecte pentru raport;
197 Introducere în Microsoft Access: Rapoarte - cursul 9

• selectaÛi Label Wizard;


• clic pe butonul OK pentru a continua;

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.

Pt. cumparare viziteaza:

• 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 !.

sau suna la:

• selectaÛi opÛiunile dorite Õi faceÛi clic pe butonul Next pentru a continua;

• urm|toarea pagin| permite definirea câmpurilor care vor fi


Definirea
informat-iilor care incluse în etichet|;
vor fi incluse în
eticheta7
198 Introducere în Microsoft Access: Rapoarte - cursul 9

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;

• aceast| pagin| permite sortarea etichetelor pe baza a unui câmp


Sortarea
câmpurilor din sau a mai multora;
etichete

0264-401667
NU COPIA !.

sau suna la:

• 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.

• clic pe butonul Finish pentru generarea raportului Õi previzualizarea rezultatelor.


Pt. cumparare viziteaza:
Generatorul de Grafice (Chart Wizard)
Uneori este de dorit ca rapoartele s| conÛin| reprezent|ri grafice ale unor mulÛimi de date
stocate în baza de date. Access-ul pune la dispoziÛia utilizatorului generatoare de grafice care
pot fi inserate în rapoarte sau formulare.

• dechideÛi baza de date Northwind Õi din fereastra bazei de date


Crearea unui
raport cu grafic selectaÛi butonul Reports;
• clic pe butonul New Õi ferestra de dialog New Report va fi
afiÕat|;
• selectaÛi tabelul sau interogarea care va fi sursa de date a obiectelor care vor fi
reprezentate grafic. În exemplul urm|tor am selectat Sales by Year;
0264-401667
NU COPIA !.

sau suna la:

• clic pe butonul OK;


200 Introducere în Microsoft Access: Rapoarte - cursul 9

• pe baza procedurii cunoscute deja, ad|ugaÛi toate câmpurile din


Adaugarea de
câmpuri graficului lista Available Fields: în Fields for Chart. Pentru c| este vorba de
toate câmpurile acest efect se poate obÛine Õi printr-o singur| ap|sare a

http://www.east.utcluj.ro/mb/mep/antal
butonului ;

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

• ap|saÛi butonul Next pentru a trece la urm|toarea pagin| a Generatorului;


• aici se afiÕeaz| toate tipurile de grafice pe care le poate crea Generatorul, de unde
utilizatorul trebuie s| selecteze unul dintre tipuri;

0264-401667
NU COPIA !.

sau suna la:

• 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.

Pt. cumparare viziteaza:

• 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 !.

sau suna la:

• dup| ce aÛi fixat modul de prezentare a datelor, clic pe butonul Next;


• ultima pagin| va fi afiÕat|, aici daÛi nume raportului, pentru exemplul nostru acesta va
fi Vânzari pe luni;
202 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, de asemenea, s| decideÛi asupra afiÕ|rii sau neafiÕ|rii legendei graficului;


• clic pe butonul Finish pentru ca Generatorul s| creeze raportul;
Pt. cumparare viziteaza:

Î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:

iar pentru cea de a dou| sub forma:


0264-401667
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:

Nivele de grupare (Grouping Levels) în rapoarte


Cea mai simpl| metod| de grupare a informaÛiilor în rapoarte este folosirea Generatorului de

0264-401667
NU COPIA !.

sau suna la:

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

Grupul permite tratarea unitar| a înregistr|rilor fiind posibil| efectuarea de operaÛii de


însumare, mediere sau num|rare a elementelor unui grup.

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.

Pt. cumparare viziteaza:

• afis- ati fereastra de dialog Sorting and Grouping;


Definirea ordinii
de sortare • clic în primul rând al coloanei cu numele Field/Expresssion,
sa7 geata în jos va fi afis- ata7 ;
• clic pe sa7 geata7 pentru afis- area listei de câmpuri din sursa de
date a raportului (în fereastra de mai sus au fost selectatate câmpurile Nume Contact s- i 0264-401667
IDInfoContact). Aceste nume exista7 , deci pot fi selecate, numai daca7 fac parte din sursa
NU COPIA !.

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.

• Pentru crearea unui antet de grup care sa7 permita7 sorytarea s- i


Crearea unui antet
de grup gruparea pe baza lui Nume Contact:
• afis- at-i fereastra de dialog Sorting and Grouping;
• clic pe Nume Contact din coloana Field/Expression;
• clic pe proprietatea Group Header din partea de jos a ferestrei; sa7 geata în jos va fi
afis- ata7 ;
• clic pe sa7 geata în jos din dreapta, o lista7 de valori posibile va fi afis- ata7 ;
• selectat-i Yes din lista7 , sect-iunea de antet (header section) va fi afis- ata7 în raport.
205 Introducere în Microsoft Access: Rapoarte - cursul 9

Raport init-ial Raport cu antetul Nume Contact

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui

În fereastra Group Properties sunt vizibile urma7 toarele proprieta7 -ti:


Group Header: valoarea Yes creeaza7 antetul grupului, iar valoarea No -sterge antetul;
Group Footer: valoarea Yes creeaza7 sfârs- itul grupului, iar valoarea No s- terge
sfârs- itul;
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

! 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

antetului de grup daca7 sect-iunea detaliilor nu are înregistra7 ri;


- No: nu se face grupare.

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.

• clic pe suprafat-a sect-iunii de ascuns;


• vizualizat-i proprieta7 -tile sect-iunii;
Pt. cumparare viziteaza:
• clic pe proprietatea Visible;
• clic pe sa7 geata în jos, din lista afis- ata7 selecat-i pe No.

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 !.

sau suna la:

Rapoarte f|r| Generator


• deschideÛi baza de date Northwind Õi din fereastra bazei de
Crearea unui
raport fa7 ra7 date selectaÛi butonul Reports;
Generator • clic pe butonul Next pentru afiÕarea ferestrei de dialog New
Report;
• selectaÛi un tabel sau o interogare din list|;
• clic pe opÛiunea Design View;
• clic pe butonul OK;

Access va afiÕa un raport f|r| controale sub forma:


207 Introducere în Microsoft Access: Rapoarte - cursul 9

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

ComutaÛi pe vizualizarea în mod proiectare. AfiÕaÛi cutia cu instrumente (Toolbox) din


meniul View.

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.

Cutia cu instrumente este identic| cu cea de la formulare. Toate


Cutia cu
instrumente tipurile de controale pot fi create cu ajutorul cutiei cu instrumente.

• dac| lista câmpurilor nu este afiÕat| selectaÛi Field List din


Crearea unei cutii
cu text legate meniul View;
• selectaÛi câmpul sau câmpurile în unul din urm|toarele feluri:
208 Introducere în Microsoft Access: Rapoarte - cursul 9

un câmp Clic pe câmp.


un grup de câmpuri Clic pe primul câmp, cu tasta Shift ap|sat|,

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|;

• clic pe pictograma Text Box din Toolbox. Când cursorul a


Crearea unei cutii
cu text folosind ajuns pe suprafaÛa raportului forma lui se va modifica într-un semn +
cutia cu urmat de un dreptunghi care conÛine textul ab*;
ANTAL Tiberiu Alexandru.

instrumente • clic pe raport acolo unde doriÛi s| plasaÛi cutia.


Pt. cumparare viziteaza:
• clic pe pictograma Label din Toolbox;
Crearea unei
etichete • clic pe suprafaÛa raportului, acolo unde doriÛi s| plasaÛi
eticheta;
• introduceÛi textul etichetei.

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.

• selectaÛi Field List din meniul View pentru afiÕarea listei


Crearea unui
control legat câmpurilor;
folosind cutia cu • clic pe instrumentul dorit din Toolbox;
instrumente • selectaÛi un câmp din list| Õi trageÛi-l pe suprafaÛa raportului.
0264-401667
clic dublu pe etichet|;
NU COPIA !.


Modificarea
sau suna la:

textului unei • introduceÛi textul etichetei.


etichete

• poziÛionaÛi cursorul peste cutia cu text Õi selectaÛi-o;


Crearea unei cutii
cu text calculate • introduceÛi o expresie, cursorul va lua forma I, apoi ap|saÛi
Enter.

Setarea propriet|Ûilor raportului


La crearea unui raport, Access presupune anumite valori pentru unele propriet|Ûi pentru
fiecare din controalele Õi pentru secÛiunile raportului Õi raportul în sine. Controalele legate
moÕtenesc propriet|Ûile din tabele sau din interog|rile la care sunt legate. Propriet|Ûile pot fi
setate folosind lista propriet|Ûilor (Property Sheet). Aceasta se poate afiÕa din View,
selectând Properties.
209 Introducere în Microsoft Access: Rapoarte - cursul 9

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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.

Câteva din propriet|Ûile specifice rapoartelor sunt:


HideDuplicate Se foloseÕte pentru ascunderea datelor dintr-un control dac|
acesta are aceeaÕi valoare cu cea din înregistrarea anterioar|.
RunningSum Specific| efectuarea unui sume în cutia cu text. Se poate seta la 0264-401667
valoarea Over Group, când suma se va face pe grupuri.
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:

ObservaÛi c| ea va conÛine numai înregistr|ri care au ca denumire tipurile de contacte:


"telefon" sau "mobil". Dup| ce aÛi salvat interogarea, lansaÛi-o în execuÛie pentru a verifica
dac| informaÛiile afiÕate de aceasta sunt corecte. CopiaÛi obiectul QMobilTelefon sub numele
de QAdreseElectronice Õi modificaÛi interogarea din urm| aÕa încât vizualizat| în mod
proiectare s| fie de forma:

0264-401667
NU COPIA !.

sau suna la:


211

NU COPIA !. Rapoarte

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

http://www.east.utcluj.ro/mb/mep/antal
CreaÛi un raport folosind Generatorul parcurgând etapele din figuri.

sau suna la:


Introducere în Microsoft Access: Rapoarte - cursul 9

0264-401667
212 Introducere în Microsoft Access: Rapoarte - cursul 9

Ap|saÛi butonul Finish Õi primul formular va fi de forma:

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

RedenumiÛi raportul din TContacte în RAdreseElectronice.

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 !.

sau suna la:


213 Introducere în Microsoft Access: Rapoarte - cursul 9

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 !.

sau suna la:


214

NU COPIA !.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

http://www.east.utcluj.ro/mb/mep/antal

sau suna la:

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

Num|rul de coloane (Number of Columns) este setat la 2; La fel cu detaliile (Same as


Detail) determin| dac| fiecare coloan| va avea sau nu aceeaÕi l|Ûime (width) cu cea a
secÛiunii Detail din proiectul raportului; Width - l|Ûimea coloanelor - este setat| la 3;
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

numele Keep Together la Whole


Group.
216

NU COPIA !.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

http://www.east.utcluj.ro/mb/mep/antal

sau suna la:


Introducere în Microsoft Access: Rapoarte - cursul 9

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 urma7 toarele tabele:


Nume tabel Nume câmp Proprieta7 t-i
Elevi IDElev Data type: AutoNumber
Primary Key
Acest curs este proprietatea lui

Nume Data type: Text


Prenume Data type: Text
Adresa Data type: Text
ANTAL Tiberiu Alexandru.

Note IDElevNota Data type: Number


Field Size: Long Integer
Pt. cumparare viziteaza:

Nota Data type: Number


Field Size: Long Integer
Data Data type: Date/Time
IDMaterie Data type: Number
Field Size: Long Integer
Materii IDMaterie Data type: AutoNumber
Primary Key
Materie Data type: Text
0264-401667
Creat-i urma7 toarele relat-ii:
NU COPIA !.

sau suna la:

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.

Pentru crearea primului formular parcurget-i etapele:


218 Introducere în Microsoft Access: Rapoarte - cursul 9

• din Object, selectat-i Forms;


• apoi, New,
AutoForm:Tabular, iar sursa de date

http://www.east.utcluj.ro/mb/mep/antal
va fi tabelul Materii;
• clic pe butonul OK;

Pe ecran va fi afis- at nou formular care


va fi salvat în baza de date sub numele
de Materii atunci când se va realiza
închiderea lui.
Acest curs este proprietatea lui
Înainte de a trece la realizarea celui de
al doilea formular deschidet-i formularul
Materii, salvat mai înainte -si
întroducet-i câteva materii în el.

Tabelul Note nu cont-ine, explicit,


ANTAL Tiberiu Alexandru.

numele materiei pentru care s-a da nota


ci doar un cod al ei. Pentru ca în locul
Pt. cumparare viziteaza:
acestui cod sa7 fie afis- ata7 denumirea
materiei corespunza7 toare din Materii,
vom crea un Lookup. Urma7 toarele
etape trebuie parcurse:

• din Objects, selectat-i Tables;


• clic pe Design, apoi slectat-i
câmpul IDMaterie;
• în lista proprieta7 -tilor câmpului
(Field Properties), clic pe Lookup;
• clic pe va valoarea proprieta7 -tii
Display Control, o sa7 geata în jos va fi 0264-401667
afis- ata7 în dreapta;
NU COPIA !.

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

În figura urma7 toare, observat-i ca7 , dintre


cele patru câmpuri tabelului elevi, au
fos selectate câmpurile Nume,
Prenume s- i Adresa pentru a fi puse
ANTAL Tiberiu Alexandru.

în formular. Între tabelul Elevi -si tabelul


Note este o relat-ie unu-la-mult-i prin
Pt. cumparare viziteaza:
intermediul câmpurilor IDElev s- i
IDElevNota. Generatorul de formulare va -tine cont de aceasta7 relat-ie, iar daca7 în aceasta7
etapa7 , din Tables/Querie se va selecta tabelul Note s- i vor fi trecute în Selected Fields s- i
câmpurile Nota, Data -si IDMaterie, ale lui Note, generatorul va crea automat un
subformular cu aceste câmpuri.

0264-401667
NU COPIA !.

sau suna la:

În final, aceasta pagina7 a generatorului,


în care se vor selecta câmpurile de afis- at
pe suprafat-a formularului trebuie sa7
arate astfel:
220 Introducere în Microsoft Access: Rapoarte - cursul 9

• clic pe Finish.

http://www.east.utcluj.ro/mb/mep/antal
Pe ecran se va afis- a formularul:

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


Observat-i ca pentru câmpurile corespunza7 toare tabelului Note s-a creat, automat, un
subformular. Daca7 dorit-i ca în subformular, în loc de IDMaterie, sa7 fie afis- at textul Materie,
trecet-i în modul proiectare s- i modificat-i denumirea etichetei (label) câmpului IDMaterie
de la IDMaterie la Materie.

Pentru ca acest formular sa7 afis- eze media pe semestrul unu s- i pe semestrul doi a elevilor

Datas11

Datas12 0264-401667
NU COPIA !.

sau suna la:

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

calculat dupa7 formula:

=DSum("[Nota]","Note", "[IDElevNota] = " & [IDElev] & " AND

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.

Pt. cumparare viziteaza:

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

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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 .

• plasat-i un control Unbound, de tipul Text Box, în dreapta


Numerotarea
înregistra7 rilor unei controlului Nota;
sect-iuni • modificat-i urma7 toarele proprieta7 -ti:

Nume proprietate Valoare Semnificat-ie


Control Source =1 Numele câmpului sau expresia folosita7 pentru
calcularea valorii. În cazul nostru controlul
primes- te valoarea expresiei constante 1.
Format #) Formatul folosit pentru afis- area valorii
controlului. În cazul nostru se va afis- a valoarea
numerica7 urmata7 de caracterul ")".
224 Introducere în Microsoft Access: Rapoarte - cursul 9

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.

ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

Î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.

Pt. cumparare viziteaza:

• creat-i un nou control în antetul grupului (sau în sfâts- itul lui);


introducet-i expresia =Sum([Nota])/Count([Nota]) în proprietatea Control

0264-401667
NU COPIA !.

Source; Nota trebuie sa7 fie un nume de câmp valid din sursa de date; modificat-i proprietatea
sau suna la:

Format la #.00.

Pentru exemplul prezentat, controlul a fost introdus în antetul grupului IDMaterie


(IDMaterie Header). Funct-ia Sum() realizeaza7 însumarea valorilor acestui control, la nivel
de grup, iar funct-ia Count() va numa7 ra înregistra7 rile grupului.

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 !.

sau suna la:


227 Introducere în Microsoft Access: Rapoarte - cursul 9

• în sect-iunea Nume Footer, realizat-i o copia a controlului care realizeaza7 calculul


mediei aritmetice, apoi modificat-i proprietatea Control Source la
=[SumaMedii]/[ContorMaterii].

http://www.east.utcluj.ro/mb/mep/antal
Rezultatele vor fi afis- ate astfel:

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


228 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Obiectivele cursului 10

http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:

! cum s-a n|scut limbajul de programare BASIC Õi ce este VBA;


! ce este programarea orientat| pe evenimente;
! ce sunt procedurile de evenimente;
Acest curs este proprietatea lui
! ce sunt Õi cum se definesc procedurile utilizator;
! ce sunt variabilele Õi cum se declar|;
! care sunt tipurile de date în VBA;
! ce sunt constantele simbolice Õi intrinseci;
ANTAL Tiberiu Alexandru.

! care sunt operatorii limbajului VBA;


Pt. cumparare viziteaza:
! care sunt instrucÛiunile limbajului VBA;
! ce este o clas| VBA Õi cum se defineÕte aceasta;
! ce este o colecÛie VBA.

0264-401667
NU COPIA !.

sau suna la:


229 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Limbajul de programare Visual Basic for Applications


BASIC sau Beginner's All-purpose Symbolic Instruction Code este un
Începuturile
limbajului BASIC limbaj simplu, creat de John G. Kemeny Õi Thomas E. Kurtz de la

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.

Visual Basic pentru AplicaÛii - VBA - a fost transformat de firma


Renas-terea BASIC-
ului Microsoft în limbajul de programare al întregii familii de produse
Microsoft Office (Access, Excel, Word, PowerPoint). Nucleul
limbajului, componentele sale Õi mediul sunt aceleaÕi pentru toate
aceste aplicaÛii, oferind în plus, faÛ| de macro comenzi urm|toarele facilit|Ûi:
1. apelarea funcÛiilor API;
2. tratarea erorilor;
3. manipularea datelor din baz| sub controlul unor instrucÛiuni folosind metode de acces
la date specifice sau generale;
4. manipularea structurii bazei de date prin program. 0264-401667
NU COPIA !.

sau suna la:

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|.

Programarea orientat| pe evenimente


În programarea procedural| tradiÛional|, controlul evoluÛiei programului este determinat chiar
de el însuÕi. ExecuÛia începe cu prima instrucÛiune Õi urmeaz| o linie secvenÛial| sau cu
salturi, funcÛie de instrucÛiunile programului. În programarea orientat| pe evenimente,
acÛiunile utilizatorului sau ale sistemului pe care se execut| programul genereaz| evenimente.
Pentru a cunoaÕte care porÛiune de cod este executat|, trebuie s| Õtim ce eveniment a ap|rut,
iar dac| sunt mai multe, ordinea lor de apariÛie. Putem spune c| porÛiunea de cod executat|
depinde de acÛiunile utilizatorului, aceasta fiind esenÛa interfeÛelor grafice cu utilizatorul Õi a
program|rii orientate pe evenimente. Pentru c| nu se poate Õti ce va face utilizatorul, codul
trebuie s| fac| anumite presupuneri cu privire la starea mediului în care funcÛioneaz|. Din
acest motiv codul fie testeaz| dac| presupunerile f|cute sunt corecte, fie le aranjeaz| într-o
ordine în care acestea s| fie întotdeauna corecte.
230 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Proceduri de evenimente (Event Procedures)


Când Access-ul recunoaÕte apariÛia unui eveniment de formular, raport sau control, apeleaz|
automat procedura de eveniment denumit| dup| numele obiectului Õi al evenimentului care a

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.

Tip obiect Numele procedurii de eveniment


Formular Sub Form_numeeveniment()
Pt. cumparare viziteaza:
instrucÛiuni
End Sub

Raport Sub Report_numeeveniment()


instrucÛiuni
End Sub
Control Sub NumeControl_numeeveniment()
instrucÛiuni
End Sub

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:

reprezint| codul scris de programator prin care se trateaz| evenimentul ap|rut.

Proceduri definite de utilizator (General Procedures)


Procedurile de evenimente sunt apelate automat când apare evenimentul corespunz|tor
acestora. Access-ul permite crearea de proceduri definite de utilizator, care trebuie apelate
explicit, prin cod, pentru ca s| fie executate. Acestea nu sunt legate de evenimentele generate
de utilizator, ci mai degrab| de anumite grupuri de linii de program care se repet| în mai
multe locuri. Pentru eliminarea duplic|rii acestor linii se folosesc proceduri de tipul funcÛie
(Function) sau subrutin| (Sub). Procedurile utilizator pot fi create oriunde în formulare,
rapoarte sau module (Modules). Modulul este un obiect Access care stocheaz| numai
proceduri definite de utilizator. Procedurile din module pot fi referite din orice alte obiecte
Access, în timp, permiÛând scrierea unor biblioteci de proceduri utile pentru rezolvarea unor
sarcini care se repet| des.

• deschideÛi baza de date Northwind;


Crearea unui
proceduri • clic pe butonul Modules din fereastra bazei de date;
231 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

• clic pe butonul New pentru a crea un modul nou;


• din meniul Insert selectaÛi Procedure..., fereastra de dialog Insert Procedure va fi
afiÕat| dup| cum urmeaz|:

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.

Pt. cumparare viziteaza:

Access-ul va crea corpul unei funcÛii cu numele DatadeAzi. Dac| în loc de tipul de
0264-401667
NU COPIA !.

subprogram Function selectaÛi opÛiunea Sub, Access-ul va crea un subprogram de tipul


sau suna la:

subrutin|.

• deschideÛi baza de date;


Editarea
procedurilor • clic pe butonul Modules;
existente • selectaÛi din list| numele modului care doriÛi s|-l editaÛi;
• clic pe Design.

Proceduri de tip Sub Õi Function


În Access procedurile pot fi de tipul Sub sau Function. Procedura Sub nu întoarce valoare
fiind asem|n|toare unei instrucÛiuni. Procedurile de eveniment sunt întotdeauna de tipul Sub.
Procedura Function întoarce o valoare. Atunci când se calculeaz| valori de expresii tipul
procedurii va fi Function.

Procedura de tip Sub


Sintaxa procedurii Sub este:
232 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Sub numeprocedur|(parametri)
[instrucÛiuni]
[Exit Sub]

http://www.east.utcluj.ro/mb/mep/antal
[instrucÛiuni]
End Sub

Numele procedurii este numeprocedur|, instrucÛiunile instrucÛiuni grupate sub acest


nume se numesc corpul procedurii. parametri sunt o list| de nume de parametri separate prin
virgule. Fiecare parametru respect| sintaxa declaraÛiei de variabil| Õi este echivalentul unei
variabile în corpul procedurii. Sintaxa pentru fiecare parametru este:
Acest curs este proprietatea lui

[ByVal] numevariabil| [()] [As tip]

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:

Procedura de tipul Sub se apeleaz| prin numele ei Õi prin specificarea


Apelul lui Sub
parametrilor ei. De exemplu, procedura Sub cu numele Numara:

Public Sub Numara(ByVal n As Integer)


Dim i As Integer
For i = 1 To n
Debug.Print i
Next i
End Sub

va fi apelat| prin Numara 5 (observaÛi c| nu se pun paranteze în jurul argumentelor). 0264-401667


ExecuÛia procedurii Õi rezultatele ei se pot afiÕa în fereastra imediat|. Se apas| Ctrl+G, apoi
NU COPIA !.

în ferestr| se scrie Numara 5 dup| care se apas| Enter.


sau suna la:

InstrucÛiunile din corpul lui Sub sunt executate secvenÛial, dac| se


Ies-irea fort-ata7 din
Sub doreÕte p|r|sirea procedurii Sub înainte de execuÛia ultimei
instrucÛiuni se poate folosi instrucÛiunea opÛional| End Sub. Aceasta
are ca efect revenirea din procedur|. În corpul procedurii, num|rul de
End Sub-uri nu este limitat.

Procedura de tip Function


Sintaxa procedurii Function este:

Function numeprocedur|(parametri) [As tip]


[instrucÛiuni]
[Exit Function]
[instrucÛiuni]
End Function
233 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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

Public Function ArieCerc(R As Double) As Double


Dim pi As Double
pi = 4# * Atn(1#)
ArieCerc = pi * R ^ 2
End Function
ANTAL Tiberiu Alexandru.

Apelul procedurii Function se face sub forma: x=ArieCerc(5).


Pt. cumparare viziteaza:

InstrucÛiunile din corpul lui Function sunt executate secvenÛial, dac|


Ies-irea fort-ata7 din
Function se doreÕte p|r|sirea procedurii Function înainte de execuÛia ultimei
instrucÛiuni se poate folosi instrucÛiunea opÛional| End Function.
Aceasta are ca efect revenirea din procedur|. În corpul procedurii,
num|rul de End Function-uri nu este limitat.

Proceduri private (Private) Õi publice (Public)


Procedurile unui formular sau raport sunt private, adic| pot fi folosite numai în expresii ale
codului conÛinut de formularul sau raportul în cauz|. Procedurile unui modul sunt publice, pot
fi apelate din orice porÛiune a aplicaÛiei, mai puÛin în cazul în care au fost f|cute private prin
folosirea lui Private înaintea de Sub sau Function. Pentru c| procedurile formularelor Õi 0264-401667
rapoartelor sunt private este posibil s| se scrie proceduri cu acelaÕi nume în formulare sau
NU COPIA !.

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

Dim numevariabil| [As tip]

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.

Scop Õi durat| de existenÛ| 0264-401667


Când o variabil| este declarat| într-o procedur|, numai codul din acea procedur| poate citi sau
NU COPIA !.

sau suna la:

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:

Locul declaraÛiei Scop


Dim în procedur| Local
Dim în formular, procedur| sau modul Formular, procedur| sau modul
Public în modul Global

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|.

Variabilele Variant au valoarea Empty din momentul în care s-au


Valoarea Empty
declarat Õi pân| când le-am atribuit o valoare. Aceasta este o valoare
special| care ne permite s| verific|m dac| pân| în acel moment am
atribuit o valoare variabilei respective Õi se poate testa prin funcÛia IsEmpty(). Folosirea unui
Variant cu valoarea Empty într-o expresie este echivalent| cu valoarea numeric| 0. Dup| ce
variabila Variant a primit o valoare, valoarea Empty dispare. Fiind o valoare, dar una
0264-401667
NU COPIA !.

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.

Variabila Variant poate conÛine valoarea special| Null. Aceasta se


Valoarea Null
foloseÕte în baza de date pentru a marca datele lips| sau necunoscute.
Câmpurile Õi controalele care nu au fost iniÛializate au valoarea
implicit| Null. Dac| doriÛi s| fiÛi siguri c| un control sau un câmp are date trebuie s| verificaÛi
dac| nu conÛin valoarea Null. Pentru aceasta folosiÛi funcÛia IsNull(). Null are câteva
propriet|Ûi interesante:
1. expresiile care conÛin Null dau valoarea Null. Din acest motiv se zice c| Null se
propag| prin expresie, dac| orice parte a ei este Null, toat| expresia va fi Null;
2. majoritatea funcÛiilor care primesc un argument Null întorc valoarea Null;
3. valoarea Null poate fi atribuit| unei variabile Variant.

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

Tip SpaÛiu de Domeniu Valoare


stocare iniÛial|

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:

Currency 8 octeÛi -922,337,203,685,477.5808 la 0


922,337,203,685,477.5807
Decimal 14 octeÛi +/-79,228,162,514,264,337,593,543,950,335 0
f|r| punct zecimal;
+/-7.9228162514264337593543950335 cu 28
de zecimale;
cel mai mic num|r nenul este
+/-0.0000000000000000000000000001

Tipul Õir
Variabilele care conÛin un text se declar| de tipul Õir (String).
0264-401667
NU COPIA !.

sau suna la:

Dim sir As String

Ô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.

Tipul parametru de procedur|


Dac| procedura are specificate tipuri pentru parametri, în apelul procedurii argumentele
trebuie s| fie valori sau variabile de acel tip. Un parametru se poate declara folosind ByVal
pentru a specifica c| argumentul se transfer| prin valoare Õi nu prin referinÛ|. Când un
argument este transferat prin valoare, o copie a acestuia se transfer| procedurii. Dac|
procedura modific| valoarea, modificarea va afecta numai copia valorii Õi nu valoarea
original| a variabilei. Dac| argumentul este transferat prin referinÛ|, valoarea acestuia se poate
modifica prin instrucÛiunile din procedur|. Dac| nu dorim ca o procedur| s| modifice valorile
0264-401667
NU COPIA !.

argumentelor folosiÛi ByVal la declararea acestora.


sau suna la:

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.

Dim X(21) As Double 'tablou cu numele X de 1 dimensiune


'cu 23 elemente de tipul Double,
'indicele ia valori în domeniul 0,
Acest curs este proprietatea lui

'22.

Public Y(15) As Byte 'tablou public cu numele Y de 1


'dimensiune cu 15 elemente de tipul
'Byte, indicele ia valori în
ANTAL Tiberiu Alexandru.

'domeniul 0, 15.

ObservaÛi c| prima valoare a indicelui este 0, aceast| valoare implicit| se poate schimba
Pt. cumparare viziteaza:

folosind instrucÛiunea Option Base în secÛiune de declaraÛii (Declarations) modulului. De


exemplu, pentru ca toÛi indicii tablourilor unui modul s| plece de la 1 scriem Option Base
1. Un alt mod de specificare a limitei inferioare a indicelui este folosirea lui To:

Dim A(1 To 10) As Integer


Dim Y(10 To 22) As Double

Tablouri cu mai multe dimensiuni


Cazul cel mai comun este tabloul cu dou| dimensiuni care uneori este numit Õi matrice. Un
tablou cu 2 dimensiuni, cu 10 elemente pe dimensiune, la care îi mai spunem Õi matrice de
10x10 se declar| astfel: 0264-401667
NU COPIA !.

Dim Matrice(9,9) As Double


sau suna la:

sau

Dim Matrice1(1 To 10, 1 To 10) As Double

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:

Dim Tablou3D(5, 1 To 7, 3 To 6) As Double

Alocarea dinamic| a spaÛiului pentru stocarea tablourilor


Uneori nu se cunoaÕte num|rul de elemente ale unei dimensiuni de tablou. În acest caz este de
dorit s| avem posibilitatea specific|rii în mod dinamic a num|rului de elemente pe
dimensiune. Un tablou dinamic poate fi redimensionat oricând spre deosebire de cel static
care are are num|rul de elemente fixate. Etapele lucrului cu un tablou dinamic sunt:
1. declaraÛia: un tablou dinamic se declar| astfel: Dim Adina() As Double.
2. alocarea de spaÛiu: se face prin folosirea lui ReDim Adina(Nr_de_elemente),
239 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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.

Dim Matrice() As Integer

...
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.

Preserve ReDim Matrice(20,30+i)

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:

[Public|Private] Const numeconstant| [As tip] =expresie 0264-401667


NU COPIA !.

sau suna la:

Î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.

modulo Mod a Mod b a Õi b se rotunjesc la întregi dup| care se


calculeaz| restul împ|rÛirii lui a la b.
Pt. cumparare viziteaza:

Operatori de comparaÛie
Se folosesc pentru compararea expresiilor.

SemnificaÛie Simbol Exemplu Remarc|


mai mic < a<b Expresia din exemplu ia valoarea True dac| a
< b, altfel False.
mai mic sau egal <= a<=b Expresia din exemplu ia valoarea True dac| a
<= b, altfel False.
mai mare > a>b Expresia din exemplu ia valoarea True dac| a
0264-401667
NU COPIA !.

> b, altfel False.


sau suna la:

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

SemnificaÛie Simbol Exemplu Remarc|


concatenare & a&b a Õi b trebuie s| fie Õiruri, altfel se convertesc în

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

SemnificaÛie Simbol Exemplu Remarc|


ÔI logic sau And a > b And b > c Expresiile asupra c|rora acÛioneaz|
pe biÛi operatorul sunt valori de adev|r, în acest
ANTAL Tiberiu Alexandru.

caz se execut| ÔI logic.


a Õi b sunt numere, operatorul ÔI va
Pt. cumparare viziteaza:
a And b
lucra la nivel de biÛi.
SAU logic Or a > b Or b> c Expresiile asupra c|rora acÛioneaz|
sau pe biÛi operatorul sunt valori de adev|r, în acest
caz se execut| SAU logic.
a Or b a Õi b sunt numere, operatorul SAU va
lucra la nivel de biÛi.
NU logic sau Not Not (a >b) NU logic.
pe biÛi
Not a NU pe biÛi.

Tabela de adev|r pentru And logic Tabela de adev|r pentru And pe biÛi
0264-401667
NU COPIA !.

sau suna la:

And True False Null And 1 0


True True False Null 1 1 0
False False False False 0 0 0
Null Null False Null

Tabela de adev|r pentru Or logic Tabela de adev|r pentru Or pe biÛi


a Õi b sunt valori de adev|r True sau False a Õi b sunt valori de biÛi (0, 1)
Or True False Null Or 1 0
True True True True 1 1 1
False True False False 0 1 0
Null True Null Null
242 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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.

Controlul execuÛiei programului


Controlul execuÛiei programului se face prin instrucÛiuni. Cea mai elementar| instrucÛiune este
ANTAL Tiberiu Alexandru.

cea de atribuire, urmeaz| apoi cele de decizie Õi cele de ciclare.


Pt. cumparare viziteaza:
InstrucÛiunea Let
Realizeaz| atribuirea valorii unei expresii unei variabile sau propriet|Ûi.

[Let] numevariabil| = expresie

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 !.

sau suna la:

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.

InstrucÛiuni pentru decizie


Aceste instrucÛiuni permit testarea unor condiÛii Õi în funcÛie de rezultatul testului s| execute
anumite porÛiuni de cod. InstrucÛiunile de decizie în VBA sunt:

# 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

pot folosi dou| forme de scriere:

If condiÛie Then instrucÛiune

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.

Select Case expresietest


[Case listaexpresie1
[instrucÛiuni_1]]
[Case listaexpresie2
[instrucÛiuni_2]] ...
[Case Else
[instrucÛiuni_n]]
End Select
244 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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:

Do [{While |Until} condiÛie]


[instrucÛiuni]
[Exit Do] 0264-401667
[instrucÛiuni]
NU COPIA !.

sau suna la:

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

Ciclul For Each...Next


Repet| un grup de instrucÛiuni pentru fiecare element de tablou sau colecÛie.

For Each element In grup


0264-401667
NU COPIA !.

[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.

Tipuri de date definite de utilizator


Acest curs este proprietatea lui

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.

aceste date pot fi stocate în variabile simple astfel:


Pt. cumparare viziteaza:
Dim ID As Long
Dim ContClient As String
Dim Valoare As Currency
Dim DFactura As Date
Dim DAmanare As Date
Dim DPlata As Date
Dim Expirata As Boolean

Aceast| abordare are câteva probleme:


! dac| se lucreaz| cu mai multe facturi simultan, trebuie create câte un set de
variabile pentru fiecare factura, acesta fiind un dezavantaj clar;
! nu exist| un mecanism intern pentru verificarea Õi manipularea datelor stocate 0264-401667
în aceste variabile.
NU COPIA !.

sau suna la:

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

Dim TestFactura As Factura


247 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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.

Crearea unei modul clas|


• din fereastra bazei de date selectaÛi Modules;
• clic pe butonul New; 0264-401667
• din Insert selectaÛi Class Module;
NU COPIA !.

folosit-i proprietatea Name pentru a modifica numele clasei de la Class1 la


sau suna la:


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:

Dim Factura As New CFactura

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.

Definirea membrilor data7


Când se atribuie o valoare unei proprieta7 -ti din obiect, valoarea este stocata7 într-o variabila7
interna7 care este accesibila7 numai respectivului obiect. Un utilizator al obiectului poate
manipula doar proprieta7 -tile expuse, astfel datele specifice obiectului sunt protejate contra
manipula7 rilor directe -si, eventual, gres- ite.
248 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

Implementarea propriet|Ûilor clasei


Cel de al doilea pas consta7 în definirea proprieta7 -tilor clasei. La fel ca -si în cazul membrilor
data, ideea sta7 în crearea unei proprieta7 -ti pentru fiecare articol de informat-ie stocat|. Acest
pas are dou| etape pentru fiecare proprietate:
! stabilirea mecanismului pentru întoarcerea valorii curente a propriet|Ûii Õi
! un mecanism, opÛional, pentru modificarea valorii propriet|Ûii.

Aceste "mecanisme" se implementeaz| printr-un grup special de funcÛii VBA folosind


cuvintele cheie Property Get Õi Property Set.

Modul de lucru cu Property Get


Property Get se foloseÕte pentru întoarcerea valorii curente a unei propriet|Ûi. Formatul
general pentru aceast| proprietate este:
249 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Public Property Get numeproprietate( ) As tipdedat|


[instrucÛiuni]
numeproprietate = m_membrudat|

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

Pentru exemplul nostru, propriet|Ûile Property Get folosite sunt:

Private m_ID As Long


Private m_ContClient As String
ANTAL Tiberiu Alexandru.

Private m_Valoare As Currency


Private m_DFactura As Date
Private m_DAmanare As Date
Pt. cumparare viziteaza:
Private m_DPlata As Date
Private m_Expirata As Boolean

' Intoarce valoarea curenta a valorii proprietatii CFactura.ID


Public Property Get ID() As Long
ID = m_ID
End Property

' Intoarce valoarea curenta a proprietatii CFactura.ContClient


Public Property Get ContClient() As String
ContClient = m_ContClient 0264-401667
NU COPIA !.

End Property
sau suna la:

' Intoarce valoarea curanta a proprietatiui CFactura.Valoare


Public Property Get Valoare() As Currency
Valoare = m_Valoare
End Property

' Intoarce valoarea curenta a proprietatii CFactura.DFactura


Public Property Get DataFactura() As Date
DataFactura = m_DFactura
End Property

' Intoarce valoarea curenta a proprietatii CFactura.DPlata


Public Property Get DataPlata() As Date
DataPlata = m_DPlata
End Property
250 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

' Intoarce valoarea curenta a proprietatii CFactura.Expirata


Public Property Get EsteExpirata() As Boolean
EsteExpirata = m_Expirata

http://www.east.utcluj.ro/mb/mep/antal
End Property

Modul de lucru cu Property Let


Cu excepÛia cazului în care doriÛi ca proprietatea s| poat| fi, doar citit|, trebuie definit| o
procedur| care permite atribuirea unei noi valori propriet|Ûii. În acest scop se va folosi o
procedur| Property Let care are forma general|:

Public Property Let numeproprietate(ValoareNou| As tipdedat|)


Acest curs este proprietatea lui

[instrucÛiuni]
m_membrudat| = ValoareNou|
End Property

La fel ca Õi înainte numeproprietate este numele propriet|Ûii, de asemenea, ValoareNou|


ANTAL Tiberiu Alexandru.

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|.

Pentru CFactura, propriet|Ûile Property Let sunt:

' Modifica valoarea proprietatii CFactura.ContClient


Public Property Let ContClient(ContClient As String)
m_ContClient = ContClient
End Property

' Modifica valoarea proprietatii CFactura.Valoare 0264-401667


Public Property Let Valoare(Cantitate As Currency)
NU COPIA !.

sau suna la:

If Cantitate < 0 Then


Cantiate = 0
MsgBox "Nu se poate introduce o cantitate < 0 de bani"& _
Chr(13) _
& "$0.00 se va folosi in locul valorii introduse."
End If
m_Valoare = Cantitate
End Property

' Modifica valoarea proprietatii CFactura.DFactura


Public Property Let DataFactura(DF As Date)
If DF < Date Then
DF = Date
MsgBox "Nu se poate introduce o factura in trecut!" & _
Chr(13) _
251 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

& "Data de azi va fi folosita in locul celei introduse."


End If
m_DFactura = DF

http://www.east.utcluj.ro/mb/mep/antal
m_DAmanare = m_DFactura + 30
End Property

' Modifica valoarea proproetatii CFactura.DPlata


Public Property Let DataPlata(DP As Date)
m_DPlata = m_DPlata
m_Expirata = False
Acest curs este proprietatea lui
End Property

Propriet|Ûile Property Let ContClient, Property Let ID permit modificarea


membrilor dat| m_ContClient, m_ID f|r| a realiza verificarea noilor valori. Proprietatea
Property Let DataFactura permite modificarea datei facturii numai dac| aceasta este
ANTAL Tiberiu Alexandru.

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:

ObservaÛi c| nu exist| proceduri Property Let pentru propriet|Ûile ID Õi


EsteExpirata, astfel ele devin propriet|Ûi care pot fi doar citite (read-only).

Crearea metodelor clasei


Orice obiect are Õi un grup de metode care acÛioneaz| asupra obiectului. În acest scop, în
cadrul clasei, trebuie s| definim proceduri Sub sau Function de tipul Public pentru ca s|
fie vizibile extern. În cazul exemplului prezentat, se poate scrie o procedur| Sub care s|
actualizeze valoarea lui m_Expirata dup| cum data curent| este mai mare sau mai mic|
decât data amân|rii de plat| sub forma:

' Defineste metoda CFactura.Actualizare


0264-401667
NU COPIA !.

sau suna la:

Public Sub Actualizare()


If m_DAmanare < Date And m_DPlata = 0 Then
m_Expirata = True
End If
End Sub

Definirea evenimentelor clasei


Clasele definite de utilizator suport| lucrul cu dou| evenimente: Initialize Õi
Terminate.

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:

Private Sub Class_Initialize( )


[codul de iniÛializare se pune aici]
End Sub
Acest curs este proprietatea lui

În cazul nostru, procedura care urmeaz|, iniÛializeaz| pe:


! m_ID cu un num|r aleator format din 5 cifre;
! m_DFactura cu data curent|;
! m_DAmanare cu 30 de zile dup| data curent|.
ANTAL Tiberiu Alexandru.

' Aceasta procedura este lansata in executie la aparitia


Pt. cumparare viziteaza:
' evenimentului de clasa "Initialize"
Private Sub Class_Initialize()
Randomize
m_ID = Int((99999 - 10000) * Rnd + 10000)
m_DFactura = Date
m_DAmanare = m_DFactura + 30
End Sub

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:

Private Sub Class_Terminate( )


[codul pentru terminare se pune aici]
End Sub

Utilizarea clasei
Codul care urmeaz| se va crea într-un modul Õi permite verificarea funcÛion|rii clasei.

Public Sub TestCFactura()


Dim test As New CFactura
Debug.Print "ID = "; test.ID
test.ID = 1234
Debug.Print "ID = "; test.ID
Debug.Print "Data facturii ="; test.DataFactura
253 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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

El se va lansa în execuÛie din fereastra imediat| (Ctrl+G).


Acest curs este proprietatea lui

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.

Crearea unei colecÛii VBA


Întrucât colecÛiile sunt obiecte, ele se creeaz| asemenea obiectelor. Prima oar| se declar| o
variabil| obiect care se va folosi ca referinÛ| la colecÛie, apoi, se foloseÕte Set pentru a crea o
referinÛ| de la variabila obiect colecÛie. Codul, principial, este de forma:

Dim Facturi As Collection


0264-401667
NU COPIA !.

Set Facturi = New Collection


sau suna la:

Propriet|Ûile Õi metodele obiectului colecÛie


Obiectul colecÛie are o structur| foarte simpl| având o singur| proprietate Õi trei metode
prezentate în tabelul urm|tor:

Nume Tip Descriere


Count proprietate Specific| num|rul articolelor din colecÛie
Add metod| Se foloseÕte pentru ad|ugarea unui articol la colecÛie
Remove metod| Se foloseÕte pentru Õtergerea unui articol din colecÛie
Item metod| Se foloseÕte pentru referirea unui articol din colecÛie; este
metoda implicit|

Ad|ugarea unui articol la colecÛie


254 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Metoda Add se foloseÕte pentru ad|ugarea unui articol în colecÛie, ea are forma general|:

Collection.Add Articol [, Cheie] [, Înainte] [, Dup|]

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:

Dim testi As New Collection


Dim test1 As New CFactura
Dim test2 As New CFactura
Dim test3 As New CFactura
Acest curs este proprietatea lui

test1.ContClient = "ab-1234"
test2.ContClient = "bc-5555"
test3.ContClient = "ab-3334"

testi.Add test1, "unu"


ANTAL Tiberiu Alexandru.

testi.Add test2, "doi"


testi.Add test3, "trei"
Pt. cumparare viziteaza:
Set test1 = Nothing
Set test2 = Nothing
Set test3 = Nothing
Set testi = Nothing

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.

Referirea unui obiect


Obiectele colecÛiei pot fi referite printr-un num|r sau valoarea cheii. Când articolele se refer|
0264-401667
NU COPIA !.

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

Parcurgerea articolelor colecÛiei


Cel mai eficient mod de parcurgere a colecÛiei este folosirea instrucÛiunii For Each.

Dim test As CFactura 'variabila obiect de tipul CFactura

For Each test In testi


Debug.Print test.ContClient
Next test

Ôtergerea obiectelor individuale


255 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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"

Ôtergerea tuturor obiectelor


O metod| pentru Õtegerea tuturor obiectelor din cloecÛie este parcurgerea ei Õi apelarea
metodei Remove pentru fiecare articol. Exist| îns| Õi o metod| mai rapid| în care se
reatribuie obiectul colecÛie unei noi colecÛii:
Acest curs este proprietatea lui
Set testi = New Collection

Eliberarea spaÛului folosit pentru stocarea variabilei obiect


ColecÛiile sunt obiecte, din acest motiv spaÛiul folosit pentru stocarea variabilei colecÛie
trebuie Õi el eliberat prin codul:
ANTAL Tiberiu Alexandru.

Set testi = Nothing


Pt. cumparare viziteaza:
Pentru testarea secvenÛelor de cod prezentate se va folosi procedura:

Public Sub TestCFacturi1()


Dim testi As New Collection
Dim test1 As New CFactura
Dim test2 As New CFactura
Dim test3 As New CFactura
Dim test As CFactura

test1.ContClient = "ab-1234"
test2.ContClient = "bc-5555" 0264-401667
test3.ContClient = "ab-3334"
NU COPIA !.

sau suna la:

testi.Add test1, "unu"


testi.Add test2, "doi"
testi.Add test3, "trei"

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

Set testi = New Collection

Set testi = Nothing


Acest curs este proprietatea lui

End Sub

Lansarea ei în execuÛie Õi afiÕarea rezultatelor se fac din fereastra imediat|.


ANTAL Tiberiu Alexandru.

Crearea unei clase pentru manipularea colecÛiilor


Codul care urmeaz| implementeaz| o clasa pentru manipularea unei colecÛii. Pentru aceasta se
va crea o clas| nou| care va avea proprietatea Name seat| la CFacturi Õi urm|torul cod:
Pt. cumparare viziteaza:

Option Explicit

' Membru data


Private m_Facturi As New Collection

' Intoarce proprietatea CInvoices.Contor


Public Property Get Contor() As Long
Contor = m_Facturi.Count
End Property
0264-401667
NU COPIA !.

Public Property Get Facturi() As Collection


sau suna la:

Set Facturi = m_Facturi


End Property

' Functia este versiunea romana pentru metoda Add


Public Function Adauga(CClient As String, ValFact As _
Currency) As CFactura
Dim facturaNoua As New CFactura
With facturaNoua
.ContClient = CClient
.Valoare = ValFact
m_Facturi.Add Item:=facturaNoua, Key:=CStr(.ID)
End With
Set Adauga = facturaNoua
End Function
257 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

' Versiunea romana pentru metoda Item


Public Function Articol(Index As Variant) As CFactura
Set Articol = m_Facturi.Item(Index)

http://www.east.utcluj.ro/mb/mep/antal
End Function

' Versiunea romana pentru metoda Remove


Public Sub Sterge(Index As Variant)
m_Facturi.Remove Index
End Sub
Acest curs este proprietatea lui
Pentru testarea clasei se va folosi procedura:

1 Public Sub TestCFacturi2()


2 Dim testi As New CFacturi
3 Dim test As CFactura
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

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.

Modul de lucru cu Property Set


Pentru a atribui o colecÛie propriet|Ûii Facturi trebuie folosit| o procedur| Property
Set. Acest tip de procedur| se foloseÕte pentru atribuirea unui obiect la o proprietate Õi are
urm|torul format:

Public Property Set numeproprietate(ObiectNou As tipdedat|)


[instrucÛiuni]
Set m_membrudat| = ObiectNou
End Property
258 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

numeproprietate este numele propriet|Ûii, ObiectNou esteobiectul pe care dorim s|-l


atribuim, tipdedat| este tipul de dat| al obiectului, iar m_membrudat| este variabil| membru
dat| obiect.

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.

Option Compare Database


Option Explicit
Acest curs este proprietatea lui
Private m_ContClient As String
Private m_NumeClient As String
Private m_AdresaClient As String
Private m_FacturiClient As CFacturi
ANTAL Tiberiu Alexandru.

Public Property Let NumeClient(nume As String)


m_NumeClient = nume
Pt. cumparare viziteaza:
End Property

Public Property Get NumeClient() As String


NumeClient = m_NumeClient
End Property

Public Property Let AdresClient(adr As String)


m_AdresaClient = adr
End Property

Public Property Get AdresaClient() As String 0264-401667


NU COPIA !.

AdresaClient = m_AdresaClient
sau suna la:

End Property

Public Property Let ContClient(cont As String)


m_ContClient = cont
End Property

Public Property Get ContClient() As String


ContClient = m_ContClient
End Property

Public Property Get FacturiClient() As CFacturi


Set FacturiClient = m_FacturiClient
End Property

Public Property Set FacturiClient(ObiecteFacturi As CFacturi)


259 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Set m_FacturiClient = ObiecteFacturi


End Property

http://www.east.utcluj.ro/mb/mep/antal
Pentru testarea clasei creat-i procedura urma7 toare:

1 Public Sub TestCClient()


2 Dim tc As CClient
3 Dim fa As CFacturi
4
5 Set tc = New CClient
Acest curs este proprietatea lui
6 With tc
7 .ContClient = "12-3456"
8 .AdresClient = "Fericirii 13"
9 .NumeClient = "Ionel Vasile"
10 Set .FacturiClient = New CFacturi
ANTAL Tiberiu Alexandru.

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

În majoritatea cazurilor, când se modeleaza7 o problema7 cu ajutorul obiectelor, se vor ga7 si


relat-ii între obiecte. Deseori, aceste relat-ii sunt reprezentate grafic, sub forma unei diagrame
ce poarta7 denumirea de modelul de obiecte al aplicat-iei. În principal, relat-iile dintre obiecte
sunt de natura7 ierarhica7 . Pentru reprezentarea realt-iilor între obiecte se folosesc poantori. Se
vor declara poantori la obiecte copil în sect-iunea declarat-iilor modulului clasa7 pa7 rinte. Mai
sus, pentru a modela relat-ia între factura7 s- i client s-a declarat o variabila7
m_FacturiClient în sect-iunea declarat-iilor din clasa CClient. Ea primes- te, valoare în
linia 10 a secvent-ei pentru testarea clasei, cu ajutorul proprieta7 -tii Set. Pentru a putea accesa
membrii obiectului CFacturi s-a definit proprietatea Get FacturiClient la nivelul
obiectului CClient. Fa7 ra7 ea, liniile 14-20, din codul de testare ar fi fost imposibil de scris.
260 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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.

AplicaÛii VBA cu funcÛii Õi clase


Exista7 multe asema7 na7 ri între funct-ia din "matematica7 " s- i cea din VBA. Prin definit-ie, având
doua7 mult-imi D, C s- i G o parte a produsului cartezian D x C, astfel încât
Acest curs este proprietatea lui
, cu
proprietatea , se numes- te funct-ie (aplicat-ie sau transformare) definita7 pe D cu
valori C tripletul . D se numes- te domeniul de definit-ie, C codomeniul funct-iei, iar
G graficul lui f. Deseori, în locul notat-iei se prefera7 sau y = f(x). x se numes- te
variabila7 independenta7 sau argument, iar y variabila7 depedenta7 . Elementul unic , care
ANTAL Tiberiu Alexandru.

corespunde lui se numes- te imaginea lui x prin f sau valoarea funct-ie în x.


Fie funct-ia , pentru care D=[0,4] -si C=[1,3], în limbajul VBA, acesta7 funct-ie se
Pt. cumparare viziteaza:
defines- te sub forma:

Public Function f(x As Double) As Double


f = 1 + Sqr(x)
End Function

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 !.

linia urma7 toare expresiei de calculat.


sau suna la:
261 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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 !.

Solut-ia problemei într-o formulare comuna7 ar fi:


sau suna la:

daca7 a este mai mic decât b minimul este a, daca7 a este mai mare decât b minimul este b,

observând ca7 o solut-ie o exclude pe cealata7 se poate spune:

daca7 a este mai mic decât b atunci minimul este a, altfel minimul este b,

Rat-ionamentul de mai sus, se va programa în VBA, folosind instruct-iunea If astfel:

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.

Public Function min2(a As Double, b As Double) As Double

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:

Public Function min3(a As Double, b As Double, c As Double) As


E Double
min3 = min2(min2(a, b), c)
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

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.

AplicaÛii cu instrucÛiunea For


Pt. cumparare viziteaza:
Se d| funcÛia definit| pe intervale:

⎪sin( x ) e − x, x <1
⎪ 7
g( x ) = ⎨ x + 5x 5 + 1, x ∈[−1, 1]
⎪ cos( x )
⎪ 2 , x >1
⎩x −4

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:

intervalului Õi se noteaz| cu h. Dac| h = , atunci valoarea punctului al i-elea va


n −1
calcula folosind formula x = a + ( i − 1)h . Cele dou| proceduri sunt implementate în
continuare. ObservaÛi c| funcÛia g(x) are un parametru care este folosit pentru a monitoriza
evaluarea corect| a valorilor ei. În caz de eroare acest parametru va lua valoarea True,
caz în care rezultatul întors de funcÛie nu este definit.

Public Function g(x As Double, eroare As Boolean) As Double


eroare = False
If (x < -1) Then
g = Sin(x) * Exp(-x)
ElseIf (x <= 1) Then
g = x ^ 7 + 5 * x ^ 5 + 1
Else
If (Abs(x) = 2) Then
264 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

'Debug.Print "Impartire cu 0 in g(x) pentru x = ; x"


eroare = True
Exit Function

http://www.east.utcluj.ro/mb/mep/antal
Else
g = Cos(x) / (x * x - 4)
End If
End If
End Function

Public Sub afisare(a As Double, b As Double, n As Integer)


Acest curs este proprietatea lui
Dim x As Double, aux As Double, eroare As Boolean
Dim h As Double
Dim i As Integer

If (b < a) Then
ANTAL Tiberiu Alexandru.

MsgBox "a < b"


Exit Sub
Pt. cumparare viziteaza:
End If
If n <= 1 Then
h = 0
Else
h = (b - a) / (n - 1)
End If

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 !.

sau suna la:

pentru x = "; x
Else
Debug.Print i; ")"; x; aux
End If
Next i
End Sub

Realizarea unei clase pentru lucrul cu numere complexe


În continuare se por prezenta câteva dintre posibilit|Ûile de implementare a operaÛiilor cu
numere complexe, în VBA, folosind tehnicile de progrmare deja discutate. În prima variant|,
programarea procedurarl| este folosit| pentru implementarea adum|rii a dou| numere
complexe. CreaÛi un modul cu urm|toarele proceduri:

Sub complex_aduna(re1 As Double, im1 As Double, re2 As E


Double, im2 As Double, sumare As Double, sumaim As Double)
sumare = re1 + re2
265 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

sumaim = im1 + im2


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

complex_aduna re1, im1, re2, im2, re, im


Debug.Print re; "+i*"; im
End Sub
ANTAL Tiberiu Alexandru.

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

Function complex_aduna(c1 As complex, c2 As complex) As E 0264-401667


complex
NU COPIA !.

complex_aduna.re = c1.re + c2.re


sau suna la:

complex_aduna.im = c1.im + c2.im


End Function

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

ObservaÛi c| tipul de dat| complex ne opreÕte s| facem greseli în utilizarea valorilor re Õi


266 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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

Public Property Let imaginar(img As Double)


im = img
ANTAL Tiberiu Alexandru.

End Property
Pt. cumparare viziteaza:
Public Property Let real(rea As Double)
re = rea
End Property

Public Property Get imaginar() As Double


imaginar = im
End Property

Public Property Get real() As Double


real = re
End Property 0264-401667
NU COPIA !.

sau suna la:

Public Sub complex_afis()


Debug.Print re; "+i*"; im
End Sub

Public Sub aduna(a As CComplex, b As CComplex)


im = a.imaginar + b.imaginar
re = a.real + b.real
End Sub

Pentru testarea clasei se va folosi modulul:

Public Sub test2()


Dim x As New CComplex, y As New CComplex, z As New E
CComplex
x.imaginar = 1
x.real = 2
267 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


268 Obiecte în Visual Basic for Applications - cursul 11

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

! ce sunt colecÛiile implicite;


! care este rolul obiectelor Container Õi Document;
! ce sunt evenimentele Õi tipurile lor;
ANTAL Tiberiu Alexandru.

! cum se depaneaz| Õi se depisteaz| erorile din proceduri.


Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


269 Obiecte în Visual Basic for Applications - cursul 11

Ce este programarea orientat| pe obiecte?


În Programarea Orientat| pe Obiecte (POO) conceptul de baz| este obiectul (sau Tipul
Abstract de Dat|, TAD, - un tip de dat| a c|rui form| intern| este ascuns| în spatele unei

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.

Obiecte Õi ColecÛii în VBA


0264-401667
NU COPIA !.

O baz| de date Access este format| din obiectele pe care le vedeÛi în fereastra bazei de date
sau suna la:

(Database Window): tabele, interog|ri, formulare, rapoarte, macro-uri, Õi module. Aceste


obiecte pot fi manipulate din limbajul VBA prin codul conÛinut de procedurile aplicaÛiei.
Unele dintre aceste obiecte pot fi create cu ajutorul generatoarelor prezentate deja, îns|
controlul pe care îl ofer| aceast| metod| de creare este prea puÛin flexibil faÛ| de ceea ce ne
permite limbajul VBA. În Access unele obiecte conÛin alte obiecte, de exemplu, un fomular
conÛine controale. Aceste leg|turi dintre obiecte determin| o ierarhie de obiecte. Obiectele
sunt organizate în colecÛii, care reprezint| o mulÛime de obiecte de acelaÕi tip. De exemplu,
exist| o colecÛie cu numele Forms care cuprinde toate formularele deschise ale bazei de date;
fiecare formular are o colecÛie numit| Controls care conÛine toate controalele de pe suprafaÛa
lui. Un obiect cu numele NumeObiect al unei colecÛii cu numele NumeColecÛie poate fi
referit prin trei metode din VBA:
270 Obiecte în Visual Basic for Applications - cursul 11

Sintaxa SemnificaÛie Exemplu


M NumeColecÛie!NumeObiect Numele obiectului Forms!Clienti

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

e este explicit scris


t ca un membru al sau
o colecÛiei sau se
d poate folosi o s="Clienti"
a variabil| de tipul Forms(s)
ANTAL Tiberiu Alexandru.

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 !.

sau suna la:

î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.

Propriet|Ûile unui obiect se refer| prin sintaxa:

NumeObiect.NumeProprietate

Valoarea unei propriet|Ûi poate fi setat| prin sintaxa:

NumeObiect.NumeProprietate = valoare

De exemplu, toate obiectele formular (Forms) au o proprietate cu numele titlu (Caption).


Dac| avem un formular cu numele Clienti Õi dorim s|-i modific|m titlul la "Salutare!"
scriem:
271 Obiecte în Visual Basic for Applications - cursul 11

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

Variabilele de tipul obiect


Dac| baza de date este mare, specificarea unor obiecte individuale în liniile procedurilor duce
ANTAL Tiberiu Alexandru.

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:

O variabil| de tipul obiect se declar| dup| aceeaÕi sintax| cu a


Declarat-ia
variabilei obiect variabielor obiÕnuite prin folosirea lui Dim, ReDim, Static, Private sau
Public.

Atribuirea unei valori pentru cazul variabilelor obiect se face folosind


Atribuirea
varabilelor obiect instrucÛiunea Set dup| sintaxa:

Set numevariabil| = ExpresieObiect

Dup| ce variabila a fost declarat| Õi i-a fost atribuit| o valoare se poate folosi asemenea 0264-401667
oric|rei varabile.
NU COPIA !.

sau suna la:

Obiecte Microsoft Access


Nu toate obiectele lui Access pot fi reprezentate prin variabile. Tabelul care urmeaz| descrie
obiectele Access utilizate mai des, specificând dac| pot s| participe sau nu într-o declaraÛie de
variabil|.

Nume obiect Descriere Poate fi un


tip obiect?
Application AplicaÛia Microsoft Access. Da
Control Control de pe suprafaÛa unui formular sau raport. Da
Debug Fereastr| pentru afiÕarea imediat| a rezultatelor unei Nu
proceduri.
Form Formular sau subformular deschis. Da
272 Obiecte în Visual Basic for Applications - cursul 11

Forms ColecÛie de formulare deschise. Nu


Module Modul de formular sau raport. Nu

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

Ierarhia obiectelor Microsoft Access se prezint| în figura care urmeaz|:


Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Obiecte pentru accesul la date


Pe lâng| obiectele definite de aplicaÛia Microsoft Access, motorul bazelor de date Microsoft 0264-401667
Jet, defineÕte obiecte pentru operaÛiile de gestionare a datelor din aplicaÛie. Aceste obiecte
NU COPIA !.

sau suna la:

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|.

Nume obiect Descriere Poate fi un tip


obiect?
Container Obiect care conÛine informaÛii despre alte obiecte Da
definite de Microsoft Access sau motorul Jet.
Containers ColecÛie de obiecte Container. Nu
Database Baza de date deschis|. Da
Databases ColecÛie a bazelor de date deschise. Nu
DoCmd Obiect care defineÕte acÛiuni care pot fi utilizate Nu
într-o macro procedur|.
273 Obiecte în Visual Basic for Applications - cursul 11

Document InformaÛii ale motorului Jet al bazelor de date Da


Microsoft despre alte obiecte din baza de date.

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.

RecordSet MulÛime de înregistr|ri definite printr-un tabel sau Da


interogare.
Pt. cumparare viziteaza:
Recordsets ColecÛie de obiecte RecordSet. Nu
TableDef Tabel salvat în baza de date. Da
TableDefs ColecÛie de tabele salvate în baza de date. Nu
User Cont de utilizator în grupul de lucru curent al Da
motorului Jet al bazelor de date.
Users ColecÛie de obiecte User. Nu
Workspace O sesiune activ| a motorului Jet al bazelor de date. Da
Workspaces ColecÛie de obiecte Workspace. Nu 0264-401667
NU COPIA !.

sau suna la:

Ierarhia DAO este prezentat| în figura care urmeaz|.

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.

Determinarea tipului unui obiect de tipul Control


Dac| o variabil| este declarat| de tipul Control, dar nu este specificat un tip de obiect
control concret este posibil s| dorim determinarea tipului de control care este stocat în
variabil|. În acest scop se va folosi o instrucÛiune If...Then...Else cu sintaxa:

{If|Else} TypeOf Variabil|Control Is TipControl Then

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

CommandButton, Graph, Line, ListBox, UnboundObjectFrame,


OptionButton, OptionGroup, Rectangle, Subform, Subreport, TextBox,
ToggleButton, Label, PageBreak.

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Un exemplu de procedur| care afiÕeaz| în fereastra imediat| tipul unui control este:

Sub DeterminaTipControl(VarControl As Control)


0264-401667
NU COPIA !.

sau suna la:

If TypeOf VarControl Is CommandButton Then


Debug.Print "Controlul este de tipul " &E
TypeName(MyControl)
ElseIf TypeOf VarControl Is CheckBox Then
Debug.Print "Controlul este de tipul " &E
TypeName(VarControl)
ElseIf TypeOf VarControl Is TextBox Then
Debug.Print "Controlul este de tipul " &E
TypeName(VarControl)
End If
End Sub

Unele propriet|Ûi ale obiectelor folosite mai des


Uneori dorim s| realiz|m modificarea atributelor unor obiecte din cauza unor condiÛii
concrete ale aplicaÛiei. De exemplu, dorim s| realiz|m ascunderea unui control de tipul text
pentru c| din lipsa unor date afiÕate nu este cazul s| fie afiÕat pe suprafaÛa formularului
275 Obiecte în Visual Basic for Applications - cursul 11

deschis.

Propriet|Ûile obiectului Screen

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

Proprietate La cine se refer|


Screen.ActiveDatasheet Baza de date activ| curent|.
Screen.ActiveForm Formularul curent activ.
Acest curs este proprietatea lui
Screen.ActiveReport Raportul curent activ.
Screen.ActiveControl Controlul unui formular care la momentul curent este
activ.

În documentaÛia tehnic| original|, obiectul curent de interfaÛ| cu utilizatorul care este activ se
ANTAL Tiberiu Alexandru.

zice c| are focus-ul (focus = focalizare în limba englez|).


Pt. cumparare viziteaza:

Propriet|Ûi ale formularelor Õi rapoartelor


Fiecare formular sau raport are o proprietate numit| Me (Eu) care reprezint| formularul sau
raportul însuÕi în codul care se execut|. Pentru a exploata aceast| proprietate pentru formulare
trebuie s|:
• creaÛi o procedur| public| care are un parametru de tipul Form Õi în care setaÛi o
proprietate a formularului;
• apelaÛi procedura cu argumentul Me pentru a modifica parametrul respectiv al
formularului curent.

S| presupunem c| scriem o procedur| Sub pentru colorarea automata7 a sect-iunii de detalii a


formularelor când acestea deschise:
0264-401667
NU COPIA !.

Sub ColoreazaFormular (frm As Form)


sau suna la:

frm.Section(acDetail).BackColor = RGB(255,255,0)
End Sub

Apelând aceast| procedur| cu proprietatea Me în evenimentul Open (Deschidere) a


formularului efectul va fi de modificare a culorii fondului formularului la verde (operat-ia nu
se observa7 daca7 în locul culorii de fond formularul foloses- te o imagine):

Sub Form_Open()
ColoreazaFormular Me
End Sub

În majoritatea cazurilor formularul sau raportul reprezentat de proprietatea Me este acelaÕi cu


276 Obiecte în Visual Basic for Applications - cursul 11

cel reprezentat de propriet|Ûile ActiveForm sau ActiveReport ale obiectului Screen.


TotuÕi, propriet|Ûile ActiveForm Õi ActiveReport reprezint| formularul sau raportul
activ, iar proprietatea Me reprezint| formularul sau raportul al c|rui cod este în curs de

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:

Obiect ColecÛie implicit|


Container Documents
Database TableDefs
DBEngine Workspaces
Form Controls
Index Fields
QueryDef Parametres
RecordSet Fields
Report Controls
277 Obiecte în Visual Basic for Applications - cursul 11

TableDef Fields
User Groups

http://www.east.utcluj.ro/mb/mep/antal
Workspace Databases

Propriet|Ûi ale obiectelor Õi colecÛiilor


Obiectele Forms, Reports Õi DAO conÛin o colecÛie de obiecte proprietate (Property).
De exemplu, procedura care urmeaz| parcurge într-un ciclu toate propriet|Ûile unui tabel din
baza de date, afiÕând în fereastra imediat| numele propriet|Ûii Õi valoarea ei, dac| exist|.
Acest curs este proprietatea lui

• deschideÛi baza de date Northwind;


Crearea unei
proceduri Sub • din fereastra bazei de date clic pe butonul Modules;
• clic pe butonul New pentru a crea un modul nou;
ANTAL Tiberiu Alexandru.

• din meniul Insert selectaÛi Procedure;


daÛi numele PropTabel procedurii Sub, acceptaÛi toate celelalte set|ri implicite Õi
Pt. cumparare viziteaza:

clic pe OK;
• urm|toarele linii formeaz| procedura:

Public Sub PropTabel(NumeTabel As String)


Dim db As Database
Dim tbd As TableDef
Dim i As Integer
Set tbd = DBEngine.Workspaces(0).Databases(0).TableDefsE
(NumeTabel)
0264-401667
NU COPIA !.

sau suna la:

For i = 0 To tbd.Properties.Count - 1
Debug.Print tbd.Properties(i).Name;E
tbd.Properties(i).Value
Next
End Sub

• din meniul View selectaÛi Debug Window;


• în fereastra afiÕat| introduceÛi numele procedurii de mai sus împreun| cu numele unui
tabel din baza de date, de exemplu Orders sub forma PropTabel "Orders":
278 Obiecte în Visual Basic for Applications - cursul 11

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:

Public Sub PropFormular(NumeFormular As String)


Dim db As Database
Dim frm As Form
Dim i As Integer
Set frm = Forms(NumeFormular) 0264-401667
NU COPIA !.

sau suna la:

For i = 0 To frm.Properties.Count - 1
Debug.Print frm.Properties(i).Name;E
frm.Properties(i).Value
Next
End Sub

Pentru exemplificarea parcurgerii unei colecÛii de obiecte prezint în continuare aceeaÕi


procedur| scris| folosind For Each...Next:

Public Sub PropFormular(NumeFormular As String)


Dim prp As Property
279 Obiecte în Visual Basic for Applications - cursul 11

For Each prp In Forms(NumeFormular).Properties


Debug.Print prp.Name; prp.Value

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.).

Obiectele Container Õi Document


InformaÛiile legate de baza de date curent| Õi toate obiectele ei sunt stocate de Access în
obiectele Container Õi Document. Acestea pot fi folosite pentru enumerarea obiectelor
stocate în baza de date, modificarea proprietarului (ownership), obiectelor sau a drepturilor
de acces ale utilizatorilor (user permission) la obiectele din baza de date. Fiecare baz| de
date conÛine o colecÛie Containers format| din obiecte Container. Unele dintre aceste
obiecte sunt definite de Access, altele de motorul Jet al bazelor de date Access: 0264-401667
NU COPIA !.

sau suna la:

Obiect Container Definit de Se refer| la


Databases Motorul Jet Baza de date curent|.
Forms Access Formularele salvate în baza de date curent|.
Modules Access Modulele salvate în baza de date curent|.
Relationships Motorul Jet RelaÛii între tabele salvate în baza de date curent|.
Reports Access Rapoartele salvate în baza de date curent|.
Scripts Access Macro-urile salvate în baza de date curent|.
Tables Motorul Jet Tabelele Õi interog|rile salvate în baza de date
curent|.
280 Obiecte în Visual Basic for Applications - cursul 11

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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 !.

sau suna la:

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:

Public Sub AfisarePropContainere()


Dim db As Database
Dim ctr As Container
Dim prp As Property
281 Obiecte în Visual Basic for Applications - cursul 11

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:

Public Sub AfisareToateFormdinBazadeDate()


Dim db As Database
Dim con As Container
Dim doc As Document

Set db = CurrentDb()
Set con = db.Containers("Forms")
For Each doc In con.Documents
0264-401667
NU COPIA !.

sau suna la:

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:

• ap|sarea de c|tre utilizator a unei taste;


• primirea sau pierderea focaliz|rii (focus);
• deschiderea, închiderea sau redimensionarea formularelor;
• formatarea sau tip|rirea rapoartelor;
282 Obiecte în Visual Basic for Applications - cursul 11

• apariÛia unor erori.

Access-ul r|spunde automat la evenimentele care apar în cazul unor obiecte cu

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.

Pt. cumparare viziteaza:

formular, în ferestra propriet|Ûilor (din dreapta) observaÛi propriet|Ûile de eveniment specifice


acestui obiect.
Comportamentul unui obiect se poate defini prin procedurile de evenimente pentru cazul
apariÛiei unui eveniment la care obiectul ar putea reacÛiona (r|spunde). În cazul apariÛiei unui
eveniment care este afiÕat în lista propriet|Ûilor obiectului r|spunsul este determinat astfel: 0264-401667
dac| numele propriet|Ûii eveniment nu este specificat, Access-ul r|spunde prin
NU COPIA !.


sau suna la:

lansarea procedurilor specifice obiectului (verific|ri ale corectitudinii de scriere sau de


încadrare într-un domeniu de valori);
• dac| numele specificat în list| corespunde unui nume de macro, Access-ul execut|
macro-ul respectiv;
• dac| numele propriet|Ûii de eveniment este [Event Procedure], Access-ul
execut| procedura de eveniment corespunz|toare.

• deschideÛi baza de date Northwind;


Specificarea unei
proceduri de • vizualizaÛi formularul Customer Labels Dialog în mod
tratare a unui proiectare;
eveniment
• clic oriunde în afara suprafeÛei formularului, apoi clic pe
butonul drept al mouse-ului Õi selectaÛi Properties pentru afiÕarea
listei propriet|Ûilor obiectului formular;
• clic pe butonul Event pentru afiÕarea numai a propriet|Ûilor de eveniment specifice
obiectului curent;
283 Obiecte în Visual Basic for Applications - cursul 11

• 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.

Pt. cumparare viziteaza:

• în dreapta lui On Open apare textul [Event Procedure], pentru începerea


edit|rii procedurii de eveniment corespunz|toare evenimentului On Open, care apare la
deschiderea formularului, clic pe butonul din dreapta cu trei puncte.

0264-401667
NU COPIA !.

sau suna la:

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

Õi Activate. Se observ| c| o singur| operaÛie, cum ar fi deschiderea unui formular, se traduce


într-o secvenÛ| de evenimente, în timpul c|rora programatorul poate lua anumite decizii. De
exemplu, la apariÛia evenimentului Open se poate închide o alt| fereastr| deschis|, iar înainte

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:

Tip eveniment Nume Apare când


de fereast| Close, Load, Open, Resize, Unload Utilizatorul realizeaz| o acÛiune cu
Acest curs este proprietatea lui
formularul sau raportul.
de focalizare Activate, Deactivate, Enter, Exit, GotFocus, Obiectul primeÕte sau pierde
LostFocus focalizarea sau devine activ
respectiv inactiv.
AfteDelConfirm, AfterInsert, AfterUpdate, Se fac modific|ri ale datelor sau
ANTAL Tiberiu Alexandru.

de date
BeforeDelConfirm, BeforeInsert, înregistr|rilor.
BeforeUpdate, Change, Current, Delete,
Pt. cumparare viziteaza:

NotInList, Update

de mouse Clic, DblClick, MouseDown, MouseMove, Apare o acÛiune cu mouse-ul.


MouseUp

de tastatur| KeyDown, KeyPressed, KeyUp Utilizatorul apas| taste sau


foloseÕte funcÛia SendKeys pentru
transmiterea unei acÛiuni.
de tip|rire Format, Print, Retreat Un raport este tip|rit sau este
formatat în vederea tip|ririi.
de ceas Timer Generat de Access la intervale de
0264-401667
NU COPIA !.

timp definite de utilizator.


sau suna la:

de eroare Error Generat de Access dac| a ap|rut o


eroare în procedurile Access.

Evenimente specifice formularelor Õi controalelor


Dac| deschideÛi un formular care conÛine un control activ, adic| un
Deschiderea unui
formular control care poate primi focalizarea, urm|toarele evenimente sunt
declanÕate în formular: Open - Load - Resize -Activate - Current. Dac|
nu exist| un control activ, Access-ul declanÕeaz| Õi evenimentul
GotFocus între evenimentele Activate Õi Current.

Dac| se închide un formular care are un control activ, secvenÛa de


Închiderea unui
formular evenimente declanÕate de Access este: Unload - Deactivate - Close. Dac|
nu sunt controale active în formular, Access-ul declanÕeaz| Õi
285 Obiecte în Visual Basic for Applications - cursul 11

evenimentul LostFocus între evenimentele Unload Õi Deactivate.

Când se deschide un formular care conÛine unul sau mai multe

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.

La ieÕirea dintr-un control, de exemplu prin selectarea unui altui


Acest curs este proprietatea lui
Ies-irea dintr-un
control control, urm|toarea secvenÛa de evenimente este declanÕat|: Exit -
LostFocus

Dac| se comut| între dou| formulare deschise care conÛin controale


ANTAL Tiberiu Alexandru.

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 !.

Box înregistrare. De exemplu, într-un Text Box pentru fiecare introducere


sau suna la:

sau Õtergere a unui caracter apare secvenÛa de evenimente: KeyDown -


KeyPressed - Change -KeyUp. Evenimentul Change nu apare dac| valoarea
se modific| într-un control calculat.

Când se actualizeaz| datele într-un control prin deplasarea pe un alt


Actualizarea datelor
într-un control sau control al formularului se declanÕeaz| evenimentele BeforeUpdate înainte
întregistrare de reîmprosp|tarea controlului Õi AfterUpdate dup| reîmprosp|tarea
controlului. De exemplu, dac| se reîmprosp|teaz| datele dintr-un
Text Box (TB1) prin inserarea unui caracter, apoi se face clic pe un
Text Box (TB2), Access-ul declanÕeaz| secvenÛa de evenimente: KeyDown - KeyPressed -
Change -KeyUp - BeforeUpdate - AfterUpdate - Exit(TB1) - LostFocus(TB1) - Enter(TB2)
-GotFocus(TB2).

Î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).

La introducerea de date într-o înregistrare nou|, Access-ul declanÕeaz|


Inserarea unei
înregistrari evenimentul BeforeInsert când se introduc date prima oar| în înregistrare
Õi apoi evenimentul AfterInsert când înregistrarea se salveaz|. S|
presupunem c| se introduc date într-o înregistrare nou| a formularului
F, începând cu câmpul TB1. La introducerea primului caracter în TB1 secvenÛa de
Acest curs este proprietatea lui
evenimente declanÕate este: KeyDown(TB1) - KeyPressed(TB1) - BeforeInsert(F) - Change(TB1) -
KeyUp(TB1).

Dac| acum ne deplas|m, folosind mouse-ul, de pe un câmp TB1 pe unul TB2, secvenÛa
ANTAL Tiberiu Alexandru.

evenimentelor declanÕate este: BeforeUpdate(TB1) - AfterUpdate(TB1) - Exit(TB1) -


LostFocus(TB1) - Enter(TB2) - GotFocus(TB2) - MouseDown(TB2) - MouseUp(TB2) - Click(TB2) -
Pt. cumparare viziteaza:
KeyDown(TB2) - KeyPressed(TB2) - Change(TB2) - KeyUp(TB2). Având focalizarea pe TB2,
când se trece la salvarea înregistr|rii cu Save Record din meniul File, secvenÛa evenimentelor
declanÕate este: BeforeUpdate(TB2) - AfterUpdate(TB2) - AfterUpdate(F) - AfterInsert(F).

La selectarea unei înregistr|ri pentru Õtergere prin ap|sarea tastei Del


S,tergerea unei
înregistra7 ri Access-ul declanÕeaz| evenimentul Delete. Dac| evenimentul nu este
anulat, se declanÕeaz| Õi evenimentele BeforeDelConfirm Õi AfterDelConfirm.
SecvenÛele declanÕate sunt în ordinea: Delete - Current - BeforeDelConfirm
se afiÕeaz| fereastra de dialog:

0264-401667
NU COPIA !.

sau suna la:

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:

Private Sub Form_BeforeDelConfirm(Cancel As Integer, ResponseE


As Integer)
. . .
287 Obiecte în Visual Basic for Applications - cursul 11

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 !.

sau suna la:

Obiect Eveniment implicit


Bound Object Frame Update
Check Box Click
Combo Box BeforeUpdate
Command Button Click
Form Load
Graph Update
Label Click
List Box BeforeUpdate
288 Obiecte în Visual Basic for Applications - cursul 11

Option Button Click


Option Group BeforeUpdate

http://www.east.utcluj.ro/mb/mep/antal
Rectangle Click
Report Open
Section Format
Subform Enter

BeforeUpdate
Acest curs este proprietatea lui
Text Box

Toggle Button Click


Unbound Object Frame Update
ANTAL Tiberiu Alexandru.

Erori Õi proceduri de tratare a erorilor


Pt. cumparare viziteaza:
În scrierea unei aplicaÛii Access pot s| intervin| trei tipuri de erori:
• erori de compilare: apar ca urmare a scrierii incorecte a unor instrucÛiuni din
proceduri. Limbajul VBA detecteaz| aceste erori în timpul compil|rii de exemplu, prin
folosirea opÛiunii Compile All Modules din meniul Debug (acest meniu este afiÕat când
vizualiz|m în mod proiectare orice modul al aplicaÛiei Access). O alt| metod| care asigur|
detectarea imediat| a erorilor de sintax| este selectarea din Tools, Options, Module a
opÛiunii Auto Syntax Check. Aceast| opÛiune controleaz| momentul în care VBA va raporta
erorile de sintax|. Când opÛiunea este validat|, VBA-ul va afiÕa mesajul de eroare într-o
fereastr| de dialog imediat cum se p|r|seÕte linia care conÛine eroarea de sintaxa în timpul
fazei de creare a procedurii;
• erori în timpul execuÛiei aplicaÛiei: apar din cauz| c| Access-ul nu poate executa o 0264-401667
anumit| instrucÛiune, un exemplu clasic este cel al împ|rÛirii cu zero. VBA nu poate executa
NU COPIA !.

operaÛia de împ|rÛire dac| împ|rÛitorul unei expresii ia valoarea 0;


sau suna la:

• 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.

Instrumente pentru depanare (Debugging tools)


Instrumentele pentru depanare au rolul de a uÕura analiza funcÛion|rii codului VBA Õi
depistarea erorilor pe timpul execuÛiei aplicaÛiilor Access. Depanarea programelor este mult
uÕurat| dac| se respect| urm|toarele reguli:
• aplicaÛia va fi divizat| în proceduri de tipul Sub Õi Function cu rol clar, fiecare având
nume corespunz|toare acÛiunii pe care o realizeaz| Õi comentarii care descriu modul de
operare a procedurii împreun| cu rolul fiec|rui parametru. În VBA, o linie comentariu începe
prin caracterul ' (apostrof) sau cu textul REM urmat de un spaÛiu Õi textul comentariului, iat|
câteva exemple:
289 Obiecte în Visual Basic for Applications - cursul 11

'*************************************************************
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 *

• folosiÛi instrucÛiunea Option Explicit în secÛiunea declaraÛiilor pentru fiecare


modul. Ea forÛeaz| folosirea declaraÛiilor explicite pentru varibilele modulului în care apare.
Una din sursele de erori comune este scrierea greÕit| a numelor de variabile. Dac| se foloseÕte
Option Explicit un mesaj de eroare va fi dat la scrierea unui astfel de nume de
variabile;
Acest curs este proprietatea lui
• examinaÛi funcÛionarea codului în vederea depist|rii instrucÛiunilor cu probleme prin
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

folosirea punctelor de întrerupere (Breakponit) care suspend| temporar execuÛia codului;


• folosiÛi fereastra pentru depanare (Debug Window) în vederea examin|rii valorilor
unor variabile Õi expresii când codul este suspendat din funcÛionare.
Atunci când lucraÛi cu module, bara cu intrumente ia forma din figura anterioar|.

Dac| suspectaÛi c| problema de depanat apare la o anumit|


Suspendarea
execut-iei unei instrucÛiune din cod este posibil| suspendarea execuÛiei codului la
0264-401667
NU COPIA !.

atingerea unei instrucÛiuni. VBA permite folosirea punctelor de


sau suna la:

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.

Pt. cumparare viziteaza:


ExecuÛia pas cu pas a procedurilor (Stepping)
ExecuÛia pas cu pas este procesul de execuÛie a unei singure instrucÛiuni din cod, sub controlul
utilizatorului, pentru vizualizarea modific|rilor aduse de aceasta variabilelor sau obiectelor
din baza de date. Pentru execuÛia pas cu pas a codului se va folosi pictograma (Step
Into), VBA va executa instrucÛiunea curent| Õi avanseaz| automat la urm|toarea dup| care
suspend| execuÛia codului. Este posibil ca uneori s| fim siguri de funcÛionarea corect| a unei
proceduri Õi s| dorim evitarea execut|rii ei pas cu pas, în acest caz folosim pictograma
(Step Over). Acest mod de execuÛie este identic cu cel al lui Step Into cu excepÛia c| în cazul
în care instrucÛiunea de executat este o procedur|, nu se intr| în ea Õi se execut| pas cu pas
toate instrucÛiunile ei, ci procedura se execut| "dintr-o bucat|" ca o singur| instrucÛiune dup|
care se trece la urm|toarea instrucÛiune din cod. 0264-401667
NU COPIA !.

sau suna la:

Fereastra pentru Depanare


Când se creeaz| Õi testeaz| procedurile VBA este posibil s| doriÛi vizualizarea valorilor unor
expresii, variabile, propriet|Ûi sau câmpuri. Pentru acest scop a fost creat| fereastra pentru
depanare (Debug Window). Deschiderea ei se face prin clic pe pictograma , iar pe lâng|
vizualizarea valorilor de obiecte descrise anterior se pot testa Õi procedurile de tipul Sub sau
Function apelându-le direct din aceasta. Pentru a vizualiza valorile unui obiect trebuie s| ne
poziÛion|m pe numele acestuia, de exemplu prin folosirea mouse-ului, apoi clic pe pictograma
(Quick Watch). În fereastra care urmeaz| s-a folosit aceast| procedur| pentru dou|
obiecte, un nume de variabil| (pi) Õi un nume de parametru (R). De asemenea, linia de
program ArieCerc = pi * R ^ 2 a fost marcat| cu un punct de întrerupere. Procedura
ArieCerc va fi lansat| în execuÛie din fereastra de depanare prin linia ?ArieCerc(5)
dup| care se apas| tasta Enter. Caracterul ? este o form| prescurtat| pentru instrucÛiunea
Debug.Print folosit| pentru afiÕarea valorii unei variabile în ferestra imediat| (Immediate
Window - partea de jos a ferestrei de depanare). În codul VBA, Debug.Print se poate
folosi pentru afiÕarea unor valori în fereastra imediat|. Fereastra de depanare nu se deschide
automat la întâlnirea unei instrucÛiuni Debug.Print în cod, aceasta trebuie deschis| de
291 Obiecte în Visual Basic for Applications - cursul 11

c|tre utilizator, altfel, valorile scrise în ea nu vor fi v|zute.

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).

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

Depanarea procedurilor de evenimente


Unele evenimente care Ûin de sistemul de operare Microsoft Windows pot pune probleme la
depanarea unor proceduri de eveniment VBA pe care le declanÕeaz|. Uneori este necesar s|
0264-401667
NU COPIA !.

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 !.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


Aplicat-ie

http://www.east.utcluj.ro/mb/mep/antal

sau suna la:


Obiecte în Visual Basic for Applications - cursul 11

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:

! cum se trateaz| erorile în VBA;


! instrucÛiunile On Error cu formele ei pentru tratarea erorilor Õi
instrucÛiunea Resume Next revenirea din codul de tratare a erorilor;
! ce este obiectul Err;
Acest curs este proprietatea lui

! instrucÛiunile de baza ale limbajului SQL:


- SELECT pentru selecÛii împreun| cu clauzele SELECT, FROM,
WHERE, ORDER BY;
- predicatele ALL, DISTINCTROW Õi DISTINCT;
ANTAL Tiberiu Alexandru.

- 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 !.

sau suna la:


294 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Tratarea erorilor în VBA


Erorile apar când programatorul furat de rutina operaÛiilor pe care le implementeaz| uit| s|
trateze cazuri particulare ale manevrelor de executat. Atunci când se anticipeaz| posibilitatea

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

Unde apare eroarea Cum se trateaz|


Formular sau raport Se scrie cod pentru procedura de eveniment Error a obiectului
ANTAL Tiberiu Alexandru.

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.

Folosirea evenimentului Error


Când o eroare apare în timpul lucrului cu un formular sau raport Acceess-ul declanÕeaz|
evenimentul Error pentru care se poate scrie o procedura de eveniment prin setarea propriet|Ûii
On Error la [EventProcedure] Õi apoi realizând clic pe butonul . Un exemplu de
lucru ar putea fi ad|ugarea codului urm|tor formularului TContacte1 subform creat în cursul
8. Controlul Combo Box nu permite introducerea de valori în afara celor enumerate în list|.
Dac| utilizatorul totuÕi încearc| o astfel de operaÛie, codul care urmeaz| îl avertizeaz|, în
limba român|, asupra incorectitudinii acÛiunii. 0264-401667
NU COPIA !.

sau suna la:

Private Sub Form_Error(DataErr As Integer, Response As


Integer)
Dim MesEr As String, NL As String
NL = Chr$(13) & Chr$(10)

'Debug.Print DataErr, Error(DataErr)


'Stop

Select Case DataErr


Case 2237
MesEr = "Conform integritatii referentiale," & NL
MesEr = MesEr & "Pentru IDInfContact din TContacte1"
295 Tratarea erorilor în VBA s- i Access SQL - cursul 12

MesEr = MesEr & " trebuie sa existe o inregistrare" & NL


MesEr = MesEr & "in TTipContacte."

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

ApariÛia unei erori în TContacte1 subform face ca Access-ul s| execute procedura


Form_Error de mai sus transferând codul erorii procedurii prin parametrul DataErr.
Num|rul 2237 este valoarea care indic| încercarea de a introduce un element care nu este în
list|. InstrucÛiunea Select Case foloseÕte aceast| valoare pentru a prinde eroarea Õi a genera o
ANTAL Tiberiu Alexandru.

acÛiune sau un mesaj corespounz|tor. Parametrul Response va lua în final valoarea


acDataErrContinue pentru a forÛa Access-ul s| continue execuÛia f|r| afiÕarea unui
Pt. cumparare viziteaza:
mesaj de eroare standard. Întrebarea care se pune este de unde s| cunoaÕtem valoarea
numeric| corespunz|toare tuturor erorilor care pot s| apar|? În exemplul de mai sus am scris
liniile:

Debug.Print DataErr, Error(DataErr)


Stop

î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:

Private Sub Form_Error(DataErr As Integer, Response AsE


Integer)
Dim MesEr As String, NL As String
NL = Chr$(13) & Chr$(10)
'Debug.Print DataErr, Error(DataErr)
'Stop
296 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Select Case DataErr


Case 2237

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.

InstrucÛiunea On Error 0264-401667


Erorile în timpul execuÛiei codului VBA pot fi tratate prin folosirea instrucÛiunii On Error Õi
NU COPIA !.

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.

InstrucÛiunea On Error GoTo eticheta


7
Aceast| form| este cea mai puternic| modalitate de tratare a erorilor pentru c| permite
controlul cel mai flexibil asupra celor ce vor fi de f|cut în cazul apariÛiei erorilor. Pentru
forma On Error GoTo eticheta 7 VBA va s|ri la o porÛiune de cod specific|, marcat| prin
etichet|. PorÛiunea de cod care urmeaz| exemplific| cea mai comun| variant| de tratare a
erorilor:

Sub ProceduraGenericadeTratareaErorilor()
297 Tratarea erorilor în VBA s- i Access SQL - cursul 12

On Error GoTo CodGenericPentruTratareaErorilor

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

'Codul pentru tratarea erorii


MsgBox Err.Description
Resume Iesire_in_caz_de_Eroare
ANTAL Tiberiu Alexandru.

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:

Private Sub Command13_Click()


On Error GoTo Err_Command13_Click
0264-401667
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:


InstrucÛiunea On Error Resume Next
Crearea unui cod de tratare a erorilor prin On Error GoTo
CodGenericPentruTratareaErorilor necesit| uneori un num|r mare de linii de
cod. Dac| se doreÕte ignorarea erorilor, din motivul de mai sus sau pentru c| într-o porÛiune
de cod a unei proceduri poate s| apar| numai un singur fel de eroare pe care dorim s| o
ignor|m se poate folosi instrucÛiunea On Error Resume Next care spune VBA-ului c| se
doreÕte reluarea codului cu instrucÛiunea imediat urm|toare celei în care a ap|rut eroarea f|r|
nici o alt| intervenÛie în desf|Õurarea evenimentelor din cod. Un exemplu clasic este cel al
instrucÛiunii Kill care Õterge un fiÕier dac| acesta exist| pe disc Õi dac| nu este utilizat de
altcineva în momentul în care se doreÕte Õtergerea lui.

Sub StergeFisier(ByVal numefisier As Strig)


0264-401667
NU COPIA !.

sau suna la:

On Error Resume Next

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.

InstrucÛiunea On Error GoTo 0


299 Tratarea erorilor în VBA s- i Access SQL - cursul 12

La folosirea uneia dintre instrucÛiunile On Error Resume Next, On Error GoTo


CodGenericPentruTratareaErorilor, efectul lor va r|mâne pân| la p|r|sirea
procedurii sau pân| la declararea unei noi porÛiuni de cod pentru tratarea erorilor. Exist|

http://www.east.utcluj.ro/mb/mep/antal
posibilitatea anul|rii codului de tratare a erorilor prin instrucÛiunea On Error GoTo 0.

InstrucÛiunea Resume Next


Pentru revenirea în porÛiunea principal| a procedurii din codul de tratare a erorii se foloseÕte
instrucÛiunea Resume. Aceasta are formele:

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.

ignorarea ei sau când ca urmare a imposibilit|Ûii corect|rii ei se doreÕte continuarea cu linia


urm|toare instrucÛiunii care a generat eroarea;
Pt. cumparare viziteaza:

Resume eticheta 7: se foloseÕte când doriÛi s| reveniÛi la o linie de program oarecare


marcat| cu eticheta
7.

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|.

Proprietatea Descriere 0264-401667


Stocheaz| un Õir de caractere asociat erorii ap|rute.
NU COPIA !.

Err.Description
sau suna la:

Err.Number Stocheaz| o valoarea numeric| care identific| eroarea. Aceasta


este proprietatea implicit| a obiectului Err.
Err.Source Stocheaz| numele obiectului sau aplicaÛiei care a generat
eroarea iniÛial|.

Ierarhii ale codului pentru tratarea erorilor


Atunci când o procedur| apeleaz| o alta, VBA foloseÕte o strategie ierarhic| de tratare a
erorilor. Dac| procedura apelat| genereaz| o eroare care nu este tratat| în corpul ei, procedur|
apelant| (din care s-a realizat apelul) va recepÛiona eroarea. VBA-ul va reacÛiona ca Õi cum
linia de apel a procedurii a generat eroarea, ca efect, VBA-ul va c|uta înapoi, pe baza
adreselor de revenire de pe stiv|, pân| când va prinde un cod pentru tratarea erorilor. Dac|
ajunge la nivelul procedurii care porneÕte grupul de apeluri f|r| a prinde un cod de tratare a
erorii va afiÕa un mesaj de eroare propriu Õi va opri execuÛia codului.
300 Tratarea erorilor în VBA s- i Access SQL - cursul 12

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.

Cum se foloseÕte Access SQL-ul?


Spre deosebire de alte produse care suport| SQL, Access-ul nu are o fereastr| în care dup|
Pt. cumparare viziteaza:
introducerea unei linii SQL Õi ap|sarea tastei Enter rezultatele corespunz|toare s| fie direct
afiÕate. În schimb, interog|rile pot fi vizualizate Õi editate în format SQL. Pentru afiÕarea
rezultatelor trebuie s| comutaÛi pe vizualizare în mod foaie de date a interog|rii. Orice
interogare poate fi vizualizat| în mod SQL. În acest caz veÛi vedea instrucÛiunile SQL
corespunz|toare specificaÛiilor folosite în fereastra Access QBE, în modul de proiectare, când
s-a creat interogarea.

• deschideÛi baza de date Northwind;


Vizualizarea unei
interoga7 ri în mod • clic pe butonul Queries;
SQL
• din list| selectaÛi interogarea cu numele Quarterly Orders; 0264-401667
• clic pe butonul Design;
NU COPIA !.

sau suna la:

Fereastra Access QBE din figura urma7 toare va fi afiÕat| pe ecran.

• din meniul View selectaÛi SQL View, fereastra urm|toare va fi afiÕat|.


301 Tratarea erorilor în VBA s- i Access SQL - cursul 12

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Sintaxa comenzilor SQL


Acest paragraf prezint| conveÛiile folosite la scrierea comenzilor SQL.
Pt. cumparare viziteaza:

ConvenÛie SQL SemnificaÛie


MAJUSCULE Literele majuscule indic| cuvinte cheie Õi cuvinte rezervate, care
trebuie introduse întocmai.
înclinate Cuvintele scrise cu caractere înclinate reprezint| variabile
specificate de utilizator.
<> Parantezele unghiulare conÛin elemente de sintax| care trebuie
scrise. Cuvintele din interiorul acestor paranteze descriu
elementele f|r| a specifica sintaxa lor. 0264-401667
Parantezele dreptunghiulare conÛin informaÛii opÛionale, separate
NU COPIA !.

[]
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.

SELECT < list| de câmpuri >


FROM < list| de tabele >
Pt. cumparare viziteaza:

[WHERE < specificarea liniei selectate >]


[GROUP BY < specificarea modului de grupare >]
[HAVING < specificarea grupului selectat >]
[ORDER BY < specificarea ordon|rii >]

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 !.

sau suna la:

SELECT {* | expresie1 [AS alias1] [, expresie2 [AS alias2] [,...]]]}

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:

[{+ | - | * | / | \ | MOD |&} { funcÛie | (expresie) | constant| | nume-coloan| }]...

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.

SELECT [Nume] & " " & [Lastname] AS [Prenume]


Pt. cumparare viziteaza:

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 !.

sau suna la:

asocieri (self joins) sau subinterog|ri corelate.

Exemple:
SELECT *
FROM TComenzi;

SELECT ComandaID, ComandaData, ComandaPret


FORM TComenzi;

SELECT ComandaID, ComandaData, ComandaPret


FORM TComenzi AS [Tabelul Comenzilor];
304 Tratarea erorilor în VBA s- i Access SQL - cursul 12

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.

WHERE expresie1 [{And | Or} expresie 2 [...]]

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:

SELECT ComandaID, ComandaData, ComandaPret


FORM TComenzi
WHERE ComandaPret > 100000 AND ComandaData > #5/11/1999# AND NumeClient Like
"V*";

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 !.

sau suna la:

ORDER BY coloana1 [{ASC | DESC}] [, coloana2 [{ASC | DESC}] [, ...]]

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

ORDER BY Nume & " " & Prenume;

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.

coloana2 se face astfel:


Pt. cumparare viziteaza:
SELECT list|-coloane
FROM tabel1, tabel2
WHERE tabel1.coloana1 = tabel2.coloana2;

În SQL-92, sintaxa pentru asocierea celor dou| tabele este:

SELECT list|-coloane
FROM tabel1 {INNER | LEFT [OUTER] | RIGHT [OUTER]} JOIN tabel2
ON tabel1.coloana1 = tabel2.coloana2
0264-401667
NU COPIA !.

sau suna la:

Folosirea lui OUTER este opÛional|.

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:

SELECT ComandaID, ComandaData, Nume, Prenume AS Clienti


FROM TComenzi, TClienti
WHERE TClienti.ClientID = TComenzi.ComandaID
AND ComandaData <= #07/28/2000#
306 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Folosind sintaxa SQL-92 scriem:

SELECT ComandaID, ComandaData, Nume, Prenume AS Clienti

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

Asociere multipl| (Multiple Joins)


La fel în cazul lui Access QBE, instrucÛiunea SELECT poate asocia mai multe tabele. O
sintax| simplificat|, unde apare numai JOIN, f|r| INNER JOIN, LEFT OUTER JOIN sau
ANTAL Tiberiu Alexandru.

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 ...)

Ordinea JOIN-urilor imbricate (cuprinse unele în altele) defineÕte ordinea de execuÛie a


asocierilor.

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 !.

Predicatele ALL, DISTINCTROW Õi DISTINCT


sau suna la:

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:

SELECT [{ALL | DISTINCT | DISTINCTROW}] list|-coloane

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.

• interog|ri cu GROUP BY folosind instruncÛiunea SELECT împreun| cu clauza


GROUP BY.
Pt. cumparare viziteaza:

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.

Nume funcÛie SQL de Efect Poate lucra cu


agregare valori Null?
Avg([coloana]) Valoarea medie. nu
Count([coloana]) Num|r| valorile care nu au valoarea nu
Null din coloan|. 0264-401667
NU COPIA !.

Count(*) Num|r| toate rândurile din mulÛimea de da


sau suna la:

î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

Var([coloana]) VariaÛia statistic| pentru un eÕantion de nu


populaÛie.

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.

Interog|ri de agregare f|r| clauza GROUP BY


Se poate folosi instrucÛiunea SELECT f|r| clauza GROUP BY pentru a calcula însum|ri
Pt. cumparare viziteaza:
statistice pe rânduri care îndeplinesc condiÛia clauzei WHERE. Aceasta este util| pentru totale
la nivel de tabel sau la nivelul unei submulÛimi de tabel. Acest tip de interogare de agregare se
creeaz| prin includerea numai de funcÛii de agregare în clauza SELECT a instrucÛiunii
SELECT.

Exemplu:
SELECT COUNT(ComenziID) AS NumarulTotal, MIN(ValoareComanda) AS
ComandaMinima, MAX(ValoareComanda) AS ComandaMaxima
FROM TComenzi;

Interog|ri de agregare cu clauza GROUP BY


0264-401667
NU COPIA !.

sau suna la:

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]

Sintaxa clauzei GROUP BY este:


309 Tratarea erorilor în VBA s- i Access SQL - cursul 12

GROUP BY expresie1 [, expresie2 [,...]]

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

SELECT ClientID, COUNT(*) AS NumardeComenzi


FROM TClienti
GROUP BY ClientID;
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


Rezultatele vor fi de forma:

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:

HAVING expresie1 [{AND | OR} expresie2 [...]]

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:

SELECT DenumireArticol, Avg(Cantitate)


AS CantitateMedieComandata
310 Tratarea erorilor în VBA s- i Access SQL - cursul 12

FROM TArticole INNER JOIN TComenzi ON TArticole.ArticolID=TComenzi.ArticolID


WHERE Cantitate > 3
GROUP BY DenumireArticol;

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.

HAVING Avg(Cantitate) > 3;


Pt. cumparare viziteaza:
Este simplu s| reÛineÛi când se aplic| cele dou| clauze dac| priviÛi poziÛia lor în instrucÛiunea
SELECT. WHERE se scrie înaintea lui GROUP BY, adic| caluza WHERE se aplic| înainte
de grupare, iar HAVING se scrie dup| GROUP BY corespunzând aplic|rii clauzei HAVING
dup| aplicarea criteriilor de grupare.

Interog|ri de reuniune (UNION Queries)


În Access este obligatorie utilizarea SQL-ului pentru crearea unei interog|ri de reuniune; nu
exist| un echivalent în Access QBE pentru crearea acestui tip de interogare. UNION este un
operator Õi nu o instrucÛiune sau clauz| producând o mulÛime de înregistr|ri care pot fi numai
citite. Sintaxa lui este:
0264-401667
NU COPIA !.

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

profesorilor pentru a-i invita la aniversarea liceului scriem:

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 !.

sau suna la:

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

SELECT ProdusID, DescriereProdus, Pret


FROM TProduse
WHERE ProdusID IN

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|;

• comparaÛie [{ANY | SOME | ALL}] (instrucÛiune-select): permite compararea unei


Acest curs este proprietatea lui
valori cu valorile din rândurile unei subinterog|ri.

Predicat Descriere
f|r| Realizeaz| comparaÛia cu o singur| valoare.
ANTAL Tiberiu Alexandru.

ANY, SOME Este adev|rat| dac| comparaÛia este adev|rat| pentru


Pt. cumparare viziteaza:
unul sau mai multe rânduri din subinterogare.
ALL Este adev|rat| dac| comparaÛie este adev|rat| pentru
toate rândurile din subinterogare.

Exemplu:
Dac| dorim s| cunoaÕtem care sunt automobilele mai scumpe decât SKODA:

SELECT DescriereProdus, Pret


FROM TProduse
WHERE Pret >
0264-401667
NU COPIA !.

sau suna la:

(SELECT Pret FROM TProduse WHERE DescriereProdus = "Automobil SKODA");

• [NOT] EXIST (instrucÛiune-select): permite compararea unor valori pentru a verifica


existenÛa lor în una sau mai multe rânduri ale unei subinterog|ri. Dac| subinterogarea are cel
puÛin un rând, comparaÛie este adev|rat| (True), altfel este fals| (False).

Exemplu:
Dac| dorim s| g|sim automobilele care nu au fost cump|rate de nici un client, folosind NOT
EXIST scriem:

SELECT ProudID, DescriereProdus, Pret


FROM TProduse
WHERE NOT EXIST
(SELECT * FROM TProduseDetalii WHERE ProdusID = TProduse.ProdusID);
313 Tratarea erorilor în VBA s- i Access SQL - cursul 12

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:

PARAMETERS parametru1 tip1 [, parametru2 tip2 [, ...]];


instrucÛiune-sql;

Exemplu:
Acest curs este proprietatea lui

Dac| doriÛi s| afiÕ|m comenzile din tabelul Orders între dou| date Data1 Õi Data2 scriem:

PARAMETERS Data1 DateTime, Data2 DateTime;


ANTAL Tiberiu Alexandru.

SELECT Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShippedDate


FROM Orders
Pt. cumparare viziteaza:
WHERE (((Orders.ShippedDate) Between [Data1] And [Data2]));

Fiecare parametru trebuie s| aib| un tip de dat| din lista tipurilor SQL prezentate în tabelul
care urmeaz|:

Tip SQL Tip câmp în mod proiectare al tabelului


BIT, BOOLEAN, LOGICAL, YESNO Yes/No
BYTE, INTEGER1 Number, FiledSize=Byte
COUNTER, AUTOINCREMENT AutoNumber, FildSize=Long Integer
0264-401667
NU COPIA !.

sau suna la:

CURRENCY, MONEY Currency


DATETIME, DATE, TIME Date/Time
SHORT, INTEGER2, SMALLINT Number, FildSize = Integer
LONG, INT, INTEGER, INTEGER4 Number, FildSize = Long
SINGLE, FLOAT4, REAL Number, FildSize = Single
DOUBLE, FLOAT, FLOAT8, NUMBER Number, FildSize = Double
TEXT, ALPHANUMERIC, CHAR, Text
CHARACTER, STRING
LONGTEXT, MEMO, NOTE Memo
LONGBINARY, GENERAL, OLEOBJECT OLE Object
GUID AutoNumber, FildSize=ReplicationID
314 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Actualizarea datelor cu SQL


În plus, pe lâng| interogarea datelor, SQL-ul permite Õi modificarea acestora. SQL-ul se poate
folosi pentru actualizarea, Õtergerea sau copierea înregistr|rilor. InstrucÛiunile SQL care au o

http://www.east.utcluj.ro/mb/mep/antal
corespondenÛ| în Access QBE se prezint| în tabelul care urmeaz|:

InstrucÛiune SQL Echivalent în Access QBE


UPDATE Update
DELETE Delete
Acest curs este proprietatea lui
INSERT INTO Append
SELECT INTO Make-table

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];

Dac| se foloseÕte o interogare ca aceasta trebuie s| fie permis| actualizarea (updateable)


0264-401667
NU COPIA !.

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 !.

sau suna la:

InstrucÛiunea INSERT INTO


Permite copierea de rânduri dintr-un tabel sau interogare într-un alt tabel sau se mai poate
folosi pentru ad|ugarea unui singur rând de date unui tabel. Sintaxa este:

INSERT INTO tabel-destinaÛie


instrucÛiune-select;

Exemplu:
Cea mai simpl| form| este copierea întregului conÛinut al unui tabel (TClienti) în altul
(TClientiNou) scriem:

INSERT INTO TClientiNoi


SELECT * FROM TClienti;
316 Tratarea erorilor în VBA s- i Access SQL - cursul 12

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.

INSERT INTO TProduse (ProdusID, Pret, DescriereProdus)


VALUES (108, 90000000, "Automobil SKODA Felicia");
Pt. cumparare viziteaza:

InstrucÛiunea SELECT INTO


Este specific| Access SQL-ului Õi permite crearea unui tabel nou din rândurile unui alt tabel
sau interogare. Sintaxa este:

SELECT coloana1 [, coloana2 [, ...]] INTO tabel-nou


FROM lista-tabele
[WHERE clauza-where]
[ORDERED BY clauza order-by];
0264-401667
NU COPIA !.

sau suna la:

Exemplu:
Pentru crearea tabelului TComenziVasile scriem:

SELECT ComandaID, DataComada, ClientID


INTO TComenziVasile
FROM TComanzi
WHERE ClientID = 7;

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

DefiniÛia datelor cu SQL


Exist| trei metode pentru crearea Õi manipularea schemei bazelor de date prin programe
Access: ActiveX Data Objects (ADOX), interog|ri Data Definition Language (DDL) Õi mai

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

InstrucÛiune DDL Efect


CREATE TABLE Creeaz| schema unui tabel nou.
ALTER TABLE Modific| schema unui tabel existent.
ANTAL Tiberiu Alexandru.

CREATE INDEX Creeaz| un index nou.


DROP Ôterge schema unui tabel sau un index.
Pt. cumparare viziteaza:

InstrucÛiunea CREATE TABLE


InstrucÛiunea creeaz| un tabel nou. Sintaxa ei este:

CREATE TABLE tabel


(coloana1 tip1 [(dimensiunea1)] [CONSTRAINT constrângere1-coloana]
[, (coloana2 tip2 [(dimensiunea2)] [CONSTRAINT constrângere2-coloana]
[, ...]] 0264-401667
NU COPIA !.

[CONSTRAINT constrângere1-tabel [, constrângere2-tabel [, ...]]]);


sau suna la:

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:

CREATE TABLE TProduseNoi


(ProdusID LONG, DescriereProdus TEXT (200), Pret CURRENCY);
318 Tratarea erorilor în VBA s- i Access SQL - cursul 12

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

iar pentru crearea unei chei multi-coloan| este:


ANTAL Tiberiu Alexandru.

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:

CREATE TABLE TProduseNoi 0264-401667


NU COPIA !.

(ProdusID LONG, DescriereProdus TEXT CONSTRAINT DescriereProdus UNIQUE, Pret


sau suna la:

CURRENCY);

În continuare s| presupunem c| dorim crearea a dou| tabele TComenziNoi Õi TArticoleNoi între


care s| existe o relaÛie 1ºM. TComenziNoi va avea câmpurile ComandaID - cheia primar|,
DataComenzii Õi ClientID, iar TArticoleNoi va avea câmpurile DescriereArticol,
ComandaID Õi AtricolID - ultimele dou| împreun| vor forma cheia primar|, iar
ComandaID va fi cheia str|in|.

CREATE TABLE TComenziNoi


(ComandaID LONG CONSTRAINT CheiePrimara PRIMARY KEY, DataComenzii
DATETIME, Client ID LONG);

CREATE TABLE TArticoleNoi


(ComandaID LONG CONSTRAINT TComenziNoiChStraina REFERNCES TComenziNoi ,
319 Tratarea erorilor în VBA s- i Access SQL - cursul 12

AtricolID LONG, DescriereAtricol TEXT (100), CONSTRAINT CheiePrimara PRIMARY


KEY (ComandaID, AtricolID));

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:

CREATE [UNIQUE] INDEX index


Acest curs este proprietatea lui
ON tabel (coloana1 [, coloana2 [, ...]])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}];

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.

InstrucÛiunea ALTER TABLE


Se foloseÕte pentru modificarea schemei unui tabel existent. Ea permite ad|ugarea unei
coloane noi sau a unei constrângeri respectiv Õtergerea unei coloane sau a unei constrângeri.
Se poate opera numai asupra unui singur câmp sau index într-o singur| instrucÛiune ALTER
TABLE. Sintaxa pentru ad|ugarea unei coloane este:

ALTER TABLE tabel ADD [COLUMN] tipdata [(dimensiune)]


[CONSTRAINT costrângere_coloan|_unic|]; 0264-401667
NU COPIA !.

sau suna la:

Exemplu:
Ad|ugarea unei coloane noi Cantitate tabelului TArticoleNoi se face prin:

ALTERT TABLE TArticoleNoi ADD Cantitate SHORT;

Sintaxa pentru ad|ugarea unei constrângeri este:

ALTER TABLE tabel ADD CONSTRAINT constrângere;

Sintaxa pentru Õtergerea unei coloane este:

ALTER TABLE tabel DROP [COLUMN] coloana;


320 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Nu se poate Õterge o coloan| index decât dup| ce s-a Õters indexul.

http://www.east.utcluj.ro/mb/mep/antal
Sintaxa pentru Õtergerea unui index este:

ALTER TABLE tabel DROP CONSTRAINT index;

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.

Pt. cumparare viziteaza:


DROP TABLE tabel;

Sintaxa pentru Õtergerea unui index este:

DROP INDEX index ON tabel;

Interog|ri SQL Pass-Through


Acest tip de interogare este transmis| neinterpretat| unui server de baze de date. Access-ul nu
va verifica sintaxa, nu va interpreta Õi nici nu va traduce instrucÛiunile acestei interog|ri SQL.
Se creeaz| prin crearea unei interog|ri noi, apoi din Query, selectaÛi SQL Specific Õi în final
0264-401667
NU COPIA !.

Pass-Through. O interogare normal| nu se poate converti în una Pass-Through.


sau suna la:
321 Programarea cu obiectul DAO - cursul 13

Obiectivele cursului 13

http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:

! ce este o mulÛime de înregistr|ri;


! cum se creeaz| o mulÛime de înregistr|ri;
! cum se parcurge o mulÛime de înregistr|ri;
! cum se caut| o înregistare într-o mulÛime de înregistr|ri;
Acest curs este proprietatea lui
! cum se utilizeaz| marcajele într-o mulÛime de înregistr|ri;
! cum se sorteaz| întregistr|rile dintr-o mulÛime de înregistr|ri;
! cum se filtreaz| înregistr|rile dintr-o mulÛime de înregistr|ri;
! cum se editeaz| (adaug|, modific|, Õterg) datele dintr-o mulÛime de
ANTAL Tiberiu Alexandru.

înregistr|ri;
Pt. cumparare viziteaza:
! cum se creeaz| folosind VBA obiecte ale bazei de date.

0264-401667
NU COPIA !.

sau suna la:


322 Programarea cu obiectul DAO - cursul 13

Lucrul cu mulÛimi de înregistr|ri (sets of records)


Pân| acum am folosit interfaÛa Access-ului pentru afiÕarea, manipularea Õi modificarea
datelor din baz|. Uneori, aplicaÛiile trebuie s| aib| controlul direct asupra datelor pentru a

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)

sau forma scurtat|:

DBEngine(0)(0) 0264-401667
NU COPIA !.

sau suna la:

î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.

Set doc = db.Containers("Forms").Documents(0)


Debug.Print doc.Name
Pt. cumparare viziteaza:
End Sub

Procedura AsaDa() lucreaz| de asemenea corect pentru c| se lucreaz| cu o variabil| de tipul


baz| de date în locul unei simple referinÛe. Când folosiÛi numai Jet-ul pentru a accesa datele
dintr-o baz| utilizaÛi DBEngine(0)(0), dac| lucraÛi din Access, baza de date curent| poate
fi referit| prin ambele metode. Baza de date referit| prin CurrentDb() este întodeauna
actualizat| la baza de date deschis| din Access. La utilizarea lui DBEngine(0)(0) trebuie
apelat| metoda Refresh înainte de folosirea oric|ror obiecte din colecÛiile bazei de date.
Pentru cei care lucreaz| în Access 2000, declaraÛiile de variabile din procedurile de mai sus se
modific| astfel:
0264-401667
NU COPIA !.

sau suna la:

DeclaraÛii în Access 2.0, 95 Õi 97 DeclaraÛie în Access 2000 Õi 2002


Dim db As Database Dim db As DAO.Database
Dim doc As Document Dim doc As DAO.Document

Obiectul mulÛime de înregistr|ri (recordset)


DAO asigur| trei feluri de mulÛimi de înregistrare, descrise în tabelul urm|tor împreun| cu
caracteristicile fiec|reia.

Tip mulÛime de Descriere Avantaje Dezavantaje


înregistr|ri
Table MulÛime de Poate folosi Se poate folosi numai
înregistr|ri pe baza indexuri pentru pentru tabele locale
unui tabel. c|ut|ri rapide; Access, nu Õi în cazul
datele pot fi editate. tabelelor ataÕate.
324 Programarea cu obiectul DAO - cursul 13

Dynaset MulÛime de poantori Poate include date În unele cazuri mulÛimea


(pointers) referind din mai multe tabele de întregistrare nu se
datele unui tabel sau locale sau ataÕate; poate edita; nu permite

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.

c|ut|ri rapide prin


indexuri.
Pt. cumparare viziteaza:

Crearea unei mulÛimi de înregistr|ri


O mulÛime de înregistr|ri se creeaz| pân| la inclusiv Access 97 cu unul din grupurile de
instrucÛiuni:

Dim rs As Recordset
Set rs = db.OpenRecordset(Sursa, Tip, Optiuni, BlocareEditare)

sau
0264-401667
NU COPIA !.

sau suna la:

Set rs=obiect.OpenRecordset(Tip, Optiuni, BlocareEditare)

în Access 2000 declaraÛia variabilei va fi de forma:

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

Numele tipului mulÛime de Descriere


înregistrare

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

Parametrul Optiuni controleaz| accesul în regimul de utilizatori multipli Õi comportamentul


la actualizarea înregistr|rilor din mulÛime. Constantele predefinite se dau în tabelul care
urmeaz|:
ANTAL Tiberiu Alexandru.

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 !.

CeilalÛi utilizatori nu pot vizualiza datele tabelului (numai


sau suna la:

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

dbConsistent Permite numai actualiz|ri consistente (numai pentru tipul


Dynaset cu folosirea lui dbInconsistent sau
dbInconsistent).

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.

este opÛiunea implicit| pentru Jet.


Blocare optimist|; o pagin| este blocat| numai la folosirea metodei
Pt. cumparare viziteaza:
dbOptimistic
Update fiind blocat| un timp foarte scurt corespunz|tor actualiz|rii
datelor.

ConsistenÛa Õi inconsistenÛa actualiz|rilor


La crearea unei mulÛimi de înregistr|ri bazat| pe mai multe tabele, implicit, Access-ul permite
modific|ri numai în partea "mulÛi" a asocierii. Aceasta se cunoaÕte sub numele de
actualizare consistent|. Dac| doriÛi actualizarea de câmpuri situate de ambele p|rÛi ale
asocierii trebuie s| folosiÛi opÛiunea dbInconsistent. Aceasta poate duce la violarea
relaÛiilor dintre tabelele aplicaÛiei. Dac| aÛi activat integritatea referenÛial| pentru relaÛie Õi aÛi
validat cascadarea actualiz|rilor, dbInconsistent Õi dbConsistent produc 0264-401667
comportament identic. În acest caz integritatea referenÛial| este mai puternic| Õi actualizarea
NU COPIA !.

se va face Õi pentru câmpurile din partea mulÛi împreun| dac| se face actualizarea celor din
sau suna la:

parte unu.

Moduri de creare a mulÛimilore de înregistrare

1. MulÛime de înregistr|ri creat| pe baza unui tabel sau interogare:


Dim db As Database
Dim rsClienti As RecordSet
Dim rsVanzari As RecordSet
Set db = CurrentDB()

Set rsClienti = db.OpenRecordset("TClienti", dbOpenTable)


327 Programarea cu obiectul DAO - cursul 13

Set rsVanzari = db.OpenRecordset("QVanzari", dbOpenDynaset)

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

sirSQL="SELECT [Nume Client] AS Nume FROM TClienti" & _


"ORDER BY [Nume Client]"
Set rsClienti = db.OpenRecordset(sirSQL, dbOpenDynaset)
ANTAL Tiberiu Alexandru.

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()

Set rsClienti = db.OpenRecordset("TClienti", dbOpenTable,E


dbDenyRead)
0264-401667
4. MulÛime de înregistr|ri creat| pe baza unei definiÛii de interogare (QueryDef):
NU COPIA !.

sau suna la:

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.

conÛine un singur obiect parametru pentru care numele va fi Forms!FTContacte![Nume


Contact].
Pt. cumparare viziteaza:

5. MulÛime de înregistr|ri creat| pe baza unui formular:


Dim rsClienti As RecordSet

Set rsClienti = Forms![FClienti].RecordSetClone

Proprietatea RecordsetClone a unui formular este o mulÛime de înregistr|ri de tip


Dynaset care are ca surs| de date tabelul sau interogarea care este sursa de date a
formularului. 0264-401667
NU COPIA !.

sau suna la:

Parcurgerea unei mulÛimi de înregistr|ri


Dup| ce au fost create, mulÛimile de înregistr|ri au întotdeauna o înregistrare curent|. Când
referim câmpurile mulÛimii de înregistr|ri, valorile obÛinute sunt cele ale înregistr|rii curente
(current record). Exist| cazuri când poziÛia curent| este imediat înaintea primei înregistr|ri
sau imediat dup| ultima înregistrare din mulÛimea de înregistr|ri. În anumite cazuri speciale
este posibil ca poziÛia curent| s| fie nedefinit|. Navigarea printre înregistr|rile mulÛimii se
face cu metodele prezentate în tabelul care urmeaz|:

Numele metodei Efect


MoveFirst Deplasare pe prima înregistrare.
MoveLast Deplasare pe ultima înregistrare.
MoveNext Deplasare pe înregistrarea urm|toare.
329 Programarea cu obiectul DAO - cursul 13

MovePrevious Deplasare pe înregistrarea anterioar|.


Move Deplasare înainte sau înapoi, relativ la un marcaj (bookmark).

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.

Pt. cumparare viziteaza:


G|sirea num|rului de înregistr|ri din mulÛime
Proprietatea RecordCount permite aflarea num|rului de înregistr|ri dintr-o mulÛime. Ea
stocheaz| num|rul de înregistr|ri accesate pân| la momentul curent din mulÛimea de
înregistr|ri. Pentru g|sirea num|rului actual de înregistr|ri trebuie folosit| MoveLast,
înaintea citirii valori lui RecordCount. Într-un regim cu mai mulÛi utilizatori problema se
complic|. Dac| datele sunt partajate între mai mulÛi utilizatori Õi dac| mai mulÛi utilizatori au
deschis mulÛimi de înregistr|ri pe baza aceleiaÕi surse de date, Õtergerile nu vor fi v|zute
imediat între maÕini. În acest caz urm|torii paÕi vor fi urmaÛi pentru aflarea num|rului de
înregistr|ri: se foloseÕte metoda Requery a obiectului mulÛime de înregistrare; se foloseÕte
metoda MoveLast pentru a ne deplasa la sfârÕitul mulÛimii; se citeÕte valoarea stocat| în
RecordCount.
0264-401667
NU COPIA !.

sau suna la:

Testarea limitelor mulÛimii de înregistr|ri


Orice mulÛime de înregistrare are propriet|Ûile BOF Õi EOF pentru a indica dac| înregistrarea
curent| este la sfârÕitul (EOF) sau începutul (BOF) mulÛimii:
< la folosirea lui MovePrevious dac| prima înregistrare este curent|, BOF devine
True Õi nu va mai exista rând curent;
< dac| se foloseÕte din nou MovePrevious, BOF r|mâne True dar apare o eroare în
execuÛie;
< la folosirea lui MoveNext, dac| ultima înregistrare este curent|, EOF devine True Õi
nu va mai exista înregistrare curent|;
< dac| se foloseÕte MoveNext din nou, EOF r|mâne adev|rat| dar se genereaz| o
eroare în execuÛia ciclului.

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

ambele True, mulÛimea nu are înregistr|ri):

If Not rs.BOF And Not rs.EOF Then

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:

C|utarea unor înregistr|ri specifice


Urm|toarele metode se pot folosi pentru localizarea unor înregistr|ri din mulÛimile de tipurile
Dynaset sau Snapshot.

Numele metodei Efect


FindFirst criteriu G|seÕte prima înregistrare care satiface criteriul.
FindLast criteriu G|seÕte ultima înregistrare care satisface criteriul.
FindNext criteriu G|seÕte urm|toarea înregistrare care satisface criteriul.
0264-401667
NU COPIA !.

sau suna la:

FindPrevious criteriu G|seÕte înregistrarea anterioar| care satisface criteriul.

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:

rs.FindFirst "[Nume Contact] = 'Ioan' "

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

sircriteriu = "[Nume Contact] = 'Ioan' "


With rs
Acest curs este proprietatea lui

.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 !.

sau suna la:

rstabel.Seek operatorcomp. cheie1, cheie2 ...

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

If Not rs.NoMatch Then Debug.Print rs![Nume Contact]

Do Until Not rs.NoMatch


Debug.Print rs![Nume Contact]
ANTAL Tiberiu Alexandru.

rs.Seek "=", 1
Pt. cumparare viziteaza:
Loop
rs.Close

End Sub

Utilizarea marcajelor (bookmark)


În Access, înregistr|rile unei mulÛimi de înregistr|ri sunt o submulÛime a înregistr|rilor unor
tabele. Pentru c| num|rul actual de înregistr|ri se poate modifica oricând, mai ales în regim
de lucru cu mai mulÛi utilizatori, nu exist| un num|r absolut care s| specifice poziÛia unei
înregistr|ri particulare. Motorul Jet, are o proprietate Bookmark sau marcaj, care permite
0264-401667
NU COPIA !.

p|strarea Õi poziÛionarea rapid| pe înregistrarea curent| dintr-o mulÛime de înregistr|ri.


sau suna la:

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.

Sortarea înregistr|rilor dintr-o mulÛime de înregistr|ri


Pt. cumparare viziteaza:

Î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.

Sortarea prin folosirea propriet|Ûii Index


Înregistr|rile unui tabel se pot extrage pe baza valorii oric|rui index, inclusiv pe baza cheii
primare. Specificarea ordinii de sortare se face dând propriet|Ûii Index a variabilei mulÛime
de înregistr|ri (recordset), mai jos rs, numele unui index al tabelului, mai jos id. Imediat
dup| setarea acestei propriet|Ûi, înregistr|rile apar în noua ordine. Dup| modificarea
indexului, Access-ul se pare c| face prima înregistrare ca înregistrare curent|, îns| acest
comportament nu este documentat. Dac| proprietatea Index este setat| la un index inexistent 0264-401667
se va genera o eroare care va putea fi tratat| conform procedurilor din cursul anterior.
NU COPIA !.

sau suna la:

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.

Sub AfisareCampuriIndexate(NumeTabel As String)


Dim db As Database
Dim rs As Recordset
Dim tdf As TableDef
Dim id As Index
Dim fl As Field
334 Programarea cu obiectul DAO - cursul 13

Dim sircamp As String

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 "Index este: "; rs.Index


rs.MoveFirst

Do While Not rs.EOF


ANTAL Tiberiu Alexandru.

For Each fl In id.Fields


Pt. cumparare viziteaza:
sircamp = sircamp & vbTab & rs(fl.Name)
Next fl

Debug.Print sircamp
sircamp = ""
rs.MoveNext
Loop
Next id
rs.Close
0264-401667
NU COPIA !.

sau suna la:

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|.

Sortarea prin folosirea clauzei SQL ORDER BY


Când datele unei mulÛimi de înregistr|ri vin din mai multe tabele problema ordinii
înregistr|rilor este mai complicat|. O variant| pentru sortare este folosirea SQL-ului. De
exemplu, pentru sortarea ascendent| a înregist|rilor unui tabel TContacte folosind codul:

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).

Sortare folosind proprietatea Sort


Acest curs este proprietatea lui
Metoda se poate aplica pentru tipurile de mulÛime de înregistr|ri Dynaset Õi Snapshot prin
setarea propriet|Ûii Sort folosind un criteriu asem|n|tor cu cel al clauzei ORDER BY. Se va
specifica câmpul pe baza c|ruia se face sortarea, opÛional tipul cresc|tor sau descresc|tor al
sort|rii. Câteva exemple de setare a propriet|Ûii Sort sunt:
ANTAL Tiberiu Alexandru.

rs.Sort = "[Nume Contact]"


Pt. cumparare viziteaza:
rs.Sort = "[Nume Contact] ASC"
rs.Sort = "[Nume Contact] DESC"

La folosirea propriet|Ûii Sort trebuie reÛinute:


• noua ordine de sortare are efect numai la crearea unei noi mulÛimi de înregistr|ri,
bazat| pe cea veche, un cod care ilustreaz| aceast| modalitate de lucru fiind:

Dim db As Database
Dim rs As Recordset 0264-401667
NU COPIA !.

Dim rssortat As Recordset


sau suna la:

Set db = CurrentDb()
Set rs = db.OpenRecordset("TContacte")

rs.Sort = "[Nume Contact] DESC"

Set rssortat = rs.OpenRecordset()

• proprietatea nu se aplic| unei mulÛimi de înregistrare de tipul Table, în acest caz se


foloseÕte proprietatea Index.

Filtrarea mulÛimilor de înregistr|ri


336 Programarea cu obiectul DAO - cursul 13

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*';")

Do While Not rs.EOF


For Each fl In rs.Fields
Debug.Print fl.Name; " = "; rs(fl.Name).Value
Next fl
rs.MoveNext 0264-401667
NU COPIA !.

sau suna la:

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.

Filtrarea prin proprietatea Filter


MulÛimile de înregistr|ri cu tipurile Dynaset Õi Snapshot pot fi filtrate utilizând proprietatea
Filter. Aceasta este un Õir de caractere, identic cu cel folosit în clauza WHERE. Filtrarea
va avea efect la urm|toarea creare a unei mulÛimi de întergistr|ri.
337 Programarea cu obiectul DAO - cursul 13

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

Set rsFil = rs.OpenRecordset()

Do While Not rsFil.EOF


ANTAL Tiberiu Alexandru.

For Each fl In rsFil.Fields


Pt. cumparare viziteaza:
Debug.Print fl.Name; " = "; rsFil(fl.Name).Value
Next fl
rsFil.MoveNext
Loop

rs.Close
rsFil.Close

End Sub
0264-401667
NU COPIA !.

sau suna la:

Editarea datelor unei mulÛimi de înregistr|ri


Datele unei mulÛimi de înregistr|ri se pot modifica sau nu în funcÛie de permisiuni. La
deschiderea mulÛimii de înregistr|ri este posibil ca datele s| nu se poat| modifica ci numai
vizualiza. Încercarea de a modifica aceste date duce la o eroare de execuÛie a aplicaÛiei care se
poate trata prin cod. MulÛimile de înregistr|ri de tipul Table Õi Dynaset pot fi întotdeauna
editate cu excepÛia cazului în care altcineva a blocat tabelul (prin folosirea opÛiunilor de
blocare prezentate). La Dynaset în plus, regulile de asociere pot opri editarea anumitor
câmpuri. Cele de tipul Snapshot nu se pot modifica prin definiÛie.

Modificarea unei înregistr|ri existente


Modificarea unei înregistr|ri existente decurge în patru paÕi:
1. PoziÛionaÛi-v| pe înregistrare (cu Move sau Find);
2. FolosiÛi metoda Edit pentru punerea înregistr|rii curente în modul de editare;
338 Programarea cu obiectul DAO - cursul 13

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

End With 0264-401667


NU COPIA !.

sau suna la:

rs.Close
End Sub

Ad|ugarea unei înregistr|ri noi


Ad|ugarea unei înregistr|ri într-o mulÛime de tipul Dynaset sau Table se face în trei paÕi:
1. FolosiÛi metoda AddNew pentru ad|ugarea noii înregistr|ri. Toate câmpurile vor lua
valorile implicite;
2. AtribuiÛi valorile dorite câmpurilor;
3. FolosiÛi metoda Update pentru a salva noua înregistrare.

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:

La folosirea metodei AddNew înregistrarea curent| nu se modific| dup| ad|ugarea noii


înregistr|ri. Dac| doriÛi ca noua înregistrare s| devin| cea curent| folosiÛi metoda Move
având ca parametru marcajul întors de proprietatea LastModified a mulÛimii de
înregistr|ri.

Pentru mulÛimea de înregistr|ri de tipul Dynaset, Access plaseaz| întotdeauna noua


înregistrare la sfârÕitul mulÛimii Õi la cap|tul tabelului care este sursa de date. În cazul
mulÛimii de înregistr|ri de tipul Table, dac| este definit un index, Access plaseaz|
înregistrarea în poziÛia corespunz|toare valorii indexului.
0264-401667
NU COPIA !.

Ôtergerea unor înregistr|ri dintr-o mulÛime de înregistr|ri


sau suna la:

Ôtegerea unui rând dintr-o mulÛime de înregistr|ri se face parcurgând paÕii:


1. PoziÛionaÛi-v| pe înregistrarea (rândul) dorit|;
2. FolosiÛi metodai Delete pentru Õtergerea lui.

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:

Sub StergeRandurileUnuiTabel(NumeTabel As String)


Dim db As Database
340 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(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

Modificarea unui grup de înregistr|ri


Modificarea unui grup de înregistr|ri se poate realiza folosind instrucÛiunile de ciclare
prezentate, dar cea mai eficient| metod| r|mân interogarile de actualizare sau Õtegere. Dac|
dorim s| modific|m toate numerele de telefoane care încep cu cifra 1 la cifra 2 se poate folosi
codul:
0264-401667
NU COPIA !.

sau suna la:

Sub Modifica()
Dim db As Database
Dim qdef As QueryDef
Dim sirSQL As String

Set db = CurrentDb()

Set qdef = db.CreateQueryDef("") 'Crearea interogarii


sirSQL = "UPDATE TContacte1 SET TContacte1.[Info Contact] = "
sirSQL = sirSQL + """2"" & Right([Info Contact],Len([InfoE
Contact]-1))"
sirSQL = sirSQL + " WHERE ((Left([Info Contact],1)=""1""));"
341 Programarea cu obiectul DAO - cursul 13

qdef.SQL = sirSQL 'Definirea proprietatii SQL

http://www.east.utcluj.ro/mb/mep/antal
qdef.Execute 'Lansarea interogarii
qdef.Close 'Inchiderea interogarii

End Sub

O alt| variant| de scriere a codului se mai sus este:


Acest curs este proprietatea lui

Sub Modifica1()
Dim db As Database
Dim qdef As QueryDef
ANTAL Tiberiu Alexandru.

Dim sirSQL As String


Pt. cumparare viziteaza:

Set db = CurrentDb()

Set qdef = db.CreateQueryDef() 'Crearea interogarii


qdef.Name = "Interogare de actualizare (update)"
sirSQL = "UPDATE TContacte1 SET TContacte1.[Info Contact] = "
sirSQL = sirSQL + """7"" & Right([Info Contact],Len([InfoE
ontact]-1))"
sirSQL = sirSQL + " WHERE ((Left([Info Contact],1)=""1""));" 0264-401667
NU COPIA !.

qdef.SQL = sirSQL 'Definirea proprietatii SQL


sau suna la:

db.QueryDefs.Append qdef 'Adaugarea interogarii

qdef.Execute 'Lansarea interogarii


qdef.Close 'Inchiderea interogarii

db.QueryDefs.Delete qdef.Name 'Stergerea interog|rii

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.

Modificarea datelor prin tranzacÛii


Termenul de prelucrarea a tranzacÛiilor (transaction) se refer| în bazele de date la gruparea
modific|rilor aduse datelor în secvenÛe speciale care sunt tratate asemenea unei singure
operaÛii. Un astfel de grup reuÕeÕte dac| fiecare operaÛie a grupului reuÕeÕte Õi atunci spunem
c| tranzacÛia (commit) a reuÕit. Dac| oricare dintre operaÛiile de modificare ale grupului nu
Acest curs este proprietatea lui
reuÕeÕte, toate modific|rile aduse datelor se refac (roll back) la valorile avute înaintea
începerii tranzacÛiei Õi spunem c| tranzacÛia nu a reuÕit. Access-ul lucreaz| cu trei metode
pentru prelucrarea tranzacÛiilor BeginTrans - pentru începerea unei noi tranzacÛii,
CommitTrans - pentru salvarea tuturor modific|rilor f|cute datelor de la cea mai recent|
BeginTrans Õi Rollback - pentru anularea tuturor modific|rilor f|cute datelor de la cel
ANTAL Tiberiu Alexandru.

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:

On Error GoTo Tratare_Eroare

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

Crearea obiectelor bazelor de date


Pentru crearea unui obiect nou se parcurg paÕii:
1. FolosiÛi una din metodele Create... pentru a crea obiectul (CreateTable,
CreateField, CreateIndex, CreateQueryDef, CreateRelation, ...);
ANTAL Tiberiu Alexandru.

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.

Crearea unui tabel 0264-401667


S| presupunem c| dorim s| cre|m un tabel nou numit TAdrese care are câmpurile AdreseID,
NU COPIA !.

sau suna la:

Tip adresa, Adresa folosiÛi codul:

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

12 Set fl1 = tdf.CreateField("AdreseID", dbLong)

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.

Tabelul metodelor Create...


Fiecare obiect DAO poate fi creat prin program prin metoda Create... asociat| din tabelul
care urmeaz|:

Obiect Metod| Argume Tip de Descriere


nte dat|
Tabel (Table) CreateTableDef Nume String Numele noului
tabel.
345 Programarea cu obiectul DAO - cursul 13

Atribute Integer Set|ri pentru tabele


ataÕate, de sistem Õi
ascunse.

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.

M|rime Integer M|rimea câmpului


dac| este de tipul
text.
Pt. cumparare viziteaza:

Index CreateIndex Nume String Numele noului


index.
Interogare (Query) CreateQueryDef Nume String Numele noii
interog|ri.
TextSQL String Un Õir QL valid care
defineÕte noua
interogare.
Relat-ie (Relation) CreateRelation Nume String Numele noii relaÛii.
Tabel String Numele cheii
0264-401667
NU COPIA !.

primare din relaÛie.


sau suna la:

Tabel String Numele cheii


asociat str|ine din tabelul
asociat.
Atribute Integer Setarea tipului de
relaÛie, forÛarea
intergrit|Ûii
relaÛionale.
Spat-iu de lucru CreateWorkspace Nume String Numele noului
(Workspace) spaÛiu de lucru.
Utilizator String Numele unui
utilizator existent.
Acesta va deveni
proprietarul noului
spaÛiu de lucru.
346 Programarea cu obiectul DAO - cursul 13

Parol| String Parola pentru noul


spaÛiu de lucru.

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.

baz| de date este


sau nu incriptat| Õi
Pt. cumparare viziteaza:
versiunea de Jet
folosit| la stocarea
fiÕierelor.
Grup (Group) CreateGroup Nume String Numele noului
grup.
PID String Identificator
personal al noului
grup.
Utilizator (User) CreateUser Nume String Numele noului
utilizator.
0264-401667
NU COPIA !.

PID String Identificator


sau suna la:

personal al noului
utilizator.
Parol| String Parola pentru noul
obiect utilizator.

Crearea unui Index


Este posibil ca într-o aplicaÛie s| fie necesar| crearea unui index prin program. Etapele
necesare pentru aceasta sunt:
1. FolosiÛi metoda CreateIndex a obiectului TableDef pentru a crea obiectul index,
iar proprietatea Name va fi setat| la acest obiect;
2. AtribuiÛi valori propriet|Ûilor noului index. Cât timp indexul nu a fost ad|ugat unui
obiect index toate propriet|Ûile lui pot fi setate dup| cum dorim. În general vor fi setate
propriet|Ûile Name, Primary, Unique Õi Required. Dac| obiectul index a fost ad|ugat
unei colecÛii, propriet|Ûile lui nu mai pot fi modificate fiind necesar| Õtergerea lui Õi crearea
347 Programarea cu obiectul DAO - cursul 13

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.

1 Function CreareCheiePrimara(NumeTabel As String, NumeCheieP E


2 As String, ParamArray VectorParametri() As Variant) As E
3 Boolean
Acest curs este proprietatea lui
4 Dim id As Index
5 Dim tdf As TableDef
6 Dim fld As Field
7 Dim varCP As Variant
ANTAL Tiberiu Alexandru.

8 Dim varid As Variant


9 Dim ids As Indexes
Pt. cumparare viziteaza:

10 Dim db As Database
11

12 On Error GoTo CreareaCheieP_Eroare


13

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:

19 If Not IsNull(varCP) Then


20 ids.Delete varCP
21 End If
22

23 Set id = tdf.CreateIndex(NumeCheieP)
24

25 id.Primary = True
26

27 For Each varid In VectorParametri


28 AdaugaCamp id, varid
29 Next varid
348 Programarea cu obiectul DAO - cursul 13

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:

1 Private Function GasesteCheiaPrimara(tdf As TableDef) As E


2 Variant

4 Dim id As Index
5

6 For Each id In tdf.Indexes


7 If id.Primary Then
8 GasesteCheiaPrimara = id.Name
9 Exit Function
0264-401667
NU COPIA !.

sau suna la:

10 End If
11 Next id
12 GasesteCheiaPrimara = Null
13 End Function

1 Private Function AdaugaCamp(id As Index, varid As Variant) AsE


2 Boolean

3 Dim fld As Field


4

5 On Error GoTo AdaugaCamp_Eroare


6 If Len(varid & "") > 0 Then
7 Set fld = id.CreateField(varid)
349 Programarea cu obiectul DAO - cursul 13

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

FuncÛia CreareCheiePrimara() creeaz| cheia primar| cu numele NumeCheieP a unui


tabel numit NumeTabel. În liniile 17-20 se caut| dac| tabelul are cheie primar|, iar dac|
aceasta exist| este Õtears| Õi în linia 22 se creeaz| un nou index. Linia 24 seteaz| noul index
drept cheie primar| împreun| cu propriet|Ûile: IgnoreNulls = False,
Required=True, Unique=True. În liniile 26-28 nou createle câmpuri care formeaz|
indexul se adaug| colecÛiei Fields. În final, prin linia 30 se adaug| noul index colecÛiei
Index a definiÛiei de tabel TableDef. 0264-401667
NU COPIA !.

sau suna la:

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 GasesteCheiaPrimara() are ca parametru de intrare o definiÛie de tablou Õi are


rolul de a g|si numele cheii primare dac| aceasta exist|. Rezultatul întors este numele cheii
primare sau Null în cazul când aceasta nu exist|.

FuncÛia AdaugaCamp() adaug| un obiect câmp unui obiect index. Rezultatul întors este
True în caz de reuÕit| sau False altfel.

Crearea unei relaÛii


Pentru crearea unei relaÛii se va folosi metoda CreateRealtion a obiectului baz| de date
350 Programarea cu obiectul DAO - cursul 13

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 !.

sau suna la:

au un corespondent în primul tabel.


dbRelationUpdateCascade Actualiz|rile vor fi cascadate.
dbRelationDeleteCascade Ôtergerile vor fi cascadate.

Proprietatea este setat| f|când suma constantelor prezentate. Majoritatea programatorilor


folosesc operatorul pe biÛi Or pentru "adunarea" constantelor în scopul evidenÛierii faptului c|
nu este vorba de o simpl| expresie aritmetic|. Dac| proprietatea Attributes nu este setat|
de c|tre programator, Access-ul creeaz| o relaÛie de tipul 1 º M intern| (particip| numai
înregistr|rile care au valori identice în câmpurile asociate) cu integritatea referenÛial| activat|.
FuncÛia care urmeaz| creeaz| o relaÛie 1 º M cu asociere la stânga extern| între tabelele
TContacte Õi TAdrese având Õtergerea cascadat|.

Function CreeazaRelatie() As Boolean


Dim db As Database
351 Programarea cu obiectul DAO - cursul 13

Dim rel As Relation


Dim fld As Field

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

Set fld = rel.CreateField("IDContact")


fld.ForeignName = "AdreseID"
rel.Fields.Append fld
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


db.Relations.Append rel

CreazaRelatie = True

CreazaRelatie_Iesire:
Exit Function

CreazaRelatie_Eroare:
MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E 0264-401667
")"
NU COPIA !.

sau suna la:

CreazaRelatie = False
Resume CreazaRelatie_Iesire
End Function

AtaÕarea tabelelor din bazele de date externe


Pe lâng| posibilitatea definirii de noi tabele, exist| posibilitatea ataÕ|rii unor tabele din baze
de date externe. La ataÕarea unui tabel extern, informaÛia de conectare este stocat| în baza de
date Access, iar conectarea are loc automat la deschiderea bazei de date. Datele îns| vor
r|mâne stocate în baza de date extern|. Dup| ataÕare, aceste tabele pot fi folosite asemenea
tabelelor interne ale Access-ului îns| nu se pot crea obiecte Recordset de tipul Table pe
baza lor. Proprietatea Connect a obiectului TableDef permite controlul tabelelor ataÕate
împreun| cu proprietatea SourceTableName Õi metoda RefreshLink. Fiecare obiect
TableDef are o proprietate Connect care este un Õir ce identific| tipul Õi locul tabelului
ataÕat. Numele tabelului este stocat separat în proprietatea SourceTableName. Dac|
352 Programarea cu obiectul DAO - cursul 13

tabelul face parte din baza de date Access proprietatea lui Connect are valoarea "".

AtaÕarea unui tabel extern unei baze de date Access

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.

Pt. cumparare viziteaza:


Dim db As Database
Dim tdf As TableDef
Dim NumeTabel As String

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

Pus sub forma unei proceduri de tipul funcÛie codul devine:

Function CreareTabelAtasat(NumeTabel As String, Cale As E


String, NumeTabelExtern As String) As Boolean
Dim db As Database
Dim tdf As TableDef
Dim strConnect As String
Dim vIntoarsedeFunctie As Boolean
353 Programarea cu obiectul DAO - cursul 13

On Error GoTo CreareTabelAtasat_Eroare

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.

Function VerificaAtasareaTabelului(NumeTabel As String, E


CaleNoua As String) As Boolean
Dim db As Database
Dim strName As String
Acest curs este proprietatea lui

VerificaAtasareaTabelului = True

On Error Resume Next


ANTAL Tiberiu Alexandru.

Set db = CurrentDb()
Pt. cumparare viziteaza:
strName = db.TableDefs(NumeTabel).Fields(0).Name

If Err.Number <> 0 Then


If Not ReatasareTabel(NumeTabel, CaleNoua) Then
MsgBox "Nu am reusit reatasarea tabelului :'" & E
NumeTabel & "'"
VerificaAtasareaTabelului = False
End If
End If 0264-401667
NU COPIA !.

On Error GoTo 0
sau suna la:

End Function

Function ReatasareTabel(NumeTabel As String, CaleNoua As E


String) As Integer
Dim db As Database
Dim tdf As TableDef

ReatasareTabel = True

Set db = CurrentDb()
Set tdf = db.TableDefs(NumeTabel)
355 Programarea cu obiectul DAO - cursul 13

If Len(tdf.Connect) > 0 Then


tdf.Connect = ";DATABASE=" & CaleNoua

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


356 Access 2000, ADO -si ADOX - cursul 14

Obiectivele cursului 14

http://www.east.utcluj.ro/mb/mep/antal
Dupa7 parcurgerea acestui curs vet-i cunoas- te:

! care sunt nout|Ûile aduse de Access 2000;


! care este noul model de date pentru manipularea bazelor de date Access;
! ce este obiectul Connection;
! cum se manipuleaz| colecÛiile în Access 2000;
Acest curs este proprietatea lui

! cum se lucreaz| cu mulÛimile de înregistr|ri în Access 2000;


! cum se efectueaz| operaÛiile comune cu mulÛimile de înregistr|ri (creare,
navigare, editare Õi operaÛii cu interog|ri);
! ce este schema bazei de date Õi cum se lucreaz| cu ea în Access 2000
ANTAL Tiberiu Alexandru.

(crearea de tabele locale Õi legate, crearea Õi modificarea interog|rilor, crearea de


Pt. cumparare viziteaza:
indexuri Õi relaÛii).

0264-401667
NU COPIA !.

sau suna la:


357 Access 2000, ADO -si ADOX - cursul 14

Ce aduce nou Access 2000?


În evoluÛia produsului Access un salt mare s-a produs de la versiunea 2.0 la 95. Access 2000,
la rândul lui, aduce modific|ri majore versiunii 97 care se pot grupa pe urm|toarele domenii:

http://www.east.utcluj.ro/mb/mep/antal
VBA, formulare Õi rapoarte, obiectele pentru accesul la date, internet/intranet.

VBA în Access 2000


Editorul Access pentru module de program a fost înlocuit cu cel folosit în limbajul de
programare Visual Basic 6, iar modific|rile f|cute într-o prezentare sumar| sunt:
• editorul VBA din Access 2000 este acelaÕi cu editoarele VBA ale altor aplicaÛii
Acest curs este proprietatea lui
Microsoft Office (Excel Õi Word) Õi cu cel al firmelor terÛe care permit programarea aplicaÛiei
lor din VBA;
• întregul cod VBA din modulele globale, formulare Õi rapoarte se poate proteja printr-o
singur| parol|. VBA nu mai este protejat prin sistemul de securitate la nivel de utilizator;
• editorul VBA foloseÕte modelul de obiect programabil Õi suport| tehnologia COM
ANTAL Tiberiu Alexandru.

pentru aplicaÛii add-ins (o procedur| Visual Basic împreun| cu obiectele pe care le


manipuleaz| ce poate fi stocat| sau Õtears| din baza de date sub controlul unui program
Pt. cumparare viziteaza:
gestionar de add-ins-uri) care cresc productivitatea scrierii, analizei Õi format|rii codului
VBA.

Formulare Õi rapoarte în Access 2000


Aici modific|rile nu sunt foarte mari Õi se pot grupa astfel:
• formularele Õi rapoartele suport| gruparea Õi degruparea controalelor;
• controalele care afiÕeaz| text permit folosirea unui chenar definit de utilizator în jurul
textului permiÛând mutarea textului în interiorul controlului;
• se pot aplica reguli de formatare condiÛionat| datelor din cutiile cu text Õi combinate;
mulÛimea de înregistr|ri care formeaz| sursa de date a formularului se poate seta la o

0264-401667
NU COPIA !.

mulÛime de înregistr|ri DAO sau ADO.


sau suna la:

Accesul la date în Access 2000


Accesul la date a suferit o modificare important|, motorul bazei de date vine cu o opÛiune
nou|, un nou model pentru accesul la date Õi un nou format al bazei de date, toate aceste
îmbun|t|Ûiri sunt prezentate pe scurt în cele ce urmeaz|:
• deÕi motorul Jet r|mâne motorul implicit, Access-ul permite lucrul cu Microsoft Data
Engine (MSDE), o versiune cu num|r de conect|ri limitate ale lui SQL Server 7;
• este posibil| crearea de fiÕiere Access Data Projects (ADP) pe lâng| clasicele baze de
date Access MDB. Un fiÕier ADP este o baz| de date f|r| date în care se pot stoca formulare,
rapoarte, macro-uri, module Õi leg|turi la date care sunt stocate pe un SQL server sau pe baz|
de date MSDE;
• motorul Jet stocheaz| datele în formatul Unicode, motiv pentru care aplicaÛiile
multilingve sunt mai uÕor de scris;
• Access-ul 2000 foloseÕte noul model de date ActiveX Data Objects (ADO) ca model
358 Access 2000, ADO -si ADOX - cursul 14

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.

Facilit|Ûile internet Õi intranet ale lui Access 2000


Acest curs este proprietatea lui

Î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 !.

sau suna la:

grupare.

ADO sau DAO?


Versiunile anterioare de Access foloseau o bibliotec| numit| DAO pentru accesul la date din
program. DAO Õi-a început existenÛa ca interfaÛ| cu motorul Jet odat| cu Access 1 Õi treptat a
ajuns la o m|rime Õi complexitate impresionant| sub Access 97, sau cu alte cuvinte a devenit
prea complicat. Începând cu Access 2000, DAO nu mai este modelul preferat pentru accesul
la date, locul ei fiind luat de ADO. Exist| situaÛii când este de preferat folosirea lui DAO în
Access 2000, cele mai importante sunt:
• folosirea unei mulÛimi de înregistr|ri a unui formular dintr-o baz| de date Access este
o mulÛime de înregistr|ri DAO (formularele unui proiect Access folosesc mulÛimi de
înregistr|ri ADO);
• la conversia unei baze de date dintr-o versiune anterioar| de Access, mulÛimile de
înregistr|ri vor fi implicit DAO (la crearea unei baze de date noi în Access 2000 se foloseÕte
implicit ADO).
359 Access 2000, ADO -si ADOX - cursul 14

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.

Microsoft ActiveX Data Objects 2.1


Library, aplicaÛia va folosi ADO, dac|
validaÛi Microsoft DAO 3.6 Object
Pt. cumparare viziteaza:
Library aplicaÛia va folosi DAO. Este
posibil s| fie ambele biblioteci validate
simultan, caz în care apar unele
probleme de scriere întrucât exist|
obiecte ale celor dou| biblioteci care au
acelaÕi nume. De exemplu, atât DAO cât Õi ADO au obiectul Recordset, astfel o linie de
program de forma:

Dim rs As Recordset

nu se Õtie la ce fel de mulÛime de înregistr|ri se refer|. Pentru rezolvarea ambiguit|Ûii numele


0264-401667
NU COPIA !.

bibliotecii va preceda numele obiectului astfel vom scrie:


sau suna la:

Dim rs1 As ADODB.Recordset


Dim rs2 As DAO.Recordset

Noua ierarhie de obiecte


La fel cu versiunile anterioare, Access-ul
are propria lui ierarhie de obiecte prin
care putem avea acces la informaÛii cu
privire la paginile, formularele, rapoartele
deschise sau la modulele aplicaÛiei.
Figura care urmeaz| le prezint| parÛial pe
acestea. Ierarhia obiectului aplicaÛie
(Application) include toate obiectele
(formularele, rapoartele, paginile
360 Access 2000, ADO -si ADOX - cursul 14

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.

Pt. cumparare viziteaza:

DAO a devenit în timp o bibliotec| uriaÕ|, ADO foloseÕte trei modele


Diferent-e între
ADO s-i DAO de obiecte distincte pentru a furniza aceeaÕi funcÛionalitate cu DAO. 0264-401667
NU COPIA !.

Acestea sunt ADO (ADODB), Microsoft ADO Extensions for DDL


sau suna la:

and Security (ADOX) Õi Microsoft Jet and Replication Objects


(JRO). Majoritatea aplicaÛiilor nu au nevoie de toate aceste modele pentru a funcÛiona,
divizarea pe criteriul funcÛionalit|Ûilor putându-se justifica în acest fel. AplicaÛia care
acceseaz| datele se numeÕte consumator de date (de exemplu, Access 2000 sau un program
scris în Visual Basic 6.0), iar programul care asigur| accesul la date se numeÕte, furnizor de
baz| de dat| (de exemplu, Microsoft OLE DB Provider for SQL Server sau Microsoft Jet 4.0
OLE DB Provider).

Manipularea datelor prin ADO


ADO permite aplicaÛiilor client s| acceseze Õi s| manipuleze date prin orice furnizor de
servicii OLE DB (OLE DB este o component| a unui SGBDR care implementeaz| accesul
eficient prin reÛea local| sau internet la mai multe tipuri de surse de date: date stocate conform
modelului relaÛional, fiÕiere de poÕt| electronic|, foi de calcul). ADO conÛine obiecte pentru
conectarea la o surs| de date Õi manipularea acestora. În ADO obiectul Connection defineÕte
o sesiune de lucru pentru un utilizator al unei surse de date particulare. În DAO obiectul
Workspace defineÕte o sesiune de lucru a unui utilizator, iar obiectul Database defineÕte
361 Access 2000, ADO -si ADOX - cursul 14

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.

DefiniÛia datelor Õi securitatea cu ADOX


ADOX conÛine obiectele pentru definiÛia datelor (Tables, Procedures Õi Views) Õi colecÛiile
(Users Õi Groups) pentru securitate. Aici diferenÛele faÛ| de DAO sunt semnificative întrucât
în DAO, obiectul Workspace conÛinea colecÛiile pentru securitate Õi cel Database cele pentru
definiÛia datelor. Fiecare obiect Catalog este asociat unui singur obiect Connection, în timp
Acest curs este proprietatea lui
ce în DAO obiectul Workspace putea conÛine mai multe obiecte Database. Obiectele ADO
Tabel, Index Õi Column sau aproximativ echivalente cu obiectele DAO TableDef, IndexDef
Õi Field, dar în ADO fiecare dintre aceste obiecte are o colecÛie standard Properties.

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.

Utilizarea variabilelor obiect


Pentru o variabil| obiÕnuit| linia de declaraÛie este de forma:

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:

Dim con As ADODB.Connection


Dim rs As ADODB.Recordset
Dim frm As Form

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:

Set con = CurrentProject.Connection


Set rs = New ADODB.Recordset
362 Access 2000, ADO -si ADOX - cursul 14

Set frm = Forms("FAdrese")

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 !.

sau suna la:

Pentru a ne conecta la o baz| de date cu numele db2000-test.mdb se foloseÕte codul:

Public Sub Conectare()


Dim con As ADODB.Connection
Set con = New ADODB.Connection

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

Set con = Nothing


End Sub

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).

Dac| doriÛi s| faceÛi referire la baza de date curent| folosiÛi codul:

Public Sub BdCurenta()


Dim con As ADODB.Connection 0264-401667
NU COPIA !.

Set con = CurrentProject.Connection


sau suna la:

Debug.Print con.ConnectionString
End Sub

Enumerarea obiectelor unei colecÛii


Prezint în continuare cel mai simplu mod de parcurgere a unei colecÛii prin folosirea
instrucÛiunii For Each ... Next. Este necesar| crearea unei variabile care s| poat| referi tipul
de obiect specific colecÛiei care va fi parcurs|. Baza de date folosit| se numeÕte
ADDBOOK.MDB, iar tabelul Members. Figura care urmeaz| conÛine Õi codul pentru
procedura de tipul Sub cu numele ListareCampuri.

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

Public Sub ListareCampuri(NumeTable As String)


Dim rs As ADODB.Recordset

http://www.east.utcluj.ro/mb/mep/antal
Dim fld As ADODB.Field

Set rs = New ADODB.Recordset

rs.Open NumeTable, CurrentProject.Connection


Acest curs este proprietatea lui

For Each fld In rs.Fields


Debug.Print fld.Name
Next fld
ANTAL Tiberiu Alexandru.

rs.Close
Pt. cumparare viziteaza:
Set rs = Nothing
End Sub

0264-401667
NU COPIA !.

sau suna la:


365 Access 2000, ADO -si ADOX - cursul 14

AcelaÕi cod rescris cu un For ... Next clasic devine:

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

Set rs = New ADODB.Recordset


Acest curs este proprietatea lui

rs.Open NumeTable, CurrentProject.Connection

For i = 0 To rs.Fields.Count - 1
ANTAL Tiberiu Alexandru.

Set fld = rs.Fields(i)


Pt. cumparare viziteaza:
Debug.Print fld.Name
Next i

rs.Close
Set fl = Nothing
Set rs = Nothing
End Sub

Lucrul cu mulÛimile de înregistr|ri în Access 2000


0264-401667
NU COPIA !.

sau suna la:

Î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:

Tipul cusorului Descriere Avantaje Dezavantaje


Dynamic MulÛime de AfiÕeaz| toate Permite folosirea
înregistr|ri dintr-un modific|rile f|cute marcajelor numai
tabel sau dintr-o alt| de alÛi utilizatori. dac| furnizorul le
surs| de date. suport|. Nu poate
lucra cu jet ole db în
acest mod.
366 Access 2000, ADO -si ADOX - cursul 14

Keyset MulÛime de poantori AfiÕeaz| toate Nu afiÕeaz| noile


(bookmarks) care modific|rile f|cute înregistr|ri ad|ugate
refer| datele unui de alÛi utilizatori. de alÛi utilizatori.

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:

Deschiderea unei mulÛimi de înregistr|ri


Codul pentru deschiderea unei mulÛimi de înregistr|ri este de forma:

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 !.

sau suna la:

rs.Connection = CurrentProject.Connection
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Open "Members"

rs.Open "Members", CurrentProject.Connection, adOpenStatic, _


adLockOptimistic

7 specific| locul din care vin datele Õi trebuie s| fie:


Parametrul Sursa
• numele unui tabel existent;
• numele unei interog|ri existente sau a unei proceduri stocate care întoarce înregistr|ri;
• o instrucÛiune SQL care întoarce înregistr|ri;
• numele unei variabile obiect Command existente;
367 Access 2000, ADO -si ADOX - cursul 14

• numele de fiÕier al unei mulÛimi de înregistr|ri persistente.

Parametrul TipCursor specific| tipul cursorului pe care ADO îl foloseÕte la navigarea

http://www.east.utcluj.ro/mb/mep/antal
printre înregistr|ri Õi trebuie s| fie una dintre constantele prezentate în tabelul care urmeaz|:

Numele constantei de tipul cursor Descriere


adOpenDynamic Deschide o mulÛime dinamic| de înregistr|ri.
adOpenKeyset Deschide o mulÛime de înregistr|ri de chei.
Acest curs este proprietatea lui
adOpenStatic Deschide o mulÛime de înregistr|ri statice.
adOpenForwardOnly Deschide o mulÛime de înregistr|ri pentru navigare
în faÛ|.
ANTAL Tiberiu Alexandru.

Parametrul TipBlocare specific| comportamentul în cazul edit|rii mulÛimii de înregistr|ri


în cazul bloc|rii lor. Tabelul urm|tor prezint| constantele predefinite care pot fi folosite:
Pt. cumparare viziteaza:

Numele constantei de tipul blocare Descriere


adLockReadOnly MulÛimea de înregistr|ri nu poate fi editat|.
adLockPessimistic Blocarea mulÛimii de înregistr|ri este pesimist|.
adLockOptimistic Blocarea mulÛimii de înregistr|ri este optimist|.
adLockBatchOptimistic Pentru mulÛimile de înregistr|ri care vor folosi
metoda UpdateBatch pentru actualizarea mai
multor înregistr|ri într-o singur| operaÛie. 0264-401667
NU COPIA !.

sau suna la:

Not|: Implicit, mulÛimea de înregistr|ri ADO seteaz| valorile acestor parametri la


adOpenForwardOnly Õi adLockReadOnly

Parametrul Opt -iuni spune lui ADO cum s| evalueze parametrul Sursa
7, el poate lua
valorile prezentate în tabelul urm|tor:

Numele constantei de evaluare Descriere


adCmdText Spune furnizorului s| evalueze sursa ca Õi instrucÛiune
SQL.
adCmdTable Spune ADO-ului s| genereze o interogare SQL pentru
citirea tuturor înregistr|rilor unui tabel sau interogare a
c|rui nume este specificat în surs|.
368 Access 2000, ADO -si ADOX - cursul 14

adCmdTableDirect Spune furnizorului s| întoarc| toate înregistr|rile unui


tabel sau interogare a c|rui nume este specificat în
surs|.

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.

Public Sub DeschideMultimedeInregistrariADO()


Pt. cumparare viziteaza:
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field

Set con = CurrentProject.Connection


Set rs = New ADODB.Recordset

rs.Open "SELECT * FROM Members", con, adOpenForwardOnly,E


adLockReadOnly
0264-401667
NU COPIA !.

sau suna la:

For Each fld In rs.Fields


Debug.Print fld.Name; "= "; fld.Value
Next

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

Crearea obiectelor mulÛime de înregistrare


Marele avantaj al ADO este flexibilitatea, adic| exist| mai multe feluri de a scrie acelaÕi cod.
Exemplele care urmeaz| specific| mai multe moduri de creare ale unui obiect Recordset:

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

2. Crearea unei mulÛimi de înregistr|ri pe baza unei interog|ri salvate în baza de


date:
Acest curs este proprietatea lui

Set rs = New ADODB.Recordset


rs.Open "[NumeInterogare]", CurrentProject.Connection
ANTAL Tiberiu Alexandru.

3. Crearea unei mulÛimi de înregistr|ri care se poate edita Õi permite navigarea


împreun| cu sortare:
Pt. cumparare viziteaza:
rs.CursorLocation=adUseClient
rs.Open "SELECT * FROM numeTabel", CurrentProject.Connection,E
adOpenKeyset, adLockOptimistic

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 !.

sau suna la:

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|.

Navigarea printre înregistr|ri


Acest curs este proprietatea lui
La fel ca Õi la DAO, ADO are metodele Move, MoveFirst, MoveLast, MoveNext Õi
MovePrevious pentru deplasarea de la o înregistrare la alta. Codul care urmeaz| prezint|
folosirea lui MoveNext pentru a parcurge toate întegistr|rile obiectului Recordset.
ANTAL Tiberiu Alexandru.

Public Sub ParcurgeMultimedeInregistrariADO()


Dim con As ADODB.Connection
Pt. cumparare viziteaza:
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field

Set con = CurrentProject.Connection


Set rs = New ADODB.Recordset

rs.Open "SELECT * FROM Members", con, adOpenForwardOnly,E


adLockReadOnly
0264-401667
NU COPIA !.

Do Until rs.EOF
sau suna la:

For Each fld In rs.Fields


Debug.Print fld.Value & ", ";
Next
Debug.Print
rs.MoveNext
Loop

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

Recordset.Find Criteriu, SariRanduri, SensCautare, Inceput

SemnificaÛia parametrilor este:


ANTAL Tiberiu Alexandru.

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|.

Public Sub CautaInregistrariADO()


Dim rs As ADODB.Recordset
0264-401667
NU COPIA !.

sau suna la:

Dim fld As ADODB.Field


Dim crt As String

crt = "[LastName] = 'Fuller'"

Set rs = New ADODB.Recordset


rs.Open "Members", CurrentProject.Connection, E
adOpenKeyset, adLockOptimistic, adCmdTable
rs.Find crt
Do While Not rs.EOF
For Each fld In rs.Fields
Debug.Print fld.Value & ", ";
372 Access 2000, ADO -si ADOX - cursul 14

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:

Metoda DAO SariRanduri din SensCautare din Find


ANTAL Tiberiu Alexandru.

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".

În cazul deschiderii unei mulÛimi de înregistr|ri cu opÛiunea adCmdTableDirect se poate


folosi metoda Seek pentru localizarea mai rapid| a unei înregistr|ri folosind codul care
urmeaz|. Localizarea unei date cu Seek se realizeaz| în dou| etape:
1. SetaÛi proprietatea Index a mulÛimii. Aceasta spune Access-ului dup| care index se
va realiza c|utarea. Dac| c|utarea se va face dup| cheia primar| trebuie s| cunoaÕteÛi numele
ei (dac| numele ei nu s-a modificat din program acesta este PrimaryKey);
2. FolosiÛi metoda Seek pentru g|sirea valorii dorite prin utilizarea unei opÛiuni de
c|utare Õi a uneia sau a mai multor valori de c|utare. Dac| index-ul este format din mai multe
câmpuri se vor furniza toate valorile de câmpuri printr-un tablou care se poate construi
folosind funcÛia Array.
373 Access 2000, ADO -si ADOX - cursul 14

Seek lucreaz| numai cu mulÛimi de înregistr|ri care au proprietatea CursorLocation


setat| la ceva diferit de adUserClient. Pentru c| setarea implicit| este adUseServer
aceasta, de obicei, nu va fi o problem|. OpÛiunile de c|utare se specific| prin constantele

http://www.east.utcluj.ro/mb/mep/antal
predefinite din tabelul care urmeaz|:

OpÛiune Seek Descriere


adSeekAfterEQ C|utarea cheii egal| cu valoarea specificat| sau dac| nu este o
astfel de cheie, prima cheie dup| punctul unde egalitatea ar fi
ap|rut.
Acest curs este proprietatea lui
adSeekAfter C|utarea primei chei dup| punctul în care egalitatea apare sau ar
fi ap|rut.
adSeekBeforeEQ C|utarea cheii egal| cu valoarea specificat| sau dac| nu este o
astfel de cheie, prima cheie înaintea punctului unde egalitatea ar
fi ap|rut.
ANTAL Tiberiu Alexandru.

adSeekBefore C|utarea primei chei înaintea punctului în care apare egalitatea


Pt. cumparare viziteaza:
sau ar fi ap|rut.
adSeekFirstEQ Caut| prima cheie egal| cu valoarea specificat|.
adSeekLastEQ Caut| ultima cheie egal| cu valoarea specificat|.

Public Sub CautarecuSeekADO()


Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

Set con = CurrentProject.Connection


0264-401667
NU COPIA !.

sau suna la:

Set rs = New ADODB.Recordset

rs.Open "Members", con, adOpenKeyset, adLockReadOnly, E


adCmdTableDirect
rs.Index = "PrimaryKey"

rs.Seek 5, adSeekFirstEQ

If Not rs.EOF Then


Debug.Print rs.Fields("FirstName").Value, E
rs.Fields("LastName").Value
End If
374 Access 2000, ADO -si ADOX - cursul 14

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

Editarea datelor unei mulÛimi de înregistr|ri


Dac| o mulÛime de înregistr|ri se poate actualiza prin specificarea tipului corespunz|tor DAO
sau în ADO prin parametrii TipCursor Õi TipBlocare se pot modifica, ad|uga Õi Õterge
înregistr|ri prin folosirea obiectului Recordset.
ANTAL Tiberiu Alexandru.

Modificarea unei înregistr|ri


Pt. cumparare viziteaza:

Modificarea din program a unei înregistr|ri se face parcurgând etapele:


1. PoziÛionare pe înregistrarea dorit|;
2. Realizarea modific|rilor;
3. Folosirea opÛional| a metodei Update pentru salvarea modific|rilor.

Public Sub ModificarecuADO()


Dim con As ADODB.Connection
Dim rs As ADODB.Recordset 0264-401667
NU COPIA !.

sau suna la:

Set con = CurrentProject.Connection


Set rs = New ADODB.Recordset

rs.Open "Members", con, adOpenKeyset, adLockOptimistic,E


adCmdTable

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:

Ad|ugarea unei înregistr|ri noi


Unei mulÛimi de înregistr|ri care se poate actualiza Õi care are securitatea aÕa încât s| ne
permit| aceasta, i se adaug| o înregistrare parcurgând etapele:
1. FolosiÛi metoda AddNew pentru ad|ugarea unei înregistr|ri. Toate câmpurile vor
primi valorile lor implicite;
2. CompletaÛi câmpurile cu valorile dorite;
3. OpÛional, folosiÛi metoda Update pentru salvarea noii înregistr|ri. Dac| nu apelaÛi
metoda Update dar v| poziÛionaÛi pe o alt| înregistrare ADO va salva înregistrarea automat.
Dac| încercaÛi s| închideÛi o mulÛime de înregistr|ri far| salvarea explicit| a înregistr|rii se va
genera o eroare în execuÛie. 0264-401667
NU COPIA !.

sau suna la:

Public Sub AdaugarecuADO()


Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

Set con = CurrentProject.Connection


Set rs = New ADODB.Recordset

rs.Open "Household", con, adOpenKeyset, adLockOptimistic,E


adCmdTable

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

Ôtergerea unei înregistr|ri


Pentru a Õterge o înregistrare dintr-o mulÛime de înregistr|ri se parcurg etapele:
ANTAL Tiberiu Alexandru.

1. PoziÛionare pe înregistrarea dorit|;


Pt. cumparare viziteaza:
2. Apelarea metodei Delete.

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.

Public Sub StergeToateInregistarileunuiTabelcuADO()


Dim con As ADODB.Connection 0264-401667
NU COPIA !.

Dim rs As ADODB.Recordset
sau suna la:

Set con = CurrentProject.Connection


Set rs = New ADODB.Recordset

rs.Open "Members", con, adOpenStatic, adLockOptimistic,E


adCmdTable

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".

Public Sub ModificareInBloccuADO()


Dim con As ADODB.Connection
Dim rs As ADODB.Recordset 0264-401667
NU COPIA !.

Dim crt As String


sau suna la:

Set con = CurrentProject.Connection


Set rs = New ADODB.Recordset
crt = "[Country] = 'USA'"

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

Dac| modific|rile nu pot fi salvate, de exemplu pentru c| un alt utilizator a Õters o


înregistrare, apare o eroare în execuÛie. Într-un astfel de caz se poate folosi proprietatea
Filter împreun| cu constanta adFilterAffectedRecords pentru filtrarea
interog|rilor afectate de ultimul Delete, UpdateBatch sau CancelBatch.
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


Executarea interog|rilor
La fel ca Õi în DAO Õi în ADO interog|rile pot fi executate îns| cu o tehnic| Õi o
funcÛionalitate m|rit|.

Executarea unei interog|ri f|r| parametri stocate în baza de date


O interogare f|r| parametri stocat| în baza de date este o instrucÛiune SQL care a fost slavat|
în baza de date Õi nu necesit| informaÛii suplimentare pentru a fi executat|. Codul care
urmeaz| lucreaz| cu o astfel de interogare:

Public Sub ExecutieInterogareStocataADO() 0264-401667


NU COPIA !.

Dim con As ADODB.Connection


sau suna la:

Dim rs As ADODB.Recordset
Dim fld As ADODB.Field

Set con = CurrentProject.Connection


Set rs = New ADODB.Recordset

rs.Open "[Invoices]", con, adOpenForwardOnly, E


adLockReadOnly, adCmdStoredProc

With rs
Do Until .EOF
379 Access 2000, ADO -si ADOX - cursul 14

For Each fld In .Fields


Debug.Print fld.Value & "' ";

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.

Pt. cumparare viziteaza:


ObservaÛi c| interogarea se foloseÕte la fel ca Õi în DAO cu diferenÛa c| aici numele
interog|rii în Open se scrie între paranteze dreptunghiulare. Ea foloseÕte interogarea Invoices
din baza de date Northwind.mdb.

Executarea unei interog|ri cu parametri stocate în baza de date


O interogare cu parametri stocat| în baza de date este o instrucÛiune SQL care a fost salvat| în
baza de date Õi necesit| informaÛii suplimentare de natur| variabil| pentru a fi executat|.
Codul care urmeaz| lucreaz| cu o astfel de interogare:

Public Sub ExecutieInterogareStocatacuParametriADO() 0264-401667


NU COPIA !.

Dim con As ADODB.Connection


sau suna la:

Dim com As ADODB.Command


Dim rs As ADODB.Recordset
Dim fld As ADODB.Field

Set con = CurrentProject.Connection

Set com = New ADODB.Command


Set com.ActiveConnection = con
com.CommandText = "[Sales by Year]"

Set rs = com.Execute(, Array(#7/28/1996#, #1/28/2000#), E


adCmdStoredProc)
380 Access 2000, ADO -si ADOX - cursul 14

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.

Set con = Nothing


Pt. cumparare viziteaza:

End Sub

O alt| form| de scriere al aceluiaÕi cod, îns| prin folosirea parametrului Parameters din
obiectul Command în locul metodei Execute este:

Public Sub ExecutieInterogareStocatacuParametriADO1()


Dim con As ADODB.Connection
Dim cat As ADOX.Catalog 0264-401667
NU COPIA !.

Dim com As ADODB.Command


sau suna la:

Dim rs As ADODB.Recordset
Dim fld As ADODB.Field

Set con = CurrentProject.Connection

Set cat = New ADOX.Catalog


cat.ActiveConnection = con

Set com = cat.Procedures("sales by Year").Command


com.Parameters("Forms![Sales By YearE
Dialog]!BeginningDate") = _ #7/28/1996#
com.Parameters("Forms![Sales By Year Dialog]!EndingDate")E
381 Access 2000, ADO -si ADOX - cursul 14

= #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 !.

sau suna la:

Public Sub ExecutieInterogareStocatacuParametriADO2()


Dim par As ADODB.Parameter
Dim com As ADODB.Command
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim cat As ADOX.Catalog
Dim pro As ADOX.Procedure

Set cat = New ADOX.Catalog


cat.ActiveConnection = CurrentProject.Connection
Set pro = cat.Procedures("Sales by Year")
382 Access 2000, ADO -si ADOX - cursul 14

Set com = pro.Command

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.

Debug.Print fld.Value & "' ";


Pt. cumparare viziteaza:
Next
Debug.Print
.MoveNext
Loop
.Close
End With

Set rs = Nothing
Set con = Nothing
0264-401667
NU COPIA !.

sau suna la:

Set pro = Nothing

Set cat = Nothing


End Sub

Pentru ca exemplul prezentat s| funcÛioneze,


trebuie deschis formularul "Sales by Year
Dialog" din baza de date Northwind.mdb.
Dac| interogarea are ca parametri obiecte ale
unui formular trebuie ca formularul s| fie
deschis, cu valorile parametrilor completaÛi,
înainte de lansarea interog|rii din program.
ObservaÛi modul ciudat de stocare a obiectului
Command. Se foloseÕte ADOX (despre care se
va vorbi mai pe larg în paragraful urm|tor)
383 Access 2000, ADO -si ADOX - cursul 14

pentru a extrage proprietatea Command a obiectului Procedure (o interogare stocat|). În


condiÛii normale s-ar fi creat un obiect Command Õi s-ar fi atribuit propriet|Ûii
CommandText numele interog|rii stocate în baza de date. Aceast| metod| îns| funcÛioneaz|

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.

Definirea Õi înc|rcarea schemei bazelor de date


Orice baz| de date conÛine un num|r de tabele, indexuri, constrângeri etc. DefiniÛiile acestor
Acest curs este proprietatea lui
obiecte, toate la un loc, poart| denumirea de schema bazei de date. Atât DAO cât Õi ADO pun
la dispoziÛia utilizatorului obiecte pentru crearea de noi obiecte în baza de date cât Õi pentru
înc|rcarea informaÛiilor legate de obiectele deja existente în baz|. Pentru manipularea din
program ale acestor obiecte trebuie setat| referinÛa c|tre Microsoft ADO Extensions for DDL
and Security sau ADOX.
ANTAL Tiberiu Alexandru.

Crearea unei baze de date


Pt. cumparare viziteaza:
Înainte de crearea tabelelor sau a definirii oric|ror altor obiecte ale bazei de date trebuie creat|
baza de date în sine. Codul care urmeaz| ilustreaz| cum se realizeaz| aceasta cu ADOX:

Public Sub CreareBazadeDate()


Dim cat As ADOX.Catalog
Set cat = New ADOX.Catalog
cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=.\bdnoua2000.mdb"
End Sub 0264-401667
NU COPIA !.

sau suna la:

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.

cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _


"Data Source=.\bdnoua2000.mdb" & _
"Jet OLEDB:Encrypt Database=True;" & _
"Jet OLEDB:Engine Type=2;"

Înc|rcarea informaÛiilor legate de schema bazei de date


Exemplul care urmeaz| afiÕeaz| toate tabelele bazei de date prin parcurgerea colecÛiei ADOX
384 Access 2000, ADO -si ADOX - cursul 14

Tables:

http://www.east.utcluj.ro/mb/mep/antal
Public Sub AfisareTabele()
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table

Set cat = New ADOX.Catalog


Acest curs este proprietatea lui
cat.ActiveConnection = CurrentProject.Connection

For Each tbl In cat.Tables


If ((tbl.Type <> "VIEW") And (tbl.Type <> "SYSTEM E
ANTAL Tiberiu Alexandru.

TABLE")) Then Debug.Print tbl.Name, tbl.Type


Next
Pt. cumparare viziteaza:

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:

Valoarea proprieta7 t-ii Type Descriere 0264-401667


NU COPIA !.

ACCESS TABLE Tabelul este unul de sistem al Microsoft Access-ului.


sau suna la:

LINK Tabelul este legat printr-o surs| de date ne-ODBC.


PASS-THROUGH Tabelul este legat printr-o surs| ODBC.
SYSTEM TABLE Tabelul este unul de sistem al motorului Microsoft Jet.
TABLE Tabel normal.
VIEW Tabelul este o interogare f|r| parametri care întoarce
înregistr|ri.

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.

Pt. cumparare viziteaza:


Set cat = New ADOX.Catalog
cat.ActiveConnection = CurrentProject.Connection
Set tbl = New ADOX.Table

With tbl
.ParentCatalog = cat
.Name = "Clienti"
.Columns.Append "IDClient", adInteger
.Columns("IDClient").Properties("AutoIncrement") = E 0264-401667
NU COPIA !.

True
sau suna la:

.Columns.Append "Nume", adVarWChar


.Columns.Append "Prenume", adVarWChar
End With

cat.Tables.Append tbl
cat.Tables.Refresh

Set tbl = Nothing


Set cat = Nothing

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:

Tip de dat| DAO Tip de dat| ADO


Acest curs este proprietatea lui
dbBinary adBinary
dbBoolean adBoolean
dbByte adUnsignedTinyInt
dbCurrency adCurrecy
ANTAL Tiberiu Alexandru.

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.

Proprietate Valoare Proprietate Table Valoare


TableDef ADOX
DAO
Attributes dbAttachExclusive Jet OLEDB: Exclusive True
Link
Attributes dbAttachSavePWD Jet OLEDB: Cache True
Link Name/Password
387 Access 2000, ADO -si ADOX - cursul 14

Attributes dbAttachedTable Type "LINK"

Attributes dbAttachedODBC Type "PASS-THROUGH"

http://www.east.utcluj.ro/mb/mep/antal
Proprietate Valoare Proprietate Column Valoare
Field DAO ADOX
Attributes dbAutoIncrement AutoIncrement True

Attributes dbFixedField ColumnAttributes adColFixed


Acest curs este proprietatea lui
Attributes dbHyperlinkField Jet OLEDB: True
Hyperlink
Attributes dbSystemField nu are echivalent -

Attributes dbUpdatableField Attribute (obiectul adFldUpdatable


ANTAL Tiberiu Alexandru.

Field)
Attributes dbVariableField ColumnAttribute Not adColFixed
Pt. cumparare viziteaza:

În exemplul prezentat proprietatea ParentCatalog a obiectului Catalog este setat| la


cea a furnizorului înainte de setarea propriet|Ûii AutoIncrement la valoarea True din
colecÛia Properties.

Crearea unui tabel legat


Legarea cunoscut| Õi sub denumirea de ataÕare a unui tabel dintr-o baz| de date extern|
permite citirea, actualizarea Õi ad|ugarea datelor Õi crearea de interog|ri pe baza tabelului
legat ca Õi când acesta ar face parte din baza de date. Pentru crearea unui tabel legat trebuie
specificat| sursa datelor externe Õi numele tabelului extern. În ADOX, propriet|Ûi specifice 0264-401667
furnizorului Microsoft Jet sunt folosite pentru crearea leg|turii. La referirea colecÛiei
NU COPIA !.

sau suna la:

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.

Public Sub LegareTablecuADO()


Dim cat As New ADOX.Catalog
388 Access 2000, ADO -si ADOX - cursul 14

Dim tbl As New ADOX.Table

http://www.east.utcluj.ro/mb/mep/antal
cat.ActiveConnection = CurrentProject.Connection

tbl.Name = "Clienti-legati"
Set tbl.ParentCatalog = cat

tbl.Properties("Jet OLEDB:Create Link") = True


Acest curs este proprietatea lui

tbl.Properties("Jet OLEDB:Link Datasource") =E


".\bdnoua2000.mdb"
tbl.Properties("Jet OLEDB:Link Provider String") = ""
tbl.Properties("Jet OLEDB:Remote Table Name") = "Clienti"
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


cat.Tables.Append tbl

Set cat = Nothing


End Sub

ObservaÛi în codul de mai sus linia Dim cat As New ADOX.Catalog, aceasta este
echivalenta liniilor:

Dim cat As ADOX.Catalog


Set cat = New ADOX.Catalog
0264-401667
NU COPIA !.

sau suna la:

Modific|ri aduse tabelelor


Odat| ce un tabel a fost creat se pot aduce modific|ri acestuia, astfel putem ad|uga sau Õterge
coloane, schimba regulile de validare sau actualiza leg|turile c|tre tabele legate.

Codul care urmeaz| adaug| un câmp de tipul Memo tabelului Clienti din baza de date
bdnoua2000.mdb.

Public Sub AdaugaunCampADOX()


Dim cat As New ADOX.Catalog
Dim col As New ADOX.Column

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

Set col = Nothing


Set cat = Nothing

End Sub
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:


În cazul tabelelor legate, dac| parola de conectare la baza de date sau poziÛia bazei de date pe
disc care conÛine tabelele legate se modific|, de exemplu datorit| mut|rii acesteia într-un alt
director, codul care urmeaz| va realiza legarea tabelelor dac| se va specifica noua parol| Õi
noua cale c|tre baza de date.

Public Sub ActualizareLegaturicuADO()


Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table

cat.ActiveConnection = CurrentProject.Connection
0264-401667
NU COPIA !.

sau suna la:

For Each tbl In cat.Tables


If tbl.Type = "LINK" Then
tbl.Properties("Jet OLEDB:Create Link") = False
tbl.Properties("Jet OLEDB:Link Datasource") = _
"calenoua\bdnoua2000.mdb"
tbl.Properties("Jet OLEDB:Link Provider String") = _
";pwd=nouaparola"
tbl.Properties("Jet OLEDB:Create Link") = True
End If
Next

Set cat = Nothing


390 Access 2000, ADO -si ADOX - cursul 14

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

Crearea unei interog|ri stocate în baza de date folosind colecÛia Views


Pentru c| în exemplul care urmeaz| interogarea este f|r| parametri Õi întoarce înregistr|ri,
obiectul ADO Command va fi ad|ugat colecÛiei ADOX Views.
ANTAL Tiberiu Alexandru.

Public Sub CreareIntrogareStocatecuADO()


Pt. cumparare viziteaza:
Dim cat As New ADOX.Catalog
Dim com As New ADODB.Command

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 !.

Set com = Nothing


sau suna la:

End Sub

Crearea unei interog|ri stocate în baza de date folosind colecÛia Procedures

Public Sub CreareIntrogareStocatecuADO1()


Dim cat As New ADOX.Catalog
Dim com As New ADODB.Command

cat.ActiveConnection = CurrentProject.Connection
com.CommandText = "PARAMETERS [Nume client] Text ( 255E
);SELECT" & _
391 Access 2000, ADO -si ADOX - cursul 14

"Clienti.Nume FROM Clienti WHERE (((Clienti.Nume) LikeE


[Nume" & "client]));"
cat.Procedures.Append "ClientiPar", com

http://www.east.utcluj.ro/mb/mep/antal
cat.Procedures.Refresh
Set cat = Nothing
com.Execute
End Sub
Acest curs este proprietatea lui

Modificarea instrucÛiunii SQL a unei interog|ri


Pentru modificarea instrucÛiunii SQL a unei interog|ri trebuie creat un obiect Command bazat
pe interogarea de modificat din baza de date. Apoi se modific| proprietatea CommandText,
iar în final se reseteaz| proprietatea Command a interog|rii dup| cum se vede în codul care
ANTAL Tiberiu Alexandru.

urmeaz|:
Pt. cumparare viziteaza:

Public Sub ModificareIntrogareStocatecuADO()


Dim cat As New ADOX.Catalog
Dim com As New ADODB.Command

cat.ActiveConnection = CurrentProject.Connection
Set com = cat.Procedures("ClientiPar").Command
com.CommandText = "SELECT * FROM Clienti;"
'aici se salveaza procedura actualizata 0264-401667
NU COPIA !.

Set cat.Procedures("ClientiPar").Command = com


sau suna la:

Set cat = Nothing


Set com = Nothing
End Sub

Crearea unui index


Crearea unui obiect index necesit| folosirea obiectului ADOX Index. Dup| crearea
obiectului, trebuie ad|ugat unui câmp, apoi se va specifica c| va fi cheie primar|, unic| Õi
ordinea de sortare. În DAO exist| dou| propriet|Ûi Required Õi IgnoreNulls care
împreun| determin| dac| vor fi sau nu inserate valori Null pentru câmpurile din index Õi dac|
intr|rile index vor fi sau nu create când unele câmpuri ale unui index cu mai multe coloane
conÛin valori Null. Tabelul care urmeaz| prezint| proprietatea ADOX IndexNulls
comparativ cu cele din DAO.
392 Access 2000, ADO -si ADOX - cursul 14

DAO DAO ADOX IndexNulls Descriere


Required IgnoreNulls

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

False False adIndexNullsAllow Valoarea Null este


permis| în câmpul
index; se adaug| o
intrare index.
ANTAL Tiberiu Alexandru.

Implicit proprietatea IndexNulls este setat| la valoarea adIndexNullsDisallow ceea ce


Pt. cumparare viziteaza:
face ca valorile Null s| fie nepermise în index Õi nu se va ad|uga o intrare cu un index care
are un câmp Null.

Public Sub CreeazaUnIndexADOX()


Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Dim ind As New ADOX.Index

cat.ActiveConnection = CurrentProject.Connection 0264-401667


NU COPIA !.

Set tbl = cat.Tables("Clienti")


sau suna la:

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

Set cat = Nothing


Set tbl = Nothing

http://www.east.utcluj.ro/mb/mep/antal
Set ind = Nothing
End Sub

Crearea unei relaÛii


Crearea unei relaÛii se face prin obiectul ADOX Key, care dup| crearea Õi setarea
propriet|Ûilor lui se va ad|uga obiectului Tabel. RelaÛia din codul care urmeaz| se creeaz|
Acest curs este proprietatea lui
între tabelele Categories Õi Products ale bazei de date Northwind.mdb. Aceast| relaÛie exist|
deja în baza de date Õi va putea fi creat| din cod numai dac| deschideÛi fereastra relaÛiilor Õi o
ÕtergeÛi înainte de lansarea în execuÛie a codului.

Public Sub CreareRelatieADOX()


ANTAL Tiberiu Alexandru.

Dim cat As New ADOX.Catalog


Pt. cumparare viziteaza:
Dim che As New ADOX.Key

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

Set cat = Nothing


Set che = Nothing
End Sub
394 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

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.

Pt. cumparare viziteaza:

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:

Nume Tabel Nume câmp


TFirme IDFirma Data Type: AutoNumber
PrimaryKey
Firma Data Type: Text
Field Size: 100
Profil Data Type: Memo
TPolite IDPolita Data Type: AutoNumber
PrimaryKey
IDFirma Data Type: Number
Field Size: Long Integer
Data Data Type: Date/Time
395 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

TRate IDRata Data Type: AutoNumber


PrimaryKey

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

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

Border Style Dialog

On Open Set Forms!FFirme!sf2.Form.Recordset =


Acest curs este proprietatea lui
Forms!FFirme!sf1.Form.Recordset

În vederea sincroniz|rii celor dou| subformulare se foloseÕte proprietatea Recordset care


reprezint| sursa de date (Record Source) pentru cele dou| subformulare. Aceast| proprietate
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:


Private Sub Form_DblClick(Cancel As Integer)
If Not IsNull(Forms!FFirme!sf1.Form.IDFirma) Then
DoCmd.OpenForm "FFirma", , , , , acDialog,E
Forms!FFirme!sf1.Form.IDFirma
End If
End Sub

Acesta, la realizarea unui clic dublu, pe selectorul de înregistra7 ri a subformularului sf1, va


duce la deschiderea formularul cu numele FFirma (care înca7 nu exista7 ). De asemenea, se va
transmite ca argument, noului formular deschis, conÛinutul câmpului
0264-401667
NU COPIA !.

Forms!FFirme!sf1.Form.IDFirma din subformularul sf1. Valoarea va fi folosit|


sau suna la:

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.

• selectaÛi pe rând View, Toobars, Customize;


Realizarea unui
meniu • clic pe butonul New, introduceÛi în fereastra de dialog New
Toolbar, Sortare, care va fi numele noului meniu (vezi figura
398 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

urma7 toare);

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

î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:

Public Function SortareCrescatoare()


0264-401667
NU COPIA !.

sau suna la:

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

Public Function SortareDescrescatoare()


Forms!FFirme!sf1.Form.OrderByOn = True
Forms!FFirme!sf1.Form.OrderBy = "[" &E
Screen.ActiveControl.Name & "] DESC"
Set Forms!FFirme!sf2.Form.Recordset =E
Forms!FFirme!sf1.Form.Recordset
399 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

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.

Pt. cumparare viziteaza:

ObservaÛi c| fiecare macro va lansa în execuÛie o funcÛie corespunz|toare unei intrari în


meniul pe care urmeaz| s|-l construim (ultimul macro n-a mai fost prezentat mai sus, el va
lansa în execuÛie funcÛia SortareDescrescatoare()).
• realizaÛi clic cu butonul din dreapta pe noul 0264-401667
NU COPIA !.

sau suna la:

meniu apoi, selectaÛi

Customize; selectaÛi pe Commands Õi apoi pe All


Macros, în fereastra Commands (vezi fereastra
ala7 turata7 ) vor fi afiÕate cele trei macro-uri; folosiÛi
tehnica drag-and-drop pentru a trage numele
acestor macro-uri pe suprafaÛa noului meniu pentru
ca el s| fie de forma:

• în fereastra de dialog Customize daÛi clic pe Toolbars, apoi selectaÛi numele


400 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

meniului, ap|saÛi butonul Properties Õi setaÛi proprietatea Type a meniului la Popup.


Acceptat-i mesajul de avertisment dat de Access s- i vet-i vedea ca7 meniul dispare din lista
meniurilor. Daca7 dorit-i sa7 -l mai modificat-i, selectat-i Customize, Toolbars, Properties, iar în

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.

Pt. cumparare viziteaza:

• 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 !.

sau suna la:

Sincronizarea a trei formulare


401 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

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 !.

sau suna la:


402 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Valoarea parametrului IDFirma este stocat| în proprietatea OpenArgs a formularului care


se deschide prin metoda OpenForm. Daca7 proprietatea OpenArgs cont-ine o valoare atunci

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 !.

sau suna la:

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.

nimic la proprietatea Control Source. La fiecare trecere pe o înregistrare nou| în


subformularul sf1 valoarea acestui control va fi actualizat|, în acelaÕi timp numele acestui
Pt. cumparare viziteaza:
control va fi trecut cu mâna în propriet|Ûile LinkChildFields Õi LinkMasterFields
ale subformularului sf2. Actualizarea valorii controlului IDPolita se realizeaz| prin
procedura de tratare a evenimentului On Current în subformularul sf1 astfel:

Private Sub Form_Current()


Me.Parent("IDPolita") = IDPolita
End Sub

Proprietatea Parent este folosit|, în procedura anterioar|, pentru a accesa pe IDPolita


din formularul p|rinte.
0264-401667
NU COPIA !.

sau suna la:

La crearea unei referinÛe prin cod între un formular Õi un subformular


Accesul la
controalele unui sunt importante numai numele formularului Õi al controlului
subformular subformular, adic| valorile propriet|Ûilor Name. În acest sens numele
subformularului conÛinut în proprietatea Source Object nu este
folosit nic|ieri pentru referirea controlului de tip subformular.
Subformularul este doar un control Õi de multe ori numele acestuia va fi diferit de cel al
numelui formularului conÛinut în subformular.

Pentru a referi un subformular al unui formular se foloseÕte proprietatea Form a controlului


subformular de referit astfel:

Forms![NumeFormular]![NumeControlSubformular].Form.
404 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Dac| dorim s| referim un control cu numele NumeControlSF al subformularului care are


numele de control NumeControlSubformular atunci putem folosi formele de scriere:

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

trebuie s| ÕtiÛi c|:


• caracterul punct (“.”) se foloseÕte numai pentru a prefaÛa propriet|Ûi sau metode
Õi nu obiecte ale unei colecÛii;
• caracterul semn de exclamare (“!”), în momentul prelucr|rii expresiei, se
ANTAL Tiberiu Alexandru.

transform| într-un set de paranteze rotunde Õi de ghilimele în jurul obiectului, astfel


scrierea:
Pt. cumparare viziteaza:
Forms!NumeFormular!NumeSubformular
este echivalent| cu urma7 toarele:
Forms("NumeFormular")!NumeSubformular
Forms("NumeFormular")("NumeSubformular")

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 !.

În cazul formularului FFirma un caz particular este cel în care


Tratarea
sau suna la:

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.

Private Sub Form_Current()


If (Me!sf1.Form.RecordsetClone.RecordCount <= 0) Then E
Forms!FFirma!IDPolita = ""
End Sub

Ad|ugarea, prin cod, de date în dou| tabele aflate în relaÛie one-to-many


Pân| acum majoritatea codului a fost orientat pe sincronizarea între formulare. Ad|ugarea de
date într-un formular este o operaÛie care trebuie s| decurg| sigur Õi f|r| erori. În aces scop
scrierea unui cod care s| genereze setul de date care se doreÕte a fi introdus în tabele devine
esenÛial|. În formularul FFirma, la ap|sarea butonului Adauga, se va realiza introducerea
405 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

automat| de date în tabelele TPolite Õi TRate. O singur| înregistrare va fi ad|ugat| în TPolite Õi


una sau mai multe în TRate. Precum se observ| în figura anterioara7 , unele date sunt preg|tite
în avans (data primei rate care este data curent| Õi data urm|toarei rate care este la o lun| de la

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 !.

sau suna la:

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

Prima variant| de cod prezentat| foloseÕte DAO. Principiul de funcÛionare a codului va


r|mâne acelaÕi Õi în cazul implement|rii cu ADO. Variabilele da Õi du sunt folosite pentru
stocarea datei de azi Õi a datei pentru urm|toarea rat|. Din diferanÛa acestor date se poate
calcula num|rul de zile între rata curent| Õi cea care urmeaz|. Pentru realizarea operaÛiilor
407 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

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

1 Public Sub NoucuDAO()

2 Dim db As DAO.Database
ANTAL Tiberiu Alexandru.

3 Dim rs1 As DAO.Recordset


4 Dim rs2 As DAO.Recordset
Pt. cumparare viziteaza:
5 Dim t As String
6 Dim da As Date
7 Dim du As Date
8 Dim Rate As Integer, c As Integer
9 Dim d As Integer
10 Dim IDPolita As Long
11

12 On Error GoTo eroare


13
0264-401667
NU COPIA !.

sau suna la:

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

19 If (da >= du) Then


20 MsgBox "Data PRIMEI RATE trebuie sa fie mai mica (<)E
21 decit data RATEI URMATOARE", vbCritical, "Eroare la E
22 introducerea datelor"

23 Exit Sub
24 End If
25

26 If IsNull(Forms!FNou!Rate) Then
408 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

27 MsgBox "Numarul de rate trebuie obligatoriu E


28 completat", vbCritical, "Eroare la introducerea numarului E
29 de rate"

http://www.east.utcluj.ro/mb/mep/antal
30 Exit Sub
31 End If
32

33 d = DateDiff("d", da, du)


34
Acest curs este proprietatea lui
35 t = "TPolite"
36 Set db = CurrentDb
37 Set rs1 = db.OpenRecordset(t)
38
ANTAL Tiberiu Alexandru.

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

48 Rate = Forms!FNou!Rate 0264-401667


49 c = 1
NU COPIA !.

sau suna la:

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 !.

1 Public Sub NoucuADO()


sau suna la:

2 Dim rs1 As ADODB.Recordset


3 Dim rs2 As ADODB.Recordset
4 Dim t As String
5 Dim da As Date
6 Dim du As Date
7 Dim Rate As Integer, c As Integer
8 Dim d As Integer
9 Dim IDPolita As Long
10

11 On Error GoTo eroare


12
410 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

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

18 If (da >= du) Then


19 MsgBox "Data PRIMEI RATE trebuie sa fie mai mica (<)E
20 decit data RATEI URMATOARE", vbCritical, "Eroare la E
21 introducerea datelor"
Acest curs este proprietatea lui
22 Exit Sub
23 End If
24

25 If IsNull(Forms!FNou!Rate) Then
ANTAL Tiberiu Alexandru.

26 MsgBox "Numarul de rate trebuie obligatoriuE


27 completat", vbCritical, "Eroare la introducerea numaruluiE
Pt. cumparare viziteaza:
28 de rate"

29 Exit Sub
30 End If
31

32 d = DateDiff("d", da, du)


33

34 t = "TPolite"
35 Set rs1 = New ADODB.Recordset
rs1.CursorLocation = adUseClient
36
0264-401667
NU COPIA !.

sau suna la:

37 rs1.Open t, CurrentProject.Connection, adOpenKeyset,E


38 adLockOptimistic, adCmdTable

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

56 While (Rate > 0)


Acest curs este proprietatea lui
57 rs2.AddNew
58 rs2![Data ratei] = da
59 If (Rate > 1) Then
60 rs2![Denumire rata] = "Rata " + Str(c)
ANTAL Tiberiu Alexandru.

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 !.

71 Set rs1 = Nothing


sau suna la:

72 Set rs2 = Nothing


73

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


413 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Butonul Tipareste va realiza afiÕarea raportului TFirme.

Crearea rapoartelor aplicaÛiei

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


414 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Î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.

Pt. cumparare viziteaza:

deforma: . EditaÛi fiecare articol al meniului Fisiere realizând clic

0264-401667
NU COPIA !.

sau suna la:

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.

Pt. cumparare viziteaza:

AduceÛi meniul la forma urm|toare , observaÛi c| pe lâng|

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 !.

sau suna la:

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:

În final, din meniul


Tools selectaÛi
Startup Õi realizaÛi
set|rile din figura
ala7 turata7 .
417 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Din acest moment la fiecare pornire a aplicaÛiei ecranul va fi de forma:

http://www.east.utcluj.ro/mb/mep/antal
Acest curs este proprietatea lui
ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

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

ANEXA 1 - Lista principalelor instrucÛ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

AppActivate titlu, asteptare Activeaz| o aplicaÛie în curs de execuÛie cu titlul


sau ID de task specificat în titlu.
Beep Emite un semnal sonor folosind difuzorul.
ANTAL Tiberiu Alexandru.

Call nume, listaargumente Apelarea procedurii nume. Întrucât acelaÕi lucru se


poate obÛine numai prin folosirea lui nume
instrucÛiunea Call este folosit| destul de rar.
Pt. cumparare viziteaza:

ChDir cale Schimb| directorul curent la cel specificat în cale.


ChDrive disc Schimb| discul curent la cel specoficat în disc.
Close listanrfiÕiere Închide unul sau mai multe fiÕiere de intrare/ieÕire
deschise cu instrucÛiune Open Õi identificate prin
listanrfiÕiere.
Const NUMECONSTANTA Declar| o variabil| constant| cu numele
NUMECONSTANTA.
Date = data Schimb| data sistemului la data.
Declata o procedur| dintr-un DLL (Dynamic Link
0264-401667
NU COPIA !.

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

Error num|reroare Simuleaz| o eoare prin setarea lui Err la valoarea


num|reroare.

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.

GoSub ... Return Face ramificarea Õi revenirea dintr-un subprogram


Pt. cumparare viziteaza:
în cadrul unei proceduri.
GoTo linie Salt necondiÛionat la linia de program linie.
If ... Then ... Else Execut| una dintre cele dou| secÛiuni de cod în
funcÛie de rezultatul unui test logic.
Input #nrfiÕier, list|variabile CiteÕte date în list|variabile dintr-un fiÕier de
intare/ieÕire.
Kill cale Ôterge fiÕierul specificat în cale.
Let numevariabil| = expresie Seteaz| valoarea variabilei numevariabil| egal| cu
cea a lui expresie. Let este opÛional Õi în practic|
aproape c| nu se mai foloseÕte.
0264-401667
NU COPIA !.

sau suna la:

Line Input #nrfiÕier, var CiteÕte a linie dintr-un fiÕier de intrare/ieÕire în


variabila var.
Load Încarc| în memorie un formular definit de utilizator
f|r| al face vizibil pe ecran.
Lock #nrfisier, domeniuînreg Permite controlul accesului la un fiÕier de
intrare/ieÕire.
LSet varsir = sir Realizeaz| alinierea la stânga a unui Õir într-o
variabil| String.
LSet var1 = var2 Copiaz| o variabil| cu tipul definit de utilizator
într-o alt| variabil| cu tipul definit de utilizator
diferit.
Mid ÎnlocuieÕte caracterele dintr-o variabil| de tipul
String prin caracterele dintr-un al Õir.
451 Anexa 1 - Lista principalelor instruct-iuni VBA

MidB ÎnlocuieÕte date, la nivel de octet, într-o variabil| de


tipul String prin caracterele unui alt Õir.

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.

comparaÛie între Õiruri.


Option Explicit ForÛeaz| programatorul s| declare toate variabilele
Pt. cumparare viziteaza:
folosite într-un modul.
Option Private Specific| caracterul privat al unui modul acesta
neputând fi accesat de procedurile din afara
modulului.
Print #nrfiÕier Scrie date într-un fiÕier de intrare/ieÕire.
Private numevariabil| Declar| variabila cu numele numevariabil| privat|
ea putând fi utilizat| numai în modulul în care s-a
declarat.
Property Get Declar| o proprietate procedur|. 0264-401667
NU COPIA !.

Property Let Atribuie o valoare unei propriet|Ûi într-o proprietate


sau suna la:

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

Rem comentariu Spune lui VBA c| linia care urmeaz| este un


comentariu. Caracterul apostrof ( ' ) are aceeaÕi
semnificaÛie fiind Õi mult mai des folosit.

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.

Seek #nrfiÕier,poziÛie Seteaz| poziÛia curent| într-un fiÕier de


Pt. cumparare viziteaza:
intrare/ieÕire.
Select Case Execut| un grup de instrucÛiuni dintre mai multe
grupuri pe baza valorii unei expresii.
SendKeys sir, durat| Transmite o "ap|sare de tast|" definit| prin sir
aplicaÛiei active.
Set varobiect = obiect Atribuie pe obiect unei variabile de tipul Object cu
numele varobiect.
SetAttr cale, atribute Atribuie atributele specificate prin atribute unui
fiÕier specificat prin cale.
numevariabil| Declar| o variabil| cu numele numevariabil| care
Static
0264-401667
NU COPIA !.

va reÛine valorile stocate în ea tot timpul cât codul


sau suna la:

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.

Pt. cumparare viziteaza:

0264-401667
NU COPIA !.

sau suna la:


454 Anexa 2 - Lista principalelor funct-ii VBA

ANEXA 2 - Lista principalelor funcÛii VBA

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

FuncÛie Valoare întoars|


CBool(expresie) expresie convertit| la o valoare Boolean.
CByte(expresie) expresie convertit| la o valoare Byte.
ANTAL Tiberiu Alexandru.

CCur(expresie) expresie convertit| la o valoare Currency.


Pt. cumparare viziteaza:
CDate(expresie) expresie convertit| la o valoare Date.
CDble(expresie) expresie convertit| la o valoare Double.
CInt(expresie) expresie convertit| la o valoare Integer.
CLng(expresie) expresie convertit| la o valoare Long.
CSng(expresie) expresie convertit| la o valoare Single.
CStr(expresie) expresie convertit| la o valoare String.
CVar(expresie) expresie convertit| la o valoare Variant.
CVDate(expresie) expresie convertit| la o valoare Date. Exist| numai din motive 0264-401667
de compatibilitate cu versiunile anterioare.
NU COPIA !.

sau suna la:

CVErr(nreroare) o valoare Variant sau un subtip Error care conÛine nreroare.

FuncÛii pentru dat| Õi timp


FuncÛie Valoare întoars|
Date Data curent| a systemului ca Variant.
Date$() Data curent| a systemului ca String.
DateAdd(interval, num|r, dat|) Valoarea Date derivat| prin adunarea a num|r de
intervale de timp (intervalul de timp poate fi o zi, o
lun|, un an etc.) lui dat|.
DateDiff(interval, data1, data2, ...) Num|rul de intervale de timp între data1 Õi data2.
DatePart(interval, data, ...) Un interval (zi, lun| , an etc.) a lui data.
455 Anexa 2 - Lista principalelor funct-ii VBA

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

Second(timp) Secunda pentru timp-ul specificat.


Time Ora curent| a sistemului ca Variant.
Time$ Ora curent| a sistemului ca String.
ANTAL Tiberiu Alexandru.

Timer Num|rul de secunde trecut de la miezul nopÛii.


TimeSerial(ora, minut, secunda) Valoare Date definit| prin ora, minut Õi secunda.
Pt. cumparare viziteaza:

TimeValue(timp) Valoare Date a Õirului timp.


Weekday(data) Ziua din sapt|mân| corespunz|toare lui data.
Year(data) Anul pentru data specificat|.

FuncÛii pentru tratarea erorilor


FuncÛie Valoare întoars|
Erl Num|rul de linie în care cea mai recent| eroare a ap|rut. 0264-401667
Codul numeric a erorii ap|rute în cursul execuÛiei programului.
NU COPIA !.

Err
sau suna la:

Error(num|reroare) Mesajul de eroare, de tipul Variant, care corespunde lui


num|reroare.
Error$(num|reroare) Mesajul de eroare, de tipul String, care corespunde lui
num|reroare.

FuncÛii pentru manipularea fiÕierelor Õi directorilor


FuncÛie Valoare întoars|
CurDir(disc) Directorul curent ca Õi Variant.
CurDir$(disc) Directorul curent ca Õi String.
456 Anexa 2 - Lista principalelor funct-ii VBA

Dir(cale, atribute) Numele fiÕierului sau directorului, ca Õi Variant,


specificat prin cale care satisface atributele opÛionale
atribut (de exemplu vbHidden). Întoarce Null dac|

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.

modificat ultima oar|.


Lungimea, în octeÛi, a fiÕierului specificat prin cale.
Pt. cumparare viziteaza:
FileLen(cale)

FreeFile(num|rdomeniu) Urm|torul num|r de fiÕier disponibil pentru instrucÛiunea


Open.

GetAttr(cale) Un întreg reprezentând atributele fiÕierului specificat prin


cale.
Loc(nrfiÕier) PoziÛia curent| de citire/scriere, ca Õi Long, într-un fiÕier
de intrare/ieÕire deschis.
LOF(num|rfiÕier) M|rimea, în octeÛi, a fiÕierului identificat prin num|rfiÕier.
Seek(num|rfiÕier) PoziÛia curent| de citire/scriere, ca Õi Variant, într-un
fiÕier de intrare/ieÕire deschis.
0264-401667
NU COPIA !.

sau suna la:

Shell(cale, stilfereastr|) Execut| aplicaÛia din cale Õi întoarce ID-ul de task al


acesteia.

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

IRR(valori, estim|ri) Rata intern| de plat| pentru o serie de


plaÛi Õi facturi.

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

Pmt(rata, nper, pv, fv, tip) Plata periodic| pentru un împrumut


sau o investiÛie.
PPmt(rata, per, nper, pv, fv, tip) Plata principal| pentru un împrumut
sau o investiÛie.
ANTAL Tiberiu Alexandru.

PV(rata, nper, plata, fv, tip) Valoarea prezent| a unei investiÛii.


Pt. cumparare viziteaza:
Rata(nper, plata, pv, fv, tip ,estimare) Rata dobânzii periodic pentru un
împrumut sau o investiÛie.
SLN(cost, slavare, viaÛ|) Deprecierea folosind metoda liniei
drepte (straight-line depreciation) a
unui obiect pentru o perioad|.

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 !.

sau suna la:

Cos(num|r) Cosinusul lui num|r.


Exp(num|r) e (baza logaritmului natural) ridicat la puterea lui num|r.
Fix(num|r) Partea întreag| a lui num|r. Dac| num|r este negativ întoarce
primul num|r negativ mai mare sau egal cu num|r.
Hex(num|r) Valoarea hexazecimal| a lui num|r ca Õi Variant.
Hex$(num|r) Valoarea hexazecimal| a lui num|r ca Õi String.
Int(num|r) Partea întreag| a lui num|r. Dac| num|r este negativ întoarce
primul num|r negativ întreg mai mic sau egal cu num|r.
Log(num|r) Logaritmul natural a lui num|r.
Oct(num|r) Valoarea octal| a lui num|r ca Õi Variant.
Oct$(num|r) Valoarea octal| a lui num|r ca Õi String.
458 Anexa 2 - Lista principalelor funct-ii VBA

Rnd(num|r) Un num|r aleator.


Sgn(num|r) Semnul lui num|r.

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.

FuncÛii pentru prelucrarea Õirurilor


Acest curs este proprietatea lui

FuncÛie Valoare întoars|


Asc(Õir) Codul ANSI al primului caracter din Õir.
AscB(Õir) Octetul corespunz|tor primei litere din Õir.
ANTAL Tiberiu Alexandru.

AscW(Õir) Caracterul Unicode al primului caracter din


Õir.
Pt. cumparare viziteaza:
Chr(codcaracter) Caracterul, c| Õi Variant, care corespunde
codului ANSI specificat prin codcaracter.
Chr$(codcaracter) Caracterul, c| Õi String, care corespunde
codului ANSI specificat prin codcaracter.
ChrB(codcaracter) Octetul care corespunde codului ANSI al lui
codcaracter.
ChrW(codcaracter) Caracterul Unicode care corespunde codului
ANSI al lui codcaracter.
InStr(start, Õir1, Õir2) PoziÛia, în caractere, corepunz|toare primei
apariÛii ale lui Õir2 în Õir1 începând cu start.
0264-401667
NU COPIA !.

sau suna la:

InstrB(start, Õir1, Õir2) PoziÛia, în octeÛi, corepunz|toare primei


apariÛii ale lui Õir2 în Õir1 începând cu start.
LCase(Õir) Õir converit în litere mici ca Õi Variant.
LCase$(Õir) Õir converit în litere mici ca Õi String.
Left(Õir, lungime) lungime caractere din stânga lui Õir ca Õi
Variant.

Left$(Õir, lungime) lungime caractere din stânga lui Õir ca Õi


String.

LeftB(Õir, lungime) lungime octeÛi din stânga lui Õir ca Õi


Variant.

LeftB$(Õir, lungime) lungime octeÛi din stânga lui Õir ca Õi


String.
459 Anexa 2 - Lista principalelor funct-ii VBA

Len(Õir) Num|rul de caractere din Õir.


LenB(Õir) Num|rul de octeÛi din Õir.

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.

MidB$(Õir, început, lungime) lungime octeÛi, ca Õi String, ale lui Õir


plecând de la început.
Pt. cumparare viziteaza:
Right(Õir, lungime) lungime caractere din dreapta lui Õir ca Õi
Variant.

Right$(Õir, lungime) lungime caractere din dreapta lui Õir ca Õi


String.

RightB(Õir, lungime) lungime octeÛi din dreapta lui Õir ca Õi


Variant.

RightB$(Õir, lungime) lungime octeÛi din dreapta lui Õir ca Õi


String.

RTrim(Õir) Un Õir Variant far| spaÛiile din partea 0264-401667


dreapt|.
NU COPIA !.

sau suna la:

RTrim$(Õir) Un Õir String far| spaÛiile din partea


dreapt|.
Space(num|r) Un Õir, ca Õi Variant, cu num|r spaÛii.
Space$(num|r) Un Õir, ca Õi String, cu num|r spaÛii.
Str(num|r) Reprezentarea în format de Õir, ca Õi
Variant, a lui num|r.

Str$(num|r) Reprezentarea în format de Õir, ca Õi String,


a lui num|r.
StrComp(Õir1, Õir2, comp) O valoare care indic| rezultatul comparaÛiei
lui Õir1 cu Õir2.
String(num|r, caracter) caracter, ca Õi Variant, repetat de num|r de
ori.
460 Anexa 2 - Lista principalelor funct-ii VBA

String$(num|r, caracter) caracter, ca Õi String, repetat de num|r de


ori.

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.

FuncÛie Valoare întoars|


Array(listaargumente) Un tablou Variant conÛinând valorile din
Pt. cumparare viziteaza:
listaargumente.
Choose(index, arg1, arg2, etc,) Selecteaz| Õi întoarce o valoare a unui argument
dintr-o list| de argumente.
CreateObject(clasa) Un obiect Automation de tipul clasa.
Environement(Õir | num|r) O valoare String care reprezint| variabila de
mediu a sistemului de operare specificat prin Õir sau
num|r.
Format(expresie, sirformat) expresie ca Õi Variant converit| conform lui
sirformat.
Format$(expresie, sirformat) expresie ca Õi String converit| conform lui
0264-401667
NU COPIA !.

sau suna la:

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

InputB$(num|r, #nrfiÕier) num|r octeÛi String ale fiÕierului de intrare/ieÕire


specificat prin nrfiÕier.

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.

IsObject(expresie) True dac| expresie este un obiect.


Pt. cumparare viziteaza:
LBound(numetablou, dimensiune) Cea mai mic| valoare de indice posibil| pentru
tabloul definit prin numetablou.
MsgBox(întrebare, etc.) butonul pe care utilizatorul l-a selecata din fereastra
de dialog.
Partition(num|r, strat, stop, ...) Întoarce un Õir care indic| locul în care num|r apare
într-un grup de domenii.
QBColor(culoare) Întoarce codul RGB al culorii care corespunde lui
culoare (un num|r între 1 Õi 15).
RGB(roÕu, verde, albastru) Culoarea care corespunde componentelor roÕu,
verde Õi albastru. 0264-401667
NU COPIA !.

Switch(expr1, valoare1, etc.) Evalueaz| expresiile (expr1 etc.) Õi întoarce


sau suna la:

valoarea asociat| (valoare1 etc.) primei expresii


care se evalueaz| ca True.
Tab(n) PoziÛioneaz| ieÕirea pentru instrucÛiunea Print#
sau pentru metoda Print.
TypeName(numevariabil|) Un Õir care specific| tipul de dat| al variabilei
numevariabil|.
UBound(numetablou, dimensiune) Cea mai mare valoare de indice posibil| pentru
tabloul definit prin numetablou.
VarType(numevariabil|) O constant| care indic| tipul de dat| al variabilei
numevariabil|.
462

NU COPIA !.

Acest curs este proprietatea lui


ANTAL Tiberiu Alexandru.

Pt. cumparare viziteaza:

http://www.east.utcluj.ro/mb/mep/antal

sau suna la:


Anexa 2 - Lista principalelor funct-ii VBA

0264-401667

S-ar putea să vă placă și