Introducere in Microsoft Access

427
5 CUPRINS Cuprins Obiectivele cursului 1 ...................................................... 19 Ce sunt datele? ............................................................ 20 Introducere ......................................................... 20 Concepte de baz| .......................................................... 20 DefiniÛii: ...................................................... 20 Ce este o baz| de date? ..................................................... 21 Tipuri de relaÛii ..................................................... 24 Regulile relaÛionale ale lui Codd ........................................ 24 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 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

Transcript of Introducere in Microsoft Access

Page 1: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

5 CUPRINS

CuprinsObiectivele cursului 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Ce sunt datele? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Concepte de baz| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20DefiniÛii: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Ce este o baz| de date? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21Tipuri de relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24Regulile relaÛionale ale lui Codd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Scopul unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

De ce Microsoft Access? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Cât "poate duce" Access-ul? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27EvoluÛia Access-ului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Compatibilitatea între versiuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28O introducere în Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Introducere în instrumentele Accessului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Lansarea în execuÛie a Microsoft Access-ului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Fereastra principal| a Access-ului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Obiectivele cursului 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

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) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Tipuri de formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Page 2: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

6 CUPRINS

Deschiderea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Vizualizarea în modul proiectare (Design View) . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Închiderea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

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

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

Proiectarea bazei de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Ce întreb|ri ne punem? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Clarificarea a ceea ce dorim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Reguli generale de proiectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Determinarea relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Teoria proiect|rii bazelor de date relaÛionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Tabele, unicitate, chei Õi domenii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48RelaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

RelaÛii unu la unu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49RelaÛii unu la mulÛi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50RelaÛii mulÛi la mulÛi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Normalizarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Prima Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50A Doua Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51A Treia Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Subfoi de date (subdatasheets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Reguli de integritate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Reguli de integritate generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Reguli de integritate specifice bazei de date . . . . . . . . . . . . . . . . . . . . . . . . . 54

Crearea unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Ad|ugarea de câmpuri folosind Generatorul de Tabele (Table Wizard) . . . . . . . . . . 56

Crearea unui tabel f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Definirea tipurilor de câmpuri ale unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Propriet|Ûile câmpurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Proprietatea 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Formatarea pentru tipurile Text i Memo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Formatarea pentru tipurile Number i Currency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Formatarea pentru tipurile Date/Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Page 3: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

7 CUPRINS

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

Utilizarea m|Õtilor de intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Validarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Obiectivele cursului 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Editarea înregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Selectarea înregistr|rilor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Selectarea înregistr|rilor folosind tastatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Selectarea câmpurilor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Selectarea coloanelor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Selectarea câmpurilor Õi coloanelor de la tastatur| . . . . . . . . . . . . . . . . . . . . . . . . . . 73Ôtergerea înregistr|rilor Õi a câmpurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

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

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

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

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

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

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

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

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

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

Page 4: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

8 CUPRINS

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

Ce este un filtru? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87Filtrarea î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

Deschiderea ferestrei cu relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Ad|ugarea tabelelor în fereastra relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Definirea relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

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

Editarea relaÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

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

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

Crearea unei interog|ri f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Grila interog|rii (Query Grid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Operatori logici pentru criterii de selecÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Folosirea textului în criteriul de selecÛie - caractere generice (Wildcards) . . . . . . . 105Criterii multiple Õi alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Câmpuri calculate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Interog|ri cu totale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Categoria Group By . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Categoria Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Categoria Total Field Record Limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Categoria Aggregate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

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

Page 5: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

9 CUPRINS

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

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

Interog|ri cu mai multe tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117Tipuri de asocieri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

Asocieri interne (inner joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Asocierea extern| la dreapta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Asocierea extern| la stânga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120Autoasocieri (self-joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120Asocierea de tip produs cartezian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

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

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

Propriet|Ûile interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

Interogri pentru întreÛinerea bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Find Duplicate Query Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Find Unmatched Query Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

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

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

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

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

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Fereastra modului proiectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

AfiÕarea sau ascunderea liniarului (Rulers) . . . . . . . . . . . . . . . . . . . . . . . . . 140AfiÕarea listei de propriet|Ûi (Properties) a unui obiect de pe suprafaÛa

formularului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Page 6: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

10 CUPRINS

AfiÕarea listei câmpurilor (Field List) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140AfiÕarea cutiei cu instrumente (Toolbox) . . . . . . . . . . . . . . . . . . . . . . . . . . 140AfiÕarea codului din spatele formularului . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Manipularea proiectului de formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141Rolul controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Editarea controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Pentru a fixa poziÛia controalelor la punctele grilei . . . . . . . . . . . . . . . . . . . . . . . . . 142Pentru mutarea controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Pentru mutarea independent| a cutiei text sau etichet| . . . . . . . . . . . . . . . . . . . . . . 142Pentru a redimensiona un control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Pentru a Õterge un control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Pentru a multiplica un grup de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Pentru a muta sau copia controale folosind meniul Edit . . . . . . . . . . . . . . . . . . . . . 143Pentru selectarea a dou| controale adiacente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Pentru a selecta un grup de controale neadiacente . . . . . . . . . . . . . . . . . . . . . . . . . . 143Pentru alinierea unui grup de controale între ele . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Pentru a modifica spaÛierea dintre controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Pentru a salva un formular cu toate modific|rile f|cute asupra controalelor lui . . . 144Pentru a modifica dimensiunea unei secÛiuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Pentru a modifica l|Ûimea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Pentru 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

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

Page 7: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

11 CUPRINS

baz| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

Modificarea ordinii Tab-urilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

Butoane de comand| (Command Buttons) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Ad|ugarea unui buton de comand| la un formular . . . . . . . . . . . . . . . . . . . . . . . . . 179

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

AplicaÛie cu formulare Õi controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182Tabele Õi relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182Formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

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

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

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

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

Rapoarte f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208Crearea de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

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

AplicaÛia 1 cu rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Interog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

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

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

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

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

Page 8: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

12 CUPRINS

Programarea orientat| pe evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231Proceduri de evenimente (Event Procedures) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232Proceduri definite de utilizator (General Procedures) . . . . . . . . . . . . . . . . . . . . . . . 232

Proceduri de tip Sub Õi Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Procedura de tip Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Procedura de tip Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Proceduri private (Private) Õi publice (Public) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Declararea variabilelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Scop Õi durat| de existenÛ| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Tipul Variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Tipuri numerice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Tipul Õir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Tipul dat|/or| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Tipul Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Tipul parametru de procedur| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

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

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

Constante intrinseci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

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

Controlul execuÛiei programului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244InstrucÛiunea Let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244InstrucÛiuni pentru decizie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

If...Then . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245If...Then...Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Select...Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

InstrucÛiuni de ciclare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Ciclul Do...Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Ciclul For...Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247Ciclul For Each...Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

Page 9: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

13 CUPRINS

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

Tipuri de date definite de utilizator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248Crearea unei modul clas| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Definirea membrilor dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250Implementarea propriet|Ûilor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

Modul de lucru cu Property Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251Modul de lucru cu Property Let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Crearea metodelor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Definirea evenimentelor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

Evenimentul Initialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Evenimentul Terminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

Utilizarea clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

ColecÛii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Crearea unei colecÛii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Propriet|Ûile Õi metodele obiectului colecÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Ad|ugarea unui articol la colecÛie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Referirea unui obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Parcurgerea articolelor colecÛiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Ôtergerea obiectelor individuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Ôtergerea tuturor obiectelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Eliberarea spaÛului folosit pentru stocarea variabilei obiect . . . . . . . . . . . . . . . . . . 257Crearea unei clase pentru manipularea colecÛiilor . . . . . . . . . . . . . . . . . . . . . . . . . . 258

Modul de lucru cu Property Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

AplicaÛii VBA cu funcÛii Õi clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262Aplicaii cu instruciunea If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263AplicaÛii cu instrucÛiunea For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Realizarea unei clase pentru lucrul cu numere complexe . . . . . . . . . . . . . . . . . . . . 266

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Propriet|Ûile obiectului Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Page 10: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

14 CUPRINS

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

ColecÛii implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

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

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

Evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

Tipuri de evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

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

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

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

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

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

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

Tratarea erorilor în VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296Folosirea evenimentului Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296InstrucÛiunea On Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

InstrucÛiunea On Error GoTo etichet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298InstrucÛiunea On Error Resume Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300InstrucÛiunea On Error GoTo 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

InstrucÛiunea Resume Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301Obiectul Err . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301Ierarhii ale codului pentru tratarea erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

Access SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302Cum se foloseÕte Access SQL-ul? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302Sintaxa comenzilor SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303InstrucÛiunea SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

Clauza SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Clauza FROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305Clauza WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306Clauza ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306Asocierea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

Page 11: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

15 CUPRINS

Asociere multipl| (Multiple Joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308Asociere non-equi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

Predicatele ALL, DISTINCTROW Õi DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . 308Agregarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

Interog|ri de agregare f|r| clauza GROUP BY . . . . . . . . . . . . . . . . . . . . . . 310Interog|ri de agregare cu clauza GROUP BY . . . . . . . . . . . . . . . . . . . . . . . 310

Interog|ri de reuniune (UNION Queries) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312Compatibilitatea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

Subinterog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313SQL cu parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315Actualizarea datelor cu SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

InstrucÛiunea UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316InstrucÛiunea DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317InstrucÛiunea INSERT INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317InstrucÛiunea SELECT INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

DefiniÛia datelor cu SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319InstrucÛiunea CREATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Clauza CONSTRAINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320InstrucÛiunea CREATE INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321InstrucÛiunea ALTER TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321InstrucÛiunea DROP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322Interog|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) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325Crearea unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326ConsistenÛa Õi inconsistenÛa actualiz|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328Moduri de creare a mulÛimilore de înregistrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328Parcurgerea unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

G|sirea num|rului de înregistr|ri din mulÛime . . . . . . . . . . . . . . . . . . . . . . 331Testarea limitelor mulÛimii de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . 331

C|utarea unor înregistr|ri specifice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332InstrucÛiunea With . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332C|utarea în tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Utilizarea marcajelor (bookmark) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334Sortarea înregistr|rilor dintr-o mulÛime de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . 335

Sortarea prin folosirea propriet|Ûii Index . . . . . . . . . . . . . . . . . . . . . . . . . . . 335Sortarea prin folosirea clauzei SQL ORDER BY . . . . . . . . . . . . . . . . . . . . 336Sortare folosind proprietatea Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

Filtrarea mulÛimilor de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Filtrarea folosind clauza SQL WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338Filtrarea prin proprietatea Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Editarea datelor unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

Page 12: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

16 CUPRINS

Modificarea unei înregistr|ri existente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Ad|ugarea unei înregistr|ri noi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340Ôtergerea unor înregistr|ri dintr-o mulÛime de înregistr|ri . . . . . . . . . . . . . 341

Modificarea unui grup de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342Modificarea datelor prin tranzacÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

DefiniÛia datelor cu DAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345Crearea obiectelor bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Crearea unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345Tabelul metodelor Create... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346Crearea unui Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348Crearea unei relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

AtaÕarea tabelelor din bazele de date externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353AtaÕarea unui tabel extern unei baze de date Access . . . . . . . . . . . . . . . . . . 354ReataÕarea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

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

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

ADO sau DAO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360Specificarea referinÛelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361Noua ierarhie de obiecte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

Manipularea datelor prin ADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362DefiniÛia datelor Õi securitatea cu ADOX . . . . . . . . . . . . . . . . . . . . . . . . . . 363Replicarea cu JRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368Crearea obiectelor mulÛime de înregistrare . . . . . . . . . . . . . . . . . . . . . . . . . 371

Cursorul client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371Navigarea printre înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372C|utarea înregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373Editarea datelor unei mulÛimi de înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

Modificarea unei înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376Ad|ugarea unei înregistr|ri noi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

Page 13: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

17 CUPRINS

Ôtergerea unei înregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378Actualiz|ri în grup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

Executarea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380Executarea unei interog|ri f|r| parametri stocate în baza de date . . . . . . . . 380Executarea unei interog|ri cu parametri stocate în baza de date . . . . . . . . . 381

Definirea Õi înc|rcarea schemei bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Crearea unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Înc|rcarea informaÛiilor legate de schema bazei de date . . . . . . . . . . . . . . . . . . . . . 385Crearea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

Crearea unui tabel local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387Crearea unui tabel legat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389Modific|ri aduse tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

Crearea Õi modificarea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392Crearea unei interog|ri stocate în baza de date folosind colecÛia Views . . . 392Crearea unei interog|ri stocate în baza de date folosind colecÛia Procedures

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392Modificarea instrucÛiunii SQL a unei interog|ri . . . . . . . . . . . . . . . . . . . . . 393

Crearea unui index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393Crearea unei relaÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

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

Ce este tehnologia ActiveX Automation? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420Automation Server Õi Automation Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420Modul de lucru cu obiectele Automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

Crearea Õi definirea unei referinÛe la o alt| aplicaÛie. . . . . . . . . . . . . . . . . . . 420Modele de obiecte Õi navigatorul de obiecte . . . . . . . . . . . . . . . . . . . . . . . . 422Creare variabilelor de tipul obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424Legare în avans Õi legare târzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424FuncÛiile CreateObject Õi GetObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426Argumentele Clasa pentru aplicaÛiile din Microsoft Office . . . . . . . . . . . . 430

Automation cu Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430Inserarea datelor într-un document Word . . . . . . . . . . . . . . . . . . . . . . . . . . 431Inserarea datelor într-un document Word folosind bookmark-uri . . . . . . . . 435

Automation cu Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

Pagini pentru accesul la date (Data Access Pages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446Crearea unei PAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

Crearea unei PAD simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447Folosirea generatoarelor pentru crearea de PAD . . . . . . . . . . . . . . . . . . . . . 447

Create data access page in Design view . . . . . . . . . . . . . . . . . . . . . . 447

Page 14: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

18 CUPRINS

Create data access page by using wizard . . . . . . . . . . . . . . . . . . . . . 448Edit Web page that already exists . . . . . . . . . . . . . . . . . . . . . . . . . . 448

ANEXA 1 - Lista principalelor instrucÛiuni VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451

ANEXA 2 - Lista principalelor funcÛii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456FuncÛii de conversie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456FuncÛii pentru dat| Õi timp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456FuncÛii pentru tratarea erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457FuncÛii pentru manipularea fiÕierelor Õi directorilor . . . . . . . . . . . . . . . . . . . . . . . . 457FuncÛii financiare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458FuncÛii matematice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459FuncÛii pentru prelucrarea Õirurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460Alte funcÛii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462

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

Bibliografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470

Page 15: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

19 Introducere în Microsoft Access - cursul 1

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

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

Obiectivele cursului 1

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 16: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

20 Introducere în Microsoft Access - cursul 1

Ce sunt datele?IntroducereDatele sunt entit|Ûi individuale formate din texte, numere, imagini sau sunete care pot fistocate Õi prelucrate pe un calculator. Acestea se obÛin prin observarea Õi m|surarea lumiireale. Prin ele însele, datele, nu au o semnificaÛie, aceasta rezultând în urma interpret|rii (sauprelucr|rii) lor.

InformaÛia este semnificaÛia pe care o primesc datele ca urmare a modului lor de interpretare.

Pentru a înÛelege diferenÛa, Antal, 33, 1250000 semnific| prea puÛin ca dat|. Dar dac| seinterpreteaz| ca numele unui profesor, Antal, care are vârsta de 33 de ani Õi salariul lunar de1.250.000 de lei, datele primesc semnificaÛie Õi pot fi numite informaÛii. Aceast| interpretarenu este unic|, putând exista de multe ori alternative. Uneori buc|Ûica de informaÛie este parte aunui Õablon informaÛional mai complex.

Este util ca s| privim datele ca materie prim| pentru o reÛet| care, realizat| din proporÛiidiferite, 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, deexemplu: • Clientul - “Horea”; • Produsul - “plac| de baz|”; • 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 adimensiunii 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| pentrua exemplifica noÛiunile deja prezentate. Înregistr|rile corespund liniilor din tabel, iarcâmpurile coloanelor. De exemplu, primele dou| înregistr|ri sunt liniile care încep cu:

1. ACHIMAS2. ANCAU

Page 17: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

21 Introducere în Microsoft Access - cursul 1

Fiecare înregistrare stocheaz| categorii de informaÛii elementare în urm|toarele câmpuri: • NUME DIRECTOR; • PRENUME DIRECTOR; • AN NASTERE; • TITLU DIDACTIC.

Ce este o baz| de date?O definit-ie simpla7 pentru o baz| de date este: O colect-ie structurata7 de date interconectaterelat-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 datepersistente structurate, asociate de obicei cu un software pentru editarea s-i select-iadatelor.

Un sistem de gestiune a bazelor de date (SGBD) este un program care permite utilizatoruluidefinirea, crearea, întret-inerea s-i controlul accesului la o baza7 de date, astfel:

! utilizatorii definesc baza de date cu ajutorul unui limbaj pentru definireadatelor (Data Definition Language); ! utilizatorii pot insera, actualiza, s-terge s-i extrage date din baza7 folosindlimbajul de manipulare a datelor (Data Management Language) deseori numit s-ilimbaj de interogare (query language); ! asigura7 servicii pentru controlul accesului la baza de date prin:

< sistemul de securitate în vederea bloca7rii accesului persoanelorneautorizate la date; < sistemul de integritate a datelor pentru pa7strarea consistent-ei datelorstocate; < sistemul de accesul concurent la date, etc.

Page 18: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

22 Introducere în Microsoft Access - cursul 1

Pe baza celor spuse, în figura de mai sus se prezinta7 , departamentele pentru vânza7rile deproduse s-i de contacte. Fiecare departament are propria ei aplicat-ie pentru accesarea bazei dedate prin intermediul SGBD. La nivelul fieca7rui departament, aplicat-ia de gestionarerealizeaza7 introducerea datelor, întret-inerea datelor s-i generarea rapoartelor prin intermediulSGBD. Deseori, utilizatorii nu sunt interesat-i în a putea accesa întreaga baza7 de date În acestsens, SGBD are o facilitate numita7 mecanism de vedere (view mechanism), care permite cafiecare utilizator sa7 aiba7 o vedere proprie asupra bazei de date (o vedere este, în esent-a7 , o partea bazei de date).

Un sistem de gestiune a bazelor de date relat-ionale (Relational Database ManagementSystem - RDBMS) este o un sistem de gestiune a bazelor de date care foloseÕte modelulrelaÛional dezvoltat de E. F. Codd în 1970.

Un model de date este un formalism matematic cu o notaÛii pentru descrierea structurilor dedate - 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 derelat-ie), care sunt formate din rânduri (termenul tehnic este de tupla7) Õi coloane (uneorinumite Õi câmpuri sau atribute). Tabelul este o colecÛie de rânduri, iar fiecare rând al unuitabel conÛine aceleaÕi câmpuri. Fiecare tabel are un nume, iar în interiorul tabelului, fiecarecoloan| are un nume. Nu se menÛine o ordine prestabilit| între rândurile unui tabel, ele pot fiextrase în orice ordine determinat| de valorile din câmpuri. Unele câmpuri pot fi desemnatedrept chei, ceea ce înseamn| c| toate c|ut|rile ale unor valori specifice ale acelui câmp vorfolosi indexarea pentru creÕterea vitezei. Rândurile unor tabele distincte pot fi legate dac| au

Page 19: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 estereprezentat| 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 dealgebre. 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 deinformaÛie poart| numele de meta-date (date despre date). Asemenea oric|ror alte date Õiacestea se vor stoca în tabele. Tabelele care descriu structura bazei de date poart| denumireade schema bazei de date. SGBDR-urile mari, au scheme multiple, acestea fiind grupate încataloage.

În viaÛa de toate zilele utiliz|m frecvent baze de date, f|r| a fi conÕtienÛi îns|. Iat| câtevaexemple: • cartea de telefoane; • orarul Õcolii; • agenda.

Bazele de date comune se prezint| sub dou| forme:1. baza de date simpla7 (flat database) - se foloseÕte pentru stocarea unor listesimple ce pot conÛine date redundante, asemenea unor pagini dintr-o agend| în careunele informaÛii se repet|;2. baza de date relat-ionala7 (relational database) - se foloseÕte pentru stocareadatelor în fiÕiere cu referinÛe încruciÕate pentru eliminarea redundanÛei. Din acestmotiv g|sirea, analiza, gestionarea Õi protecÛia datelor este mai simpl| pentru c|acestea apar o singur| dat| în baz|.

S| presupunem c| într-o firm| se Ûine pe calculator evidenÛa angajaÛilor, clienÛilor Õi aproduselor sau a serviciilor pe care acesta le comercializeaz|. Pentru a obÛine un produs sauun 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).

Page 20: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

24 Introducere în Microsoft Access - cursul 1

Este probabil s| fie comenzi cu mai multe produse motiv pentru care avem nevoie de un tabellegat pentru Detalii comand|.

Tabelele de mai sus se numesc legate între ele prin relaÛii (relationship): • un angajat vinde mai multor clienÛi º unei înregistr|ri din AngajaÛi îi corespund maimulte î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 îicorespund mai multe înregistr|ri din Produse, conexiunea între acestea f|cându-se prinComenzi Õi Detalii comand|; • ordinul de comand| conÛine un num|r de detalii specifice comenzii în câmpurileCustomerID, EmployeeID etc. Õi un câmp de conexiune, OrderID, cu Detalii comand|unde sunt detaliile fiec|rui produs vândut.

Tipuri de relaÛiiCând un client emite o comand|, ea poate fi pentru unul sau mai multe produse, adic| pot fimai 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 estemulÛi-la-mulÛi (many-to-many) care în Access nu este permis|. Ea se poate transforma înrelaÛii unu-la-mulÛi prin folosirea unui tabel intermediar de leg|tur|. În figura anterioar| 1indic| 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 prinfolosirea unui singur câmp (de exemplu CustomerID) alteori se foloseÕte o combinaÛie deorice 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| ocombinaÛ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 tabelulCustomer în care este cheie primar|.

Regulile relaÛionale ale lui CoddCodd a pus la punct un set de reguli care aveau ca scop asigurarea independenÛei întreaplicaÛia de interfaÛ| cu utilizatorul Õi modific|rile aduse modelului de date. ModelulrelaÛ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 produsprogram trebuie s| le respecte pentru ca s| fie numit Sistem de Gestiune al Bazelor de DateRelaÛionale (SGBDR). Microsoft Access-ul se conformeaz| la toate cele 13 reguli enumeratede Codd. Tabelul care urmeaz| prezint| succint aceste reguli:

Nr. Nume regula7 Descriere Implementare Access

Page 21: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

25 Introducere în Microsoft Access - cursul 1

0 Principul debaz|

Orice SGBD RelaÛional (SGBDR)trebuie s| gestioneze întreaga baz| dedate numai prin posibilit|Ûilemodelului relaÛional. Dac| un SGBDeste dependent de un instrument demanipulare al datelor la nivel deîntregistrare, nu este total relaÛional.

Access-ul a fost primulSGBD care rula subWindows Õi respectaaceast| regul|. Access-ulnu foloseÕte numere deînregistr|ri.

1 StocareainformaÛiei

Toate datele unui SGBD relaÛional sereprezint| explicit ca valori în tabele.Datele nu pot fi stocate prin altemetode.

Access-ul îÕi stocheaz|datele în tabelelemotorului bazei de dateMicrosoft Jet.

2 Garantareaaccesului

Fiecare element de dat| trebuie s| fieaccesibil logic printr-o combinaÛie deforma: cheie primar|, nume de tabel Õinume de câmp.

Access-ul respect|aceast| regul| prinfolosirea Cheii Primare(Primary Key).

3 LipsainformaÛiei

Valorile vide (Null) trebuie s| fiesuportate explicit. Null-urilereprezint| informaÛia lips| sauimposibil de aplicat.

Access-ul suport| lucrulcu valori Null pentrudescrierea informaÛiilorlips|.

4 Catalogul desistem

Descrierea bazei de date sau catalogultrebuie s| se fac| la nivelul logic subforma unor valori în tabele. LimbajulrelaÛional (SQL) trebuie s| poat|acÛiona asupra proiectului bazei dedate în acelaÕi mod în care acÛioneaz|asupra datelor stocate în structur|.

Catalogul rezid| înmotorul bazei de dateMicrosoft Jet. Se poatefolosi OpenSchema dinADO pentru interogareacatalogului de sistem.Limbajul DDL SQL almotorului bazei de dateMicrosoft Jet ofer|posibilitatea cre|riitabelelor, cheilor etc.

5 Limbajcuprinz|tor

Un SGBD trebuie s| suporte un limbajclar pentru manipularea datelor (SQL)care asigur| modalit|Ûi cuprinz|toarepentru manipularea datelor, definireadatelor, definirea vederilor,constrângerile de integritate, limit|rilede tranzacÛii Õi de autorizare.

Access-ul, prin motorulJet, asigur| SQL pentrumanipularea datelor,crearea vederilor (SelectQueries), constrângerilede intergritate(Relationships ÕiCREATECONSTRAINT).

6 Actualizareavederilor

Toate vederile trebuie s| poat| fiactualizate de sistem. Într-un SGBDtotal relaÛional majoritatea vederilor ar trebui s| se poat| actualiza.

Access a fost primulSGBD pe PC-uri care apermis interog|ri deactualizare (UpdateQuery).

Page 22: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

26 Introducere în Microsoft Access - cursul 1

7 Actualiz|ri lanivel demulÛime

Un SGBDR trebuie s| fac| mai multdecât simpla extragere a datelor.Trebuie s| aib| capacitatea deinserare, actualizare Õi Õtergere adatelor, privite ca o mulÛimerelaÛional|

Access-ul suport|interog|ri de acÛiune(Action Query).

8 IndependenÛafizic| a datelor

Datele trebuie s| fie fizicindependente de programul aplicaÛie.Programul aplicaÛie SGBDR trebuies| fie în stare s| urm|reasc|modific|rile fizice la nivelul datelorpe "sub aplicaÛie". De exemplu,programul SGBDR nu se va modificadac| un index se adaug| sau se Õtergedintr-un tabel.

Access-ul permitemodificarea obiectelorbazei de date f|r|alterarea celorlaltecomponete ale Access-ului. Jet-ul are motor destocare logic.

9 IndependenÛalogic| a datelor

Pe cât este posibil, aplicaÛiile softwaretrebuie s| fie independente demodific|rile f|cute în tabelele debaz|. De exemplu, nu trebuie s| serescrie codul în cazul în care tabelelesunt combinate într-o vedere.

În Access, o interogarese poate lega la unformular sau la un raportla fel de simplu ca untabel.

10 IndependenÛaintegrit|Ûiidatelor

Integritatea datelor trebuie s| se poat|defini într-un limbaj relaÛional Õi s| fiestocat| în catalog. Constrângeri deintegritate a datelor trebuie s| poat| ficonstruite la nivel de aplicaÛie. Acestconcept este oarecum str|in modeluluirelaÛional. În modelul relaÛional,integritatea trebuie s| fie inerent|proiectului bazei de date.

DeÕi Microsoft-ul nu adocumentat modul încare Jet-ul stocheaz|integrit|Ûile, se pot creareguli de integritate viaSQL. Jet-ul va stocaaceste informaÛii înproiectul bazei de dateca parte a catalogului.

11 IndependenÛadistribuÛiei

Capacit|Ûile SGBDR nu au voie s| fielimitate datorit| distribuÛiei unorcomponente ale acestuia în baze dedate separate.

Pentru c| motorul Jetstocheaz| regulile deintegritate la nivel demotor, alte componenteale motorului nuafecteaz| regulile deintegritate.

Page 23: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

27 Introducere în Microsoft Access - cursul 1

12 InexistenÛasubmin|rilor

Dac| un SGBDR are un limbaj demanipulare "a unei singure înregistr|rila un moment dat", acest limbaj nu vaputea fi folosit la ocolirea regulilor deintegritate sau a constrângerilormodelului relaÛional. Astfel nu numaic| SGBDR trebuie s| fie guvernat dereguli relaÛionale ci aceste regulitrebuie s| fie Õi primare.

Access-ul permitefolosirea lui DAO ÕiADO pentrumanipularea a câte uneisingure înregistr|ri la unmoment dat prinintermediu mulÛimilor deîntregistr|ri actualizabile(updateablerecordsets). Nu se potviola regulie deintegritate prin acestetehnologii de manipularea datelor.

Scopul unei baze de dateO baz| de date electronic| permite utilizatorului efectuarea aceloraÕi operaÛii ca în cazul uneibaze 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|utareasimpl| a datelor; • permite preg|tirea unor rapoarte precise într-o form| dorit| de utilizator despreinformaÛ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(SGBDR) scris de firma Microsoft care este Õi produc|toarea sistemului de operare Windows.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 deaceeaÕ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 proiecteserioase. • 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 defirme terÛe.

Cât "poate duce" Access-ul?Pentru a r|spunde la aceast| întrebare trebuie s| l|murim "clasa" sistemelor de gestionare abazelor de date din care face parte Access-ul. Access-ul este un SGBD pentru calculatoaredesktop, adic| calculatoare care "stau pe biroul cuiva", deci care deservesc un utilizator sau un

Page 24: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

28 Introducere în Microsoft Access - cursul 1

num|r mic de utilizatori. El nu poate concura cu Oracle, Informix, DB2 sau Microsoft SQLServer care sunt sisteme complexe de gestionare ale bazelor de date cu motoare superioare întermeni 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-endpackage) 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ÛiainiÛial| a fost ieftin| (în jur de 100 USD) fiind competitiv| numai datorit| acestui preÛ, altfelavâ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Û| versiunileanterioare. 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 operareWindows 95. Din nefericire, a fost instabil Õi cu multe erori, Access 2.0 r|mând preferatulprogramatorilor.

În noiembrie 1996 apare Access 97 (alias Access 8.0) cu multe îmbun|t|Ûiri faÛ| de Access2.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 dinclasa Access-ului, atât în concepÛie, cât Õi în implementare.

Compatibilitatea între versiuniVersiunile 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 poateconverti la una mai nou|, dar invers nu se poate. Erau dou| soluÛii pentru aceast| problem|: sep|stra o copie veche a bazei de date care va fi convertit| la versiunile noi sau se va deschideversiunea veche a bazei cu un Access nou, îns| numai în modul de citire (read only). Larealizarea conversiei Access-ul încearc| s| transforme cât mai bine posibil obiectele vechi încorespondentul lor nou, dar Õi aici apar des probleme.

O introducere în AccessAccess-ul utilizeaz| aceleaÕi denumiri cu cele prezentate anterior cu o excepÛie îns| Õi anume

Page 25: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

29 Introducere în Microsoft Access - cursul 1

Ce sunt fomularele?(Forms)

Ce suntinterogarile ?(Query)

FiÕierul se numeÕte Tabel. Aceasta este o alegere normal| din moment ce majoritateainformaÛiilor se prezint| în practic| sub form| tabelar|.

Forma de prezentare vizual| care urmeaz| se numeÕte Foaie de date (Datasheet) Õi este ceamai 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.

Introducere în instrumentele AccessuluiLucrul 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. Acesteasunt 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 vizualizareadatelor la nivel de înregistrare.

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 Õiinterpretarea datelor.

O interogare este o întrebaredespre date, de exemplu: • câte pl|ci de baz|defecte au fost cump|rate? • câÛi bani mai am în

cont?

La fiecare interogare din baza de date se extragultimele date (cele mai proaspete) legate de

Page 26: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

30 Introducere în Microsoft Access - cursul 1

Ce sunt rapoartele?(Reports)

Ce sunt macro-urile?(Macros)

Ce sunt modulele?(Modules)

Ce sunt paginile?(Pages)

Adaugarea uneibaze de date în directorul“Favorites”

informaÛia cerut| de noi.

Rapoartele se folosesc la tip|rirea Õi afiÕarea imformaÛiilor din baza dedate. Rapoartele permit producerea rezultatelor cu informaÛia într-oform| dorit| de utilizator Õi permit: • gruparea Õi sortarea informaÛiilor; • calculul de totale Õi medii.

Un macro este un grup de comenzi Access care rezolv| o sarcin|concret|. De exemplu, pentru a crea un buton care deschide un raportse poate folosi un macro care se lanseaz| în acÛiunea "OpenReport".Macro-urile se pot folosi pentru a seta valoarea unui câmp pe bazavalorii altui câmp (acÛiunea "SetValue"), pentru a verifica îndeplinirea

anumitor condiÛii înainte de salvarea unei înregistr|ri (acÛiunea "CancelEvent"). Ecranul demacro-uri afiÕeaz| detalii despre felul în care se poate aplica fiecare acÛiune.

Acestea stocheaz| funcÛiile sau programele scrise de utilizator. Tot cese 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 pottrata 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 folosescpentru a introduce sau afiÕa date prin Internet. Paginile sunt stocate subforma unor fiÕiere HTML având datele citite sau scrise din baza dedate.

Lansarea în execuÛie a Microsoft Access-ului • LocalizaÛi simbolul Microsoft Access din meniul Start al Windows-ului sau • ExecutaÛi clic pe simbolulMicrosoft Access de pe desktop(dac| acesta exist|).

• LansaÛiîn execuÛieAccess-ul ÕiafiÕaÛi cutia dedialog Open.LocalizaÛi Õi

selectaÛi articolul care doriÛi s| fiead|ugat în directorul Favorites. În

Page 27: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

31 Introducere în Microsoft Access - cursul 1

Deschiderea uneibaze de date dindirectorul Favorites

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

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

• veÛi vedea o list| de forma care permite ad|ugareaarticolului selectat prin Add Selected Item to Favorites în directorul Favorites.

• pentru a deschide un fiÕier din Favorites, prima oar| afiÕaÛifereastra de dialog Open;

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

• efectuaÛi clic pe articolul dorit, la noi Northwind.mdb Õi apoi efectuaÛi clic pe butonulOpen pentru a deschide fiÕierul.

Page 28: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

32 Introducere în Microsoft Access - cursul 1

Bara cuinstrumenteleAccess

Fereastra principal| a Access-uluiFereastra principal| a aplicaÛiei Access urmeaz| caracteristicile oric|rei aplicaÛii MicrosoftWindows. O Bar| cu Titlu (Title Bar) este afiÕat| în cea mai de sus porÛiune a ecranului cuun Meniu de Control (Control Menu) în partea stâng|, iar în dreapta Butoanele de

Minimizare (Minimize), Refacere (Restore) Õi Închidere (Close). Dedesubt este Bara cuMeniu (Menu Bar), iar mai jos sunt barele cu instrumente. La pornirea Access-ului înMeniu se v|d numai dou| submeniuri File (fiÕiere) Õi Help (ajutor), iar majoritateabutoanelor de pe bara de instrumente sunt de culoare gri, adic| invalidate (la ap|sarea lor nuse petrece nimic). Acestea apar din cauz| c| nu este dechis| o baz| de date.

Bara cu instrumente conÛine butoane care permit selectarea direct|(pun la dispoziÛia utilizatorului scurt|turi) a unor comenzi din bara cumeniu aflate în submeniuri. Exist| mai multe bare cu instrumente carese pot activa - efectul activ|rii fiind afiÕarea lor pe ecran - prinselectarea 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 deajutor, în limba englez|, va fi afiÕat.

Page 29: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

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

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

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

! cum se deschid formularele (Forms) Õi pentru ce se utilizeaz|;

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

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

Obiectivele cursului 2Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 30: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Deschiderea uneibaze de dateîmpreuna7 cupornireaAccess-ului

Deschiderea uneibaze de date dupa7pornireaAccess-ului

Deschiderea uneibaze de datecreata7 cu oversiuneanterioara7 deAccess

Deschiderea unei baze de date

Din cutia de dialog Open selectaÛi o baz| de date deja existent| Õi apoiefectuaÛi clic pe butonul Open.

Din meniul File selectaÛi OpenDatabase. ObservaÛi c| îndreapta textului Opendatabase este scris Ctrl+O.Aceasta este scurt|tura c|trecomanda din meniu. Ea se

execut| prin Ûinerea ap|sat| a tastei Ctrl Õi ap|sareascurt| a tastei O, dup| care ambele taste se elibereaz|Õi are ca efect selectarea lui Open Database dinmeniul File mai scurt, numai prin ap|sarea unui grupde 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 Opendatabase din bara de instrumenteStandard. Când se deschidefereastra de dialog Open,selectaÛi numele bazei de date dinlista - în figura al|turat| s-aselectat Order Entry1 - ÕiefectuaÛi clic pe butonul Open.

DeschideÛi baza de date în mod obiÕnuit, cu oricare din proceduriledescrise mai sus, fereastra de dialog va cere din partea dumneavoastr|confirmarea conversiei bazei de date vechi în cea nou| - opÛiuneaConvert Database - sau p|strarea formatului original Õi deschidereabazei de date - opÛiunea Open database. Dac| baza de date estedeschis| f|r| a fi convertit| în formatul lui Access 97 datele din ea sepot edita dar nu se pot modifica proiectele formularelor, tabelelor Õirapoartelor. 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 firecunoscute de versiunile anterioare de Access.

Page 31: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Fereastra bazei de date AccessFereastra bazei de date Access apare în fereastra aplicaÛiei Access la deschiderea bazei dedate. Ea asigur| o modalitate de acces elegant| Õi rapid| la obiectele bazei de date.

Ôase ferestre permit accesul la tabele (Tables), interog|ri (Queries), formulare (Forms),rapoarte (Reports), macro-uri (Macros) Õi module (Modules). Fiecare dintre acestea va fiexaminat| în detaliu în cursurile urm|toare. SelecÛia uneia se realizeaz| efectuând clic pebutonul (numit tab în englez|) cu numele corepunz|tor. AceleaÕi obiecte se pot selecta Õi dinmeniul 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 • efectuaÛi clic dublu pe butonul Meniului de Control sau • ap|saÛi Ctrl+F4.

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 devizualizare implicit pentru tabele în Access.

La deschiderea tabelului Meniul Õi Bara cu Instrumente se schimb| automat pentru ainclude opÛiunile care sunt relevante pentru tabele.

Numele de coloane (column headings) devin vizibile în foaia de date acestea specificândcâmpurile tabelului. Fiecare rând conÛine o înregistrare (record) separat|.

Page 32: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a ne deplasape un câmp

Pentru a ne deplasaprin tabel folosindtastatura

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

În partea de jos a ferestrei (unde scrie Record:), imediat deasupra liniei de stare, o bar| pentrudefilare (scroll bar) pune la dispoziÛia utilizatorului butoane de navigare Õi dreptunghiuri cunum|rul înregistr|rii curente, respectiv cu num|rul total de înregistr|ri. La deschiderea unuitabel, în mod normal, va fi indicat| prima înregistrare.

Explorarea tabelelorSe poziÛioneaz| cursorul mouse-ului (de obicei în form| de s|geat|)pe câmpul dorit Õi efectu|m clic pe butonul stâng al mouse-ului.Cursorul îÕi schimb| forma funcÛie de tipul câmpului.

Pentru a ne deplasa de la o înregistrare la alta, se poate folosi unadin metodele:

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.

Page 33: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a nedeplasa folosindbara pentrudefilare

Pentru a nedeplasa pe oînregistrarefolosind meniulEdit

Pentru a nedeplasa pe o înregistrarespecificafolosind tastatura

SelectaÛi Go To dinmeniul Edit, apoiselectaÛi First, Last,Next Previous sauNew Record (vezifigura al|turat|).

• Ap|saÛi tasta F5iar num|rul înregistr|riise va selecta din barade defilare;• IntroduceÛinum|rul înregistr|rii pecare doriÛi s| v| plasaÛi.

;• Ap|saÛi tasta Enter.

Vizualizarea tabelelor în mod proiectareLa deschiderea unui tabel acesta este vizualizat, implicit, ca o foaie de date (DatasheetView). La crearea unui tabel, implicit, acesta este vizualizat în mod proiectare (Design

View). Pentru a modifica un tabel trebuie mai întâi s| comutaÛi pe vizualizarea în mod

Page 34: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a comuta înmodul deproiectare

Pentru a comuta înmodul foaie dedate

Ce este o interogarecu parametru?

Deschiderea uneiinterogari în modproiectare

proiectare.

• selectaÛi Design View din meniul View

sau • efectuaÛi clic pe simbolul grafic Design View de pe bara de instrumente .

• selectaÛi Datasheet View din meniul View sau • efectuaÛi clic pe simbolul grafic Datasheet View din bara deinstrumente.

Introducere în interog|ri (Queries)O interogare este o modalitate de a extrage informaÛii din baza de date. Se pot extrage date dintabele distincte Õi se pot combina împreun|. Se pot specifica criterii pentru limitareanum|rului de înregistr|ri Õi se pot efectua calcule pentru a genera informaÛii care nu suntstocate direct în tabele.

Interog|rile pot fi vizualizate, la fel ca Õi tabelele, în mod foaie de date sau în cel deproiectare.

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

O interogare cu parametru (Parameter Query) este cea care cereintroducerea unui criteriu din partea utilizatorului în mod interactiv.Când utilizatorul lanseaz| interogarea aceasta va afiÕa o fereastra7 dedialog sau mai multe pentru introducerea criteriilor necesare. Unexemplu simplu ar fi domeniul datelor pentru care se doreÕte aflareavânz|rilor. • deschideÛi fereastra bazei de date (Database Window); • efectuaÛi clic pe butonul Queries; • efectuaÛi clic pe butonul Design din fereastra bazei de date.

Page 35: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Schimbareamodului devizualizare

Ce suntformularele?

• din modul de vizualizare foaie de date (Datasheet View)efectuaÛi clic pe simbolul grafic mod de proiectare (Design View) dinbara de instrumente sau • din modul de proiectare (Design View) efectuaÛi clic pesimbolul foaie de date (Datasheet View) din bara de instrumente.

Introducere în formulare (Forms)Formularele (Forms) asigur| o prezentare prietenoas| a datelor dinbaz|. Modurile de utilizare ale formularelor sunt multiple: ad|ugare,Õtergere sau modificare de date; afiÕarea datelor; controlul modului Õi aordinii î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 sistemde meniuri pentru ghidarea utilizatorului prin orice operaÛii dorite. Toate formularele sebazeaz| pe datele unuia sau mai multor tabele a c|ror structur| r|mâne neafectat| demodalitatea de prezentarea vizual| a formularului.

Tipuri de formulareUn formular poate fi copia exact| a unui formular de pe hârtie, ca de exemplu o factur| sau unorar. O multitudine de tehnici de proiectare permit folosirea de stiluri Õi m|rimi diferite decaractere, imagini scanate, desene, butoane de comand| sau grafice, toate într-o palet| deculori variat|.

Microsoft Access pune la dispoziÛia utilizatorului Generatoare de Formulare (FormWizard), câteva exemple, din baza dedate NorthWind, rezultate prinfolosirea acestor generatoare seprezint| în continuare:

Page 36: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Page 37: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a deschideun formular

Pentru a comutape vizualizarea înmod foaie de date

Deschiderea unui formular • deschideÛi o baz| de date; • selectaÛi din Database Window butonul Forms; • 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), iarformularul se va deschide - aceasta este reacÛia implicit| în Access - fiind afiÕat pe ecran înmodul vizualizare (Form View).

Vizualizarea în modul proiectare (Design View)Un formular poate s| fie format pe baza câmpurilor unui singur tabel sau pe baza câmpurilordin 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) permiteafiÕarea datelor stocate în tabel. Vizualizarea în modul proiectare (Design View) permitemodificarea sau crearea obiectelor de pe suprafaÛa formularului.

• efectuaÛi clic pe butonul Datasheet View din bara deinstrumente standard (standard toolbar) sau • selectaÛi din meniul aplicaÛiei Access pe View, apoiDatasheetView.

Page 38: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a comutape vizualizarea înmod proiectare

Pentru a comutape vizualizarea înmod formular

• efectuaÛi clic pe pictograma Design View din bara deinstrumente standard sau • selectaÛi View din meniul aplicaÛiei Access, apoi Design View.

• efectuaÛi clic pe pictograma Form View din bara deinstrumente standard sau • selectaÛi View din meniul aplicaÛiei Access, apoi Form View.

Page 39: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a închideun formular

Închiderea unui formular • efectuaÛi clic pe butonul Close (vezi figura anterioar|) alformularului sau • 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 potvizualiza Õi pe ecran, de regul| sunt create pentru a fi listate la imprimant|. Vizualizarea unuiraport pe ecran, înainte de tip|rire este binevenit|, fiind posibil| ajustarea marginilorraportului pentru ca acesta s| intre în pagina hârtiei cât mai bine. Odat| cu evoluÛia tehnicilorde programare, rapoartele au trecut de faza în care plictisesc, acum fiind posibil ca un raports| conÛin| sigla firmei sau alte desene, grafice sau imagini. Avantajul major al rapoartelorconst| în posibilitatea grup|rii, sort|rii Õi realiz|rii de totale pentru oricare dintre câmpurilebazei 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 Õim|ririi unor zone ale raportului, asta îns| numai în faza de vizualizare a lui. Atunci când nuavem prea multa7 experint-a7 în Access, dar suntem cât de cât obis-nuit-i cu editorul de texteWord, exista7 posibilitatea exportului unui raport în editorul de texte al formei Microsoft sau înExcel. Aici, posibilita7 t-ile de aranjare în pagina7 s-i de îmbuna7 ta7 t-ire a imaginii documentului(raportul Access) sunt mult mai avansate s-i mai simplu de folosit decât în cazul rapoartelorAccess. În general, rapoartele pot fi exportate s-i în alte tipuri de formate, câteva dintre acesteasunt: 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.

Page 40: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Page 41: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

45 Introducere în Microsoft Access: Tabele - cursul 3

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

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

! cum se descrie semnificaÛia câmpului;

! cum se salveaz| un tabel nou;

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

Obiectivele cursului 3Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 42: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

46 Introducere în Microsoft Access: Tabele - cursul 3

Ce se dores-te?

Ce avem ladispozit-ie?

Ce este de fa7cut?

Proiectarea bazei de dateMetoda 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 dedezvoltare al bazei de date se aprofundeaz|. Trecerea direct| la lucrul pe calculator va duce demulte 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 cedorim cu ceea ce avem.

Ce întreb|ri ne punem?Î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.Aici cel mai important este definirea rezultatelor, adic| a ieÕirilor pecare 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|aceasta.

Cunoscând ceea ce se doreÕte se pot analiza datele disponibile pentru adecide asupra modului de structurare în termeni de tabele Õicâmpuri.

Aceast| întrebare cere proiectantului s| g|seasc| toate prelucr|rilenecesare 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 ceintervin în naraÛiunea subiectului de rezolvat, eventual putem încerca s| schiÛ|m pe hârtiefluxurile de date într-o form| foarte sintetic|. Dac| baza de date este proiectat| pentrualtcineva, ar|taÛi aceste desene persoanelor în cauz| pentru ca s| fiÛi convinÕi c| aÛi înÛelescorect problema de rezolvat.

De exemplu, Vasile este patronul unei mici firmede calculatoare. El cump|r| produse de lafurnizori. Are angajaÛi. Magazinul este structuratpe categorii de produse (pl|ci de baz|,microprocesoare, memorii, discuri, imprimanteetc.). Comenzile pentru clienÛi pot fi pentru unulsau mai multe produse. Firma fiind mic| nu Ûinemarf| pe stoc, produsele fiind cump|rate de lafurnizori numai pe baz| de comenzi.

Reguli generale de proiectareTabelele sunt formate din coloane (câmpuri), fiecare conÛinând o informaÛie specific| (deexemplu: nume_client, preÛ) Õi rânduri (în unele c|rÛi numite Õi linii sau înregistr|ri) carecolecteaz| 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

Page 43: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

47 Introducere în Microsoft Access: Tabele - cursul 3

Unicitateaîntregistra7rilor

Unicitateacâmpurilor

Câmpurile trebuiesa7 fie dependentefunct-ional

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:

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 Õiadresa 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, deexemplu, 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|, unastfel de câmp este Total.

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

Fiecare tabel ar trebui s| aib| o cheie primar|. O cheie primar| esteun câmp sau o grupare de câmpuri care permite identificarea în modunic a înregistr|rilor. Cheia primar| se defineÕte de c|tre proiectant Õiasigur| 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 ÕiAutoNumber de la Access 97 în sus) la începutul fiec|rei înregistr|ri. Valoarea acestuia se vaincrementa automat la introducerea unei înregistr|ri noi în tabel. DeÕi aceast| metod|garanteaz| unicitatea înregistr|rii, ea nu asigur| neap|rata distincÛie a dou| înregistr|ri, cuexecepÛ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|într-un alt tabel. Este posibil ca într-un tabel s| avem, pe lâng| altecâ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| Õivor fi stocate în tabele diferite. Pentru exemplul prezentat în figura anterioar| astfel decâmpuri sunt Nume articol x, Cantitate x, Pret x.

Fiecare câmp dintr-o înregistrare trebuie s| fac| parte din subiectulînregistr|rii. Dac| nu este aÕa atunci, fie este redundant, fie face partedintr-un alt tabel.

Page 44: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

48 Introducere în Microsoft Access: Tabele - cursul 3

Câmpurile trebuiesa7 fieindependente

Câmpurile nu potcont-ine datederivate

Datele sa7 fiestocate sub formalogica7 elementara7

Trebuie s| fie posibil| modificarea oric|rui câmp al unei înregistra7rif|r| afectarea altor câmpuri.

Pentru exemplul anterior, câmpul Total nu trebuie calculat Õi stocatîn baz|, el se poate calcula numai atunci când se tip|reÕte un raport sause deschide un formular.

Ar fi util ca, de exemplu, oraÕul, adresa Õi telefonul unui client s| fiestocate în câmpuri separate pentru ca s| se poat| realiza analize bazatepe conÛinutul lor. De exemplu, v| puteÛi întreba câÛi clienÛi din oraÕulCluj au cump|rat pl|ci de baz|. Pentru aceÕtia câmpul oraÕ va conÛinevaloarea 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 devinedificil|.

Determinarea relaÛiilorDup| ce se cunosc tabelele bazei de date trebuie s| decidem asupra modului de alc|tuire arelaÛ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| Õis| fie înlocuite prin crearea unui tabel adiÛional rezultând dou| tabele unu-la-mulÛi. AnaliÕtiide sistem folosesc notaÛii diferite pentru descrierea relaÛiilor. În Microsoft Access se folosescurm|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.

Teoria proiect|rii bazelor de date relaÛionaleModalitatea prezentat| pentru proiectarea unei baze de date relaÛionale a fost laic| avândintenÛ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| deCodd, ale c|rei reguli au fost prezentate în cursul 1, se pot identifica urm|toarele categorii deprobleme: • 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|. Fiecaretabel 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, ofactur|, 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 degarantare a unicit|Ûii fiec|rui rând este cheia primar| (Primary Key) - o coloan| sau un grup

Page 45: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

49 Introducere în Microsoft Access: Tabele - cursul 3

de coloane care conÛin valori unice pentru fiecare rând din tabel. Access-ul permite setareaunui câmp ca Õi cheie primar| dac| tabelul este vizualizat în mod proiectare. Toate câmpurilecu valori unice din tabel se numesc chei candidat (candidate keys), dintre acestea va fialeas| cheia primar|. O cheie simpl| (simple key) este format| dintr-o singur| coloan|, unacompus| (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-ofirm|:

Privind datele de mai sus chei candidate ar putea fi: Nume Contact, Telefon1 Contactsau E-mail Contact. O regul| de bun simÛ este ca cheia s| fie cât mai simpl|, cât maiunic| posibil Õi s| nu se modifice în timp. Numele unei persoane se poate modifica în caz dec|s|torie sau divorÛ, modific|ri sunt posibile Õi pentru numerele de telefoane sau adresele dee-mail. În acest caz, Access-ul permite folosirea unui câmp de tipul AutoNumber pe post decheie primar|. Acest tip de câmp genereaz| o valoare numeric| care se incrementeaz| automatla 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 seobserv| în figura al|turat|:

Se observ| c| se poate stoca cheia primar|, IDContact, a unui tabel, TContacte, într-un alttabel, mai sus, TTipContact, pentru a reprezenta înregistrarea în acest tabel nou. Acest câmpintrodus 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 dinacelaÕi domeniu. Domeniile reprezint| o mulÛime comun| de valori din care coloanele iauvalori.

RelaÛiiCând definiÛi cheile primare Õi cele str|ine, definiÛi în realitate relaÛii. Dup| Regula nr. 4relaÛiile trebuie s| fie intergrate la nivelul motorului bazei de date. Access-ul poate lucra cuurm|toarele tipuri de relaÛii: • unu la unu (1º1); • unu la mulÛi (1ºM); • mulÛi la mulÛi (MºM).

Page 46: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

50 Introducere în Microsoft Access: Tabele - cursul 3

RelaÛii unu la unuDou| tabele sunt în relaÛie unu la unu, dac| pentru fiecare rând dintr-un tabel, exist| cel multunul, în cel|lalt tabel al relaÛiei. În practic| relaÛiile unu la unu sunt rare, o astfel de relaÛie seva naÕte, în general, pentru a ocoli unele neajunsuri ale software-ului SGBDR Õi ca onecesitate a unei situaÛii din lumea real|. În Access, o relaÛie 1º1, se poate naÕte din motivede securitate ale unor câmpuri dintr-un tabel sau din cauz| c| num|rul de coloane este limitatla cel mult 255.

RelaÛii unu la mulÛiEste 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.

RelaÛii mulÛi la mulÛiDou| tabele au o relaÛie mulÛi la mulÛi când pentru fiecare rând din primul tabel pot fi maimulte rânduri în al doilea Õi pentru fiecare rând în cel de al doilea tabel, pot fi mai multerânduri în primul tabel. Majoritatea SGBDR nu permit modelarea direct| a relaÛiilor MºM,aÕa este Õi Access-ul. Pentru a modela aceast| relaÛie între dou| tabele, este nevoie de un altreilea tabel, numit tabel de leg|tur|.

Normalizarea datelorRegulile enunÛate de Codd Õi prezentate anterior (Unicitatea înregistrarilor, Câmpuriletrebuie sa fie dependente functional etc.) într-o form| cât mai accesibil| vor fi reluate încontinuare sub o form| mai tehnic|. S-a spus c| acest proces de proiectare a bazei de dateconform acestor reguli poart| denumirea de normalizare. Codd a enunÛat Õase nivele denormalizare, î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|1NF spune c| toate coloanele unui tabel trebuie s| conÛin| valori atomice. Adic|, fiecarecâmp poate conÛine numai o valoare de un singur tip, respectiv listele de valori Õi grupurile dedate 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:

Page 47: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

51 Introducere în Microsoft Access: Tabele - cursul 3

A Doua Form| Normal|Un tabel care este pus în 1NF se zice c| este în 2NF dac| toate câmpurile care nu sunt cheisunt total dependente de cheia primar|. Cu alte cuvinte tabelul trebuie s| stocheze date legatenumai de o singur| entitate, iar acea entitate trebuie s| fie complet descris| de cheia eiprimar|. Dac| consider|m o cheie primar| compus| din câmpurile: IDContact,IDInfoContact Õi Info Contact, se observ| c| Nume Contact nu este dependent| decâmpurile IDInfoContact Õi Info Contact ale cheii primare. Pentru c| este dependent|numai de câmpul IDContact din cheia primar|, tabelul nu este în 2NF. Pentru a-l pune în2NF, se pune toat| informaÛia legat| de contact într-un tabel nou, TContacte1, Õi vom stabili orelaÛie de tipul 1ºM între cele dou| tabele. Cele dou| tabele puse în 2NF sunt prezentate încontinuare.

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 toatecâmpurile necheie sunt mutual independente. Un exemplu bun de astfel de dependenÛ| este uncâmp calculat. DependenÛe care nu rezult| în urma calculelor pot, de asemenea, s| existe întrecâmpurile unui tabel. În tabelul TContacte1 se stocheaz| câmpurile IDInfoContact Õi Tip

Page 48: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

52 Introducere în Microsoft Access: Tabele - cursul 3

Contact. ObservaÛi c| atunci când se cunoaÕte valoarea lui IDInfoContact se cunoaÕteautomat Õi valoarea lui Tip Contact, din acest motiv tabelul nu este în 3NF. Pentru aajunge la 3NF tabelul TContacte1 trebuie spart în dou| tabele, TContacte1 Õi TTipContact, întrecare din nou va exista o relaÛie 1ºM creat| pe baza câmpului IDInfoContact.

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

Page 49: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 fideterminate automat în baza relaÛiilor create între tabele. În cazul în care exist| o relaÛie, întretabelul curent Õi un alt tabel din baza de date, Access va afiÕa o coloan| în stânga foii de datecu un + pentru fiecare rând.

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

Subfoaia de date care se afiÕeaz| se defineÕte în modul proiectare al tabelului, fiind oproprietate a tabelului. Pentru afiÕarea propriet|Ûilor în mod proiectare selectaÛi din View peProperties; 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 bazarelaÛiilor create în baza de date. În locul lui Auto, dac| se face clic pe proprietate în dreaptaapare 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 tabeluluiprincipal (Master) cu cel al subfoii de date (Child) în vederea afiÕ|rii ei atunci când Accessnu poate deduce care sunt câmpurile celor dou| tabele pe baza c|rora se face leg|tura întreele. Probleme de acest fel apar când câmpuri pe baza c|roa Access face automat aceast|leg|tura sunt redenumite.

Reguli de integritateModelul relaÛional defineÕte mai multe reguli, care nu sunt parte a formelor normale, dar sunt

Page 50: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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.

Reguli de integritate generaleModelul relaÛional specific| dou| tipuri integrit|Ûi generale - care se aplic| la toate bazele dedate: integritate de entitate Õi integritate referenÛial|. Integritatea de entitate spune c| o cheieprimar| nu poate conÛine valori Null (inexistente). Integritatea referenÛial| spune c| o baz| dedate nu are voie s| conÛin| chei str|ine care nu au o cheie primar| corespondent|. Aceastaimplic|: • 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întreaga înregistrare este Õtears|, rândurile corespunz|toare din tabelul cu cheia str|in| nutrebuie 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: • Disallow: modificarea este strict interzis|; • Cascade: pentru actualiz|ri, modificarea este propagat| în cascad| la toate tabeleledependente. 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 seselecteaz| 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 liniace leag| cele dou| chei.

Reguli de integritate specifice bazei de dateToate 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 bazede date în parte Õi vine din regulile procesului care s-a modelat. Aceste reguli sunt la fel de

Page 51: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

55 Introducere în Microsoft Access: Tabele - cursul 3

Pentru a crea obaza7 de date

Pentru a crea obaza7 de datefolosindGeneratorul

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

Crearea unei baze de datePartea dificil| este proiectarea bazei de date, crearea fiind mult mai simpl|. Pentru uneleaplicaÛii standard se poate folosi un Generator pentru a crea toate tabelele dup| care se poatetrece 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Õicompartiment|ri geografice, aceleaÕi formate pentru telefoane, acelaÕi sistem pentru codurilepoÕtale etc.

Indiferent dac| aplicaÛia se creeaz| f|r| Generator sau cu ajutorul acestuia, trebuie înÛelesenoÛiunile de tipuri de date, tabel Õi proprietate de câmp. De asemenea, trebuie st|pânitenoÛiunile de cheie primar| Õi index. Acestea sunt probabil cele mai dificile aspecte legate decrearea Õi întreÛinerea unei baze de date.

• din meniul File selectaÛi New Database sau • ap|saÛi Ctrl+N sau • efectuaÛi clic pe simbolul grafic New Database din bara deinstrumente standard (Standard toolbar).

• efectuaÛi clic pe simbolul grafic New din fereastraaplicaÛiei Access, aceasta va duce la afiÕarea cutiei de dialog New deforma:

• selectaÛi simbolul grafic Blank Database din interiorul cutiei General ; • efectuaÛi clic dublu pe simbolul Blank Database Õi cutia de dialog File NewDatabase va fi afiÕat| sub forma:

Page 52: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

56 Introducere în Microsoft Access: Tabele - cursul 3

• 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 butonulCreate, iar ecranul se va modificaca în figura al|turat|, afiÕândfereastra principal| a noii baze dedate Access; numele de curs3, pecare l-am dat bazei de date seobserv| în colÛul strânga sus; • în fereastra bazei de date(Database Window) efectuaÛi clicpe butonul Tables; • apoi efectuaÛi clic pe butonulNew. • în cutia de dialog NewTable selectaÛi opÛiunea TableWizard din list|:

• 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Ûiselecta Business sau Personal;

Page 53: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

57 Introducere în Microsoft Access: Tabele - cursul 3

Redenumirea unuicâmp folosindGeneratorul deTabele

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

• clic pe butonul de forma pentru a ad|uga câmpul în lista Fields in my newtable;

În figura care urmeaz| am selectat bazele de date cu caracter personal, prin butonul de opÛiune

Personal, iar din lista afiÕat|, baza de date Addresses, care, fiind prima, se va selectaautomat. Apoi câmpul FirstName a fost ad|ugat. • când se adaug| un câmp, articolul selectat din lista Sample Fields dispare automat Õiapare în lista Fields in my new database. Pentru a ad|uga noi articole puteÛi s| efectuaÛi clicdublu pe articolul dorit;

• selectaÛi câmpul pe care doriÛi s|-l redenumiÛi din lista Fieldsin my new database; • clic pe butonul Rename Field din cutia de dialog iar pe ecranse 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

Page 54: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

58 Introducere în Microsoft Access: Tabele - cursul 3

Tabele; • în cutia de text (text box) What do you want to name your table? introduceÛinumele sub care se va salva tabelul;

• în condiÛii normale veÛi l|sa Generatorul s| selecteze o cheie primar|, dar dac| doriÛiputeÛi s| o faceÛi dumneavoastr|; • clic pe butonul Next pentru a trece la urm|toarea pagin| a Generatorului; • ultima pagin| a Generatoruluieste afiÕat|. • aici se poate accepta opÛiuneaimplicit| pentru trecerea direct laintroducrea datelor în tabelul tocmaicreat sau • exist| opÛiunea modific|riiproiectului de tabel (table design) sau • se pot introduce date în tabelpe baza unui formular pe careGeneratorul îl va crea automat; • dup| selectarea opÛiunii doritese apas| butonul Finish.

Dac| aÛi selectat opÛiunea implicit| pentru introducerea datelor direct în tabel, ecranul va fi deforma:

Page 55: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

59 Introducere în Microsoft Access: Tabele - cursul 3

Pentru a crea untabel faraGenerator

Dac| aÛi fi optat pentru introducerea datelor în tabel prin formularul creat de Generator,ecranul ar fi fost ceva de genul:

Crearea unui tabel f|r| Generator • în Database Window clic pe butonul Table; • clic pe butonul New; • în cutia de dialog New Table, selectaÛi Design View apoi clicpe butonul OK.

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

Page 56: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

60 Introducere în Microsoft Access: Tabele - cursul 3

Descriereasemnificat-ieicâmpului

Ada7ugarea de noicâmpuri

Salvarea nouluitabel

de exemplu, aÛi putea introduce Nume, apoi ap|saÛi tasta Tab pentru a trece la urm|toareacelul|; • Aceast| celul| se numeÕte Tipul de Dat| (Data Type). Ea permite controlul tipului dedat| care va fi stocat în acest câmp. Clic pe s|geata în jos pentru a afiÕa lista tuturor opÛiunilorposibile;

În acest caz tipul selectat este Text. Dac|, de exemplu, în câmp doriÛi s| stocaÛi valorinumerice, tipul selectat ar fi fost Number; • ap|saÛi tasta Tab pentru a trece la celula urm|toare;

• acesta este un câmp opÛional al c|rui conÛinut explic| funcÛiacâmpului în baza de date Õi care va fi folosit mai târziu în tabelelebazei;

• ap|saÛi tasta Tab Õi veÛi putea ad|uga noi câmpuri, tipuri dedate Õi descrieri în tabel;

• clic pe simbolul grafic Close în colÛul dreapta sus al ferestrei deproiectare al tabelului iar când vedeÛi cutia de dialog care întreb| dac|doriÛi s| salvaÛi datele, clic pe butonul Yes;

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

Page 57: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

61 Introducere în Microsoft Access: Tabele - cursul 3

• clic pe butonul Yes pentru a crea o cheie primar|; în acest caz Access-ul va ad|uga unnou câmp în tabel cu numele ID Õi de tipul AutoNumber care va acÛiona pe post deidentificator unic al unei înregistr|ri din tabel. Acest câmp poate fi folositor, dar este mainormal ca noi s| decidem care câmp sau combinaÛie va identifica unic o înregistrare din tabelÕ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(vezi figura urm|toare).

Definirea tipurilor de câmpuri ale unui tabelExist| multe tipuri de date. La vizualizarea câmpurilor din baza de date în mod proiectare sepot 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 tipulText 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 saureale. Diferitele tipuri de numere sunt detaliate în tabelul care urmeaz|:

Page 58: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

62 Introducere în Microsoft Access: Tabele - cursul 3

Denumire tip Domeniu de valori Precizie înzecimale

SpaÛiu destocare

valo

riîn

treg

i Byte [0, 255] fa7ra7 1 octet

Integer [-32768, 32767] fa7ra7 2 octeÛi

Long Integer [-2147483648, 21474836647] fa7ra7 4 octeÛi

valo

rire

ale

Single [-3.4x1038, 3.4x1038 ] 7 4 octeÛi

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

Date/Time tip folosit pentru stocarea de date sau ore. Exist| o varietate de formate aledatei Õi timpului în care valorile de acest tip pot fi specificate;

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

AutoNumber o valoare numeric| ce pleac| de la 1 Õi este incrementat| automat pentrufiecare î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 unuitabel Access. Când un câmp legat (linked field) este reîmprosp|tat dininteriorul Access-ului sau al aplicaÛiei originale, modific|rile sunt valabile înambele aplicaÛii, dac| obiectul este numai inclus (embeed) reîmprosp|tarea seface numai în aplicaÛia în care s-au f|cut modific|rile;

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

LookUp Wizard permite crearea unui câmp prin care utilizatorul poate selecta o valoaredintr-un tabel diferit sau dintr-o list| de valori.

Propriet|Ûile câmpurilorDup| ce aÛi decis asupra tipului de dat| pentru fiecare câmp, trebuie parcurse Õi propriet|Ûileasociate tipului. Num|rul Õi natura lor este dependent| de tip, iar în unele cazuri, efectuândclic î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 deposibilit|Ûi.

Field Size DefineÕte lungimea câmpului de text. Pentru un câmp numeric exist| 5posibilit|Ûi. În partea dreapt| se va afiÕa un mesaj de ajutor cu privire laproprietatea curent|. Pentru cazul în care câmpul va fi asociat (joined) cu unulde tipul contor (AutoNumber) într-o relaÛie de tipul unu-la-mulÛi esteobligatorie selectarea tipului Long Integer;

Page 59: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

63 Introducere în Microsoft Access: Tabele - cursul 3

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

Input Mask asigur| un Õablon - o masc| - pentru introducerea datelor. Pentru anumite tipuride date se poate folosi un Generator de M|Õti de Intrare (Input MaskWizard);

Caption text care va fi afiÕat ca denumire a câmpului în capetele de tabele, etichete depe 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 poateintroduce oricând o alt| valoare în locul acesteia;

Validation Rule o expresie care controleaz| modul în care noile date sunt introduse întabel;

Validation Text un text care se afiÕeaz| dac| regula de validare (Validation Rule) adatelor 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) încâmp (valoarea se scrie în limbajul de programare al Access-ului ca osecvenÛ| de dou| ghilimele""). Aceasta este diferit| de valoarea Null pecare 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 repetatepe baza unui câmp trebuie s|-l indexaÛi. Valorile sunt Nu (No), Da (Yes -

Page 60: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

64 Introducere în Microsoft Access: Tabele - cursul 3

LansareaGeneratoruluiMa7s-tilor de Intrare

Editarea Ma7s-tii deIntrare

Pentru detalii alecodurilor dinmasca7

Duplicates OK) Õi Da (Yes - No Duplicates). Cheile primare sunt automatindexate Õi cu proprietatea Indexed setat| pe No Duplicates. Un index este osecvent-a7 de perechi (cheie, poantor), stocat| într-un fiÕier intern special, în carefiecare poantor poanteaza7 o înregistrare din baza de date care cont-ine valoareacheii stocata7 într-un câmp particular. Indexul este sortat pe baza valorilor dincheie pentru a permite ca7utarea rapida7 a unei valori particulare de cheie (deexemplu, folosind algoritmul de ca7utarea binara7). Index-ul este folosit"inversat" în sensul ca7 valoarea cheii este utilizat| pentru ga7sirea înregistra7rii înloc sa fie invers. Pentru bazele de date în care înregistra7rile pot fi sortate pebaza a mai multor cîmpuri se pot crea indexuri multiple care sînt sortate pebaza valorilor acelor chei. Un index poate cont-ine goluri pentru a permiteada7ugarea de noi intra7ri pentru sortarea corecta7 fa7ra7 a realiza deplasareaintra7rilor care nu sînt în pozit-ia corecta7 . Fereastra de indexuri se poatevizualiza, individual, pentru fiecare tabel în modul proiectare din View,Indexes.

Proprietatea Masc| de IntrareDup| cum am mai spus asigur| un Õablon pentru introducerea datelor. Este posibil caGeneratorul M|Õtilor de Intrare (Input Mask Wizard) s| nu fie instalat !

• în modul proiectare al tabelului, selectaÛi câmpul pentru caredoriÛi s| definiÛi o masc| de intrare. Din propriet|Ûi selectaÛi InputMask apoi clic pe butonul cu cele 3 puncte de la cap|tul liniei m|Õtiide intrare;

• aceasta va afiÕa Generatorul M|Õtilor deIntrare (vezi figura ala7 turata7);

• selectaÛi formatul dorit apoi clic pe Next,parcurgeÛi intrucÛiunile ecranelor intermediare, iarcând ajungeÛi la cel final clic pe Finish;

• pentru editarea m|ÕtiiafiÕate de GeneratorulM|Õtilor de Intrare selectaÛimasca dorit| apoi clic pe Edit

List. RealizaÛi modific|rile dorite (eventual utilizândsistemul de ajutor interactiv "on-line help") apoi activaÛi Õi salvaÛi modific|rile f|cute;

• clic pe meniul Help al Access-ului; • selectaÛi Contents and Index; • selectaÛi butonul Index; • tastaÛi InputMask Property; • clic pe butonul Display.

Stabilirea cheii primareCheia 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 Õisortarea datelor. Deseori cheia primar| este folosit| în stabilirea relaÛiilor;

Clic aici

Page 61: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

65 Introducere în Microsoft Access: Tabele - cursul 3

Pentru salvareaunui tabel

Pentru ada7ugareade înregistra7riunui tabel în modfoaie de date

Setarea unui câmpca s-i CheiePrimara

Setarea maimultor câmpuri cas-i Cheie Primara

• înregistr|rile într-un formular sau foaie de date (Datasheet) sunt afiÕate în ordineavalorilor cheii primare; • nu este posibil| dublarea unor înregistr|ri fiind garantat| unicitatea lor.O cheie primar| se formeaz| din unul sau mai multe câmpuri.

• vizualizând Tabelul în mod proiectare (Table Design View),selectaÛi câmpul care va fi f|cut cheie primar|. EfectuaÛi fie clicundeva 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.

• vizualizând Tabelul în mod proiectare (Table Design View),selectaÛi primul câmp prin selectorul din stânga lui. ÚineÛi ap|sat| tastaCtrl Õ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

standard.

Salvarea unui Tabel • selectaÛi Save din meniul File; • dac| salvaÛi tabelul pentru prima oar|, tastaÛi un nume în cutiaTable 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 maisugestiv.

Ad|ugarea de înregistr|ri unui Tabel vizualizat în modulfoaie de dateDup| ce aÛi terminat etapa de proiectare a tabelului se pot ad|uga înregistr|ri în acesta princomutarea pe vizualizarea în modul foaie de date (Datasheet View).

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 selectoruluide î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; • introduceÛi o valoare apoi ap|saÛi Tab pentru trecerea lacâmpulurm|tor,repetaÛiprocedura

pentru toate câmpurile; • când aÛi ajuns la ultimulcâmp, ap|sarea tastei Tab mut|cursorul pe primul câmp al uneinoi înregistr|ri vide. Access va

Page 62: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

66 Introducere în Microsoft Access: Tabele - cursul 3

salva înregistrarea curent| numai la deplasarea pe urm|toarea înregistrare, care acum este dinnou una vid|.

Utilizarea formatelorProprietatea Format, dupa7 cum am mai spus, permite afis-area datelor sub o forma7 diferita7 desecvent-a originala7 de caractere folosita7 la introducerea datelor. Formatele variaza7 în funct-ie detipurile de date folosite. Unele tipuri de date au formate predefinite, altele, nu au s-i trebuiedefinite de utilizator, iar în unele cazuri sunt posibile ambele situat-ii. Formatele nu act-ioneaza7asupra modului de stocare a datelor în tabele ci influent-eaza7 numai modul de afis-are al lor.

Formatarea pentru tipurile Text s-i MemoSimbolurile din tabelul urma7 tor sunt folosite de Access pentru la formatarea datelor stocate încâpuri de tipurile Text s-i Memo.

Simbol Semnificat-ie

@ Caracter sau spat-iu care trebuie specificat.

& Caracter ca nu este obligatoriu de specificat.

< 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-ioneaza7asupra întregului s-ir de caractere ale câmpului. Daca7 vret-i sa7 fi t-i siguri ca7 un nume va fiîntotdeauna afis-at cu majuscule introducet-i în proprietatea Format simbolul >. Daca7 dori t-i sa7stocat-i un numa7r de telefon, folosind un câmp de tipul Text, fa7ra7 sa7 introducet-i liniut-e pentrugruparea cifrelor din numa7r, în proprietatea Format vet-i scrie @@-@@-@@. Daca7 de lataststura7 vet-i introduce 123456, când va7 pozit-ionat-i pe o alta7 înregistrare, valoarea se va afis-asub forma 12-34-56. O problema7 ar putea fi numerele de telefoane care nu au fost introduse înbaza de date. Proprietatea Format poate avea doua7 sect-iuni separate prin ;. Prima se foloses-tepentru formatarea câmpului când acesta cont-ine text, a doua este formatul în cazul în care nus-a introdus o valoare în câmp (lipsa valorii se poate reprezenta printr-un s-ir de lungime zerosau 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 fiafis-ata7 cu liniut-e în culoarea albastra7 , iar daca7 valoarea lipses-te se va scrie în locul eineintrodus în ros-u.

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

Tip format Numa7r introdus Numa7r afis-at Definit-ia formatului

General 123456.789 123456.7 ######.#

Currency 123456.789 $123,456.78 $###,##0.00

Page 63: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

67 Introducere în Microsoft Access: Tabele - cursul 3

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

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

Percent 123456.789 78.9% ###.##%

Scientific 123456.789 1.22%+05 ###E+00

Toate formatele de mai sus sunt implicite s-i bazate pe setarea proprieta7 t-ii Decimal place peAuto.

Formatele numerice personalizate pot avea patru sect-iuni: (1) pentru valori pozitive; (2)pentru valori negative; (3) pentru valori zero; (4) pentru valori nespecificate. De asemenea, sepoate specifica o culoare care sa7 ajute la observarea unori valori critice. Daca7 scriem unformatul #.##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 s-i zero, iar cele nespecificate ca s-ineintrodus. Câteva dintre simbolurile care pot fi utilizate într-un câmp personalizat sunt:punctul (.), virgula (,), 0 (cifra7 care va fi afis-ata7 ca s-i 0 întotdeauna, daca7 nu cumva are o alta7valoare), $ (pentru afis-area semnului $), % (pentru afis-area semnului %).

Formatarea pentru tipurile Date/TimePosibilit|Ûile de formatare ale tipurilor Date/Time sunt cele mai multe existând Õapte opÛiunipredefinite:

! 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 uneiore; 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ÛiuneaShort Date; 2/17/01; ! Long Time: Conform set|rilor din Windows Regional Settings, SecÛiuneaTime; 10:19:17 PM; ! 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 deutilizator, 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);

Page 64: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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);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;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 fiafiÕate pe baza set|rilor din fereastra de dialog Regional Setting Properties din WindowsControl Panel. Alte caractere pot fi ad|ugat formatelor, dar acestea trebuie incluse întreghilimele, de exemplu, formatul mmm dd","yyyy va afiÕa, February 07, 2001 dac| seintroduce data 02/07/01.

Formatarea în cazul tipului Yes/NoAccess stocheaz| datele de tipul Yes/No într-un fel mai puÛin aÕteptat. Valoarea Yes estestocat| ca Õi -1, iar cea No ca Õi 0. În lipsa unor set|ri de formatare acestea sunt valorile caretrebuie introduse Õi afiÕate. Cu ajutorul formatelor valorile de tipul Yes/No pot fi aduse la oform| 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. Primanu are efect asupra datelor Õi trebuie s| fie obligatoriu caracterul ;. Cea de a doua se foloseÕtepentru afiÕarea valorii On sau True (stocat| în baz| ca Õi -1). SecÛiunea a treia se folseÕtepentru specificarea afiÕ|rii lui Off sau False (stocat| în baz| ca Õi 0). De exemplu, dac| dorins| 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 definitmai sus. În primul rând, dac| se defineÕte un format, pentru acest tip, de c|tre utilizatortrebuie modificat| Õi proprietatea Display Control din Lookup de la Check Box la Text Boxpentru a vedea datele conform noului format. În al doilea rând, deÕi datele vor fi afiÕateconform formatului, atunci cînd datele vor fi introduse de la tastatur| trebuie folosite valorile -1 Õi 0.

Utilizarea m|Õtilor de intrareMasca 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-adefinit o proprietate masc| de intrare de forma 999-(9)99-000.000 parantezele rotunde Õi liniase afiÕeaz| pe poziÛiile corespunz|toare la introducerea datelor, iar caracterul underscore,

Page 65: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 \ înfaÛ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 ;. PrimadefinieÕ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 atreia secÛiune specific| caracterul pe care Access îl foloseÕte pentru afiÕarea spaÛiilor în mascade intrare. Implicit, acesta este caracterul underscore. Dac| doriÛi s| folosiÛi spaÛiul acestatrebuie curpins între ghilimele. Câteva dintre caracterele care se pot folosi în masca de intraresunt descrise în continuare:

Caracter Efect

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 înspaÛii; se pot folosi semnele - Õi +

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

? 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ândcaracterele din partea stâng| sunt opÛionale; implicit completarea se facede la stânga la dreapta

\ AfiÕeaz| caracterul care urmeaz| f|r| a-l interpreta, ci doar ca Õi uncaracter obiÕnuit

. , : ; - / specificator de poziÛie, separator de mii, dat| Õi timp determinaÛi deset|rile din secÛiunea Regional Setting a lui Control Panel

Validarea datelorValidarea datelor const| în limitarea valorilor care pot fi introduse de la tastatur| într-uncâmp. Ea poate fi automat|, de exemplu, se poate verifica dac| într-un câmp numeric a fostintrodus un text sau dac| data introdus| este valid| sau poate fi definit| de utilizator pe bazaunei expresii care se evalueaz| pentru fiecare dat| nou| care se introduce în câmp. Expresiacare este testat| pentru acceptarea valorii introduse se scrie în Validation Rule, iar mesajul deeroare care va fi afiÕat dac| regula de validare este înc|lcat| se scrie în Validation Text. Deexemplu, dac| tipul câmpului este Date/Time Õi dorim ca data care se introduce s| fie îndomeniul 1/1/1998 Õi 1/1/2000, regula de validare va fi scris| sub forma between #1/1/98#

Page 66: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 fiacceptate numai valori numerice mai mici ca 100. Expresia de validare poate conÛine oricefuncÛii scrise de noi sau dintre cele ale limbajului VBA. De exemplu, dac| avem un câmp cunumele 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 numelecâmpului care se testeaza7 , simplu, sau ca s-i paramtru al unei funct-ii, dar nu pot sa7 participenume ale altor câmpuri din tabel. De exemplu, în cazul unui câmp de tipul Date/Time, cunumele DataNast, este corect sa7 scrie o expresie pentru validare de formaYear([DataNast]) < 1977. Aceasta va permite introducerea unor date de nas-tere careau anul mai mic decât 1977.

Page 67: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

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

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

! cum se va selecta o coloan|;

! cum se selecteaz| coloane adiacente;

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

! cum se Õterge conÛinutul unui câmp;

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

Obiectivele cursului 4

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 68: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a selecta oînregistarefolosind selectorulde înregistra7ri

Pentru a selecta ungrup deînregistra7riadiacente

Pentru a selectatoate înregistra7rileunui tabel

Editarea înregistr|rilorExist| o varietate mare de posibilit|Ûi de editare a înregistr|rilor atât pentru formulare (Form)cât Õi pentru foi de date (Datasheet).

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| noulconÛ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:

înregistrarea curent|;

înregistrarea este selectat|;

înregistrarea se editeaz|;

ultima înregistrare (este vid|).

Selectarea înregistr|rilor cu mouse-ul • clic pe selectorul de înregistrare; înregistarea selectat| mai jos

are culoarea de fond neagr|.

• clic pe selectorul primei înregistr|ri, se Ûine ap|sat butonulstâng al mouse-ului Õi se deplaseaz| cursorul pân| pe ultima

î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înregistr|ri aflat la intersecÛiadintre selectorii de înregistr|ri Õicoloane;

Page 69: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru select-iaunei înregistra7ri

Pentru select-iatuturorînregistra7rilor

Selectarea unuicâmp prin tragere(dragging)

Selectarea unuicâmp prin cursor

Selectarea unorcâmpuri adiacente

Pentru a selecta ocoloana7 cumouse-ul

Pentru a selectacoloane adiacente

Selectarea înregistr|rilor folosind tastatura • poziÛionaÛi-v| folosind tastele 6, 7 pe înregistrarea dorit|; • selectaÛi din meniul Edit (Alt+E); • selectaÛi Select Record (L).

• ap|saÛi Ctrl+A sau • din meniul Edit (Alt+E) selectaÛi Select All Records (A).

Selectarea câmpurilor cu mouse-ul • clic la un cap|t al câmpului Õi cu butonul stâng al mouse-uluiap|sat se deplaseaz| cursorul pân| pe cel|lat cap|t; deplasareamouse-ului cu butonul ap|sat va fi numit| în continuare tragere(dragging).

• se plaseaz| mouse-ul la începutul câmpului. Cursorul îÕi vamodifica forma într-un semn plus "+"; • clic pe butonul stâng al mouse-ului.

• se va selecta un prim câmp cu ajutorul mouse-ului; • Ûinând tasta Shift ap|sat| ne folosim de tastele pentrudeplasarea cursorului (6, 7, 8, 9) pentru a selecta câmpuri în sensulindicat de respectivele taste.

Selectarea coloanelor cu mouse-ul • deplasaÛi cursorul mouse-ului pe selectorul de coloan|. Forma

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 pesteselectorii coloanelor adiacente sau • clic pe selectorul de coloan| Õi Ûinând ap|sat| tasta Shift, clicpe ultima coloan| care va fi selectat|.

Page 70: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Selectarea unuicâmp cu tasta Tab

Pentru a selecta uncâmp cu F2

Pentru a deselectaun câmp

Pentru a selecta uncâmp folosindtastele "cusageata7"

Pentru a s-terge oînregistrare

Pentru a s-tergecont-inutul unuicâmp

Pentru a înlocuicont-inutul unuicâmp

Selectarea câmpurilor Õi coloanelor de la tastatur| • ap|saÛi tasta Tab pentru a selecta câmpul din dreapta sau • Shift+Tab pentru a selecta câmpul din stânga celui curent.

• clic undeva în câmp apoi ap|saÛi F2.

• ap|saÛi F2.

• selecteaz| un câmp cu F2; • ÛineÛi ap|sat| tasta Shift; • ap|sarea uneia dintre cel 4 taste "cu s|geÛi" va produceselectarea câmpului adiacent aflat în sensul s|geÛii.

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

• selectaÛi înregistrarea; • ap|saÛi tasta Delete; • dac| doriÛi efectuarea Õtergerii clic pe butonul Yes, pentru anularea Õtergerii lansateclic pe No.

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

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

Vizualizarea Õi setarea valorilor implicite pentru foile dedateLa crearea unui tabel dimensiunile coloanelor Õi liniilor corespund unor set|ri implicite. De

Page 71: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a vizualizaseta7rile curente

Mutarea unorcoloane

Pentru a reordonacâmpurile dintabel

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 Õiurm|toarea fereastr| de dialog va fi afiÕat|: • modificaÛi oricare dintre aceste opÛiuni implicite apoi

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

Redefinirea ordinii de afiÕare a coloanelor unui tabelUneori 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; • clic pe selectorul de câmp Õi trageÛi coloana pe noua poziÛie. Pem|sur| ce deplasaÛi coloana, o bar| mai groas| vertical| indic| poziÛiacurent| a coloanei care este în curs de mutare;

• eliberaÛi butonul stâng al mouse-ului.

Reordonarea câmpurilor unui tabelAvâ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) ÕiselectaÛi câmpul care doriÛi s| fie repoziÛionat prin clic pe selectorul decâ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|;

Page 72: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Modificarea la7t-imii(width) uneicoloane

Modificarea la7t-imiiunui grup decoloane adiacente

Modificarea la7t-imiicoloanei la "ocupa7tot" (best fit)

Modificarea la7t-imiiunui grup decoloane adiacentela "ocupa7 tot"

Modificareaîna7lt-imii (height)rândului

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

Modificarea l|Ûimii (width) unei coloane Õi în|lÛimii(height) unui rândUnele 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 încapede tot în câmp datorit| l|Ûimii prea mici.

• plasaÛi cursorul mouse-ului pe linia din dreapta numeluicâmpului; cursorul va lua forma unei bare verticale scurte intersectat|de o s|geat| cu dou| capete; • trageÛi marginea coloanei, în stânga sau dreapta, la dimensiuneape care o doriÛi.

• selectaÛi coloanele; • trageÛi marginea coloanei celei mai din dreapta în noua poziÛiesau • clic pe butonul din drepta al mouse-ului, selectaÛi ColumnWidth din lista ap|rut| Õi introduceÛi noua l|Ûime.

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

de câmp, cursorul va lua forma ;

• clic dublu pe butonul din stânga mouse-ului Õi automat l|Ûimeacoloanei se va modifica astfel încât toate datele din ea s| fie complet

vizibile

• selectaÛi coloanele; • clic pe butonul din dreapta al mouse-ului având cursorul de

mouse poziÛionat pe oricare din câmpurile selectate Õi selectaÛi Column Width; pe ecranapare fereastra de dialog:

• clic pe Best Fit.

• plasaÛi cursorul de mouse peste linia de separaÛie dintre doiselectori de rând; • trageÛi linia pe noua poziÛie, în|lÛimile tuturor rândurilor se vormodifica automat la cea specificat| sau

Page 73: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru ascundereaunei coloane

Pentru a vizualizao coloana7

Pentru înghet-area(freeze) uneicoloane

Pentrudezghet-area(unfreeze) uneicoloane

• clic pe butonul drept al mouse-ului, selectaÛi Row Height din lista ap|rut| Õi apoiintroduceÛi noua în|lÛime pentru toate rândurile.

Ascunderea (hiding) Õi vizualizarea (un-hiding) coloanelorEste posibil| ascunderea unor coloane din tabel în cazul în care acestea nu prezint| interespentru o anumit| vizualizare particular| de date ale foii de date.

• selectaÛi coloana pe care doriÛi s| o ascundeÛi; • clic pe Format din meniul Access-ului apoi selectaÛi HideColumns; coloana va disp|rea din vizualizare f|r| îns| ca datele dinaceasta s| fie afectate.

• clic pe Format din meniul aplicaÛiei Access selectaÛi UnHide Columns Õi urm|toareafereastr| de dialog va ap|rea pe ecran:

• în fereastra de mai sus câmpul cu numele Category Name este ascuns. Pentru adeveni din nou vizibil activaÛi cutia de selectare (check box) din dreapta numelui câmpuluiapoi clic pe Close.

ÎngheÛarea (freeze) coloanelorÎn mod frecvent tabelele au un num|r mai mare de câmpuri decât cele care se pot afiÕa peecran. În acest caz câmpurile din stânga se pierd din vedere la deplasarea spre dreapta princâmpurile tabelului. ÎngheÛarea coloanelor cauzeaz| p|strarea pe ecran ale acestora în timp cene deplas|m prin celelalte coloane de tabel.

• selectaÛi coloana sau coloanele; • selectaÛi Freeze Columns din Format sau • clic pe butonul drept al mouse-ului într-o coloan| Õi selectaÛiFreeze Column.

• selectaÛi Unfreeze All Columns din Format.

Formatarea celulelor din foaia de date

Page 74: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru setareaformata7rilor uneicelule

Pentru afis-area(display) sauascunderea (hide)liniilor (gridlines)

Pentru modificareaculorilor (Color)liniilor

Pentru a selectaunul dintreefectele: Flat,Raisen sau Sunken

Pentru a modificaculoarea fondului(background)

Efectele format|rii cuprind liniile pentru delimitarea celulelor (grid lines) pe vertical| Õi peorizontal|, culoarea lor Õi a fondului pe care se scrie, efecte de prezentare ale celulelor de

tipul: plat (Flat), ieÕit (Raisen) Õi îngropat (Sunken), stilul de caractere folosit la afiÕareadatelor.

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

• în secÛiunea Gridlines Shown a cutiei de dialog selectaÛi,pentru afiÕare sau deselectaÛi, pentru ascunderea liniilor, pe Horizontalsau Vertical.

• în secÛiunea Gridline Color clic pe s|geata în jos Õi selectaÛidin list| culoarea dorit|.

• însecÛiunea CellEffect a cutie dedialog CellEffects selectaÛiunul din

cuvintele Flat, Raisen sau Sunken.

• însecÛiuneaBackgroundColor clic pes|geata în jos

apoi selectaÛi din list| culoarea dorit|.

Page 75: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru modificareatipului decaractere (Fonts) afoii de date

Pentru a copiadate dintr-uncâmp în Clipboard

Pentru a ta7ia datedin câmp înClipboard

Pentru a inseracont-inutul dinClipboard într-uncâmp

• 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)caracterelor dorite din listele corespunz|toare; • ap|saÛi butonul OK.

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

Denumireîn român|

Dinmeniu Edit

DinToolbar

De latastatur|

AcÛiune

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

Copiere Copy Ctrl+C Copiaz| datele selectate înClipboard.

Inserare Paste Ctrl+V Insereaz| datele din Clipboard înnoua zon| selectat| începând dinpoziÛia curent| a cursorului.

La copierea sau mutarea întregistr|rilor într-o foaie de date, Access-ul insereaz| datele înnoile câmpuri în ordinea de apariÛie a coloanelor în foaia de date f|r| a Ûine cont de numelecâmpurilor. În cazul formularelor, pentru aceleaÕi operaÛii, Access-ul va Ûine cont de numelede câmpuri ordinea de aranjare a câmpurilor fiind nesemnificativ|.

• selectaÛi datele care urmeaz| a fi copiate sau mutate; • selectaÛi Copy din meniul Edit sau • clic pe simbolul grafic Copy din Toolbar sau • ap|saÛi Ctrl+C.

• selectaÛi datele care vor fi mutate; • selectaÛi Cut din Edit sau • clic pe simbolul grafic Cut din Toolbar sau • ap|saÛi Ctrl+X.

• clic în câmpul destinaÛie unde doriÛi ca datele s| fie inserate; • selectaÛi Paste din meniul Edit sau • clic pe simbolul grafic Paste din Toolbar sau

Page 76: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a copia untabel

Pentru a redenumiun obiect

• ap|saÛi Ctrl+V.Este posibil| copierea conÛinutului a mai multor câmpuri sau coloane prin Clipboardaplicând aceleaÕi operaÛii care au fost descrise deja; ceea ce difer| este numai selecÛia.

Manipularea obiectelor tabel din fereastra bazei de dateOperaÛiile de editare descrise pân| acum se pot aplica Õi pentru obiectele bazei de date. Fielista obiectelor de tipul tabel selectat| (procedurile care urmeaz| se pot aplica pentru toate

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

• selectaÛi tabelul care va fi copiat; • selectaÛi Copy din meniul Edit sau • clic pe simbolul grafic Copy din Toolbar; • selectaÛi Paste din meniul Edit sau

• clic pe simbolul grafic Paste din Toolbar; • în fereastra de dialog introduceÛi numele noului tabel; • selectaÛi una din opÛiunile de inserare. Structure Only pentru a prelua numai structuratabelului 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 potfi copiate, redenumite sau Õterse.

• selectaÛi obiectul care va fi redenumit; • selectaÛi Rename din Edit; • introduceÛi un nou nume pentru obiect (acesta se scrie pestenumele celui existent);

• ap|saÛi tasta Enter.

Page 77: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

Pentru a s-terge unobiect

Vizualizarea unuiformular sau foi dedate

Pentru a vedea osect-iune marita7 afoii de date

Pentru tipa7rireaunui formular saufoi de date

• selectaÛiobiectul care vafi Õters; • selectaÛi

Delete din meniul Edit. Fereastra dedialog care apare pe ecran se prezint|în continuare: • clic pe Yes pentru a Õtergeobiectul sau pe No pentru abandonareaÕtergerii.

Nota7: Dac| încercaÛi Õtergerea unui tabel care particip| într-o relaÛie cu alte tabele, Access-ulva 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|numai previzualizarea (preview) Õi tip|rirea (print) foilor de date pentru tabele, interog|ri,formulare Õi ale definiÛiilor de obiecte.

Cele care urmeaz| presupun c| obiectul în cauz| este fie deschis, fie este selectat din fereastrabazei de date (Database Window).

• selectaÛi Print Preview din meniul File sau • clic pe simbolul grafic Print Preview din Toolbar.

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; • poziÛionaÛi cursorul de mouse pe suprafaÛa foii de date. Acestava lua forma unei lupe; • clic pe butonul stâng al mouse-ului. Access-ul va m|ri zonaselectat|;

• clic pe butonul mouse-uluipentru a vedea din nou întreaga pagin|.

Not|: Se poate folosi butonul Zoom dinbara de instrumente Zoom pentru a

m|ri saumicÕora zonedin ecran.

• dac| sedoreÕte tip|rireparÛial|,selectaÛiînregistr|rile

care se vor tip|ri;

Page 78: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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Ûis| tip|riÛi numai anumite pagini consecutive selectaÛi Pages From Õi introduceÛi num|rulprimei Õi ultimei pagini ale domeniului; • clic pe OK.

Page 79: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

83 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

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

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

! cum se filtreaz| înregistr|rile unui tabel vizualizat ca foaie de date;

! cum se Õterge filtrul;

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

! cum se deschide fereastra relaÛiilor;

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

Obiectivele cursului 5

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 80: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

84 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

Începerea ca7uta7rii

C|utarea Õi înlocuirea informaÛieiC|utareaG|sirea informaÛiilor într-un tabel mic nu este o problem|, dar ce facem când tabelulvizualizat în mod foaie de date trece cu mult de dimensiunea ecranului. Access-ul are câtevainstrumente 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| dec|utare Õi înlocuire a datelor numit| interogare (query). Dac| operaÛia pe care doriÛi s| orealizaÛi se repet| Õi este complicat|, probabil veÛi dori s| scrieÛi o interogare. G|sireainformaÛiilor este mai rapid| dac| câmpul pe baza c|ruia se caut| este cheia primar| sau areun index. Se poate folosi meniul Edit, bara cu instrumente sau tastele "scurt|tur|" pentrug|sirea informaÛiilor. Înainte de aceasta trebuie s| faceÛi clic în câmpul pe baza c|ruia doriÛi s|faceÛi c|utarea.

• clic în câmpul pe baza c|ruia doriÛi s| faceÛi c|utarea; • selectaÛi Find din meniul Edit sau

• 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

Match Implicit este selectat| Match Whole Field, adic| întregulconÛinut al câmpului trebuie s| fie identic cu valoarea pentrua fi g|sit. Celelalte opÛiuni sunt: Any Part of Field - oriceparte din câmp Õi Start of Field - începutul câmpului.

Search Permite selectarea sensului de c|utare în raport cu poziÛiacurent| a cursorului: Up - în sus, Down - în jos, All - pestetot.

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 esteformatat| Õ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Ûiasau dac| valoarea poate s| apar| în mai multe câmpuriinactivaÛi aceast| opÛiune.

Page 81: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

85 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

Ga7sirea unei valorispecifice

Caractere generice (Wildcards)Dac| nu sunteÛi siguri asupra tuturor caracterelor din valoarea pe care doriÛi s| o c|utaÛi - ceeace introduceÛi în cutia Find What - puteÛi folosi în locul acestora caractere generice dup| cumurmeaz|:

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

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

De exemplu, 19#7 corespunde numerelor întregi 1907,1917, 1927, 1937, ... 1997.

Paranteze drepte [ ] Cuprind unul sau mai multe caractere când dorim ca înc|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 decaractere, domeniul trebuie specificat în ordineacresc|toare

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

Semn deexclamare

! Specific| toate caracterele cu excepÛia celor dinparanteze.

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

Caracterele generice sunt f|cute pentru lucrul cu câmpuri de tipul Text, uneori pot fi folositecu 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;

Nota7: la ad|ugarea unei înregistr|ri într-un tabel, dac| într-un câmp nus-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 lungimezero introduceÛi "".

Page 82: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

86 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

Ga7sireaurma7toarei aparit-iide aceeas-i valoaredupa închidereacutiei de dialog

Ga7sirea s-iînlocuirea uneivalori

Pentru a ga7si s-iînlocui toateaparit-iile ale uneivalori

• 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âmpuldistinct (fondul devine negru, caracterele albe pentru a scoate în evidenÛ| prima soluÛia ac|ut|rii);

• clic pe Find Next pentru a g|si urm|toarea apariÛie cu aceeaÕivaloare sau • clic pe Close pentru a termina c|utarea; • ap|saÛi Shift+F4 sau • clic pe pictograma Find Next (dac| este disponibil) din bara deinstrumente standard.

Înlocuirea unor valori din câmpuri • clic pe câmpul pentru care se face c|utarea; • selectaÛi Replace din meniul Edit sau • ap|saÛi Ctrl+H, pe ecran apare fereastra de dialog:

• î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; • modificaÛi opÛiunile dup| cum este cazul apoi clic pe butonul Find Next;

Dac| valoarea exist| Access-ul o va g|si Õi se va poziÛiona pe prima apariÛie a ei afiÕând-odistinct.

• 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; • selectaÛi Replace din meniul Edit sau • ap|saÛi Ctrl+H; • în cutia Find What tastaÛi textul care va fi înlocuit; • în cutia Replace With tastaÛi noul text; • clic pe butonul Replace All.

Page 83: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

87 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

Sortareaînregistrarilor unuitabel în modul devizualizare foaiede date

Sortareaînregistrarilor pebaza mai multorcâmpuri

Nota7: dac| nu este activat| opÛiunea Match Whole Field acÛiunea poate deveni periculoas|!

Sortarea înregistr|rilorDac| doriÛi ca înregistr|rile s| fie afiÕate într-o ordine diferit| selectaÛi Quick Sort. Deexemplu, este posibil ca angajaÛii s| fie afiÕaÛi în ordinea descresc|toare a salariilor Õi la unmoment 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âmpuriadiacente, într-un formular îns| suntem limitaÛi la sortarea pe baza unui singur câmp. Dac| aÛiselectat mai multe câmpuri, cel mai din stânga este câmpul primar de sortare. Din acest motivuneori este necesar| rearanjarea ordinii coloanelor înainte de sortare.

• selectaÛi coloana sau coloanele pe baza c|rora doriÛi s| sortaÛiînregistr|rile; • selectaÛi Sort din meniul Records apoi selectaÛi SortAscending sau Sort Descending din submeniu dup| cum doriÛisortarea cresc|toare sau descresc|toare sau • clic pe simbolurile grafice Sort Ascending sau Sort

Descending din bara de instrumente standard.

Nota7: la sortarea cresc|toare înregistr|rile sunt aranjate începând cu valoarea cea mai mic|, deexemplu, 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; • clic pe unul dintre simbolurile grafice Sort Ascending sau SortDescending din bara de instrumente standard.

³ tabelul iniÛial

³ coloanele selectate

³ rezultate

Ce este un filtru?Filtrele sunt interog|ri simple care se aplic| numai tabelelor sau formularelor deschise. Seutilizeaz| pentru alterarea temporar| a modului de vizualizare a datelor dintr-un tabel pentru:

Page 84: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

88 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

• 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; • 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 ocelul| a câmpului CompanyName care conÛine valoareaAlfreds Futterkiste

• clic pe pictograma Filter by Selection din bara de instrumente. - au fost afiÕate numaiînregistr|rile care conÛinvaloarea Alfreds Futterkiste încâmpul Company Name

• clic pe pictograma Remove Filter .

Filtrarea înregistr|rilor prin formulare • deschideÛi un tabel al bazei de date, iniÛial tabelul va fi de forma:

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

Page 85: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

89 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

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| valoarepentru filtrare; în exemplul prezentat eu am selectat Alfreds Futterkiste; • clic pe pictograma Apply Filter Õi numai înregistr|rile care au câmpul CompanyName 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 rezultatemult mai complexe. De ce? ObservaÛi în figura care urmeaz|, în colÛul din dreapta jos, câtevabutoane care conÛin cuvintele Or.

Dup| ce aÛi completat o valoare de filtrare apare un Or nou. Se vor filtra valori care satisfacprima condiÛie sau (Or) a doua Õi aÕa mai departe. Între valorile de câmpuri ale aceleiaÕi liniide filtrare se face Õi logic. Astfel, prima condiÛie se poate citi astfel: selecteaz| acele rânduridin tabel care au în câmpul Company Name valoarea "Alfreds Futterkiste" Õi (And) încâ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 facefiltrarea.

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

Page 86: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

90 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

nou| de abordare a datelor, unde toate relaÛiile semnificative dintre date se reprezentau prinvalorile datelor Õi nu prin poantori ascunÕi sau prin conexiuni. Viziunea lui Codd a permisexprimarea interog|rilor într-un format neprocedural adic| independent de structura Õialgoritmii folosiÛi la implementarea bazei de date - un concept pe care Codd l-a numitindependenÛa datelor. Articolul original al lui Codd spunea c| interog|rile despre datelestocate în formatul relaÛional se puteau exprima fie prin calculul predicatelor de ordinul unufie 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| limbajede acces la bazele de date care au devenit cunoscute sub denumirile calcul relaÛional Õialgebra relaÛional|. Majoritatea muncii din acea perioad| s-a focalizat asupra operatorilor dinalgebra relaÛional|.

Proiectele numite System R Õi Ingres au implementat prototipuri care ar|tau c| modelulrelaÛ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 noulimbaj al bazelor de date, care iniÛial s-a numit Structured English Query Language sauSEQUEL iar azi, din motive de politic| comercial|, se numeÕte Structured QueryLanguage, adic| SQL. Diferent-a esent-iala7 dintre SQL s-i alte limbaje consta7 în faptul ca7 înSQL instruct-iunile specifica7 ce operat-ii se vor face cu datele s-i nu modul cum se realizeaza7acestea. DeÕi SQL-ul a fost dezvoltat de IBM, primul produs comercial bazat pe SQL a fostprodus de o companie mic| numit| Relational Software, Inc., în 1979. Produsul s-a numitOracle, iar numele a fost ulterior adoptat Õi de companie, care azi a devenit un gigant.

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

Dac| baza de date este proiectat| corect este garantat| unicitatea înregistr|rilor prin cheileprimare (primary keys) din tabele. Apoi, aceste chei primare se vor folosi drept chei str|ine(foreign keys) în alte tabele pentru stabilirea relaÛiilor. Când se creeaz| o relaÛie între dou|tabele, tabelul cu cheia primar| se numeÕte tabel primar (primary table) iar tabelul cu cheiastr|in| se numeÕte tabel asociat (related table). Tabelul asociat poate avea la rândul lui ocheie 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 obiectelordin baz|. De multe ori rapoartele, formularele sau interog|rile lucreaz| cu date din mai multetabele. În acest scop Access-ul trebuie s| cunoasc| cum sunt legate tabelele care particip| înaceste obiecte.

Deschiderea ferestrei cu relaÛiiPentru a deschide fereastra relaÛiilor (Relationship window), deschideÛi fereastra bazei dedate (Database window), apoi clic pe pictograma relaÛiilor din bara de instrumentestandard.

Dac| s-au creat sau modificat deja relaÛiile din baz|, fereastra se va afiÕa la fel cu ultima eiafiÕare, astfel se va afiÕa Õi fereastra de dialog Show Table peste aceasta.

Page 87: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

91 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

Ada7ugareafolosind fereastrade dialog ShowTable

Ad|ugarea tabelelor în fereastra relaÛiilor • deschideÛi fereastra relaÛiilor;

• dac| fereastra de dialog Show Table nu este deschis| clic pe pictograma Show Table din bara de instrumente Relationships;

• selectaÛi tabelul care doriÛi s| fie ad|ugat din lista Table. FolosiÛi tasta Ctrl pentruad|ugarea mai multor tabele neconsecutive sau tasta Shift pentru ad|ugarea unui grup detabele consecutive; • clic pe butonul Add;

Page 88: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

92 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

Pentru a crea orelat-ie între doua7tabele

Pentru acest exemplu am folosit 3 tabele cu numele: Persoana, Adrese, Telefoane. CâmpurileIDAdresa din Adrese s-i IDPersoana din Persoana sunt de tipul AutoNumber,IDPersoana din Adrese s-i IDAdresa din Telefoane sunt de tipul Long Integer, Remarcidin Adrese este de tipul Memo, celelalte câmpuri sunt de tipul Text. Cheile primare suntafiÕ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 • trageÛi numele câmpului din primul tabel peste numelecâmpului din al doilea. Dac| unul dintre câmpurile tabelelor este cheieprimar| va fi afiÕat îngroÕat (bold), veÛi trage cheia primar| pe cheiasecundar| corespunz|toare din al doilea tabel. Tabelul din care se tragecheia 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 vaafiÕa sub forma:

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

Page 89: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

93 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

Actualizareacascadata7 acâmpurilor legate

S, tergereacascadata7 aînregistrarilorlegate

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:

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| dintabelul asociat pentru noua înregistrare. De exemplu, pentru ad|ugarea unei înregistr|ri întabelul Adrese, trebuie s| avem prima oar| în tabelul Persoana o înregistrare a c|rei cheieprimar| (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| dintabelul 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 luiIDPersoana din tabelul Persoana.

În majoritatea cazurilor forÛarea integrit|Ûii referenÛiale este de dorit. Pentru exemplulprezentat, activarea integrit|Ûii referenÛiale va shimba forma de afiÕare a relaÛiei dup| cum seobserv| în figura anterioara7 .

Selectarea opÛiunii "actualizarea cascadat| a câmpurilor legate"(Cascade Update Related Fields) înseamn| c| modificarea cheiiprimare î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"(Cascade Delete Related Records) înseamn| c| Õtergerea înregistr|riicare are cheia primar| duce la Õtergerea automat| a înregistr|rilorlegate corespondente din toate tabelele legate.

Page 90: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

94 Introducere în Microsoft Access: Ca7utare, sortare în tabele s- i intergritatea referent-iala7 - cursul 5

Vizualizareatuturor relat-iilor

Vizualizarearelat-iilor unuisingur tabel

S, tergerea uneirelat-ii

S, teregerea unuitabel din fereastrarelat-iilor

Ambele opÛiuni afecteaz| integritatea referenÛial|, motiv pentru care se vor utiliza cuprecauÛie.

Pentru exemplul prezentat, relat-iile finale vor fi cele prezentate în figura care urmeaza7 :

Editarea relaÛiilor • deschideÛi fereastra relaÛiilor; • selectaÛi Show All din meniul relaÛiilor sau • clic pe pictograma Show All Relationships din bara deinstrumente Relationships.

• deschideÛi fereastra relaÛiilor; • clic pe Show Direct Relationships din bara deinstrumente Relationships sau • selectaÛi Show Direct din meniul relaÛiilor.

• deschideÛi fereastra relaÛiilor; • clic pe linia relaÛiei care leag| cele dou| tabele; • ap|saÛi tasta Delete.

• deschideÛi fereastra relaÛiilor; • clic pe tabelul care va fi scos; • ap|saÛi tasta Delete.

Page 91: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

95 Introducere în Microsoft Access: Interoga7 ri - cursul 6

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

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

! cum se actualizeaz| datele folosind o interogare;

! cum se creeaz| un tabel nou pe baza rezultatelor de ieÕire ale unei

interog|ri;

! ce sunt asocierile (join);

! ce sunt interoga7rile cu parametri s-i cele încrucis-ate (crosstab);

! care sunt cele mai importante proprieta7 t-i ale interoga7rilor.

Obiectivele cursului 6

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 92: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

96 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Ce sunt interog|rile (Queries)?Un Sistem de Gestiune a Bazelor de Date (SGBD) este folosit, în principal, pentru stocarea Õireg|sirea informaÛiilor. Modelul relaÛional stocheaz| datele în mai multe tabele distincte - înloc de unul singur uriaÕ - dar legate între ele, pentru creÕterea eficienÛei Õi evitarea duplic|riidatelor. De multe ori este necesar| g|sirea unor informaÛii care sunt submulÛimi alemulÛimilor de date stocate în tabele. Ele se prezint|, fie sub forma unei submulÛimi decâ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 fiexecutate 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(Query by Example). O interogare poate prezenta direct datele unui tabel sau poate realizaanumite 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 devânz|ri, pentru o anumit| perioad| particular|. Probabil, informaÛia va trebui extras| din treitabele: Angajati, Comenzi Õi Detalii Comenzi. Tabelul AngajaÛi va fi necesar pentru numelevânz|torilor; tabelul Comenzi va conÛine datele la care s-au efectuat vânz|rile; tabelul DetaliiComenzi va conÛine sumele încasate din vânz|ri. AngajaÛi Õi Comenzi se vor lega prinnum|rul de identificare al angajatului; Comenzi Õi Detalii Comenzi se vor lega pe baza num|ruluide comand|. Vom dori delimitarea înregistr|rilor din Comenzi Õi Detalii Comenzi pentru operioad| dat|. De asemenea, suntem interesaÛi numai de rezultatele personalului de la vânz|ricare a fost angajat în aceeaÕi perioad|. Ideal ar fi ca rezultatele s| fie puse sub forma unuiraport sau, mai sugestiv, sub forma unui grafic. Pâna7 a ajunge la acestea îns|, trebuie ca dateles| fie extrase din tabelele corespunz|toare, respectând limit|rile impuse. Pentru aceasta se vafolosi 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 saumai multe tabele pe baza unor criterii, crearea unei mulÛimi dinamice pentru afiÕarearezultatelor într-o foaie de date în scopul vizualiz|rii Õi analizei; datele din rezultateleafiÕ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 arealiza 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 deinterogare Access adaug| un rând numit Total în fereastra QBE; ! Act-iune: permit crearea unor noi tabele (Make Tables) sau modificarea unordate (delete, update Õi apend) din tabelele existente. În cazul interog|rilor de selecÛietoate modific|rile aduse datelor se fac, individual, la nivelul fiec|rei înregistr|ri, încazul interog|rilor de acÛiune mai multe înregistr|ri pot fi modificate în timpul uneiacÛiuni individuale; ! Încrucis-ate: genereaz| informaÛii de sintez|, sub forma unui tabel avândrândurile Õi capetele de coloan| bazate pe câmpurile tabelului. Prin definiÛie, celuleleindividuale ale mulÛimii dinamice rezultate sunt de tipul tabelar, adic| se extrag sau secalculeaz|; ! 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

Page 93: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

97 Introducere în Microsoft Access: Interoga7 ri - cursul 6

SQL client/server; ! Topp(n): este un limitator care se poate folosi numai în conjuncÛie cu celelaltetipuri de interog|ri prezentate; permite specificarea unui procent din num|rul maximal al înregist|rilor care vor fi afiÕate de o interogare.

Posibilit|Ûile interog|rilorInterog|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 dinmai multe tabele care sunt legate prin date comune; în ambele cazuri rezultatele suntprezentate de Access sub forma unei singure foi de date; ! Selectarea câmpurilor: pot fi specificate care câmpuri ale fiec|rui tabel s| fieprezente î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 fiafiÕate într-o ordine specific| (cresc|toare sau descrec|toare); ! Realizarea de calcule: interog|rile pot fi folosite pentru realizarea unor calculepe 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; înacest caz pe baza mulÛimii dinamice, se va crea un nou tabel; ! Crearea de formulare s-i rapoarte pe baza unei interoga7 ri: mulÛimea dinamic|rezultat| poate fi necesar| pentru realizarea unui formular sau a unui raport; în acestcaz, la afiÕare sau tip|rire informaÛiile fiind extrase printr-o interogare vor fiactualizate cu datele existente în momentul curent în baza de date; ! Crearea de grafice pe baza unei interoga7 ri: se poate realiza reprezentareagrafic| a datelor dintr-o interogare care s| fie inclus| într-un formular sau raport; ! Folosirea unei interoga7 ri ca s-i sursa7 de date pentru o alta7 interogare: se pot creanoi interog|ri pe baza unor interog|ri deja existente; ! Modificarea unor tabele: interog|rile Access pot avea ca Õi surse de date bazede date dBASE, Paradox, Btrieve Õi Microsoft SQL Server.

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 untabel deschis în modul foaie de date. Aceast| mulÛime este dinamic| (uneori, se mai numeÕtevirtual|) Õ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-agenerat 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 structurainterog|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Ûimeadinamic|. Întrucât mulÛimea nu se stocheaz|, o interogare reflect| automat orice modificare

Page 94: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

98 Introducere în Microsoft Access: Interoga7 ri - cursul 6

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

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

Crearea unei interog|ri folosind Generatorul de Interog|riSimple (Simple Query Wizard) • în fereastra bazei de date, clic pe butonul Queries; • clic pe butonul New pentru afiÕarea cutiei de dialog New Query;

• selectaÛi opÛiunea Simple Query Wizard, apoi clic pe butonul OK pentru a trece lapagina urm|toare a Generatorului; • fereastra de dialog care se va afiÕa va fi de forma:

Page 95: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

99 Introducere în Microsoft Access: Interoga7 ri - cursul 6

• clic pe s|geata în jos a cutiei de tip list| (list box) numit| Tables/Queries pentru avizualiza toate tabelele Õi interog|rile ale c|ror câmpuri ar putea fi selectate pentru a participala interogare; în figura care urmeaz| am selectat tabelul Orders; • pentru ad|ugarea unui câmp în interogare selectaÛi din cutia tip list| Available Filedsnumele câmpului care va fi ad|ugat, apoi efectuaÛi clic pe s|geata la dreapta ; numeledispare din list| Õi apare în lista Selected Fields;

• dup| ce aÛi terminat ad|ugarea tuturor câmpurilor faceÛi clic pe butonul Next Õiurm|toarea fereastra7 de dialog va fi afiÕat|:

Page 96: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

100 Introducere în Microsoft Access: Interoga7 ri - cursul 6

• clic pe butonul Finish pentru terminarea proiectului interog|rii. Rezultatele se vorafiÕa ca în figura urm|toare.

Nota7: În exemplul prezentat au fost selectate câmpuri dintr-un singur tabel. Prezentarea a avutun rol didactic, dorind s| descriu un principiu prin ea. Dac| doriÛi, puteÛi selecta câmpuri Õidin mai multe tabele sau interog|ri, dup| cum dicteaz| necesit|Ûile pentru extragereainformaÛiilor dorite.

Crearea unei interog|ri f|r| GeneratorAccess-ul are un num|r mare de Generatoare care ajut| la definirea interog|rilor. TotuÕi, înmarea majoritate a cazurilor aceste Generatoare sunt inadecvate pentru interog|ri complexe.

Page 97: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

101 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Crearea interoga7rii"cu mâna"

Î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 acriteriilor de selecÛie specifice acesteia.

• din fereastra obiectelor bazei de date clic pe butonul Queries; • clic pe butonul New pentru afiÕarea listei posibilit|Ûilor decreare ale unei interog|ri, de aici selectaÛi Design View; • clic pe butonul OK;

Pe ecran apare grila interog|rii (Query Grid) peste ea fiind suprapus| fereastra de dialogShow Table care conÛine lista tabelelor din baz| ce pot participa într-o interogare.

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

Page 98: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

102 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Modificarea surseide date ainteroga7rilor

combinaÛii de tabele cu interog|ri, afiÕarea lor simultan| în list| se face prin selectareabutonului Both. Toate tabelele sau interog|rile vor fi afiÕate în panoul de sus al ferestrei. Eleapar sub forma unor ferestre mici în care sunt afiÕate câmpurile corespunz|toare lor.

Din zona tabelelor Õi interog|rilor un câmp se poate selecta prin tragerea lui pe gril|, clicdublu pe numele lui sau prin clic pe numele lui în lista care se afiÕeaz| la ap|sarea s|geÛii înjos 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 unorcâ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) Õidescresc|toare (Descending). Sortarea se face de la stânga la dreapta dac| sunt mai multecoloane specificate. Dac| doriÛi s| reveniÛi la starea iniÛial|, în care nu se face sortare, selectaÛinot sorted.

Ordinea de afiÕare a coloanelor se poate modifica prin selectarea coloanelor Õi tragerea lor înnoua poziÛie.

Uneori doriÛi s| includeÛi câmpuri în interogare dar nu Õi în r|spunsul care va fi afiÕat. Asta încazul în care doriÛi s| selectaÛi sau s| sortaÛi înregistr|ri pe baza unui câmp ale c|rui date nudoriÛi s| apar| ca o coloan| de date în r|spuns. În Show vizualizarea coloanei este automatactivat| la selectarea câmpului, iar pentru inactivare efectuaÛi clic pe dreptunghi Õi semnul Uva disp|rea. Dac| doriÛi reafiÕarea coloanei, clic pe acelaÕi dreptunghi Õi semnul U va ap|readin nou, indicând afiÕarea coloanei în cadrul rezultatelor.

ObservaÛi c| în figura care urmeaz| sursa de date a interog|rii s-amodificat de la tabelul Customers la tabelul Employees. Etapele parcursepentru aceast| modificare sunt:

• realizaÛi clic, în panoul de sus, pe tabelul Customer; • ap|saÛi tasta Delete, toate câmpurile tabeluluiCustomers, din panoul de jos, Õi tabelul Customers, din panoulde sus, vor disp|rea;

• din meniul Query, folosind opt-iunea Show Tables, deschidet-i fereastra Show

Page 99: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

103 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Lansarea înexecut-ie ainteroga7rilor

Table; • realizat-i clic dublu pe tabelul cu numele Employees.

Dup| ce aÛi terminat crearea interog|rii, lansarea în execuÛie se faceselectând din meniul Query pe Run. Pentru definiÛia interog|rii carese prezint| în figura urm|toare, din tabelul Employees al bazei de dateNorthwind 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 liniaShow sunt bifate (U), mai puÛin ultimul. Sortarea se va face cresc|tor (Ascending) pe bazaconÛinutului câmpurilor LastName Õi FirstName.

Rezultatele sunt afiÕate sub forma:

Operatori logici pentru criterii de selecÛieOperatorii logici permit construirea unor criterii complexe de selecÛie ale înregistr|rilor dintabele. SemnificaÛia lor este uÕor de înÛeles, mai problematic| este îns| modul lor de utilizareîn Access.

Page 100: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

104 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Ca7utarea folosindcaracterelegenerice

SemnifcaÛie Scriere Exemplu Câmp la carese aplic|

SemnificaÛie

egal = 7 sau =7 EmployeeID Selecteaz| înregistr|rilecare au angajaÛii cu ID(EmployeeID) egal cu 7.

mai mic < <7 EmployeeID Selecteaz| înregistr|rilecare au angajaÛii cu IDmai mic cu 7.

mai mare > >7 EmployeeID Selecteaz| înregistr|rilecare au angajaÛii cu IDmai mare cu 7.

mai mic sauegal

<= <=7 EmployeeID Selecteaz| înregistr|rilecare au angajaÛii cu IDmai mic sau egal cu 7.

mai maresau egal

>= >=7 EmployeeID Selecteaz| înregistr|rilecare au angajaÛii cu IDmai mare sau egal cu 7.

diferit <> <>7 EmployeeID Selecteaz| înregistr|rilecare au angajaÛii cu IDdiferit de 7.

sau or "King" or"Peacock"

LastName Selecteaz| înregistr|rile cuangajaÛii care au în câmpulLastName stocat Kingsau Peacock .

asemenea like Like "D*" LastName Selecteaz| înregistr|rilecare au angajaÛii în câmpul LastName cu numeleîncepând cu 'D'.

între, Õi between,and

Between 1/1/40and 31/12/99

BirthDate Selecteaz| înregistr|rilecare au angajaÛi cu date denaÕtere (BirthDate) îndomeniul [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 încazul cutiei de c|utare Find What) se pot folosi caracterele genericecu urm|toarele semnificaÛii:

Page 101: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

105 Introducere în Microsoft Access: Interoga7 ri - cursul 6

SemnificaÛie Scriere Se foloseÕte pentru Exemplu

semn deîntrebare

? Orice caracter pe aceeaÕipoziÛie cu ?.

Pentru ma? se g|sesc mai,mat, mac .

asterisc * Orice grup de caractere peaceeaÕi poziÛie cu *.

Pentru m*ie se g|sesc martie,mamaie, migraÛie.

semnul hash # O singur| cifr| în aceeaÕipoziÛie cu semnul #.

Pentru 196# se vor g|si toÛianii în domeniul [1960-1969].

Criterii multiple Õi alternativeGrila interog|rii permite specificarea unor criterii complexe de selecÛie. În exemplele careurmeaz| se va folosi în continuare baza de date Northwind cu tabelul Products (produse). Sepoate introduce un criteriu mai lung de un singur câmp de exemplu, se poate s| doriÛi selecÛiatuturor produselor ale c|ror nume încep cu litera P Õi sunt într-un num|r mai mare de 10buc|Ûi pe stoc. CombinaÛia acestor criterii va fi folosit| pentru definirea interog|rii. Num|rul

de criterii poate s| fie oricât de mare. Uneori, este nevoie, în plus, de specificarea unor criteriialternative. De exemplu, se poate s| doriÛi selectarea tuturor produselor care încep cu litera Csau P. Num|rul criteriilor alternative este Õi el nelimitat.

Rezultatele selecÛiei sunt:

Page 102: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

106 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Combinareacriteriilor

Definirea unuicâmp calculat

Se pot forma combinaÛii de criterii multiple Õi de criterii alternative.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 Cindiferent 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 toateprodusele care încep cu litera P Õi sunt pe stoc în num|r mai mare de 100 sau (Or) încep culitera C Õi sunt pe stoc în num|r mai mare de 10 atunci, trebuie repetat criteriul >10 înUnitsInStoc în linia Or.

Rezultatele selecÛiei sunt:

Câmpuri calculateUneori 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. Tabelulproduselor (numit Products) va conÛine numai preÛul net deci va fi necesar| ad|ugarea unuicâmp al c|rui conÛinut va fi calculat pe baza unei expresii aritmetice.

• clic în primul câmp liber al liniei Field - câmpul urm|tor luiQuantityPerPrice; • introduceÛi expresia aritmetic| dorit|; pentru calculul preÛuluicu TVA se înmulÛeÕte preÛul f|r| TVA cu 1.19 (consider|m TVA-ul

Page 103: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

107 Introducere în Microsoft Access: Interoga7 ri - cursul 6

de 19%); • la ap|sarea tastei Enter sau la clic pe urm|torul câmp liber, expresia este automatprefixat| de Access cu eticheta Expr1. Aceast| etichet| va fi numele câmpului calculat Õi seva afiÕa în rezultatele interog|rii. Pentru exemplul nostru, vom da numele de PretcuTVA.

Sintaxa complet| pentru câmpurile calculate este:

Expri: expresie

unde Expri este numele coloanei iar expresie este o expresie aritmetic| cu urm|toarelecomponente:

Component| SemnificaÛie

[nume_de_câmp] Un nume de câmp al unuia dintre tabelele care iau parte lainterogare, cuprins între paranteze dreptunghiulare.

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

De asemenea, este posibil| folosirea unor constante numerice sau a funcÛiilor din bibliotecaAccess-ului (de exemplu, funcÛia Format pentru formatarea datelor afiÕate în câmpuri sub oform| special| sau pentru o anumit| ordine de specificare a zilelor, lunilor Õi a anilor uneidate).

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

PretUnitatecuTVA: [UnitPrice]*1.19

Page 104: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

108 Introducere în Microsoft Access: Interoga7 ri - cursul 6

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

Rezultatele se afiÕeaz| sub forma:

Interog|ri cu totaleCâ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 (termenultehnic este cel de agregare) folosind anumite criterii se numesc interog|ri cu totale. Se potfolosi pentru a calcula suma valorilor stocate într-o coloan| particular| sau pentru a calculasubtotale pentru o coloan| dependent| de valorile altei coloane, de exemplu, subtotalulvâ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 însecÛiunea de gril| a interog|rii. Termenul de agregare se foloses-te pentru a desemna operat-iicu un grup de obiecte, astfel o funct-ie de agregare act-ioneaza7 asupra unui grup de înregistra7rirealizând o oarecare operat-ie matematica7 cu întregul grup. Aceast| linie va fi folosit| pentru arealiza calcule de mai multe categorii la nivel de coloan| a interog|rii. Unele se realizeaza7 pebaza unor opt-iuni multiple cum sunt, funct-iile de agregare (câteva dintre acestea fiind: suma(sum), media (average), maximul (maximum) etc.) altele, cum sunt, Group By, Expression,Total Field Record Limit nu au opt-iuni fiind unice.

Categoria Group ByAceasta7 categorie are o singura7 opt-iune, pe cea Group By. Ea se foloses-te când dorim sa7specifica7m ca7 un anumit câmp al ferestrei QBE va fi folosit pentru grupare. Ea este opt-iuneaimplicita7 pentru Total. Aceste grupuri de înregistra7ri vor fi folosite pentru a realiza calcule deagregare într-un alt câmp al interoga7rii.

Categoria ExpressionAre o singura7 opt-iune, pe Expression. Se foloses-te pentru a crea câmpuri calculate prinfolosirea funct-iilor de agregare.

Categoria Total Field Record LimitAceasta are o singura7 opt-iune, pe Where. Ea permite specificarea unui criteriu de limitarepentru un câmp agregat. Limitarea se realizeaza7 înainte de executarea opt-iunii de agregare.

Page 105: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

109 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Crearea uneiinteroga7ri cu totale

Categoria AggregateAceasta are noua7 opt-iuni, câteva dintre ele sunt: Sum, Avg, Min, Max etc. Fiecare dintreaceste opt-iuni realizeaza7 un anumit calcul cu datele s-i întorc noi date într-o celula7 a mult-imiidinamice rezultate.

Nota7: Interog|rile cu totale lucreaz| diferit de cele clasice. Ele nu afiÕeaz| toate înregistr|rilecare satisfac criteriile de selecÛie impuse ci numai totalul acestora. În plus, câmpurile care seinclud în înregistrare trebuie s| fie numai cele necesare, de exemplu, numai câmpurile pe bazac|rora se vor face calculele Õi câmpurile pe baza c|rora se vor face sort|ri. Includerea altorcâmpuri vor produce confuzie în cazul calculelor.

Modalitatea cre|rii unei interog|ri cu totale este simpl|: selectaÛicâmpurile Õi criteriile asemenea ca la interog|rile normale, apoispecificaÛi ce se va petrece în linia Totals pentru fiecare câmp. ÎncondiÛ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 calculpentru câmp. În exemplul urm|tor, din baza de date Northwind, am folosit tabelul Products.Gruparea s-a realizat pe baza câmpului SupplierID Õi conÛinutul tuturor câmpurilorUnitPrice pentru înregistr|rile cu acelaÕi SupplierID au fost însumate prin folosireafunct-iei de agregare Sum în linia Totals.

Pentru exemplificare, prezint în continuare efectul interog|rii cu total Õi tabelul pe baza c|ruias-a realizat interogarea. ObservaÛi c| în tabelul Products, furnizorul (Supplier) ExoticLiquids 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ândtotalizate cele trei valori din tabel (18.00 + 19.00 + 10.00 = 47.00) în câmpulSumOfUnitPrice.

Page 106: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

110 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Calcule multiple deagregare

Totale de expresii

Se pot efectua orice num|r de calcule într-o interogare cu total. Sepoate, de exemplu, realiza gruparea pe furnizori (SupplierID) Õicalcula suma pe baza câmpului UnitPrice Õi valoarea medie pebaza câmpului UnitsInStoc (unit|Ûi pe stoc).

Se poate folosi orice num|r de coloane pentru grupare: se poate realiza gruparea pe Û|ri Õi penume 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 sa7afis-eze valoarea totala7 a unei comenzi. Interogarea va avea ca s-i sursa7de date doua7 tabele, pe Orders s-i pe Order Details, iar valoarea totala7 a

Page 107: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

111 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Totale limitate

unei comenzi va fi calculata7 pe baza expresiei care urmeaza7 .

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

Sa7 presupunem ca7 dorim sa7 acelas-i grup de calcule ca s-i înainte, darpentru 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.

Interog|ri de actualizare (Update Queries)Interog|rile de actualizare permit modificarea rapid| a unui num|r de înregistr|ri dintr-untabel. Înregistr|rile actualizate depind de criterii specificate de utilizator. S| presupunem c| înbaza de date Northwind dorim s| modific|m preÛul pe unitate (Unit Price) pentrucategoria 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|

Page 108: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

112 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Crearea uneiinteroga7ri deactualizare

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'normale', cele utilizate pân| acum) de forma:

• selectaÛi din meniul Query opÛiunea Update Query ; în zona grileiinterog|rii apare o nou| linie numit| Update To. SpecificaÛi regulile pentru actualizarea uneicoloane 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 criteriilede 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 înexecuÛie interogarea. R|spunsul afiÕat pe ecran const| în acele rânduri care se vor modificadac| interogarea normal| se transform| în una de actualizare. Dac| criteriile de selecÛie sunt:

r|spunsurile afiÕate vor fi:

Page 109: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

113 Introducere în Microsoft Access: Interoga7 ri - cursul 6

• acum, dup| procedura descris| anterior, transform|m interogarea normal| în una deactualizare. Fereastra QBE specific| este prezentat| în figura urm|toare. Aici în linia UpdateTo a câmpului UnitPrice s-a introdus formula 1.1*[UnitPrice]. Ea defineÕte noilevalori ale câmpului dup| execuÛia interog|rii de actualizare. Lansarea în execuÛie se face la felca în cazul interog|rilor normale prin selectarea lui Run din meniul Query. Înainte deexecuÛia interog|rii de actualizare Access-ul deruleaz| un dialog cu utilizatorul în care îlavertizeaz| asupra num|rului de înregistr|ri care se vor modifica; dac| totul este în ordineselectaÛi butonul OK al cutiei de dialog. Dac| doriÛi abandonarea interog|rii de actualizareselectaÛi No Õi înregistr|rile nu vor fi modificate.

Page 110: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

114 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Crearea uneiinterogari deadaugare

• noile valori afiÕate în cazul unei interog|ri de select-ie vor fi:

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Ûiidefinite în bibliotecile Access.

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

Pentru crearea unei interog|ri de ad|ugare selectaÛi pe din meniul Query. Se poate specifica tabelul la care

se face ad|ugarea împreun| cu localizarea lui care poate fi în baza dedate curent| sau într-o alt| baz| de date. Dup| setarea câmpurilor Õicriteriilor, 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 carevor 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, dinpunct de vedere practic, este o procedur| s|n|toas| s| specificaÛi criteriile prima oar| într-ointerogare 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|.

Page 111: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

115 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Crearea uneiinterogari decreare a unui tabel

Crearea uneiinteroga7ri cu doua7tabele

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.

Pentru realizarea unei interog|ri de creare a unui tabel din meniulQuery selectaÛi . Noul nume de tabel poate fi stocatîn baza de date curent| sau în una extern|. Specificarea câmpurilor Õi acriteriilor 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.

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| presupunevizualizarea înregistr|rilor selectate printr-o interogare de select-ie, apoi transformarea ei înuna de tipul Make-Table.

Interog|ri cu mai multe tabeleMajoritatea 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 cheilorprimare Õ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 sepot vizualiza informaÛiile acelor tabele ca Õi cînd ar fi stocate într-un singur tabel.

• deschidet-i baza de date Northwind.mbd; • în fereastra bazei de date facet-i clic pe Queries; • clic pe New pentru a crea o interogare noua7 , iar din fereastraNew Query selectat-i Design View; • din fereastra de dialog Show Table realizat-i clic dublu pe

tabelele Customers s-i Orders, apoi închidet-i fereastra; Access creeaza7 automat o linie între celedoua7 tabele (vezi figura urma7 toare) pe baza relat-iei corespunza7 toare din fereatraRelationships; aceasta7 linie poarta7 denumirea de asociere s-i reprezinta7 o relat-ie între celedoua7 tabele;

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

Page 112: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

116 Introducere în Microsoft Access: Interoga7 ri - cursul 6

OrderDate pentru a vizualiza fiecare comanda7 fa7cuta7 de un anumit client, apoi lansat-i înexecut-ie interogarea prin clic asupra lui în bara cu instrumente Query Design;

rezultatele interoga7rii se afis-eaza7 sub forma:

Implicit, Access afis-eaza7 rezultatele interoga7rii pe baza indexului tabelului cu cheia primara7 .Daca7 , de exemplu, dori t-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-iapa7sat-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 asocieriRelat-iile între doua7 tabele sunt reguli cu privire la tipul lega7 turilor stabilite între tabele s-i nucu privire la modalitatea de vizualizare a datelor din tabele. Pentru a vizualiza date din maimulte tabele acestea trebuie sa7 fie legate printr-un câmp comun (sau printr-un un grup decâ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 interoga7rii se pot creanoi asocieri sau se pot modifica cele existente. La fel cum exista7 mai multe tipuri de relat-ii

Page 113: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

117 Introducere în Microsoft Access: Interoga7 ri - cursul 6

exista7 s-i mai multe tipuri de asocieri, câteva dintre acestea sunt: ! asocieri interne (inner joins); ! asocieri externe (outer joins); ! 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 s-i asociereechivalenta7 (equi-join). Ea spune lui Access sa7 selecteze toate înregistra7rile celor doua7 tabelecare au aceeas-i valoare în câmpurile prin care se face asocierea. Daca7 sunt ga7site înregistra7ricare nu au valori comune ale câmpurilor folosite la asociere acestea sunt excluse din mult-imeadinamica7 nefiind afis-ate în foaia de date. Aceste înregistra7ri excluse pot fi ga7site selectând dingeneratorul de interoga7ri tipul "Find Unmatched Query".

Crearea unei asocieri între tabele defines-te o mult-ime de proprieta7 t-i. Acestea sunt regulifolosite la afis-area înregistra7rilor s-i spun lui Access cum sa7 interpreteze orice except-ie (sau oeventuala7 eroare) între doua7 tabele. De exemplu, cum sa7 realizeze afis-area în cazul în caresunt înregistra7ri necorespunza7 toare. Access poate lucra cu mai multe tipuri de asocieri, fiecareavând un comportament specific. Modificarea tipului unei asocieri se realizeaza7 prinmodificarea proprieta7 t-ilor acesteia. Pentru aceasta realizat-i clic dublu pe linia care leaga7 celedoua7 tabele, pe ecran se va afis-a fereastra proprieta7 t-ilor asocierii (Join Properties).

Ea are doua7 regiuni, prima are patru liste desfa7s-urabile (Left Table Name, Right TableName, Left Column Name, Right Column Name), iar a doua trei butoane cu opt-iuni.Butoanele cu opt-iuni controleaza7 proprieta7 t-ile asocierii dupa7 cum urmeaza7 :

1. Include înregistra7rile care au în câmpurile de asociere valori egale; 2. Include TOATE înregistra7rile din tabelul Customers s-i numai pe acelea dinOrders care au în câmpul de asociere valori egale; 3. Include TOATE înregistra7rile din Orders s-i numai pe acelea din Customers careau în câmpul de asociere valori egale.

Prima opt-iune este cunoscuta7 sub numele de asociere interna7 (inner join), urma7 toarele suntcunoscute sub denumirea de asocieri externe (outer join).

Asocierea extern| la dreaptaAsocierile externe sunt folosite pentru afiÕarea tuturor înregistr|rilor unui tabel Õi numai acelor comune din cel|lalt. Când se creeaz| o asociere extern|, lina de asociere va avea la un

Page 114: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

118 Introducere în Microsoft Access: Interoga7 ri - cursul 6

cap|t o s|geat| care va marca tabelul din care sunt extrase numai înregistr|rile care au valoricomune. De exemplu, dac| în interogarea care afiÕeaz| comenzile unui client se facemodificarea:

Õ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 dintreacestea se observ| în figura care urmeaz|).

Asocierea extern| la stângaAceast| asocierea corespunde opÛiunii 3 din fereastra de dialog Join Properties. Ea permiteafiÕarea înregistr|rilor orfane. Acest tip de înregistr|ri sunt cele care nu permit activareaintegrit|Ûii referenÛiale. În exemplul prezentat, din forma s|geÛii care leag| cele dou| tabele, seobserv| c| integritatea referenÛial| este activat|, deci folosirea acestei asocieri nu va generarezultate noi faÛ| de opÛiunea 1.

Autoasocieri (self-joins)Autoasocierile se realizeaza7 între câmpurile aceluiaÕi tabel. Din acest motiv tabelul va fiad|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Ûelepersonalului într-un câmp Cerinte Õi aprob|rile cerinÛelor de c|tre conducere în câmpulAprobari, atunci se va realiza o asociere între aceste dou| câmpuri ale aceluiaÕi tabelpentru a g|si care cerinÛe au fost acceptate.

Asocierea de tip produs cartezianDac| se adaug| cele dou| tabele Customers Õi Orders într-o interogare, dar nu se specific| o

Page 115: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

119 Introducere în Microsoft Access: Interoga7 ri - cursul 6

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 laprodusul cartezian al tabelelor.

Des-i aceasta7 asociere este bine de evitat, voi prezenta în continuare un exemplu în care ea sepoate folosi cu succes.

Fie tabelul Angajati din figura urma7 toare. El are patru câmpuri, Nume, Prenume s-i Sectiesunt de tipul Text, iar Salar este de tipul Number, Double. Se pune problema totaliza7riisalariilor pe sect-ii (Sectie) s-i afis-area, în procente, a salarului totalizat pe fiecare sect-ie,raportat la totalul salariilor.

Prima metoda7 de rezolvare a problemei necesita7 realizarea a doua7 interoga7ri cu numeleQuery Suma pe Sectii s-i Query Suma Totala prezentate în figurile care urmeaza7 :

Page 116: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

120 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Pentru calculul procentelor din valoarea totala7 a salariilor se creeaza7 o noua7 interogare cunumele Procente. Aceasta se prezinta7 în figura urma7 toare s-i care are câmpurile:

Sectie;Suma pe sectii: Sum Of Salar;Suma totala: Sum Of Salar;Procent pe sectie: [Query Suma pe Sectii].[Sum ofsalar]/[Query Suma Totala].[Sum of salar]

Pentru ca la afis-are valorile sa7 fie formatate în procente, proprietatea Format a câmpului cunumele Procent pe sectie este setata7 la #.##%

Aceasta7 introgare este de tipul produs cartezian. Vet-i observa însa7 ca7 valorile sunt afis-aterepede î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 interoga7ri de forma:

Page 117: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

121 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Crearea uneiasocierimulticoloana7

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[Salar] este câmpul al ca7rui valori vor fi însumate, iar Angajati este tabelul carecont-ine câmpul în cauza7 . Observat-i ca7 argumentele funct-iei sunt s-iruri motiv pentru care eletrebuie scrie între apostroafe. Funct-ia mai are un argument, opt-ional, prin care se poatespecifica un criteriu pentru selectarea valorilor de însumat. Criteriile de select-ile sunt deforma "[Nume de câmp] = ' <valoare>' ".

Dou| tabele pot avea mai multe asocieri. De exemplu, dac| dorim s|afl|m clienÛii care au adresa firmei Õi cea la care se face expediereaaceeaÕi, se poate crea o interogare de forma:

Interog|ri cu parametriS| presupunem c| dorim s| scriem o interogare care s| fac| totalul vânz|rilor de produse

Page 118: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

122 Introducere în Microsoft Access: Interoga7 ri - cursul 6

pentru anul 1996.

Dac| expresia Like "*/*/1996" din figura de mai sus se înlocuieÕte cu cea prezentat| înfereastra Zoom urma7 toarea7 ( Like "*/*/" + [Introduceti anul]), se obÛine ointerogare cu parametru.

Parametrul este [Introducetianul], iar atunci când interogarea seexecuta7 , pe ecran se afis-eaza7 textulIntroduceti anul s-i se as-teapta7pâna7 când se introduce o valoarenumerica7 . Uneori pot sa7 apara7 problemela formatul câmpurilor de tipulData/Time. Observat-i ca7 separatorul înexpresia de tipul data7 este caracterul "/".Pentru ca datele sa7 fie formatatefolosind acest caracter s-i nu cel dinRegional Settings al lui Windowsrealizat-i clic pe numele câmpuluiOrderDate, apoi realizat-i clic pebutonul din dreapta s-i selectat-iProperties. În ferestra Field Propertiessetat-i valoarea proprieta7 t-ii Format lamm/dd/yyyy.

Verificarea corectitudinii tipului valorii introduse pentru parametru se poate face, de c|treAccess, dac| pentru parametrul cu numele Introduceti anul este specificat tipul

Page 119: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

123 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Integer din Query, Parameters as-a cum vede în figura urma7 toare.

Implicit, Access consider| parametrii interog|rilor de tipulText. În urm| modific|rii acestuia la Integer valorile pe careAccess le va accepta vor fi numai de tipul întreg. Pentru caaceast| valoare întreag| s| fie convertit| la un Õir de caracterecare s| poate fi ad|ugat la Õirul "*/*/" trebuie folositeurm|toarele funcÛii de conversie:

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

Funct-ia Str() transforma7 numa7rul întreg introdus de latastatura7 într-un s-ir de caractere, iar funct-ia Trim() elimina7spat-iile care intercaleaza7 s-irul.

Interog|ri încruciÕateInterog|rile încruciÕate asigur| crearea unor totale permiÛând în acelaÕi timp Õi stabilireaexact| a modului în care informaÛiile sunt afiÕate pe ecran. Rezultatele sunt afiÕate sub formaunui tabel în care rândurile (prin Row Heading), coloanele (prin Coulmn Heading) Õivalorile (prin Value) plasate la intersecÛia acestora trebuie specificate explicit. Ele auurm|toarele avantaje:

! permit afiÕarea într-o form| compact| a unor cantit|Ûi mari de date centralizateasem|n|tor cu Excel; ! datele sunt prezentate într-o form| mai potrivit| pentru crearea de grafice saude diagrame cu ajutorul lui Access GraphWizard; ! se pot crea date centralizate în ordine cresc|toare pentru coloane identice, darcu mai puÛine rânduri.

Utilizarea acestor interog|ri impune o singur| restricÛie: nu se poate ordona tabelul rezultatdup| valorile coloanelor calculate. De exemplu, nu se poate crea o interogare care s| afiÕazeprodusele dup| volumul vânz|rilor. Coloanele pot avea valori care duc la conflicte, dar sepoate realiza ordonarea cresc|toare, descresc|toare sau lipsa ordon|rii pentru valorile numelorde rânduri din prima coloan|. Access are un generatorul Crosstab Query Wizard pentrucrearea 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 cares| conÛin| tabelele de mai jos, apoi folosiÛi Crosstab din Query pentru ca linia Crosstab s|

Page 120: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

124 Introducere în Microsoft Access: Interoga7 ri - cursul 6

fie afiÕat|. SpecificaÛi în continuare cele trei componente (rând, coloan| Õi valoare) aleinterog|rii încruciÕate.

Rezultatele interog|rii sunt afiÕate într-un tabel de forma:

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 cares-a f|cut comanda, iar funcÛia Sum() va realiza suma valorilor câmpului corespunz|toareaceluiaÕ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.

Propriet|Ûile interog|rilorLa crearea unei interog|ri, propriet|Ûile ei pot fi setate din View, Properties. Acestea depindde tipul interoga7rii care se creeaza7 s-i de tabelul sau câmpul cu care se lucreeaza7 . Câteva dintreproprieta7 t-ile mai importante sunt prezentate în tabelul care urmeaz|:

Proprietate Descrierea Query

Select

Crosstab

Update

Delete

Make-Table

Append

Description Text care descrie interogarea X X X X X X

Page 121: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

125 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Output All Fields AfiÕarea tuturor câmpurilor din tabelul careeste sursa de date în interogare

X X X

Top Values Num|rul de valori "maxime" sau "minime"care vor fi întoarse

X X X

Unique Values Întoarce numai valori unice în câmpurilemulÛimii dinamice

X X X

Unique Records Întoarce numai înregistr|ri unice în câmpurilemulÛimii dinamice

X X X X

Run Permissions StabileÕte drepturile utilizatorului specificat X X X X X X

Source database Numele bazei de date externe pentru toatetabelele/interog|rile

X X X X X X

Source ConnectStr

Numele aplicaÛiei folosite pentru conectarea labaza de date extern|

X X X X X X

Record Locks Blocarea înregistr|rilor când interogarea seexecut| (de obicei pentru cele de acÛiune)

X X X X X X

ODBC Time-out Num|rul de secunde înainte de a raportaeroare la deschiderea bazei de date

X X X X X X

Filter Filtrul se încarc| automat împreun| cuinterogarea

X

Order By Ordinea de sortare se încarc| automat cuinterogarea

X

MaxRecords Num|rul maxim de înregistr|ri întors de bazade date ODBC

X

SubDatasheetname

Numele subfoii de date X X X X

Link ChildFields

Numele câmpurilor din subinterogare X X X X X

Link MasterFields

Numele câmpurilor din tabelul principal X X X X X

SubdatasheetHeight

În|lÛimea maxim| a subfoii de date X X X X X

SubdatasheetExpanded

Înregistr|rile sunt iniÛial afiÕate expandat? X X X X X

RecordSet Type Tipul mulÛimii de înregistr|ri, specific| dac|tabelele pot fi editate

X

DestinationTable

Numele tabelului destinaÛie X X

Page 122: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

126 Introducere în Microsoft Access: Interoga7 ri - cursul 6

Destination DB Numele bazei de date destinaÛie X X

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

Interoga7ri pentru întreÛinerea bazelor de dateAccess are dou| generatoare pentru întreÛinerea bazelor de date:

! Find Duplicate Query Wizard: afiÕeaz| înregistr|rile duplicate, într-unsingur 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.

Find Duplicate Query Wizard acÛioneaz| asupra unui singur tabel, iar Find UnmatchedQuery Wizard compar| înregistr|rile unui table cu cele ale unui alt tabel. Aceste generatoaresunt afiÕate în lista generatoarelor disponibile atunci când se începe o nou| interogare.

Find Duplicate Query WizardGeneratorul permite crearea unei interog|ri care raporteaz| înregist|rile unui tabel careoprezint| dubluri pentru unul sau mai multe câmpuri ale tabelului. Access va cere care suntcâ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. Atuncicând avem un tabel "primit", pentru care trebuie s| cre|m o cheie, iar aceast| interogareafiÕeaz| înregist|ri, avem siguri valori Null sau înregistr|ri duplicate.

Find Unmatched Query WizardGeneratorul permite crearea unor interog|ri pentru afiÕarea înregist|rilor va7duve Õi orfaneîntre dou| tabele. O înregistrate este orfan| dac| în tabelul din partea de "mulÛi" nu arecorespondent î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 cerenumele celor doua7 tabele de comparat, câmpul de lega7 tura7 între ele s-i câmpurile tabelului"unu" care vor fi afis-ate. Daca7 se creeaza7 relat-ii între tabele s-i se încearca7 setarea integrita7 t-iireferent-iale, acest tip de interogare va raporta înregistra7rile care violeaza7 intergritatea.

Page 123: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

127 Introducere în Microsoft Access: Interoga7 ri - cursul 6

OpÛiuni pentru proiectarea interog|rilorExista7 mai multe opt-iuni de proiectare implicite care pot fi specificate la proiectarea uneiinteroga7ri. Acestea se vizualizeaza7 prin selectarea din Tools a lui Options, apoi prin

selectarea lui Tables/Queries. Tabelul care urmeaza7 descrie opt-inile implicite de proiectare a interoga7rilor prezentate înfigura 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âmpuriledin panoul QBE

Enable AutoJoin Foloses-te numele comune de câmpuri pentru crearea automata7de asocieri între doua7 tabele care nu au relat-ii. Tipul câmpurilortrebuie sa7 fie identic

Run Permissions Restrict-ioneaza7 vizualizarea rezultatelor interoga7rii într-unmediu multi-utilizator. Pentru Owner rezultate pot fi va7zutenumai de creatorul interoga7rii

SQL Server Compatible Validata7 , opt-iunea genereaza interoga7ri care respecta7 sintaxaANSI-92 SQL

Page 124: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

128 Introducere în Microsoft Access: Formulare - cursul 7

! 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

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)

ale formularelor;

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

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

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

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

Obiectivele cursului 7

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 125: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

129 Introducere în Microsoft Access: Formulare - cursul 7

• Formularele furnizeaz| o metod| prietenoas| de vizualizare a datelor,acestea pot fi afiÕate folosind diferite tipuri de caractere Õi culori, în afaraacestora 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.

Ce aduc în plusformularele?

Formulare (Forms)

Tabelele furnizeaz| o modalitate convenabil| pentru stocarea datelor, iar interog|rile permitextragerea 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 Õiintroducerea datelor. Formularele dau utilizatorului mai mult| putere în controlul datelor dinbaz|, furnizând în acelaÕi tip Õi o interfaÛ| vizual| mai atractiv|.

În faza de proiectare a formularelor, o varietate de tehnici cum sunt texte adiÛionale, m|rimi Õistilul de caractere, culori, imagini scanate, desene, grafice, butoane de comand| care pot fifolosite pentru a deschide noi formulare sau a închide formulare deschise sau pentru a lansainterog|ri sau pentru a derula alte operaÛii, sunt folosite pentru a da o nou| imagine procesuluide 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 dinbaza de date. Structura tabelelor nu este afectat| de proiectulformularului, dar datele din tabel pot fi modificate prin acÛiuni lansateîn cadrul formularului.

Page 126: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

130 Introducere în Microsoft Access: Formulare - cursul 7

Tipuri de aspecte ale formularelor

Coloan| (Columnar) Tabel (Tabular)

Foaie de date (Datasheet) Aliniat (Justified)

Vizualizat în modul proiectare, formularul pune la dispozit-ia programatorului mai multesect-iuni pe suprafat-a ca7rora pot fi plasate obiecte de control, denumite, pe scurt, controale.Sect-iunile cele mai folosite sunt:

• antetul formularului (form header): se afis-eaza7 la începutul ferestrei; • sect-iunea detaliu (detail section): cont-ine controale pentru manipulareavalorilor 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 formularuluiExist| o varietate de moduri de prezentare ale aspectului unui formular. Generatorul deformulare ofer| patru tipuri de aspecte. Fiecare poate fi modificat, între anumite limite îns|,pentru a satisface cât mai bine un aspect particular.

Crearea unui formular cu AutoFormAutoForm creeaz| un formular pe care se vor afiÕa toate câmpurile Õi înregistr|rile tabeluluisau interog|rii selectate. Fiecare câmp apare pe o linie separat| cu o etichet| în stânga lui.

Page 127: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

131 Introducere în Microsoft Access: Formulare - cursul 7

Pentru a crea unformular cu FormWizard

• î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; • clic pe AutoForms ( ) din meniul Insert.

Dup| ce formularul a fost creat, este deschis automat în modul de vizualizare al datelor (FormView) Õi este gata pentru introducerea sau modificarea datelor din tabel. Dac| în baza de dateNorthwind.mdb veÛi selecta tabelul Categories, veÛi obÛine formularul urm|tor:

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

Crearea unui formular cu Generatorul de Formulare(From Wizard)Este posibil| crearea unui formular cu ajutorul Generatorului de Formulare (Form Wizard).Metoda este direct| Õi destul de simplu de utilizat. Proiectul formularului obÛinut se va puteamodifica ulterior.

• înfereastra bazeide date(DatabaseWindow) clic pe

butonul Forms; • ap|saÛi butonul New Õi cutia dedialog New Form va fi afiÕat|: • selectaÛi Form Wizard; • selectaÛi un tabel sau ointerogare care va fi sursa de datepentru formularul care urmeaz| s| fiecreat - eu am selectat tabelul Employees

Page 128: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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;

• 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 dialogpentru a selecta o surs| de dat| diferit| care va conÛine alte câmpuri;

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

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

Page 129: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

133 Introducere în Microsoft Access: Formulare - cursul 7

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

• selectaÛi opÛiunea dorit| apoi clic pe butonul Next; • urm|toarea pagin| va afiÕa o list| cu stilurile predefinite de formulare:

• selectaÛi una dintre opÛiuni, apoi clic pe Next; • urm|toarea pagin| permite specificarea numelui formularului care va fi creat ÕiopÛiunile finale pentru utilizarea formularului;

Page 130: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

134 Introducere în Microsoft Access: Formulare - cursul 7

Vizualizarea înmodul proiectare(Design View)

• clic pe butonul Finish pentru crearea formularului; • dac| aÛi p|strat opÛiunea "Open the form to view or enter information", atunciformularul va fi afiÕat pe ecran astfel:

Moduri de vizualizare a formularelorModul de vizualizare proiectare (Design View) sau, mai pe scurt,modulproiectarepermitead|ugarea,

modificarea Õi Õtergerea obiectelorde pe suprafaÛa formularului.Formularul creat anterior esteprezentat în modul proiectare înfigura al|turat|.

• pentru vizualizareaformularului în mod proiectare(Design View), clic pe meniulView ( ) în timp ce

Page 131: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

135 Introducere în Microsoft Access: Formulare - cursul 7

Pentruvizualizareaformularului înmod "formular"(Form View)

Vizualizareaînainte de tiparire(Print Preview)

Pentru a crea unformular faraGenerator

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 creatformularul. În acest mod se pot introduce sau modifica datele din tabelele Õi interog|rile care

sunt sursele de date ale formularului.

• pentru a trece în modul formular, din meniul View, selectaÛiForm View ( ).

Vizulalizare înainte de tip|rire (Print Preview) permite afiÕarea pe ecran a formei în care seva tip|ri la imprimant| conÛinutul unui formular.

• clic pe Print Preview ( ) din meniul File.

Pe ecran se va afiÕa o pagin| de imprimant| cu un conÛinut de forma:

Crearea unui formular f|r| GeneratorEste posibil s| nu folosim Generatorul pentru crearea întregului formular, ci s| construimnumai un schelet de baz|. Exist| cazuri când formularul pe care îl dorim difer| foarte mult detipurile 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; • clic pe butonul New, acesta va duce la afiÕarea ferestrei NewForm;

Page 132: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

136 Introducere în Microsoft Access: Formulare - cursul 7

Deschiderea unuiformular existentîn modulproiectare

În exemplul care urmeaz| voi folosi tabelul Employees din baza de date Northwind.mdb

• 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; • clic pe butonul OK Õi proiectul formularului va fi vizualizat pe ecran.

Vizualizarea ferestrei în mod proiectare • deschideÛi o baz| de date astfel încât s| fie afiÕat| fereastrabazei de date (Database Window); • clic pe butonul Form; • 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

Page 133: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

137 Introducere în Microsoft Access: Formulare - cursul 7

figura urm|toare acesta este vizualizat în modul formular.

AcelaÕi formular, vizualizat în mod proiectare arat| astfel:

Fereastra modului proiectareFereastra modului proiectare conÛine un num|r de elemente vizuale cu care trebuie s| fiÛifamiliarizaÛi.

AfiÕarea sau ascunderea liniarului (Rulers)

Page 134: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

138 Introducere în Microsoft Access: Formulare - cursul 7

• dac| liniarul nu este afiÕat, din meniul View, clic pe comanda Ruler. Dac| liniaruleste afiÕat, un clic pe aceeaÕi comand| va duce la ascunderea lui. Un articol de meniu care aredou| st|ri distincte Õi stabile, între care comut| la selectare, se numeÕte articol bistabil.

AfiÕarea listei de propriet|Ûi (Properties) a unui obiect de pe suprafaÛa formularuluiFiecare 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|Ûipot fi modificate de utilizator arbitrar, altele pot lua numai valori particulare care se potselecta 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 .

La deschiderea unui formular,obiectul selectat este chiar formularul,lista propriet|Ûilor lui se prezint| subforma:

AfiÕarea listei câmpurilor (FieldList)Sursa de date a formularului este fieun tabel, fie o interogare. Ar fiincomod dac| utilizatorul ar trebui s|memoreze numele câmpurilor de dateale sursei. AfiÕarea listei de câmpuriale sursei de date rezolv| aceast|problem|. Dac| doriÛi ca unul dincâmpurile listei s| apar| pe suprafaÛaformularului este suficient s|-l trageÛidin 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 .

Lista câmpurilor pentru formularul Orders, care are ca surs| de date interogarea cu numeleOrders Qry, se prezint| sub forma:

AfiÕarea cutiei cu instrumente (Toolbox)Bara cu instrumente grupeaz| obiectele standard, numite Õi controale (controls) care pot fiaÕ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 ;

Page 135: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

139 Introducere în Microsoft Access: Formulare - cursul 7

• bara de instrumente se va afiÕa sub forma:

AfiÕarea codului din spatele formularuluiObiectele bazei de date Õi cele ale unui formular pot fi manipulate prin intermediul limbajuluide programare Visual Basic for Applications (VBA). InstrucÛiunile corespunz|toareobiectelor unui formular pot fi vizualizate astfel: • clic pe Code din meniul View sau • din bara de instrumente Form Design, clic pe .

Pentru formularul Orders, codul din spatele lui este de forma:

Manipularea proiectului de formularDup| 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|, apoimanipuleaz|.

Page 136: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

140 Introducere în Microsoft Access: Formulare - cursul 7

Selectarea unuicontrol cumouse-ul

Controalele pe care Access-ul le pune pe suprafaÛa unui formular, în urma folosiriiGeneratorului, se numesc controale legate. Aceasta înseamn| c| ele sunt legate decâmpurile tabelelor sau interog|rilor care au fost selectate drept surs| de date. Un control legateste compus dintr-o etichet| (Label) Õi o cutie text (Text box). Eticheta este titlul câmpuluiafiÕat pe suprafaÛa formularului Õi se g|seÕte stocat| în proprietatea titlu (Caption) din lista depropriet|Ûi ale etichetei. Cutia text va stoca datele dintr-un tabel.

Rolul controalelorControalele se folosesc pentru introducerea s-i afis-area datelor, de asemenea, se mai folosescpentru afis-area informat-iilor statice. Fromularele s-i rapoartele lucreaza7 cu aceles-i controale. Încele ce urmeaza7 vor fi discutate controalele pentru formulare. Controalele sunt în realitateferestre, asemenea tuturor celorlate elemente ale unei aplicat-ii Windows. Le fel ca s-i orice alta7ferestra7 , controlul, poate primi date de la utilizator numai daca7 este activ (are focalizarea). Deexemplu, pentru ca utilizatorul sa7 poata7 introduce date într-o Cutie Text, aceasta trebuie sa7 fifost selectata7 în prealabil de utilizator sau printr-o secvent-a7 de program. Unele controale potlua valori specificate în timpul proiecta7rii de ca7 tre utilizator sau în timpul execut-iei aplicat-ieiprin anumite secvent-e de program. Valoarea controlului este cea afis-ata7 de acesta, deexemplu, o Cutie Text este valoarea afiÕata7 în interiorul cutiei. Toate controalele auproprieta7 t-i pe care aplicat-ia le poate citi s-i modifica.

Editarea controalelorPoziÛ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|,veÛi observa opt puncte de form| dreptunghiular| în colÛurilecutiei etichet| (Label box) Õi la mijloacele laturilor cutiei care permitemodificarea dimensiunilor cutiei (sizing handles). În colÛul din stângasus 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 optdreptunghiuri în aceleaÕi poziÛii caracteristice, de data aceasta pe chenarul cutiei de text Õiunul singur în colÛul stânga sus al cutiei etichet|. Acest punct mai mare în colÛurile din stângasus permite deplasarea individual| sau în grup a celor dou| cutii.

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| subforma 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. Formacursorului 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 dreptunghiuldin stânga sus (move handle) al unui control. Cursorul îÕi va schimba forma într-o mân| care

Page 137: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

141 Introducere în Microsoft Access: Formulare - cursul 7

arat|. • trageÛi cutia pe noua poziÛie, apoi eliberaÛi butonul mouse-ului.

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 capeteindicâ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 odimensiune mai mare sau mai mic|.

Pentru a Õterge un control • clic undeva pe control; • ap|saÛi tasta Delete.

Nota7: Dac| aÛi selectat o etichet| Õi ap|saÛi Delete, se va Õterge numai eticheta. Dac| aÛiselectat o cutie text, la ap|sarea lui Delete se va Õterge atât cutia cât Õi etichetacorespunz|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 imediatdedesubtul controalelor originale.

Nota7: Dac| repoziÛionaÛi controlul duplicat Õi selectaÛi din nou Duplicate, Access-ul va creaun 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; • selectaÛi Cut sau Copy din meniul Edit pentru a plasa controlul în Clipboard; • selectaÛi Paste din Edit. Controlul va fi plasat în colÛul din stânga sus al secÛiunii dedetalii 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. Pem|sur| ce mutaÛi cursorul el va desena un dreptunghi în jurul grupului selectat. Toatecontroalele 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Ûiselectat 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;

Page 138: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

142 Introducere în Microsoft Access: Formulare - cursul 7

Controale legate(Bound controls)

• selectaÛi alinierea (Align) din meniul Format, apoi selectaÛi opÛiunea de aliniere dorit|din submeniul: .

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| (VerticalSpacing) din meniul Format; • selectaÛi m|reÕte (Increase), micÕoreaz| (Decrease) sau f|-le egale (Make Equal) dinsubmeniul: .

Pentru a salva un formular cu toate modific|rile f|cute asupracontroalelor lui • selectaÛi Save din meniul File; • introduceÛi numele formularului; • ap|saÛi Enter, apoi clic pe OK.

Pentru a modifica dimensiunea unei secÛiuniDac| 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 modificala 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 • poziÛionaÛi cursorul peste marginea din dreapta a oric|rei secÛiuni din formular.Cursorul va lua forma unei linii orizontale cu dou| s|geÛi la capete suprapus| peste o linie maigroas| vertical|; • trageÛi marginea secÛiunii pân| ce ajungeÛi la dimensiunea dorit|.

Pentru a modifica l|Ûimea formularului Õi dimensiunea unei secÛiunisimultan • poziÛionaÛi cursorul peste colÛul din dreapta jos a secÛiunii. Cursorul va lua forma unuiplus cu s|geÛi la fiecare extremitate; • trageÛi colÛul secÛiunii Õi formularului pân| la dimensiunea dorit|.

Tipuri de controaleControlul legat afiÕeaz| date dintr-un tabel sau interogare. Se folosescpentru afiÕarea, modificarea Õi ad|ugarea datelor din tabele. Cel maifrecvent folosit control legat este Cutia Text (Text box). Controalelelegate moÕtenesc propriet|Ûi ale tabelului de care sunt legate.Propriet|Ûile controlului pot fi modificate în formular f|r| afectarea

Page 139: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

143 Introducere în Microsoft Access: Formulare - cursul 7

Controale nelegate(Unbound controls)

Controale calculate(Calculatedcontrols)

Pentru a deschidecutia cuinstrumente(Toolbox)

propriet|Ûilor originale ale tabelului.

Controlul nelegat este f|r| surs| de date. El poate afiÕa informaÛii detipul text, linie, dreptunghi sau imagine. De asemenea, poate acceptadate care nu sunt îns| introduse direct într-un tabel.

Controlul calculat are datele derivate dintr-o expresie.

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ÛiToolbox; acesta va fi afiÕat| sub forma: ; • poziÛionaÛi Õi redimensionaÛicutia dup| preferinÛe.

Descrierea sumara7 a instrumentelor este prezentata7 în tabelu care urmeaza7 :

Nume instrument Pictogram| Descriere

SelecÛie de Obiecte(Select Objects)

Când simbolul este selectat, permite selectarea,mutarea Õi redimensionarea controalelor

Generatoare deControale (ControlWizards)

Generatoarele de Controale permit creareasimpl| ale urm|toarelor tipuri de controale: • 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 carenu se modific|. Majoritatea controalelor auataÕate automat, la creare, o etichet|. Sunt utilela afiÕarea unui text undeva pe suprafaÛaformularului.

Page 140: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

144 Introducere în Microsoft Access: Formulare - cursul 7

Cutie Text (Text Box) Este cel mai utilizat control pe formulare. SefoloseÕte pentru afiÕarea conÛinutului unui câmpÕi permite introducrea de la tastatur| de date noiîn câmp.

Grup de OpÛiuni(Option Group)

Controlul d| posibilitatea selecÛiei unei singureopÛiuni dintr-un grup. SelecÛia unei opÛiuni dingrup le exclude automat pe celelalte.

Buton Bistabil (ToggleButton)

Controlul permite, selectarea sau deselectareaunei opÛiuni. Atât text, cât Õi desene pot fifolosite pentru a specifica semnificaÛia lui.

Buton de OpÛiune(Option Button)

Acest control permite, fie selectarea, fiedeselectarea unei opÛiuni. Un punct negru esteafiÕat dac| opÛiunea este selectat|.

Buton de SelecÛie(Check Box)

Acest control permite, fie selectarea, fieneselectarea unei opÛiuni. Semnul "bifat" U esteafiÕat în caz de selecÛie. Butoanele de SelecÛienu sunt mutual exclusive în selecÛie, adic| sepoate s| fie simultan selectate mai multe.

Cutie Combinat|(Combo Box)

Controlul va afiÕa o list| de opÛiuni disponibile.PuteÛi vedea opÛiunile efectuând clic pe s|geat|în jos din dreapta cutiei. Alternativ, puteÛiintroduce, la fel ca în Cutia Text, o opÛiune carenu apare în list|, Access-ul modificândelementul de list| afiÕat la cel mai apropiat detextul introdus. Dac| nu aÛi activat proprietateaLimit To List la crearea Cutiei Combinate,noua valoare introdus| va fi salvat| în tabel.

Buton List| (List Box) Permite afiÕarea unor variante de opÛiuni subforma unei liste prin care se poate defila. Numaivalorile din list| pot fi selectate.

Buton de Comand|(Command Button)

Se foloseÕte pentru lansarea unei acÛiuni.AcÛiunea este efectuat| pentru c| butonul estelegat de o serie de comenzi denumite "Macro"-uri sau Subprograme.

Imagine (Image) Permite inserarea unei imagini în formular.

Page 141: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

145 Introducere în Microsoft Access: Formulare - cursul 7

Chenar de ObiectNelegat (UnboundObject Frame)

Se foloseÕte când doriÛi s| afiÕaÛi un obiect OLEsau o imagine ca parte a unui proiect deformular. Obiectul va r|mâne acelaÕi, el nu se vamodifica la deplasarea pe o alt| înregistrare.

Chenar de Obiect Legat(Bound Object Frame)

Se foloseÕte când doriÛi s| afiÕaÛi un obiect OLEsau o imagine ataÕat| unei înregistr|ri. Permitead|ugarea sau editarea imaginii sau obiectului,înregistrare cu înregistrare.

Terminator de Pagin|(Page Break)

Controlul defineÕte: • acÛiuni la ap|sarea tastelor PageUp/Page Down; • defineÕte linia de sus a paginii noi latip|rirea formularului.

Control Tab Permite definirea unui control organizat pepagini de forma:

Subformular/Subraport(Subform/Subreport)

Pentru afiÕarea unei relaÛii unu-la-mulÛi seinsereaz| un Subformular în formular. Deobicei, unu este în formularul principal, iarmulÛi în subformular.

Linie (Line) Permite ad|ugarea de linii cu scopul de a faceformularul mai atractiv Õi mai bine organizat.

Dreptunghi (Rectangle) Permite ad|ugarea unor dreptunghiuri cu scopulde a face formularul mai atractiv Õi mai bineorganizat.

Page 142: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

146 Introducere în Microsoft Access: Formulare - cursul 7

Alte Controale

Propriet|Ûile de legate de afiÕarea controalelor Etichet| ÕiCutie TextDeÕ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Õ|real valorii

Decimal Places Auto, 1-15 Determin| num|rul dezecimale afiÕate

Visible Yes/No Pentru Yes controlul esteafiÕat; pentru No esteinvizibil

Display when Always, Print Only, Screen Only Determin| când anume seafiÕeaz| controlul

Scrollbars None, Vertical, Horizontal, Both Specific| afiÕarea barelorpentru deplasare

Can Grow Yes/No Permite creÕterea cutiei dac|mai multe linii de text suntintroduse

Page 143: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

147 Introducere în Microsoft Access: Formulare - cursul 7

Can Shrink Yes/No Permite micÕorarea cutieidac| num|rul de linii estemai mic decât dimensiuneainiÛial| a Cutiei

Left PoziÛia colÛului stâng a controluluiîn sistemul de unit|Ûi curent

Specific| poziÛia controluluipe axa orizontal|

Top PoziÛia colÛului de sus acontrolului în sistemul de unit|Ûicurent

Specific| poziÛia controluluipe axa vertical|

Width L|Ûimea controlului în sistemul deunit|Ûi curent

Height În|lÛimea controlului în sistemulde unit|Ûi curent

Back Style Transparent , Normal Determin| dac| fondulcontrolului este transparentsau opac (normal)

Back Color Orice culoare disponibil| Specific| culoarea pentruinteriorul controlului sau asecÛiunii

Special Effect Flat, Raisen, Sunken, Shadowed,Etched, Chiseled

Determin| modul de afiÕarea secÛiunii sau controlului

Border Style Transparent, Solid, Dashed, Dots Determin| afiÕareatransparent| sau opaca amarginilor unui control

Border Color Orice culoare disponibil| Culoarea marginiicontrolului

Border Width Hairline, 1 pt - 6 pt Specific| grosimeamarginilor controlului

Fore Color Orice selecÛie din fereastra afiÕat| Specific| culoarea textuluidin control sau pe cea folsit|la tip|rire

Font Name Orice tip de caracter disponibil(depinde de instalare)

Numele tipul de caracterefolosit pentru afiÕareavalorilor controlului

Font Size Orice m|rime disponibil| M|rimea caractelelor folostepentru afiÕarea valorilorcontrolului

Font Weight Extra Light, Light, Normal,Medium, Semi-Bold, Bold, ExtraBold, Heavy

L|Ûimea liniei folosit| deWindows pentru afiÕarea Õitip|rirea caracterelor

Page 144: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

148 Introducere în Microsoft Access: Formulare - cursul 7

Font Italic Yes/No Caractere înclinate încontrol

Font Underline Yes/No Caractere subliniate încontrol

Text Align General (implicit), Left, Center,Right

Seteaz| alinierea pentrutextul din control

Reading Order Context, Left-to-Right, Right-to-Left

Determin| ordinea de citirea caracterelor pe baza limbii

Keyboard Language System, English Determin| limbajul de latasatatur| pentruintroducerea de date încontrol

Scroll Bar Align System, Right, Left Barele pentru defilare pot fiaÕezate în stânga sau dreptacontrolului în funcÛie delimb|

Numeral Shapes System, Arabic, National, Context Forma numerelor pentrulimbile arab| Õi hindi

Left Margin Marginea stâng| acontrolului în inchi

Right Margin Marginea dreapt| acontrolului în inchi

Top Margin Marginea de sus acontrolului în inch

Bottom Margin Marginea de jos acontrolului în inchi

Line Spacing SpaÛierea, în inchi, întreliniile de tetxt

Is Hyperlink Yes/No Specific| dac| un controleste sau nu hiperleg|tur|(pentru Yes textul esteablastru Õi subliniat Õi la clicduce la conectarea laInternet)

Î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Ûiformularul aÕa încât s| fie, în mod formular, vizualizat întocmai ca Õi în figur|. La sfârÕitulcapitolului sunt prezentate toate propriet|Ûile specifice unui formular, o parte trebuie dintre elemodificate pentru ca aspectul formularului nou s| fie acelaÕi cu cel din exemplu. Propriet|Ûileformularului vor fi vizibile dac| în modul proiectare se face clic în afara secÛiunilor

Page 145: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

149 Introducere în Microsoft Access: Formulare - cursul 7

formularului, apoi clic pe butonul din dreapta Õi din list| selectaÛi Properties.

Navigarea între câmpurile formularuluiNavigarea într-un formular este aproape identica7 cu cea dintr-o foaie de date. În modformular, cel mai simplu mod de pozit-ionare în vederea modifica7rii unor date este clicul pecâmpul dorit. Întrucât pot fi afis-ate numai atâtea câmpuri câte încap pe ecran, mai multetehhnici de navigare pot fi folosit pentru deplasarea în cadrul formularului sau întreînregistra7ri, 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).

Efect Combinat-ie de taste

Câmpul urma7 torTab,6,9 sau Enter

Câmpul anteriorShift+Tab, 7,8

Primul câmp al înregistra7rii curente Home sau Ctrl+Home

Ultimul câmp al înregistra7rii curente End sau Ctrl+End

Pagina urma7 toare PgDown sau Next Record

Pagina anterioara7 PgUp sau Previous Record

Tehnici de editare a datelorTehnicile de editare a datelor se prezinta7 în tabelul urma7 tor:

Page 146: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

150 Introducere în Microsoft Access: Formulare - cursul 7

Tehnica de editare Combinat-ie de taste

Deplasarea punctului de inserare într-un câmp Apa7sarea lui 7 sau a lui 6Inserarea 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 unanoua7

Selectat-i întregul câmp, apoi introducet-i valoareanoua7

Înlocuirea valorii curente, cu ceaprecedenta7 , introdusa7 într-un câmp

Cltr+' (apostrof)

Înlocuirea valorii curente cu ceaimplicita7

Ctrl+Alt+Spat-iu

Inserarea datei curente în câmp Ctrl+;

Inserarea orei curente în câmp Ctrl+:

Inserarea unei întreruperi de linie încâmpurile de tipul Text sau Memo

Ctrl+Enter

Inserarea unei înregistra7ri noi Ctrl++ (plus)

S- tergerea înregistra7rii curente Ctrl+- (minus)

Salvarea înregistra7rii curente Shift+Enter sau deplasarea pe o alta7 înregistrare

Anularea modifica7rii fa7cute înînregistrarea curenta7

Esc sau butonul Undo

Lista proprieta7t-ilor unui formularProprieta7 t-ile formularului afecteaza7 modul de afis-are a întregului formular. Cele maiimportante proprieta7 t-i sunt prezentate în tabelul urma7 tor:

Proprietate Descriere s-i opt-iuni Descriere opt-iune

Caption Text afis-at în bara cu titlulformularului

Page 147: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

151 Introducere în Microsoft Access: Formulare - cursul 7

Default View Determina7 modul devizualizare al formularuluiîn execut-ie

Continuous Form

Datasheet

PivotTable

PivotChart

O înregistrare pe pagina7

Maxim înregistra7ri pepagina7 (Implicit)

Afis-eaza7 valorile câmpuluiorizontal sau vertical, apoicalculeaza7 suma pe coloana7sau rând

Analiza grafica7 a datelor

Allow Form View Validarea vizualiza7rii înmod formular (Yes/No)

Allow Datasheet View Validarea vizualiza7rii înmod foaie de date (Yes/No)

Allow Pivot Table View Validarea vizualiza7rii înmod tabel pivot (Yes/No)

Allow Pivot Chart View Validarea vizualiza7rii înmod grafic pivot (Yes/No)

Scroll Bars Determina7 afis-area barelorpentru defilare

Neither

Horizontal Only

Vertical Only

Both

Nu se afis-eaza7

Se afis-eaza7 numai ceaorizontala7

Se afis-eaza7 numai ceaorizontala7

Ambele bare sunt afis-ate

Record Selectors Determina7 afis-areaselectorilor verticali deînregistra7ri (Yes/No)

Navigation Buttons Determina7 afis-areabutoanelor de navigare(Yes/No)

Page 148: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

152 Introducere în Microsoft Access: Formulare - cursul 7

Dividing Lines Determina7 afis-area de liniiîntre sect-iunile vizibile aleformularului

Auto Resize Formularul se deschidepentru afis-area completa7 aînregistra7rii (Yes.No)

Auto Center Centreaza7 formularul ladeschidere (Yes/No)

Border Size Determina7 stilul marginiiformularului

None

Thin

Sizable

Dialog

Fara7 margine sau elementede margine (bare de defilaresau navigare)

Margine subt-ire, nu se poateredimensiona

Seta7ri normale de formular

Margine groasa7 , cu bara detitlu; nu se poateredimensiona; se foloses-tepentru ferestre de dialog

Control Box Determina7 afis-area meniuluide control (Restore, MoveSize) (Yes/No)

Min Max Buttons None

Min Enabled

Max Enabled

Both Enabled

Nu se afis-eaza7 butoane încolt-ul dreapta-sus alformularului

Se afis-eaza7 butonul deminimizare

Se afis-eaza7 butonul demaxbimizare

Se afis-eaza7 butoanele deminimizare s-i maximizare

Close Button Determina7 afis-areabutonului Close în colt-uldreapta-sus în meniul decontrol (Yes/No)

Page 149: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

153 Introducere în Microsoft Access: Formulare - cursul 7

What's This Button Determina7 afis-area, laapa7sa7rea lui Shift+F1, aScreen Tips

Width Afis-eaza7 la7 t-imeaformularului; se poateintroduce sau Access ocalculeaza7 pe ma7sura7 ce secreeza7 formularul

Picture Numele fis-ierului imaginebitmap pentru fondulformularului

Picture Type Determina7 daca7 imagimeaeste inclusa7 sau legata7

Embedded

Linked

Imaginea este inclusa7 înformular s-i devine parte abazei de date

Imaginea este doar legata7 .Access stocheaza7 locat-iaimaginii s-i o încarca7 lafiecare deschidere aformularului

Picture Size Mode Determina7 modul de afis-area imaginii

Clip

Stretch

Zoom

Afis-eaza7 imaginea cudimensiunile ei actuale

Modifica7 dimensiunileimaginii (neproport-ional) casa7 încapa7 în formular

Actualizeaza7 dimensiunileimaginii ca sa7 încapa7 înformular proport-ional; poaterezulta o imagine care nuocupta7 întreaga lungime saula7 t-ime din formular

Page 150: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

154 Introducere în Microsoft Access: Formulare - cursul 7

Picture Alignemet Determina7 alinierea imaginii

Top Left

Top Right

Center

Bottom Left

Bottom Right

Form Center

Imaginea se afis-eaza7 încolt-ul stânga-sus aformularului, raportului saua controlului de tip imagine

Imaginea se afis-eaza7 încolt-ul dreapta-sus aformularului, raportului saua controlului de tip imagine

Imaginea este centrata7 în formular, raport sau încontrolul de tip imagine(implicit)

Imaginea se afis-eaza7 încolt-ul stânga-jos aformularului, raportului saua controlului de tip imagine

Imaginea se afis-eaza7 încolt-ul dreapta-jos aformularului, raportului saua controlului de tip imagine

Imaginea formularului estecentrata7 orizontal, în raportcu la7 t-imea s-i vertical, înraport cu îna7 l t-imeaformularului

Picture Tiling Se foloses-te pentru afis-areaala7 turata7 a unor imagini mici(Yes/No)

Grid X Numa7rul de puncte pe inchla afis-area grilei pe X

Grid Y Numa7rul de puncte pe inchla afis-area grilei pe Y

Page 151: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

155 Introducere în Microsoft Access: Formulare - cursul 7

Layout for Print Determina7 daca7 formularulfoloses-te caractere de ecransau de imprimanta7

Yes

No

Caractere de imprimanta7

Caractere de ecran

Subdatasheet Height Determina7 îna7 l t-imea subfoiide date expandate

Subdatasheet Expanded Determina7 starea salvata7 atuturor foilor de datedintr-un table sau interogare

Yes - Starea salvata7 asubfoilor de date esteexpandara7

No - Starea salvata7 asubfoilor de date este închisa7

Orientation Determina7 orientarea vederii

Right to Left

Let to Right

Afis-area s-i funct-ionarea seface de la dreapta la stânga

Afis-area s-i funct-ionarea seface de la stânga la dreapta

Movable Determina7 daca7 formularulpoate fi mutat (Yes/No)

Record Source Determina7 locul în care seafla7 datele afis-ate deformular sau unde vor fistocate noile date. Poate fiun formular sau o interogare

Filter Se foloses-te pentru aspecifica afis-area uneisubmult-imi de înregistra7ricând se aplica7 un filtruformularului

Order By Permite specificarea unuicâmp pentru ordonareadatelor afis-are

Allow Filters Permite ca utilizatorul sa7poata7 afis-a date filtrate(Yes/No)

Page 152: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

156 Introducere în Microsoft Access: Formulare - cursul 7

Allow Edits Permite sau opres-te editareadatelor facând formularulread-only pentruînregistra7rile deja salvate(Yes/No)

Allow Deletions Permite sau opres-te s-tergereînregistra7rilor (Yes/No)

Allow Additions Permite sau opres-teada7ugarea de noi înregistra7ri(Yes/No)

Data Entry Se foloses-te pentru afis-areaînregista7rilor salvate

Yes/No Numai înregistra7rile noi suntafis-ate/Toate înregistra7rilesunt afis-ate

Recordset Type Permite actualizareaformularelor multi-tabel

Dynaset

Dynaset (Inconsistent)

Snapshot

Numai câmpurile tabeluluiimplicit pot fi ediate

Câmpurile tuturor tabelelpot fi editate

Nu se poate edita nici uncâmp

Record Locks Specifica7 metoda de blocarea înregistra7rilor în regimmulti-utilizator

No Locks

All Records

Edited Record

Înregistrarea se blocheaza7numai în timpul salva7rii

Toate înregistra7rileformularului sunt blocate întimpul folosirii lui

Blocheaza7 numaiînregistrarea în curs deeditare

Page 153: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

157 Introducere în Microsoft Access: Formulare - cursul 7

Modal Se foloses-te atunci cândformularul trebuie închisînainte de a face operat-ii cualte formulare; inactiveaza7celelalte ferestre; pentruvaloarea Yes, Modalinactiveaza7 meniurile s-ibarele cu instrumentegenerând o fereastra7 dedialog (Yes/No)

Cycle Determina7 efectul lui Tab înultimul câmp al înregistra7rii

All Records

Current Record

Current Page

Tab permite trecerea laurma7 toarea întegistrare

Tab face revenirea peprimul câmp al înregistra7riicurente

Tab face deplasarea de peultimul câmp al înregistra7riipe primul câmp al paginiicurente

Menu Bar Se foloses-te pentruspecificarea unui meniualternativ

Toolbar Se foloses-te pentruspecificarea unei bare cuinstrumente. Se poate crea obara7 cu instrumente prinselectarea opt-iuniiCustomize din comandaToolbar a meniului View.

Shortcut Menu Permite activareascurta7 turilor de meniu

Shortcut Menu Bar Permite specificarea unuimeniu cu scurta7 turialternativ

Help File Numele fis-ierului de ajutor(help), compilat, atribuitformularului

Page 154: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

158 Introducere în Microsoft Access: Formulare - cursul 7

Help Context Id ID-ul punctului de intrarecontextual din fis-ierul deajutor

Tag Extra informat-ii despreformular

Allow Design Changes Determina7 când se pot facemodifica7ri de proiectare

Design View

All Views

Modifica7ri se pot face doarîn modul proiectare

Modifica7ri se pot face întoate modurile vizualizare

Page 155: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

159 Introducere în Microsoft Access: Crearea controalelor - cursul 8

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

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

! cum se defineÕte o masc| de intrare (Input Mask);

! cum se modific| ordinea Tab-urilor;

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

Obiectivele cursului 8

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 156: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

160 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Crearea unuiformular nou

Crearea cutieicombinate (ComboBox)

Crearea unei cutii combinate (Combo Box) folosind cutiacu instrumente (Toolbox)Crearea controalelor este mult simplificat| prin utilizarea cutiei cu instrumente. Pentru ailustra principiul vom crea un tip de control relativ complex, numit cutie combinat|. Acest tipde control permite, fie s| se introduc| o valoare de la tastatur|, fie s| se efectueze clic pe os|geat| în jos, care va duce la desf|Õurarea unei liste de valori predefinite din care se poateselecta valoarea dorit|. Denumirea de cutie combinat| se datoreÕte faptului c| acest controlunific| comportamentul a dou| controale distincte: controlul cutie de text (Text Box) Õicontrolul cutie de list| (List Box).

Crearea unui formular cu o cutie combinat|În exemplul care urmeaz|, se va folosi baza de date Northwind în care se va crea un formularnou pentru ilustrarea procedurii de creare a controalelor.

• deschideÛi baza de date Northwind; • clic pe butonul Forms; • clic pe butonul New; • asiguraÛi-v| c| din list| este selectat| vizualizarea în mod

proiectare (Design View); • clic pe butonul OK;

Pe ecran va ap|rea un formular gol de forma:

Dac| cutia cu instrumente (Toolbox) nu este afiÕat| automat, efectuaÛi clic pictograma din bara de instrumente (Toolbar).

• clic pe pictograma cutiei combinate (Combo Box) dincutia cu instrumente; • poziÛionaÛi cursorul în zona de centru a formularului;

Page 157: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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ângajos. VeÛi defini astfel un dreptunghi care reprezint| dimensiunea controlului pe suprafaÛaformularului; • eliberaÛi butonul stâng al mouse-ului Õi urm|toarea fereastr| de dialog va fi afiÕat|:

• clic pe butonul Next pentru a continua. OpÛiunea selectat| mai sus (I want the combobox to look up the values in a table or query.) va permite înc|rcarea listei de valoripredefinite ale cutiei dintr-un tabel sau o interogare; • urm|toarea fereastr| de dialog afiÕat| permite definirea sursei pentru datele pe carecutia le va afiÕa;

• pentru acest exemplu, asiguraÛi-v| c| tabelul Categories este selectat înainte deap|sarea butonului Next; • fereastra de dialog care va fi afiÕat| permite selectarea unui câmp care va fi sursa

Page 158: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

162 Introducere în Microsoft Access: Crearea controalelor - cursul 8

datelor ce vor fi afiÕate în cutia combinat|;

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

• în acest caz, cutia trebuie s| fie suficient de lat| ca s| asigure afiÕarea complet| atuturor valorilor din list|. Dac| aceast| condiÛie nu este îndeplinit|, poziÛionaÛi cursorul pemarginea din dreapta a coloanei CategoryName Õi trageÛi marginea spre dreapta pân| ce veÛi obÛine l|Ûimea dorit|;

Page 159: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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| dincutia combinat| pentru ca ulterior s| fie refolosit|. Pentru exemplul nostru clic pe Next; • ultima fereastr| de dialog permite definirea etichetei asociate cutiei combinate;

• pentru acest exemplu, pe locul lui CategoryName introduceÛi textul NumeleCategoriei; • clic pe butonul Finish pentru p|r|sirea Generatorului cu generarea controlului cutiecombinat|.

Formularul complet va ar|ta vizualizat în mod proiectare, astfel:

Page 160: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 .

Pentru a folosi nou creata cutie combinat| clic pe s|geata în jos, iar lista valorilor predefiniteva fi afiÕat| sub forma:

• închideÛi formularul Õi salvaÛi-l sub numele de F1-TEST.

Page 161: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

165 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Modificarea propriet|Ûilor unui formularUn formular are mai multe secÛiuni, atât formularul, secÛiunile, cât Õi controalele care suntpoziÛionate în diferite secÛiuni au propriet|Ûi individuale. Unele propriet|Ûi sunt predefinite,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 oparte din propriet|Ûile unui formular, pentru a înv|Ûa mai multe despre acestea folosiÛisistemul de ajutor interactiv (on-line help). DeschideÛi orice formular, apoi vizualizaÛiformularul în mod proiectare. Pentru exemplul care urmeaz|, din baza de date Northwind,voi folosi formularul Employees.

Pe ecran va ap|rea fereastra propriet|Ûilor

sub forma listei ala7 turate.

Page 162: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

166 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Pentru a modificaproprieta7t-ile unuiformular

• plasaÛi cursorul de mouse oriunde în zona gri din afara unuiformular sau deasupra liniarului (Ruler), dac| acesta este vizualizat; • clic dublu pe butonul stâng al mouse-ului sau • clic pe butonul din dreapta o singur| dat|, apoi selectaÛiProperties din list|;

• modificaÛi proprietatea dorit| f|când clic în regiunea din dreapta, pe linia propriet|Ûiide modificat, unde veÛi introduce noua valoare dorit|.

Crearea unui câmp calculatLa proiectarea tabelelor am precizat c| este de evitat crearea unor câmpuri care stocheaz| datederivate sau calculate din alte date. De obicei, metoda eficient| este calcularea valorii doritepe 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 introducecorect, de exemplu din motive sintactice. Constructorul de Expresii poate fi folosit atât încazul 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,Quantity Õi Discount se va calcula un câmp nou, numit Total = [Unit Price] *[Quantity] * [Discount]. Folosind Generatorul de Formulare (Form Wizard) se vacrea un formular nou pe baza tabelului Order Details care va conÛine urm|toarele câmpuri:ProductID, Unit Price, Quantity Õi Discount.

Dup| ap|sarea lui Next, la forma formularului se va selecta Tabular, iar numele sub care sesalveaz| va fi FOrder Details. Dup| ap|sarea lui Finish, formularul va fi afiÕat pe ecranastfel:

Page 163: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

167 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Se trece la vizualizarea în mod proiectare (View ± Design View), când formularul se vaafiÕa astfel:

Din bara cu instrumente (Toolbox) selectaÛi controlul Text Box apoi poziÛionaÛi cursorul demouse undeva în dreapta formularului, în afara spaÛiului lui, pe o linie cu colÛul din dreaptasus 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

Page 164: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

168 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Crearea unui câmpcalculat folosindConstructorul deExpresii

Unbound. El are asociat| Õi o etichet|, aceasta nefiind necesar| va fi Õtears| (în figuraanterioar|, eticheta este pus| peste controlul Quantity; este suficient s| ne poziÛion|m cumouse-ul pe ea, clic pe butonul stâng apoi ap|saÛi tasta Delete pentru Õtergerea ei). AfiÕ|mlista propriet|Ûilor noului control Õi în locul lui Text10, scriem Total. Prin aceastaproprietatea 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.

Pe ecran se va afiÕa o fereastr| de forma:

• din prima list| selectaÛi obiectul care conÛine controalele saucâmpurile care vor participa în expresie. Pentru exemplul actual,Access-ul selecteaz| automat formularul curent - FOrder Details -

Page 165: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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:

• 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 luadintr-un tabel sau interogare ci se va calcula pe baza expresie anterioare. Pentru ca formularuls| afiÕeze o etichet| deasupra coloanei controlului Total, din secÛiunea Form Header, copiaÛicontrolul Detail Õi modificaÛi proprietatea Caption a noului control etichet| la Total. ApoialiniaÛi-l pe vertical| la controlul cutie de text Total Õi pe orizontal| la controalele etichet| dinsecÛiunea Form Header. Vizualizat în mod formular, formularul FOrder Details va deveni:

Crearea unui formular cu subformular (Subform)În exemplul care urmeaz| vom folosi baza de date Northwind Õi vom crea un formular noucare va conÛine un control de tipul subformular.

Page 166: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

170 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Creareaformularului nou

• deschideÛi baza de date Northwind; • clic pe butonul Form; • 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:

• clic pe butonul OK; • ad|ugaÛi câmpurile conform figurii de mai jos:

• clic pe butonul Next pentru a continua; • în continuare folosiÛi forma implicit| - Columnar - de pe pagina urm|toare aGeneratorului;

Page 167: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

171 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Crearea unuisubformular

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

Noul formular va fi afiÕat sub forma prezentat| în figura urm|toare:

• comutaÛi vizualizarea în mod proiectare (Design View) princlic pe pictograma View (de pe Toolbar). Formularul va fi afiÕat dup|cum urmeaz|:

• 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 demargine pentru a face fereastra mai mare; • mutaÛi cursorul de mouse pe marginea de sus a barei Form Footer Õi trageÛi bara în jospentru a face spaÛiu suficient pentru subformular. Ecranul va avea o form| asem|n|toare cucea din figura care urmeaz|:

Page 168: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

172 Introducere în Microsoft Access: Crearea controalelor - cursul 8

• acum suntem gata pentru inserarea subformularului. Dac| cutia cu instrumente nu estedeja afiÕat|, clic pe pictograma Toolbox pentru afiÕare; • clic pe pictograma Subform/Subreport din cutia cu instrumente; • folosiÛi tehnica tragerii pentru a crea un dreptunghi pe suprafaÛa formularului pe loculunde doriÛi s| fie poziÛionat subformularul; • în momentul în care eliberaÛi butonul mouse-ului, Generatorul de Subformulare îÕi va

Page 169: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 casubformular. 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| cumurmeaz|:

• î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 OrdersSubform Õi clic pe butonul Next pentru a trece la urm|toarea pagin| a Generatorului; • formularul va fi vizualizat în mod proiectare dup| cum urmeaz|:

• clic pe pictograma View de pe bara de instrumente standard Õi selectaÛi Form View.

Page 170: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

174 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Formularul împreun| cu subformularul vor fi afiÕate astfel:

Subformularele sunt folosite pentru afis-area într-o singura7 fereastra7 a cont-inutului tabeleloraflate în relat-ie 1º M. Între tabele Products s-i Order Details exista7 o relat-ie 1º M prinintermediul câmpului ProductID. Tabelul în care se afla7 cheia primara7 va fi sursa de datepentru formular, iar tabelul în care se afla7 cheia stra7 ina7 va fi sursa de date pentru subformular.Cînd se navigheaza7 printre înregistra7rile formularului, înregistra7rile afis-ate în subformular semodifica7 continuu fiind afis-ate numai acelea care corespund valorilor curente din cîmpul delega7 tura7 . Mai sus, pentru prima înregistrare din formular ProducID ia valoarea 1, însubformular vor fi afis-ate numai acele înregistra7ri care au în ProducID s-i ele egale cu 1.

Implementarea regulilor de integritate specifice bazei dedate 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| multeposibilit|Ûi pentru verificarea corectitudinii datelor introduse. De exemplu, dac| doriÛi s| citiÛiun num|r, puteÛi face imposibil| introducerea unor caractere str|ine. Când câmpulcorespunz|tor din tabel este o dat|, puteÛi asigura neacceptarea unor date invalide, de exemplu31/11/00 (noiembrie are 30 de zile). Propriet|Ûile controalelor care permit aceste verific|risunt:

Page 171: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

175 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Setarea lui DefaultValue

Setarea luiValidation Rule

Setarea luiValidation Text

Setarea lui InputMask

Nume SemnificaÛie

Default Value Aceast| valoare este automat inserat| în fiecare înregistrare nou|.Utilizatorul poate introduce pe locul acesteia o alt| valoare dac| estecazul.

Validation Rule O expresie care limiteaz| domeniul de valori care poate fi introdus.De exemplu, în cazul unui Salar poate fi >0 and < 1000000. Oricevaloare în afara acestui domeniu nu va fi acceptat|.

Validation Text Un mesaj care va fi afiÕat dac| regula de validare este înc|lcat|.

Aceste propriet|Ûi pot fi setate Õi la momentul proiect|rii tabelului. De asemenea, este posibilca regulile de validare s| fie diferite decât cele din controalele formularului.

• vizualizaÛi lista propriet|Ûilor (Property Sheet) controlului; • selectaÛi de sus butonul Data; • clic pe Default Value - Valoare Implicit|; • tastaÛi o expresie sau

• clic pe butonul Constructorului de Expresii (Expression Builder).

• vizualizaÛi lista propriet|Ûilor (Property Sheet) controlului; • 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; • selectaÛi de sus butonul Data; • clic pe Validation Text - Text de Validare Õi introduceÛimesajul dorit.

• vizualizaÛi lista propriet|Ûilor (Property Sheet) controlului; • 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| sautext.

Modificarea ordinii Tab-urilorOrdinea 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|satuna din tastele Tab sau Enter. La crearea unui formular, Access-ul stocheaz| ordineaTab-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.

Page 172: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

176 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Modificarea ordiniiTab-urilor

Ce este un macro?

Ce este procedurade eveniment?

• deschideÛi formularul în mod proiectare; • selectaÛi Tab Order din meniul View; • veÛi vedea o fereastr| de dialog care va conÛine numelecontroalelor de pe formular în ordinea Tab;

• 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 decâ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Ûiunipoate fi de dou| feluri: macro sau procedur| de eveniment (Event Procedure).

Macro-ul este o secvent-a de acÛiuni grupate împreuna7 prin înregistare(recorded) într-o secvenÛ| particular|, pentru a fi lansate în execuÛie laorice moment ulterior înregistr|rii.

Procedura de eveniment este un subprogram de tip subrutin| scris înlimbajul de programare Visual Basic, care realizeaz| o operaÛieparticular|, de exemplu g|sirea înregistr|rii urm|toare.

Page 173: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 culitera T, clic pe butonul de comand| T, pentru a vedea toate numerele de telefon, clic pebutonul 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 dateNorthwind: • deschideÛi baza de date Northwind, clic pe butonul Forms, apoi selectaÛi Õi deschideÛiformularul Categories. Formularul este prezentat mai jos.

• comutaÛi în mod proiectare (Design View) prin clic pe pictograma View din bara deinstrumente standard Õi selectaÛi Design View; • dac| cutia cu instrumente nu este afiÕat|, afiÕaÛi cutia cu instrumete Toolbox prin clicpe 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 subeticheta Description a formularului; • când eliberaÛi butonul mouse-ului, veÛi vedea prima fereastr| din GeneratorulButoanelor de Comand| (Command Button Wizard); • exist| un num|r de categorii (Categories), fiecare categorie având un num|rdisponibil de acÛiuni (Actions). Fiecare acÛiune are definit| câte o pictogram| care poate fifolosit| pentru butonul nou creat; • pentru cazul exemplului nostru selectaÛi categoria Form Operations - OperaÛii cuFormulare; • din categoria Form Operations, selectaÛi acÛiunea Close Form - Închide Formular.Pagina din Generator este afiÕat| în figura care urmeaz|;

Page 174: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

178 Introducere în Microsoft Access: Crearea controalelor - cursul 8

• clic pe butonul Next pentru a continua; • urm|toarea pagin| a Generatorului va fi afiÕat|. Ea permite ad|ugarea unui text sau aunei pictograme pe butonul de comand|;

• acceptaÛi opÛiunea implicit| Õi faceÛi clic pe Next; • ultima pagin| a formularului va fi afiÕat|. Aceasta permite definirea numelui butonuluide comand|. În cazul nostru acest nume va fi CIesire;

Page 175: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

179 Introducere în Microsoft Access: Crearea controalelor - cursul 8

• 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 dinmeniu, apoi selectaÛi Form View;

• clic pe buton Õi formularul va fi închis. Se va cere confirmarea salv|rii modific|riloraduse formularului. Selectarea lui Yes va duce la ad|ugarea permanent| a butonului decomand| în formular.

Întreruperi de pagin| (Page Break)Dac| un formular se întinde pe o suprafaÛ| mai mare decât în|lÛimea ecranului, se poateutiliza î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

Page 176: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

180 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Ada7ugarea uneiîntreruperi depagina7

când aceasta este vizualizat| în mod formular. Pentru a folosi întreruperile de pagin| trebuies| setaÛi proprietatea DefaultView a formularului la valoarea Single Form.

• clic pe instrumentul Page Break din cutia cu instrumente(Toolbox); • clic în formular pe poziÛia în care doriÛi s| puneÛi întrerupereade 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 controaleExemplul urm|tor are ca suport modelul relaÛional obt-inut ca urmare a normaliz|rii prezentateîn cursul 3.

Tabele Õi relaÛiiNumele tabelelor Õi câmpurilor care vor fi create se prezint| în continuare:

Nume tabel Nume câmp Tip/Proprieta7Ûi

TContacte IDContact Data Type AutoNumberPrimaryKey

Nume Contact Data Type: TextField Size: 100

TContacte1 IDContact Data Type: NumberField Size: Long Integer

IDInfoContact Data Type: NumberField Size: Long Integer

Info Contact Data Type: TextField Size: 255

TTipContact IDTipContact Data Type: AutoNumberPrimaryKey

Tip Contact Data Type: Text

Fereastra relaÛiilor este:

Pentru tabelele TContacte Õi TContacte1 relaÛia este definit| astfel:

Page 177: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

181 Introducere în Microsoft Access: Crearea controalelor - cursul 8

Pentru tabelele TTipContact Õi TContacte1 relaÛia este definit| astfel:

ObservaÛi c| opÛiunea Cascade Delete Related Record este invalidat| pentru c| nu dorim s|se Õterg| înregistr|rile asociate din TContacte1, dac| cumva se Õterge un tip de contact dinTTipContact.

FormularePrimul formular care va fi creat va aveaca surs| de date tabelul TTipContact Õi seva salva sub numele de FTTipContact.

Etapele de parcurs sunt: • din fereastra bazei de dateselectaÛi butonul Forms, apoi clic peNew; • în ferestra New Form faceÛiselecÛiile din figura al|turat|; • noul formular va fi afiÕat, iar încontinuare introduceÛi datele conformfigurii care urmeaz|: • închideÛi formularul al|turat, iar

Page 178: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 thedesign of form 'Form1') selectaÛibutonul Yes, apoi în noua fereastr|, laForm Name introduceÛi FTTipContactÕi faceÛi clic pe pe OK. Observat-i ca7 încolt-ul din stânga sus este afis-at implicitnumele sursei de date. Modificareaproprieta7 t-ii Caption a formularuluipermite afis-area unui alt text în loculcelui implicit.

În continuare vom crea pe bazatabelului TContacte un formular nou cunumele FTContacte. Figura ala7 turata7prezint| selecÛiile care se fac pentruaceasta.

În pagina urm|toare, ambele câmpurivor fi selecate pentru afis-are înformular. În varianta finala7 , câmpulNume Contact va fi afiÕat înformular, iar câmpul IDContact vafi fa7cut invizibil prin setarea proprieta7 t-ii Visible la No. În ultimapagin| a generatorului, acolo unde secere numele formularului, specificaÛinumele 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 ainsera un control de tipul Subform care va avea ca surs| de date tabelul cu numeleTContacte1. Access va crea un subformular care va avea ca surs| de date interogarea de maisus. Atunci când Access va cere numele sub care s| salveze interogarea acceptaÛi numeleimplicit de TContacte1 subform. RealizaÛi oriunde pe suprafaÛa subformularului clic dublu,Access va deschide automat, în modproiectare, subformularul salvat. VeÛiavea trei controale Text Box pesuprafaÛa acestuia cu numele:IDContact, IDInfoContact Õi InfoContact. SelectaÛi controlul Text Boxcu numele IDInfoContact, apoi faceÛiclic pe butonul din drepta. Din meniulChange To selectaÛi Combo Box.ObservaÛi c| Text Box s-a transformatîntr-un control Combo Box. VizualizaÛilista propriet|Ûilor controluluiIDInfoContact. Acesta poate stoca ovaloare numeric| în tabelul TContacte1care are întotdeauna un corespondent în tabelul TTipContact. Pentru noi ar fi mai simplu ca pe

Page 179: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 controlulIDInfoContact valoarea numeric| corespunz|toare unui anumit tip de contact selectat dinlista afiÕat| în Combo Box. Tabelul care urmeaz| prezint| lista propriet|Ûilor Õi semnificaÛialor necesare pentru a face cele descrise mai sus.

Nume proprietate Valoare SemnificaÛie

Row Source TTipContact Sursa de date pentru valorile pe care controlulCombo Box le va afiÕa în list|

Column Count 2 Num|rul de coloane care vor fi afiÕate încontrol

Column Widths 0";3" L|Ûimea celor dou| coloane. L|Ûimea pentruprima coloan| este 0, adic| ea nu se vede.

IntroduceÛi numele de contact Vasile Aioanei Õi informaÛiile de contact conform figurii careurmeaz|. Observat-i ca7 , în figura7 ,controlul IDContact nu este vizibil în subformular întrucât

el a fost ascuns (se realizeaza7 clic pe numele câmpului pentru a selecta coloana, apoi clic pebutonul din dreapta, din lista7 selectat-i Hide Columns). Totul ar fi în ordine dac| nu va finecesar 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 unbuton de comand| care dac| este ap|sat va deschide primul formular (FTTipContact) creatpentru a permite introducerea unui nou tip de contact. Ôi în acest caz putem fi asistaÛi de ungenerator, 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| începutulacestei 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

Page 180: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

184 Introducere în Microsoft Access: Crearea controalelor - cursul 8

urmeaz|.

Aici puteÛi stabili dac| butonul va avea o imagine sau va conÛine un text ce specific| acÛiunealui. Pentru exemplul nostru am ales varianta cu text, iar textul afiÕat de buton este: &Adaugatip contact. La ap|sarea lui Next va fi afiÕat| ultima pagin| a generatorului, aici vomintroduce textul CAdauga pentru numele Command Button-ului, apoi vom ap|sa Finish.

Ca exerciÛiu, vom mai ad|uga un buton de comand| care corespunde acÛiunii de închidere aformularului curent (Close Form). În final formularul, dup| un pic de cosmetic|, va ar|ta cas-i în figura anterioara7 .

CunoaÕteÛi deja c| un formular poate avea în spatele lui linii de program. ObservaÛi c| încazul când introduceÛi tipuri noi de contacte prin butonul Adauga tip contact, acestea nu vor

Page 181: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 deprogram în formularul FTipContacte. DeschideÛi formularul în mod proiectare, afiÕaÛi listapropriet|Û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 NextForms!FTContacte![TContacte1 subform].Form!IDInfoContact.Requery

ÎnchideÛi fereastra de cod cu liniile de mai sus Õi acceptat-i salvarea lor. Acestea spun luiAccess s| reîmprosp|teze informaÛiile afiÕate în controlul IDInfoContact asubformularului [TContacte1 subform] din formularul FTContacte în momentulcâ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.

Page 182: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

186 Introducere în Microsoft Access: Rapoarte - cursul 9

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

! cum se creeaz| un raport organizat pe coloane folosind AutoReport;

! cum se creeaz| rapoarte folosind Generatorul de Rapoarte (Report

Wizard);

! cum se adaug| nivelele de grupare (Grouping Levels) într-un raport;

! cum se sorteaz| înregistr|rile unui raport;

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

Obiectivele cursului 9

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 183: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 anumedorim de la aceasta, de exemplu, cum s| fie afiÕate rezultatele. InformaÛiile pot fi afiÕate peecran sau pot fi tip|rite la imprimant|. Pe ecran se vor afiÕa de obicei foile de date Õiformularele, conÛinutul acestora fiind r|spunsul la o interogare sau o comand|. Formularelepot fi Õi ele tip|rite, dar pentru majoritatea cazurilor, tip|rirea rapoartelor asigur| metodaoptim| de prezentare a informaÛiilor. Aceasta este adev|rat mai ales în cazul informaÛiilor carese prezint| sub forma mai multor înregistr|ri Õi în special pentru cazul când se doresc totalecalculate pe baza datelor din înregistr|ri particulare.

Exist| o multitudine de cazuri pentru folosirea rapoartelor, câteva mai comune ar fi: totaleperiodice 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 suntopt-ionale, altele obligatorii. Cîteva dintre tipurile de sect-iuni mai folosite sunt:

• antetul raportului (report header): apare o singura7 data7 , la începutulraportului. Cont-ine, de obicei, elemente constante, valori de câmpuri care se vor afis-anumai pe prima pagina7 a raportului. • 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 decâ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 s-i este cel mai des formata7 dincâmpuri s-i funct-ii. • sect-iunea de grupuri (group header & footer): cînd mai multe înregistra7ri auaceeas-i valoare într-un câmp se poate realiza gruparea lor pe baza cont-inutuluicâmpului. Gruparea se poate realiza numai pentru înregistra7ri consecutive. Din acestmotiv înregistra7rile trebuie sa7 fie sortate pe baza valorilor cîmpurilor folosite lagrupare (sortarea s-i gruparea din rapoarte nu pot fi separata7 în Access). Fiecare grupare o sect-iunile de antet (header) s-i sfârs-it (footer). Antetul este folosit folosit pentruafis-area valorilor pentru care se face gruparea, iar sfârs-itul este folosit pentru afis-areaunor concluzii specifice respectivului grup de înregistra7ri. • sect-iunea pagina7 (page): fiecare pagina7 scoasa7 la imprimanta7 are un antet s-i unsfârs-it. De exemplu, în sfîrs-itul de pagina se poate afis-a numa7rul 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 caregenereaz| un raport din câmpurile unui tabel sau a unei interog|ri la simpla ap|sare a unuibuton. Dintre variantele mai complexe sunt rapoartele de forma unei coloane (SingleColumn), 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 totalelocale 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 dateNorthwind. Le puteÛi vizualiza în mod previzualizare Õi proiectare pentru a v| forma o idee

Page 184: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

188 Introducere în Microsoft Access: Rapoarte - cursul 9

general| despre modul în care sunt construite.

Deschiderea Õi vizualizarea unui raport existent • deschideÛi baza de date Northwind Õi clic pe butonul Reports, dup| cum se vede înfigura care urmeaz|:

• clic dublu pe raporul care doriÛi s| fie vizualizat, pentru exemplul nostru am selectatraportul Catalog;

Page 185: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

189 Introducere în Microsoft Access: Rapoarte - cursul 9

Pentru deplasareîn paginavizualizata7

Pentruvizualizareaîntregii pagini

Pentru deplasareape o pagina noua7

Pentru a modificamarginile paginii

• folosiÛi barele de defilare (scroll bars) din dreapta Õi partea dejos a ferestrei pentru a v| poziÛiona pe diferite porÛiuni ale paginii.

• poziÛionaÛi cursorul de mouse oriunde pe suprafaÛa raportului.Acesta va lua forma unei lupe; • clic pe butonul stâng al mouse-ului. AfiÕarea raportului se vamodifica aÕa încât toat| pagina s| încap| în ferestra de vizualizare araportului;

• clic din nou pe butonul stâng pentru reafiÕarea raportului în forma iniÛial| când numaio porÛiune este vizualizat| din raport. PoziÛia cursorului de mouse determin| zona din pagin|care va fi vizualizat|.

• folosiÛi butoanele de navigare (navigation buttons) din colÛulstânga-jos al raportului pentru vizualizarea altor pagini ale raportului:

; • 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|; • 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 aorient|rii acesteia. Orientarea portret (Portrait) este cea normal|, dup| cum Õi numelesugereaz|, un format A4 apare cu latura mai lung| pe vertical|. Varianta alternativ| deorientare peisaj (Landscape) are latura mai lung| pe orizontal|. Odat| ce orientarea paginii afost fixat|, aceasta va fi salvat| în raport. Dup| aceast| setare raportul poate fi tip|rit laimprimant| sau poate fi închis Õi tip|rit ulterior, f|r| ca setarea s| se piard|.

• clic pe meniul File ÕiselectaÛi Page Setup. • selectaÛi butonulMargins;

• fixaÛi marginile dorite modificând valorilenumerice din Top (sus), Bottom (jos), Left(stânga) Õi Right (dreapta) Õi apoi clic pe butonulOK.

Page 186: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

190 Introducere în Microsoft Access: Rapoarte - cursul 9

Setarea opt-iunilorde tipa7rire apaginilor

Setarea opt-iunilorde tipa7rire pecoloane

Crearea unuiraport de tipcoloana7 cuAutoWizard

• clic pe meniul File ÕiselectaÛi Page Setup; • selectaÛi butonulPage; • fixaÛi opÛiunile dorite

apoi clic pe OK.

• clic pe meniul File Õi selectaÛi Page Setup; • selectaÛi butonul Columns; • modificaÛi opÛiunile Number of Colums (num|rul coloanelor),Row Spacing (spaÛierea dintre rânduri) etc. apoi clic pe OK. Pentruactivarea 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 butonulReports; • clic pe butonul New;

• selectaÛi tabelul sau interogarea care va fi sursa de obiecte Õi de date. Pentru exemplulprezentat 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.

Page 187: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

191 Introducere în Microsoft Access: Rapoarte - cursul 9

Crearea unuiraport de tiptabelar cuAutoWizard

• deschideÛi baza de date Northwind Õi efectuaÛi clic pe butonulReports; • clic pe butonul New. • selectaÛi tabelul sau interogarea care va fi sursa de obiecte Õi dedate. Pentru exemplul prezentat am selectat tabelul Orders; • selectaÛi AutoReport: Tabular;

• clic pe butonul OK Õi raportul sub form| de tabel va fi generat Õi afiÕat pe ecran.

Page 188: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

192 Introducere în Microsoft Access: Rapoarte - cursul 9

Crearea unuiraport folosindGeneratorul deRapoarte

Crearea unui Raport folosind Generatorul de Rapoarte(Report Wizard)

• deschideÛi baza de date Northwind; • clic pe butonul Reports din fereastra bazei de date; • clic pe butonul New Õi se va afiÕa fereastra de dialog NewReport;

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

Page 189: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

193 Introducere în Microsoft Access: Rapoarte - cursul 9

Selectareacâmpurilor carevor fi incluse înraport

Adaugareanivelelor degrupare (groupinglevels)

• clic pe câmpul care doriÛi s| fie inclus în raport, apoi clic pes|geata la dreapta pentru ad|ugarea câmpului în secÛiunea SelectedFields a ferestrei de dialog; • repetaÛi procedura de mai sus pentru toate câmpurile care doriÛis| apar| în raport, în figura de mai sus am inclus câmpurile,CompanyName, ContactName, Address Õi City.

• clic pe butonul Next pentru a continua;

• nivelele de grupare vor fi discutate mai târziu în cadrul acestui

Page 190: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

194 Introducere în Microsoft Access: Rapoarte - cursul 9

Sortareaînregistrarilor unuiraport

Determinareaformei de afis-are araportului

capitol, pentru moment faceÛi clic pe Next pentru a trece de la pagina afiÕat| mai sus la cea deselectare a câmpurilor de sortare;

• pagina care urmeaz| permite selectarea criteriilor de sortareacresc|toare sau descresc|toare a înregistr|rilor din rapoarte; • pentru exemplul prezentat, am selectat sortarea cresc|toare,

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),tabel (Tabular) Õi aliniat (Justified);

Page 191: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

195 Introducere în Microsoft Access: Rapoarte - cursul 9

Pentru definireastilului raport

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

• pagina care urmeaz| permite selecÛia unui stil de afiÕarea acâmpurilor din raport, pentru exemplul prezentat selectaÛi Compact;

• dup| ce aÛi selectat stilul, clic pe butonul Next pentru a continua; • urm|toarea pagin| este Õi ultima ea permiÛând denumirea raportului;

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

Page 192: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

196 Introducere în Microsoft Access: Rapoarte - cursul 9

Crearea unei listede etichete

Generatorul de etichete (Label Wizard)Deseori bazele de date conÛin liste cu adresele firmelor Õi indivizilor care particip| în diferitetranzacÛii. Unul dintre rapoartele care pot fi create pe baza acestor date specifice suntetichetele cu adrese.

• deschideÛi baza de date Northwind; • din fereastra bazei de date selectaÛi butonul Reports; • clic pe butonul New Õi se va afiÕa fereastra de dialog NewReport;

• selectaÛi tabelul sau interograrea care va fi sursa de obiecte pentru raport;

Page 193: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

197 Introducere în Microsoft Access: Rapoarte - cursul 9

Definireadimensiunii s-i atipului etichetei

Definireainformat-iilor carevor fi incluse îneticheta7

• selectaÛi Label Wizard; • clic pe butonul OK pentru a continua;

• urm|toarea pagin| permite definirea dimensiunilor etichetelorÕi a hârtiei: de tip pagin| (Sheet feed) sau cu tractor (Continuous). Sepot modifica unit|Ûile de m|sur| folosite la afiÕarea dimensiuniloretichetei Õi din Customize se pot defini noi dimensiuni;

• dup| ce aÛi selectat opÛiunile dorite clic pe butonul Next pentru a continua; • pagina care urmeaz| permite definirea tipurilor de caractere:

• selectaÛi opÛiunile dorite Õi faceÛi clic pe butonul Next pentru a continua;

• urm|toarea pagin| permite definirea câmpurilor care vor fiincluse în etichet|;

Page 194: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

198 Introducere în Microsoft Access: Rapoarte - cursul 9

Sortareacâmpurilor dinetichete

• clic pe un câmp din Available fields, apoi pe s|geata la dreapta pentru ad|ugareacâmpului în etichet|; • repetaÛi procedura de câte ori este nevoie; • clic pe Next pentru a continua;

• aceast| pagin| permite sortarea etichetelor pe baza a unui câmpsau a mai multora;

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

Page 195: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

199 Introducere în Microsoft Access: Rapoarte - cursul 9

Crearea unuiraport cu grafic

• clic pe butonul Finish pentru generarea raportului Õi previzualizarea rezultatelor.

Generatorul de Grafice (Chart Wizard)Uneori este de dorit ca rapoartele s| conÛin| reprezent|ri grafice ale unor mulÛimi de datestocate în baza de date. Access-ul pune la dispoziÛia utilizatorului generatoare de grafice carepot fi inserate în rapoarte sau formulare.

• dechideÛi baza de date Northwind Õi din fereastra bazei de dateselectaÛi butonul Reports; • clic pe butonul New Õi ferestra de dialog New Report va fiafiÕat|;

• selectaÛi tabelul sau interogarea care va fi sursa de date a obiectelor care vor fireprezentate grafic. În exemplul urm|tor am selectat Sales by Year;

• clic pe butonul OK;

Page 196: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

200 Introducere în Microsoft Access: Rapoarte - cursul 9

Adaugarea decâmpuri graficului

• pe baza procedurii cunoscute deja, ad|ugaÛi toate câmpurile dinlista Available Fields: în Fields for Chart. Pentru c| este vorba detoate câmpurile acest efect se poate obÛine Õi printr-o singur| ap|sare abutonului ;

• 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 undeutilizatorul trebuie s| selecteze unul dintre tipuri;

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

Page 197: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

201 Introducere în Microsoft Access: Rapoarte - cursul 9

• puteÛi folosi tehnica de tragere (drag and drop) cu butoanele din dreapta pentrumodificarea 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 vaafiÕa o fereastr| de dialog de forma:

• 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 vafi Vânzari pe luni;

Page 198: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

202 Introducere în Microsoft Access: Rapoarte - cursul 9

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

Întrucât interogarea, Sales by Year, care este sursa de date a graficului are doi parametri detipul 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:

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 carevine cu Access 97 - în versiunile mai noi de Access, perioada pentru care se facereprezentarea, va trebui schimbat|):

Page 199: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

203 Introducere în Microsoft Access: Rapoarte - cursul 9

Nivele de grupare (Grouping Levels) în rapoarteCea mai simpl| metod| de grupare a informaÛiilor în rapoarte este folosirea Generatorului de

Rapoarte. Pentru prezentarea unor detalii este util ca înregistr|rile unui raport s| fie grupate pebaza valorilor stocate în unele câmpuri ale raportului. Pot fi definite cel mult 10 nivele degrupare într-un raport, dac| doriÛi este posibil ca datele s| Õi fie sortate în cadrul grupului.

Page 200: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

204 Introducere în Microsoft Access: Rapoarte - cursul 9

Definirea ordiniide sortare

Crearea unui antetde grup

Grupul permite tratarea unitar| a înregistr|rilor fiind posibil| efectuarea de operaÛii deînsumare, mediere sau num|rare a elementelor unui grup.

În Access, la nivelul rapoartelor, gruparea s-i sortarea nu pot fi despa7rt-ite. Sortarea ne permitesa7 vizualiza7m înregistra7rile într-o ordine diferita7 de cea de introducere a datelor. Des-i dateleafis-ate de raport ar putea fi sortate folosind o interogare, este mai avantajoasa7 sortarea directa7din raport. Daca7 , dintr-un oarecare motiv, interogarea ar trebui modificata7 , raportul vacontinua sa7 afis-eze datele în ordinea corecta7 . Ala7 turi de sortare, numai în rapoarte, apareposibilitatea grupa7rii înregistra7rilor pe baza valorilor comune din câmpuri. Gruparea permitecrearea 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 alraportului, folosind fereastra de dialog Sorting and Grouping. Ea se afis-eaza7 , în modulproiectare a raportului, selectând din meniul View pe Sorting and Grouping.

• afis-ati fereastra de dialog Sorting and Grouping; • clic în primul rând al coloanei cu numele Field/Expresssion,sa7geata în jos va fi afis-ata7 ; • clic pe sa7geata7 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-iIDInfoContact). Aceste nume exista7 , deci pot fi selecate, numai daca7 fac parte din sursade date a raportului În lipsa unei surse de date, lista pentru select-ia câmpurilor de sortare s-igrupare va fi vida7 ; • selectat-i din lista7 câmpul dorit; • pentru câmpul selectat, din coloana Sort Order, aleget-i Ascending, pentru sortareacresca7 toare sau Descending pentru sortarea descresca7 toare.

• Pentru crearea unui antet de grup care sa7 permita7 sorytarea s-igruparea 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; sa7geata în jos va fiafis-ata7 ; • clic pe sa7geata î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.

Page 201: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

205 Introducere în Microsoft Access: Rapoarte - cursul 9

Raport ini t-ial Raport cu antetul Nume Contact

În fereastra Group Properties sunt vizibile urma7 toarele proprieta7 t-i:Group Header: valoarea Yes creeaza7 antetul grupului, iar valoarea No s-terge antetul;Group Footer: valoarea Yes creeaza7 sfârs-itul grupului, iar valoarea No s-tergesfârs-itul;Group On: specifica7 modul de grupare a valorilor. Opt-iunile afis-ate depind de tipul dedata7 a câmpului folosit pentru grupare. La gruparea pe baza unei expresii sunt afis-atetoate opt-iunile, altfel:

- pentru tipuri de date Text: ! Each Value: gruparea se face pentru aceeas-i valoare în câmpsau în expresie; ! Prefix Character: gruparea se face pentru primele ncaractere ale câmpului.

- pentru tipuri de date Date/Time: ! Each Value: gruparea se face pentru aceeas-i valoare în câmpsau expresie; ! Year: gruparea se face pentru datele aceluias-i an calendaristic; ! Qtr: gruparea se face pentru pa7 trimile aceluias-i ancalendaristic; ! Month: gruparea se face pentru datele aceleias-i luni; ! Week: gruparea se face pentru datele din aceeas-i sa7pta7mî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âmpsau expresie; ! Interval: gruparea se face pentru valorile din intervalulspecificat; ! Group Interval: defines-te un interval valid pentru valorilecâmpului sau expresiei folosite la grupare; ! Keep Together: aceasta7 opt-iune face ca sect-iune de antet sa7nu fie afis-ata7 la sfârs-itul de pagina7 respectiv sect-iunea de sfârs-it sa7 nufie afis-ata7 la începutul unei pagini noi; ! Whole Group: tipa7res-te atetul s-i sfârs-itul de grup pe o singura7pagina7 ; ! With First Detail: opres-te tipa7rirea cont-inutului

Page 202: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

206 Introducere în Microsoft Access: Rapoarte - cursul 9

Operat-iielementare cusect-iuni

Crearea unuiraport fa7ra7Generator

antetului de grup daca7 sect-iunea detaliilor nu are înregistra7ri;- No: nu se face grupare.

Access permite modificarea ordinii de sortare s-i grupare fa7ra7 amodifica controalele individuale corespunza7 toare din atetele s-is-fârs-iturile asociate unei pagini. Pentru aceasta: • clic pe bara de select-ie a a câmpului sau a expresiei care dorit-isa7 fie muata7 în fereastra Sorting and Grouping;

• clic din nou pe bara7 s-i t-inând apa7sat 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, fa7ra7 afectareasorta7rii, se poate face din View, Page Header/Footer respectiv din View, ReportHeader/Footer.

Ascunderea unei sect-iuni are rolul pa7stra7rii grupa7rii datelor fa7ra7 afis-area informat-iilor legatede grupul în sine s-i se realizeaza7 astfel: • clic pe suprafat-a sect-iunii de ascuns; • vizualizat-i proprieta7 t-ile sect-iunii; • clic pe proprietatea Visible; • clic pe sa7geata în jos, din lista afis-ata7 selecat-i pe No.

Access permite ada7ugarea de întreruperi de pagina7 pe baza întreruperilor din grupuri, deasemenea, se pot insera întreruperi în cadrul sect-iunilor, cu except-ia celor de pagina7 . Deexemplu, daca7 dori t-i ca fiecare grup nou sa7 înceapa7 pe o pagina7 noua7 se va folosi proprietateaForce 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 tipa7ri la începutul unei noi paginipentru fiecare grup nou; ! After Section: sect-iunea urma7 toare se va tipa7ri la începutul unei noipagini pentru fiecare grup nou; ! Before & After: combina7 efectele celor doua7 valori anterioare.

Rapoarte f|r| Generator • deschideÛi baza de date Northwind Õi din fereastra bazei dedate selectaÛi butonul Reports; • clic pe butonul Next pentru afiÕarea ferestrei de dialog NewReport; • 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:

Page 203: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

207 Introducere în Microsoft Access: Rapoarte - cursul 9

Cutia cuinstrumente

Crearea unei cutiicu text legate

ComutaÛi pe vizualizarea în mod proiectare. AfiÕaÛi cutia cu instrumente (Toolbox) dinmeniul View.

Crearea de controaleSunt trei tipuri de controale care pot fi puse pe suprafaÛa unui formular: 1. Controale legate (Bound Controls): se folosesc pentru afiÕarea datelor din câmpuriletabelelor sau a interog|rilor. Valorile pot fi texte, numere, date, valori de adev|r sau logice,imagini sau grafice. Cel mai comun control legat este cutia cu text (Text Box). Este maieficient ca prima oar| s| creaÛi controalele legate; 2. Controale nelegate (Unbound Controls): se folosesc pentru afiÕarea unor informaÛiicum sunt texte, linii, dreptunghiuri Õi imagini. Un control nelegat nu este derivat dintr-untabel; 3. Controale calculate (Calculated Controls): rezultatul acestora vine din evaluareaunei expresii.

Cutia cu instrumente este identic| cu cea de la formulare. Toatetipurile de controale pot fi create cu ajutorul cutiei cu instrumente.

• dac| lista câmpurilor nu este afiÕat| selectaÛi Field List dinmeniul View; • selectaÛi câmpul sau câmpurile în unul din urm|toarele feluri:

Page 204: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

208 Introducere în Microsoft Access: Rapoarte - cursul 9

Crearea unei cutiicu text folosindcutia cuinstrumente

Crearea uneietichete

Crearea unuicontrol legatfolosind cutia cuinstrumente

Modificareatextului uneietichete

Crearea unei cutiicu text calculate

un câmp Clic pe câmp.

un grup de câmpuriadiacente

Clic pe primul câmp, cu tasta Shift ap|sat|,clic pe ultimul câmp din grup.

grup de câmpurineadiacente

ÚineÛi ap|sat| tasta Ctrl în timp ce faceÛiclic pe fiecare câmp dorit.

toate câmpurile dinlist|

Clic pe bara cu titlul listei de câmpuri.

• trageÛi câmpul sau câmpurile pe suprafaÛa raportului acolo unde doriÛi s| fie plasate.Dac| aÛi selectat mai multe câmpuri, ordinea lor este semnificativ|;

• clic pe pictograma Text Box din Toolbox. Când cursorul aajuns pe suprafaÛa raportului forma lui se va modifica într-un semn +urmat de un dreptunghi care conÛine textul ab*; • clic pe raport acolo unde doriÛi s| plasaÛi cutia.

• clic pe pictograma Label din Toolbox; • clic pe suprafaÛa raportului, acolo unde doriÛi s| plasaÛieticheta; • introduceÛi textul etichetei.

O alternativ| la crearea etichetelor este Ûinerea ap|sat| a butonului stâng Õi desenarea unuidreptunghi, de orice dimensiune, în care se va putea tasta textul dorit.

• selectaÛi Field List din meniul View pentru afiÕarea listeicâmpurilor; • clic pe instrumentul dorit din Toolbox; • selectaÛi un câmp din list| Õi trageÛi-l pe suprafaÛa raportului.

• clic dublu pe etichet|; • introduceÛi textul etichetei.

• poziÛionaÛi cursorul peste cutia cu text Õi selectaÛi-o; • introduceÛi o expresie, cursorul va lua forma I, apoi ap|saÛiEnter.

Setarea propriet|Ûilor raportuluiLa crearea unui raport, Access presupune anumite valori pentru unele propriet|Ûi pentrufiecare din controalele Õi pentru secÛiunile raportului Õi raportul în sine. Controalele legatemoÕtenesc propriet|Ûile din tabele sau din interog|rile la care sunt legate. Propriet|Ûile pot fisetate folosind lista propriet|Ûilor (Property Sheet). Aceasta se poate afiÕa din View,selectând Properties.

Page 205: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

209 Introducere în Microsoft Access: Rapoarte - cursul 9

Pentru a vedea mai multe propriet|Ûi, folosiÛi bara de defilare, prin selectarea butoanelor desus (Format, Data, Event, Other, All) puteÛi vedea numai o parte sau toate propriet|Ûileobiectului 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 lavaloarea Over Group, când suma se va face pe grupuri.

CanGrow, CanShrink Specific| dac| textul, secÛiunea unui raport sau subraport îÕipoate modifica dimensiunile pentru a se acomoda la datele pecare le afiÕeaz|. Nu se poate folosi pentru începuturi (headers)Õi sfârÕituri (footers) de pagini.

AplicaÛia 1 cu rapoarteVom continua aplicaÛia creat| în cursul 8 prin ad|ugarea a dou| rapoarte: primul va afiÕanumerele 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 surselede date pentru cele dou| rapoarte.

Interog|riCreaÛi interogarea din figura care urmeaz| Õi salvaÛi-o sub numele de QMobilTelefon:

Page 206: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

210 Introducere în Microsoft Access: Rapoarte - cursul 9

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 verificadac| informaÛiile afiÕate de aceasta sunt corecte. CopiaÛi obiectul QMobilTelefon sub numelede QAdreseElectronice Õi modificaÛi interogarea din urm| aÕa încât vizualizat| în modproiectare s| fie de forma:

Page 207: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

211 Introducere în Microsoft Access: Rapoarte - cursul 9

RapoarteCreaÛi un raport folosind Generatorul parcurgând etapele din figuri.

Page 208: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

212 Introducere în Microsoft Access: Rapoarte - cursul 9

Ap|saÛi butonul Finish Õi primul formular va fi de forma:

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 înmod proiectare s| cont-ina7 sect-iunile s-i controalele din figura urma7 toare.

Page 209: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

213 Introducere în Microsoft Access: Rapoarte - cursul 9

Observat-i ca7 în fereastra Sorting and Grouping numele câmpului Nume Contact apare dedoua7 ori. Pentru fiecare caz se va afis-a antetul câmpului (proprietatea Group Header va luavaloarea Yes), dar, pentru prima apari t-ie proprieta7 t-ile vor fi setate dupa7 cum se observa7 înfigura 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 (PrefixCharacters) din câmpul Nume Contact, ceea ce înseamn| c| Access-ul începe un grupnou de câte ori primul caracter din numele contactelor de schimb|. Când aceasta se petrece vaafiÕa valorile din secÛiunea de sfârÕit a grupului (Group Footer) Õi valorile corespunz|toaresecÛiunii de început a urm|torului grup (Group Header). Pentru ca Access-ul s| sortezenumele de contact în cadrul grupului trebuie ca Nume Contact s| fie ad|ugat din nou înfereastra Sorting and Grouping. La fiecare început de grup nou, în secÛiunea NumeContactHeader, Access-ul va afiÕa o copie mare a primei litere din numele de contact corespunz|torgrupului actual. Lista propriet|Ûilor pentru controlul din prima secÛiune Nume ContactHeader este cea din figura al|turat|. Proprietatea nume (Name) are valoarea PimaLitera,iar cea surs| controlului (Control Source) =Left([Nume Contact], 1). Left() este ofuncÛie care extrage un caracter din primul argument, în cazul de faÛ| valoarea din câmpul[Nume Contact]. Previzualizarea raportului este prezentat| care urmeaza7 .

Page 210: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

214 Introducere în Microsoft Access: Rapoarte - cursul 9

Se observ| c| raportul se întinde pe mai multe pagini. Dac| doriÛi s| folosiÛi modul de afiÕare

Page 211: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

215 Introducere în Microsoft Access: Rapoarte - cursul 9

pe coloane pentru aface raportul maicompact (eliminândrisipa de hârtie) faceÛiset|rile urm|toare,slectând Coulmns dinPage Setup:

Num|rul de coloane (Number of Columns) este setat la 2; La fel cu detaliile (Same asDetail) determin| dac| fiecare coloan| va avea sau nu aceeaÕi l|Ûime (width) cu cea asecÛiunii Detail din proiectul raportului; Width - l|Ûimea coloanelor - este setat| la 3;AÕezarea Coloanelor (Column Layout) determin| dac| coloanele merg de sus în jos Õi apoila dreapta (Down) sau de la stânga la dreapta Õi apoi în jos (Across). RealizaÛi acestemodific|ri Õi raportul va ar|ta ca în figura urm|toare. Dac| doriÛi ca cele scrise în secÛiunileheader Õi footer s| fie afiÕate pe toat| suprafaÛa raportului (cum este Õi în cazul de faÛ|) trebuies| setaÛi l|Ûimea suprafeÛei raportului la l|Ûimea întregului raport, apoi plasaÛi controale însecÛiunile Detail numai cu l|Ûimea pe care o vor avea coloanele. Nu uitaÛi s| invalidaÛiopÛ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|, nuca în figura urm|toare, unde pentru litera M, acestea sunt sparte pe dou| coloane, comutaÛi pevizualizarea în mod proiectare alraportului, iar în fereastra Sorting andGrouping, pentru primul câmp NumeContact, modificaÛi proprietatea cunumele Keep Together la WholeGroup.

Page 212: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

216 Introducere în Microsoft Access: Rapoarte - cursul 9

Page 213: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

217 Introducere în Microsoft Access: Rapoarte - cursul 9

AplicaÛia 2 cu rapoarteAplicat-ia care urmeaza7 îs-i propune sa7 gestioneze elevii unei clase împreuna7 cu notele pe carele-au primit. Scopul aplicat-iei este de a înva7 t-a sa7 creat-i, repede, un formular cu subformular s-ide a prezenta noi operat-ii care se pot la nivelul rapoartelor. Generatoarele din figurile careurmeaza7 sunt specifice lui Access 2002 din Microsoft Office XP Professional.

Creat-i urma7 toarele tabele:

Nume tabel Nume câmp Proprieta7t-i

Elevi IDElev Data type: AutoNumberPrimary Key

Nume Data type: Text

Prenume Data type: Text

Adresa Data type: Text

Note IDElevNota Data type: NumberField Size: Long Integer

Nota Data type: NumberField Size: Long Integer

Data Data type: Date/Time

IDMaterie Data type: NumberField Size: Long Integer

Materii IDMaterie Data type: AutoNumberPrimary Key

Materie Data type: Text

Creat-i urma7 toarele relat-ii:

Creat-i doua7 formulare, primul va fi folosit pentru introducerea materiilor de studiu (în tabelulMaterii), al doilea va fi folosit pentru intreoducerea elevilor s-i a notelor pe care aces-tia le-auprimit la anumite materii. Ambele formulare vor fi create folosind generatoare de formulare.

Pentru crearea primului formular parcurget-i etapele:

Page 214: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

218 Introducere în Microsoft Access: Rapoarte - cursul 9

• din Object, selectat-i Forms; • apoi, New,AutoForm:Tabular, iar sursa de dateva fi tabelul Materii; • clic pe butonul OK;

Pe ecran va fi afis-at nou formular careva fi salvat în baza de date sub numelede Materii atunci când se va realizaînchiderea lui.

Înainte de a trece la realizarea celui deal doilea formular deschidet-i formularulMaterii, salvat mai înainte s-iîntroducet-i câteva materii în el.

Tabelul Note nu cont-ine, explicit,numele materiei pentru care s-a da notaci doar un cod al ei. Pentru ca în loculacestui cod sa7 fie afis-ata7 denumireamateriei corespunza7 toare din Materii,vom crea un Lookup. Urma7 toareleetape trebuie parcurse:

• din Objects, selectat-i Tables; • clic pe Design, apoi slectat-icâmpul IDMaterie; • în lista proprieta7 t-ilor câmpului(Field Properties), clic pe Lookup; • clic pe va valoarea proprieta7 t-iiDisplay Control, o sa7geata în jos va fiafis-ata7 în dreapta; • clic pe sa7geata din dreapta s-i selectat-i din lista Combo Box, în acest moment, se vorafis-a noi proprieta7 t-i corspunza7 toare afis-a7rii valorii acestui câmp prin intermediul unui controlde tipul Combo Box; • setat-i urma7 toarele proprieta7 t-i:

Nume proprietate Valoare Semnificat-ie

Row Source Materii Sursa de date pentru înregistra7rile care vor fiafis-ate de controlul Combo Box.

Bound Column 1 Coloana din sursa de date, la noi tabelul Materii,care va da valori controlului Combo Box atuncicând se va selecta o valoare din lista afis-ata7 deacesta

Column Count 2 Numa7rul de coloane din sursa de date

Column Widths 0, 2 La7 t-imea folosita7 pentru afis-area valorilor dincoloanele. Pentru la7 t-imea 0 coloana nu se va afis-a.

Page 215: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

219 Introducere în Microsoft Access: Rapoarte - cursul 9

List Width 2 La7 t-imea folosita7 pentru afis-area tuturor coloanelor.

Salvat-i modifica7rile aduse tabelului. Acum vom trece la realizarea celui de al doilea formular.

• din Objects, selectat-i Forms; • clic pe New, din lista selectat-iForm Wizard, iar la "Choose table orquery where the object's data comesfrom:" selectat-i tabelul Elevi (vezifigura ala7 turata7); • clic pe OK;

În figura urma7 toare, observat-i ca7 , dintrecele patru câmpuri tabelului elevi, aufos selectate câmpurile Nume,Prenume s-i Adresa pentru a fi puseîn formular. Între tabelul Elevi s-i tabelulNote este o relat-ie unu-la-mult-i prinintermediul câmpurilor IDElev s-iIDElevNota. Generatorul de formulare va t-ine cont de aceasta7 relat-ie, iar daca7 în aceasta7etapa7 , din Tables/Querie se va selecta tabelul Note s-i vor fi trecute în Selected Fields s-icâmpurile Nota, Data s-i IDMaterie, ale lui Note, generatorul va crea automat unsubformular cu aceste câmpuri.

În final, aceasta pagina7 a generatorului,în care se vor selecta câmpurile de afis-atpe suprafat-a formularului trebuie sa7arate astfel:

Page 216: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

220 Introducere în Microsoft Access: Rapoarte - cursul 9

• clic pe Finish.

Pe ecran se va afis-a formularul:

Observat-i ca pentru câmpurile corespunza7 toare tabelului Note s-a creat, automat, unsubformular. Daca7 dori t-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 IDMateriede la IDMaterie la Materie.

Pentru ca acest formular sa7 afis-eze media pe semestrul unu s-i pe semestrul doi a elevilor

trecet-i în modul proiectare s-i ada7ugat-i controalele din figura care urmeaza7 .

Observat-i ca7 primele doua7 controale sunt de tipul Text Box "Unbound", acestea vor stocadoua7 date având numele Datas11 s-i Datas12. Acestea reprezinta7 limita inferioara7 s-i ceasuperioara7 pentru definitrea semestrului 1. Urma7 torul control, cu numele Medias1, este

Datas11

Datas12

Medias1

Page 217: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

221 Introducere în Microsoft Access: Rapoarte - cursul 9

calculat dupa7 formula:

=DSum("[Nota]","Note", "[IDElevNota] = " & [IDElev] & " AND[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 unanumit semestru. Funct-ia DSum() realizeaza7 suma tuturor notelor, iar funct-ia DCount()numa7ra7 câte note sunt într-un semestru (de exemplu, forma generala7 pentru DSum() esteDSum("[nume câmp]","nume tabel","criteriu de select-ie"). Acestecalcule pot fi realizate doar daca7 în controalele Datas11 s-i Datas12 sunt stocate date.Cel mai simplu mod de a pune date în aceste doua7 controale este init-ializarea (prin folosireaproprieta7 t-ii Default Value) lor cu data curenta7 folosind funct-ia Date(). În lipsa unei datefunct-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 apari t-iei erorii, dar, în modsigur, aceste valori nu delimiteaza7 corect semestrul. Deci, utilizatorul va trebui sa7 modificeaceste valori la cele corecte. În acest caz apare urma7 toarea problema7 . Valoarea controluluiMedias1 se calculeaza7 pe baza valorilor int-iale din controalele Datas11 s-i Datas12.Cum aceste valori, sigur, nu sunt bune s-i trebuie sa7 le modifica7m ce se va petrece cu valoareadin controlul Medias1 ca urmare a modifica7rii valorilo celor doua7 controle. Daca7 testat-iefectul modifica7rii vet-i vedea ca7 nu se petrece nimic, adica7 valoarea lui Medias1 nu semodifica7 , des-i valorile din Datas11 s-i Datas12 au fost schimbate. Pentru ca modifica7rileaduse valorilor stocate în acestor controale sa7 duca7 la recalcularea cont-intului Medias1trebuie sa7 definim doua7 proceduri de tratare a evenimentelor de actualizare a controalelorDatas11 s-i Datas12. Un eveniment este rezultatul sau consecint-a unei act-iuni realizate deutilizator. Access ra7spunde la evenimente prin intermediul unor comportamente definite lanivelul unor proprieta7 t-i de controale. De exemplu, evenimetul de actualizare a valorilorstocate într-un control este tratat prin intermediul proprieta7 t-ii After Update. Urma7 toareleetape vor fi parcure pentru ambele controale: • din lista proprieta7 t-ilor, clic pe proprietatea After Update, în dreapta apare o sa7geata7 înjos; • clic pe sa7geata î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 s-i pentru al doilea control. Linia Me.Medias1.Requery vaface ca Medias1 sa7 fie reactualizat dupa7 terminarea modifica7rilor aduse valorilor celor doua7controale. Acest cod este ada7ugat formularului Elevi s-i, în final, va fi trebuie sa7 fie de formaurma7 toare.

Ultimul control este unul legat de câmpul IDElev a tabelului Elevi. El va fi invizibil, pentruaceasta proprietatea Visible, a lui, va fi setata7 la valoarea No. Introducerea lui este necesara7pentru a selecta din Note numai notelor elevului curent. Acesta este identificat unui prinvaloarea stocata7 în câmpul IDElev a tabelului Elevi. Funct-iile au aceleas-i argumente, primuleste numele tabelului, al doilea este numele câmpului, iar al treilea este condit-ia de respectatpentru ca valorile câmpului sa7 fie însumate respectiv numa7rate. Toate argumentele trebuie sa7fie s-iruri de caractere. Acesta este motivul pentru care textele sunt cuprinsa7 între ghilimele.

Page 218: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

222 Introducere în Microsoft Access: Rapoarte - cursul 9

Ultimul argument, pe lânga7 buca7 t-i de texte cuprinse între ghilimele mai cont-ine simbolul &care este un operator pentru prelucrarea s-irurilor. El face concatenarea (ala7 turarea operanzilor,din doua7 s-iruri face unul singur prin ala7 turarea cont-inutului celor doua7 s-iruri; detalii cu privirela acest operator se ga7sesc în cursul 10, care prezinta7 elementele limbajului de programareVBA).

Pentru realiza calculul mediei pe semestrul doi, vom copia, la dreapta, primele trei controale.Numele noilor controale vor fi: Datas21, Datas22, Medias2. În modul proiectare formular vaara7 ta astfel:

Codul ada7ugat pentruactualizarea luiMedias1

Page 219: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

223 Introducere în Microsoft Access: Rapoarte - cursul 9

Numerotareaînregistra7rilor uneisect-iuni

Întrucât controlul Medias2 va trebuie sa7 lucreze cu valorile din Datas21 s-i Datas22modificat-i corespunza7 tor expresia de calcul a acestuia. În figura care urmeaza7 se prezinta7rezultatele afis-ate de controalele calculate, pe baze cel spuse pâna7 acum, în cazul concret a

unui elev.

Raportul aplicat-iei, îs-i propune pentru început, sa7 afis-eze tot-i elevii clasei, cu toate notele lor,sortate s-i grupate pe baza numelui elevilor s-i a materiiilor. La nivelul materiilor, notele, vor fisortate în ordinea cresca7 toare a datelor. Pe baza celor spuse se poate deduce ca7 raportul vaavea urma7 toarele sect-iuni:

! antet s-i sfârs-it de raport (Report Header s-i Report Footer); ! antet s-i 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).

Pe baza elementelor de mai sus, folosit-i generatorul de rapoarte pentru a crea un raport câtmai apropiat de cel dorit. Trecet-i, apoi, în modul proiectare s-i modificat-i raportul pentru a-laduce la forma din figura care urmeaza7 .

• plasat-i un control Unbound, de tipul Text Box, în dreaptacontrolului Nota; • modificat-i urma7 toarele proprieta7 t-i:

Nume proprietate Valoare Semnificat-ie

Control Source =1 Numele câmpului sau expresia folosita7 pentrucalcularea valorii. În cazul nostru controlulprimes-te valoarea expresiei constante 1.

Format #) Formatul folosit pentru afis-area valoriicontrolului. În cazul nostru se va afis-a valoareanumerica7 urmata7 de caracterul ")".

Page 220: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

224 Introducere în Microsoft Access: Rapoarte - cursul 9

Crearea unui totalla nivel de grup

Running Sum Over Group Daca7 se realizeaza7 afis-area unui total s-i modul decalcul al acestuia. În cazul nostru se va realiza oînsumare la nivel de grup, adica7 valoarea afis-ata7de acest control va fi crescuta7 cu 1 pentru fiecareînregistrare noua7 din grup. Se realizeaza7 astfelnumerotarea fieca7rei note primite de un elev la omaterie.

În figura care urmeaza7 , se vede ca7 fiecare nota7 primita7 de un elev, la o anumita7 materie, vanumerotata7 . La trecerea la un nou grup, adica7 la schimbarea materiei, numerorarea se reia cuvalorea calculata7 pentru control, la noi valoarea 1. Prin setarea proprieta7 t-ii Running Sum lavaloarea Over Group, la valoarea curenta7 a controlului, care la noi este întotdeauna 1, seaduna7 valorile anterioare.

Sa7 presupunem, ca7 în raportul urma7 tor, dorim sa7 calcula7m mediaaritmetica7 pentru fiecare materie. Daca7 elevul are mai multe note la omaterie acestea trebuie însumate, apoi suma trebuie împa7rt-ita7 lanuma7rul de note. Urma7 toarele etape trebuie parcurse:

Page 221: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

225 Introducere în Microsoft Access: Rapoarte - cursul 9

• creat-i un nou control în antetul grupului (sau în sfâts-itul lui); • introducet-i expresia =Sum([Nota])/Count([Nota]) în proprietatea ControlSource; Nota trebuie sa7 fie un nume de câmp valid din sursa de date; modificat-i proprietateaFormat la #.00.

Pentru exemplul prezentat, controlul a fost introdus în antetul grupului IDMaterie(IDMaterie Header). Funct-ia Sum() realizeaza7 însumarea valorilor acestui control, la nivelde grup, iar funct-ia Count() va numa7ra înregistra7rile grupului.

Nota7: Daca7 numele controlului este calculat, trebuie repetata7 expresia de calcul a lui. Deexemplu, daca7 dorim sa7 realiza7m totalul pentru un control numit PretcuTVA calculat cuformula [Pret]*[TVA], în loc de =Sum([Pretcu TVA]) se va scrie

Page 222: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

226 Introducere în Microsoft Access: Rapoarte - cursul 9

=Sum([Pret]*[TVA]).

În continuare, ne propunem sa7 calcula7m media generala7 a unui elev. Pentru aceasta, dinfereastra Sorting and Grouping, vom selecta pe Nume. Aici, vom seta proprietatea GroupFooter pe Yes. Efectul va fi apari t-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 pentrufiecare materie.

Media generala7 a unui elev va fi calculata7 fa7cându-se suma tuturor notelor lui, care apoi se vaîmpa7rt-i la numa7rul de note a elevului.

Daca7 dorim sa7 calcula7m media generala7 a unui elev, fa7când media aritmetica7 a mediilor lanivel de materii, strategia de mai sus nu mai este de folos. Urma7 toarele etape trebuie urmate înacest caz: • copiat-i controlul care face media aritmetica7 la nivel de materii, în aceeas-i sect-iune, s-idat-i numele de SumaMedii acestui nou control; apoi, setat-i proprietatea Running Sum lavaloarea Over Group; • creat-i un nou control de tipul Text Box cu numele ContorMaterii, tot în sect-iuneaIDMaterie Header cu proprietatea Running Sum setata7 la valoarea Over Group;

Page 223: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

227 Introducere în Microsoft Access: Rapoarte - cursul 9

• în sect-iunea Nume Footer, realizat-i o copia a controlului care realizeaza7 calcululmediei aritmetice, apoi modificat-i proprietatea Control Source la=[SumaMedii]/[ContorMaterii].

Rezultatele vor fi afis-ate astfel:

Page 224: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

228 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

! cum s-a n|scut limbajul de programare BASIC Õi ce este VBA;

! ce este programarea orientat| pe evenimente;

! ce sunt procedurile de evenimente;

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

! care sunt operatorii limbajului VBA;

! care sunt instrucÛiunile limbajului VBA;

! ce este o clas| VBA Õi cum se defineÕte aceasta;

! ce este o colecÛie VBA.

Obiectivele cursului 10

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 225: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

229 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Începuturilelimbajului BASIC

Renas-terea BASIC-ului

Limbajul de programare Visual Basic for ApplicationsBASIC sau Beginner's All-purpose Symbolic Instruction Code este unlimbaj simplu, creat de John G. Kemeny Õi Thomas E. Kurtz de laDartmouth College în 1963. DeÕi din numele limbajului se pare c| afost 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 multeprograme concurent, pe un singur procesor sau, în paralel, pe mai multe procesoare. De obiceifiecare utilizator are propriul lui terminal pentru operaÛii de intrare/ieÕire. time sharing estemultitasking pentru utilizatori multipli. multitasking: o tehnic| folosit| într-un sistem deoperare pentru partajarea unui singur procesor între mai multe programe independente.Programele în multitasking pot fi ale unui singur utilizator sau ale mai multor utilizatori, prinaceasta se face distincÛia de procesarea paralel| - paralell processing, unde un singurutilizator execut| mai multe programe pe mai multe procesoare). Cu timpul a devenit cauzaprincipal| a "reducerii Õi deform|rii mentale" a programatorilor încep|tori. Cazul esteoarecum similar cu cel al limbajului Pascal, când un limbaj proiectat exclusiv cu scopeducaÛ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 laformarea 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 firmaMicrosoft în limbajul de programare al întregii familii de produseMicrosoft Office (Access, Excel, Word, PowerPoint). Nucleullimbajului, 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 accesla date specifice sau generale; 4. manipularea structurii bazei de date prin program.

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 chiarde el însuÕi. ExecuÛia începe cu prima instrucÛiune Õi urmeaz| o linie secvenÛial| sau cusalturi, 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 aprogram|rii orientate pe evenimente. Pentru c| nu se poate Õti ce va face utilizatorul, codultrebuie s| fac| anumite presupuneri cu privire la starea mediului în care funcÛioneaz|. Dinacest motiv codul fie testeaz| dac| presupunerile f|cute sunt corecte, fie le aranjeaz| într-oordine în care acestea s| fie întotdeauna corecte.

Page 226: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

230 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Crearea unuiproceduri

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 aap|rut. De exemplu, dac| este vorba de un formular (Form) Õi de evenimentul clic (Click) pesuprafaÛa acestuia, numele procedurii de tratare a evenimentului va fi Form_Click. Dac| înlocul formularului am fi avut un raport (Report), pentru acelaÕi eveniment, numele proceduriiar fi Report_Click. În cazul unui control, numele acestuia se combin| cu caracterulunderscore (_) Õ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 înproprietatea Name, dac| intenÛionaÛi s| modificaÛi acest nume, trebuie s| o faceÛi înainte descrierea primei proceduri de eveniment. Dac| modificaÛi numele obiectului dup| ce aÛi scriscel 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 construireanumelor procedurilor de evenimente:

Tip obiect Numele procedurii de eveniment

Formular Sub Form_numeeveniment() instrucÛiuniEnd Sub

Raport Sub Report_numeeveniment() instrucÛiuniEnd Sub

Control Sub NumeControl_numeeveniment() instrucÛiuniEnd Sub

Cuvintele Sub Õi End Sub marcheaz| începutul Õi sfârÕitul procedurii. Cuvintele careurmeaz| pe aceeaÕi linie cu Sub sunt numele procedurii de eveniment, iar instrucÛiunireprezint| 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|toracestora. Access-ul permite crearea de proceduri definite de utilizator, care trebuie apelateexplicit, prin cod, pentru ca s| fie executate. Acestea nu sunt legate de evenimentele generatede utilizator, ci mai degrab| de anumite grupuri de linii de program care se repet| în maimulte 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| numaiproceduri definite de utilizator. Procedurile din module pot fi referite din orice alte obiecteAccess, în timp, permiÛând scrierea unor biblioteci de proceduri utile pentru rezolvarea unorsarcini care se repet| des.

• deschideÛi baza de date Northwind; • clic pe butonul Modules din fereastra bazei de date;

Page 227: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

231 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Editareaprocedurilorexistente

• clic pe butonul New pentru a crea un modul nou; • din meniul Insert selectaÛi Procedure..., fereastra de dialog Insert Procedure va fiafiÕat| dup| cum urmeaz|:

• acceptaÛi set|rile implicite Õi tastaÛi DatadeAzi în cutia de texte Name, apoi clic pe OK.

Access-ul va crea corpul unei funcÛii cu numele DatadeAzi. Dac| în loc de tipul desubprogram Function selectaÛi opÛiunea Sub, Access-ul va crea un subprogram de tipulsubrutin|.

• deschideÛi baza de date; • clic pe butonul Modules; • 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 valoarefiind 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 tipulprocedurii va fi Function.

Procedura de tip SubSintaxa procedurii Sub este:

Page 228: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

232 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Apelul lui Sub

Ies-irea fort-ata7 dinSub

Sub numeprocedur|(parametri)[instrucÛiuni][Exit Sub][instrucÛiuni]

End Sub

Numele procedurii este numeprocedur|, instrucÛiunile instrucÛiuni grupate sub acestnume se numesc corpul procedurii. parametri sunt o list| de nume de parametri separate prinvirgule. Fiecare parametru respect| sintaxa declaraÛiei de variabil| Õi este echivalentul uneivariabile în corpul procedurii. Sintaxa pentru fiecare parametru este:

[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 vaavea tipul Variant care poate stoca orice tip de date. Parantezele drepte specific| faptul c|elementele cuprinse între ele sunt opÛionale. Parantezele rotunde opÛionale dup|numevariabil| indic| un argument de tipul tablou.

Procedura de tipul Sub se apeleaz| prin numele ei Õi prin specificarea 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 iEnd Sub

va fi apelat| prin Numara 5 (observaÛi c| nu se pun paranteze în jurul argumentelor).ExecuÛia procedurii Õi rezultatele ei se pot afiÕa în fereastra imediat|. Se apas| Ctrl+G, apoiîn ferestr| se scrie Numara 5 dup| care se apas| Enter.

InstrucÛiunile din corpul lui Sub sunt executate secvenÛial, dac| sedoreÕte p|r|sirea procedurii Sub înainte de execuÛia ultimeiinstrucÛiuni se poate folosi instrucÛiunea opÛional| End Sub. Aceastaare ca efect revenirea din procedur|. În corpul procedurii, num|rul de

End Sub-uri nu este limitat.

Procedura de tip FunctionSintaxa procedurii Function este:

Function numeprocedur|(parametri) [As tip][instrucÛiuni][Exit Function][instrucÛiuni]

End Function

Page 229: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

233 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Ies-irea fort-ata7 dinFunction

SemnificaÛia elementelor sintactice ale procedurii Function sunt aceleaÕi cu cele aleprocedurii Sub, cu urm|toarele excepÛii: 1. procedurile Function, asemenea variabilelor, au tipuri de date care determin| tipulvalorii întoarse; 2. valoarea se întoarce atribuind numelui procedurii Function o valoare în corpulfuncÛ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, codulcorespunz|tor unei implement|ri prin procedur| Function este:

Public Function ArieCerc(R As Double) As Double Dim pi As Double pi = 4# * Atn(1#) ArieCerc = pi * R ^ 2End Function

Apelul procedurii Function se face sub forma: x=ArieCerc(5).

InstrucÛiunile din corpul lui Function sunt executate secvenÛial, dac|se doreÕte p|r|sirea procedurii Function înainte de execuÛia ultimeiinstrucÛ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 alecodului conÛinut de formularul sau raportul în cauz|. Procedurile unui modul sunt publice, potfi apelate din orice porÛiune a aplicaÛiei, mai puÛin în cazul în care au fost f|cute private prinfolosirea lui Private înaintea de Sub sau Function. Pentru c| procedurile formularelor Õirapoartelor sunt private este posibil s| se scrie proceduri cu acelaÕi nume în formulare saurapoarte distincte. Numele procedurilor publice trebuie s| fie unice într-o aplicaÛie. Esteposibil ca o procedur| dintr-un formular sau raport s| aib| acelaÕi nume cu una dintr-unmodul. În acest caz Access-ul va decide asupra procedurii apelate c|utând astfel: formularulcurent, raportul curent, modulele aplicaÛiei. O procedur| privat| poate fi apelat| numai deproceduri ale modulului din care face parte.

VariabileOrice program prelucreaz| o mulÛime de valori iniÛiale pentru a produce valorile de ieÕire. Deobicei, trecerea de la valorile iniÛiale la cele de ieÕire se face prin unele temporare, care înprocesul 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ÛieiaplicaÛiei. VBA foloseÕte variabilele pentru stocarea valorilor. Variabilele sunt asemeneacâmpurilor din tabele au un nume, un tip, dar pot stoca numai o singur| valoare.

Declararea variabilelorExist| mai multe metode pentru declararea variabilelor în VBA. Sintaxa declaraÛiei devariabil| este:

Page 230: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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.Programatorul nu trebuie s| declare explicit o variabil| în VBA (iat| dintre "strategiile" carenu "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 oricevaloare: num|r, text, dat|, Õir. Atunci când o astfel de variabil| este atribuit| unei variabile dealt tip, VBA se ocup| de toate conversiile necesare. În cazul când cunoaÕtem ce fel de valorise vor stoca într-o variabil| este bine s| i se specifice tipul particular. VBA va putea gestionamai eficient datele stocate în variabil|. Variabilele declarate cu Dim exist| atât timp cât seexecut| procedura în care au fost declarate. La terminarea execuÛiei procedurii, valorileacestor variabile dispar. În plus, valorile acestor variabile sunt locale procedurii din care facparte, adic| nu se pot accesa din alte proceduri. Datorit| acestor caracteristici acelaÕi nume devariabile poate s| apar| în proceduri disticte far| s| apar| conflicte.

Dim i1Dim x,y,j As Integer2Dim x As Double3Dim sir As String4

Liniile 1 Õi 2 prezint| declaraÛii pe care NU trebuie s| practicaÛi! În linia 1 tipul a fost omis Õieste, 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 ultimeivariabile. Liniile 3 Õi 4 sunt cazul normal, pentru care trebuie s| v| formaÛi un automatism descriere. Depanarea programelor este mult mai uÕoar| dac| fiecare variabil| are asociat un tipparticular de dat|, în plus, resursele pentru gestionarea variabilelor sunt folosite mult maieficient de VBA rezultând o creÕtere în vitez| a execuÛiei codului Õi o sc|dere a spaÛiului deRAM folosit pentru stocarea variabilelor.

Scop Õi durat| de existenÛ|Când o variabil| este declarat| într-o procedur|, numai codul din acea procedur| poate citi saumodifica valoarea variabilei. Se spune c| scopul este local procedurii. Uneori este de dorit cao variabil| s| poat| fi folosit| din mai multe proceduri ale aceluiaÕi modul sau chiar dinmodule 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 ovariabil| cu acelaÕi nume s| apar| în scopuri diferite.

Pe lâng| scop, variabilele au Õi durat| de existenÛ|. Valorile din variabilele globale sau demodule sunt p|strate cât timp baza de date este deschis| (mai puÛin în cazul când codul estereiniÛializat). Variabilele locale, exist| numai cât timp procedura în care s-au declarat se

Page 231: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

235 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Valoarea Empty

Valoarea Null

execut|. Când procedura se termin|, valorile variabilelor locale sunt desc|rcate din RAM iarspaÛiul alocat acestora este refolosit, dac| este cazul, pentru stocarea altor variabile. Laurm|torul apel al procedurii, toate variabilele locale sunt reiniÛializate. Dac| doriÛi ca VBA s|p|streze valoarea unei variabile locale trebuie s| o declaraÛi Static. De exemplu, în loc de Dimpi 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 altfels-ar pierde între apelurile procedurii.

Tipuri de dateDup| 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 estespecificat, implicit, VBA asociaz| variabilei tipul Variant.

Tipul VariantLa fel cum o cutie cu text poate stoca texte, numere sau date, la fel variabilele de tipul Variantpot stoca date de tipul numeric, Õir, dat|/or|, valori Null. În general VBA face toateconversiile necesare când se fac manipul|ri ale datelor de acest tip, totuÕi sunt câteva cazuride evitat: 1. operaÛii aritmetice se pot efectua numai dac| tipul Variant stocheaz| o valoarenumeric|; se poate determina dac| valoarea stocat| într-un tip Variant este numeric| prinfuncÛia IsNumeric() 2. operaÛii cu date se pot efectua numai dac| tipul Variant stocheaz| o dat|; datele pot fiadunate, 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-audeclarat Õi pân| când le-am atribuit o valoare. Aceasta este o valoarespecial| 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 unuiVariant cu valoarea Empty într-o expresie este echivalent| cu valoarea numeric| 0. Dup| cevariabila Variant a primit o valoare, valoarea Empty dispare. Fiind o valoare, dar unaspecial|, nu se poate atribui direct, dar este posibil s| atribuim valoarea Empty dintr-ovariabil| Variant unei alte variabile Variant care Õi-a pierdut-o deja.

Variabila Variant poate conÛine valoarea special| Null. Aceasta sefoloseÕ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Ûidac| nu conÛin valoarea Null. Pentru aceasta folosiÛi funcÛia IsNull(). Null are câtevapropriet|Ûi interesante: 1. expresiile care conÛin Null dau valoarea Null. Din acest motiv se zice c| Null sepropag| 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 numericeTipul specific| pe lâng| ce fel de valori poate lua o variabil| Õi domeniul în care pot variaacestea, operatorii care pot avea ca operanzi aceste variabile Õi spaÛiul de RAM ce se foloseÕtepentru stocarea ei.

Page 232: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

236 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Tip SpaÛiu destocare

Domeniu ValoareiniÛial|

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 valorinegative;1.401298E-45 la 3.402823E38 pentru valoripozitive

0

Double 8 octeÛi -1.79769313486232E308 la-4.94065645841247E-324 pentru valorinegative; 4.94065645841247E-324 la1.79769313486232E308 pentru valori pozitive

0

Currency 8 octeÛi -922,337,203,685,477.5808 la922,337,203,685,477.5807

0

Decimal 14 octeÛi +/-79,228,162,514,264,337,593,543,950,335f|r| punct zecimal; +/-7.9228162514264337593543950335 cu 28de zecimale;cel mai mic num|r nenul este+/-0.0000000000000000000000000001

0

Tipul ÕirVariabilele care conÛin un text se declar| de tipul Õir (String).

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| seadaug| noi date în variabil|. Este posibil| declararea de variabile Õir cu lungime fix| prinfolosirea sintaxei: String *lungime. De exemplu, o variabil| cu numele linie de 80de caractere se declar| astfel: Dim linie As String*80. Dac| un Õir mai scurt seatribuie unuia mai lung, caracterele lips| se completeaz| automat cu spaÛii. Dac| un Õir mailung se atribuie unuia mai scurt caracterele în plus se trunchiaz|. Pentru c| Õirurile cu lungimefix| se completeaz| automat în unele operaÛii cu spaÛii, exist| un set de funcÛii utile pentrueliminarea acestora: LTrim(), RTrim(), Trim(). Access-ul compar| Õirurile în mod diferitfuncÛie de instrucÛiunea Option Compare specificat| în secÛiunea declaraÛiilor de modul.

Page 233: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

237 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Cele trei posibilit|Ûi pentru specificarea ordinii relative în comparaÛii sunt OptionCompare Database, Option Compare Binary Õi Option Compare Text.Access-ul insereaz| automat la începutul fiec|rui modul Option Compare Databaseprin 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 Õimajuscule.

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 detipul dat| trebuie cuprinse între caractere # înainte de a fi atribuite variabilelor de tipul dat|sub forma #12/21/1999#. Aceste variabile se afiÕeaz| conform set|rilor formatului short daterecunoscute de calculator. Orele vor fi Õi ele afiÕate conform set|rilor formatului de timprecunoscut de calculator (12 ore sau 24 de ore). Datele pot fi adunate sau sc|zute folosindfuncÛ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 fif|cute asupra datelor folosind funcÛia Format(). FuncÛiile DateSerial() Õi TimeSerial() se potfolosi pentru crearea unor date Õi ore din valori numerice întregi.

Tipul ObjectTipul de dat| obiect se stocheaz| pe 4 octeÛi Õi are ca valoare adresa unui obiect. FolosindinstrucÛ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 argumenteletrebuie s| fie valori sau variabile de acel tip. Un parametru se poate declara folosind ByValpentru a specifica c| argumentul se transfer| prin valoare Õi nu prin referinÛ|. Când unargument este transferat prin valoare, o copie a acestuia se transfer| procedurii. Dac|procedura modific| valoarea, modificarea va afecta numai copia valorii Õi nu valoareaoriginal| a variabilei. Dac| argumentul este transferat prin referinÛ|, valoarea acestuia se poatemodifica prin instrucÛiunile din procedur|. Dac| nu dorim ca o procedur| s| modifice valorileargumentelor folosiÛi ByVal la declararea acestora.

TabloulTabloul ne permite s| referim un grup de variabile de acelaÕi tip cu un singur nume realizânddiferenÛierea lor printr-un num|r numit indice. Tablourile au limite superioare Õi inferioarepentru 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âteste cazul s| fie. Toate elementele tabloului au acelaÕi tip, numit Õi de baz|, mai puÛin cândacest 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 cudimensiune 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 dincare face parte; 3. tablou de procedur| sau local, care foloseÕte Private într-o procedur| pentrudeclararea tabloului.

Page 234: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

238 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Declararea tablourilorCea mai simpl| form| de declarare a unui tablou este numele acestuia urmat de limitasuperioar| a indicelui, care trebuie s| fie o valoare întreg| de tipul Long.

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,'22.

Public Y(15) As Byte 'tablou public cu numele Y de 1'dimensiune cu 15 elemente de tipul'Byte, indicele ia valori în'domeniul 0, 15.

ObservaÛi c| prima valoare a indicelui este 0, aceast| valoare implicit| se poate schimbafolosind instrucÛiunea Option Base în secÛiune de declaraÛii (Declarations) modulului. Deexemplu, pentru ca toÛi indicii tablourilor unui modul s| plece de la 1 scriem Option Base1. Un alt mod de specificare a limitei inferioare a indicelui este folosirea lui To:

Dim A(1 To 10) As IntegerDim Y(10 To 22) As Double

Tablouri cu mai multe dimensiuniCazul cel mai comun este tabloul cu dou| dimensiuni care uneori este numit Õi matrice. Untablou cu 2 dimensiuni, cu 10 elemente pe dimensiune, la care îi mai spunem Õi matrice de10x10 se declar| astfel:

Dim Matrice(9,9) As Double

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| folosirealor 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 tablourilorUneori nu se cunoaÕte num|rul de elemente ale unei dimensiuni de tablou. În acest caz este dedorit s| avem posibilitatea specific|rii în mod dinamic a num|rului de elemente pedimensiune. Un tablou dinamic poate fi redimensionat oricând spre deosebire de cel staticcare 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),

Page 235: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 deelemente al tabloului.

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 alocatpentru stocarea elementelor de tablou Õi domeniul de variaÛie al indicelui, dar nu poatemodifica num|rul de dimensiuni al tabloului de la cel definit în primul ReDim.

Dim Matrice() As Integer

...

Function Test()...ReDim Matrice(20,30)

Dac| nu veÛi folosi Preserve, valorile curente stocate în tablou, vor fi distruse în urmaexecuÛ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 lavalorile zero ANSI pentru tablourile cu Õiruri cu lungime fix| respectiv la valoarea Nothingpentru tablourile de obiecte. Dac| tabloul are mai multe dimensiuni, prin folosirea luiPreserve se va putea modifica numai num|rul de elemente al ultimei dimensiuni ale tabloului.

Preserve ReDim Matrice(20,30+i)

Constante simboliceDeseori în programe avem valori numerice care nu se modific|. Pentru creÕterea lizibilit|Ûiiprogramelor este posibil| înlocuirea acestor valori constante printr-un nume simbolic. Sintaxapentru definirea constantelor simbolice este:

[Public|Private] Const numeconstant| [As tip] =expresie

În general, sunt folosite pentru valori numerice speciale sau pentru date Õi ore reprezentativepentru aplicaÛie. numeconstant| respect| regulile de scriere a unui nume de variabil|, iarexpresie este format| din constante numerice sau Õir interconectate prin operatori. Scopulconstantelor simbolice este acelaÕi cu cel al variabilelor.

Constante intrinseciConstantele simbolice sunt create de programator. Constantele intrinseci sunt definite de ceicare 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.

OperatoriValorile stocate în variabile rezult| în urma unor expresii. Expresiile sunt formate dinsecvenÛe de operatori Õi operanzi. Urm|toarele grupe de operatori sunt predefiniÛi în VBA: # aritmetici; # de comparaÛie # de concatenare

Page 236: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

240 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

# logici

Operatori aritmetici

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.

împ|rÛire întreag| \ a\b Înainte de împ|rÛire a Õi b sunt rotunjite lavalori întregi, rezultatul este tot un întreg.

ridicare la putere ^ a^b a poate fi orice num|r, b numai unul întreg.

modulo Mod a Mod b a Õi b se rotunjesc la întregi dup| care secalculeaz| restul împ|rÛirii lui a la b.

Operatori de comparaÛieSe 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> b, altfel False.

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 decomparaÛie ia Õi ea valorea Null. Variabilele comparate trebuie s| fie de tip numeric.

Operatori de concatenareSe folosesc în cazul Õirurilor Õi au ca efect al|turarea a dou| Õiruri. Valoarea întoars| este unnou Õir care conÛine Õirurile operanzi al|turaÛi.

Page 237: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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Õiruri automat.

concatenare + a+b Dac| ambele variabile sunt de tipul Õir, operatorul deadunare are efect de concatenare.

Operatori logiciGeorge 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 prezentateprin tabele de adev|r unde 0 reprezint| fals Õi 1 adev|rat.

SemnificaÛie Simbol Exemplu Remarc|

ÔI logic saupe biÛi

And a > b And b > c Expresiile asupra c|rora acÛioneaz|operatorul sunt valori de adev|r, în acestcaz se execut| ÔI logic.

a And b a Õi b sunt numere, operatorul ÔI valucra la nivel de biÛi.

SAU logicsau pe biÛi

Or a > b Or b> c Expresiile asupra c|rora acÛioneaz|operatorul sunt valori de adev|r, în acestcaz se execut| SAU logic.

a Or b a Õi b sunt numere, operatorul SAU valucra la nivel de biÛi.

NU logic saupe biÛi

Not Not (a >b) NU logic.

Not a NU pe biÛi.

Tabela de adev|r pentru And logic

And True False Null

True True False Null

False False False False

Null Null False Null

Tabela de adev|r pentru And pe biÛi

And 1 0

1 1 0

0 0 0

Tabela de adev|r pentru Or logica Õi b sunt valori de adev|r True sau False

Or True False Null

True True True True

False True False False

Null True Null Null

Tabela de adev|r pentru Or pe biÛia Õi b sunt valori de biÛi (0, 1)

Or 1 0

1 1 1

0 1 0

Page 238: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

242 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Tabela de adev|r pentru Not logic

a Not(a)

True False

False True

Null Null

Tabela de adev|r pentru Not pe biÛi

Not 1 0

1 1 1

0 1 0

Operatorii logici pot lucra cu valori de adev|r sau cu descompunerea binar| a valorilornumerice ale operanzilor. În acest caz operatori logici se numesc operatori pe biÛi ÕiacÛioneaz| asupra a dou| poziÛii identice de biÛi din dou| expresii numerice modificând bitulcorespunz|tor acelei poziÛii conform tabelelor prezentate mai sus.

Controlul execuÛiei programuluiControlul execuÛiei programului se face prin instrucÛiuni. Cea mai elementar| instrucÛiune estecea de atribuire, urmeaz| apoi cele de decizie Õi cele de ciclare.

InstrucÛiunea LetRealizeaz| 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 estenumele unei variabile sau a unei propriet|Ûi de obiect, iar expresie este cea care producevaloarea care va fi atribuit|. Iat| câteva exemple de atribuiri:

Dim a As IntegerDim danu As BooleanDim s As Stringa=10danu=Trues="vin alegerile ... trec alegerile"

Valoarea lui expresie poate fi atribuit| variabilei numai dac| este de tip compatibil cu cel alvariabilei. Variabilelor de tipul Variant li se poate atribui orice valoare.

InstrucÛiuni pentru decizieAceste instrucÛiuni permit testarea unor condiÛii Õi în funcÛie de rezultatul testului s| executeanumite porÛiuni de cod. InstrucÛiunile de decizie în VBA sunt:

# If...Then # If...Then...Else # Select ...Case

If...ThenSe foloseÕte pentru execuÛia condiÛional| a unei instrucÛiuni sau a unui grup de instrucÛiuni. Se

Page 239: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

243 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

pot folosi dou| forme de scriere:

If condiÛie Then instrucÛiune

sau

If condiÛie TheninstrucÛiuni

End If

condiÛie este de obicei o comparaÛie, dar poate fi orice expresie care se evalueaz| la o valoarenumeric|. Dac| valoarea numeric| este 0, VBA îi atribuie valoarea de adev|r False, dac| estenenul|, 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 adoua a unui grup de instrucÛiuni.

If...Then...ElseSe 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 departepân| la g|sirea unei condiÛii True. Când s-a g|sit o astfel de condiÛie se execut| grupul deinstrucÛiuni instrucÛiuni_x, apoi se sare la codul imediat urm|tor lui End If. OpÛionalse poate un Else la care se va trece numai dac| nu s-a g|sit nici o condiÛie True.

Select...CaseAceast| instrucÛiune este o alternativ| pentru scrierea de If Then Else -uri lungi asigurând ocitire 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

Page 240: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 îninstrucÛiune. VBA compar| valoarea acestei expresii cu valoarile din fiecare Case. Dac| seg|seÕte o egalitate va executa instrucÛiunile asociate Case-ului respectiv. Listele de expresiilistaexpresie 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 niciuna, una sau mai multe instrucÛiuni. Dac| mai multe valori din liste distincte sunt egale cuvaloarea de test, grupul de instrucÛiuni corespunz|tor primei liste va fi executat. Grupul deinstrucÛiuni opÛionale corespunz|toare lui Case Else va fi executat dac| nu s-a g|sit în niciuna 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 sepot evalua expresii diferite pentru fiecare ElseIf.

InstrucÛiuni de ciclareInstrucÛ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:

# Do...Loop # For...Next # For Each...Next # While...Wend

Ciclul Do...LoopRepet| 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][instrucÛiuni]

Loopsau

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 iavaloarea 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âtcondiÛ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 aciclului. Controlul este dat instrucÛiunii imediat urm|toare ciclului, prima linie dup| Loop sauLoop [{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.

Page 241: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

245 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Ciclul For...NextRepet| grupul de instrucÛiuni de un num|r de ori.

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Õiteste valoarea final|, pas este o valoare opÛional| fiind cantitatea cu care se modific| contor lafiecare reluare a ciclului. Dac| pas nu este specificat| se consider| implicit 1. Dac| exist|, paspoate fi pozitiv sau negativ. instrucÛiuni se execut| cât timp cât contor<=sfârÕit pentruvalori pozitive ale lui pas sau cât timp contor>=sfârÕit pentru valori negative ale lui pas. ExitFor produce saltul la instrucÛiunea imediat urm|toare liniei Next [contor] de terminare acorpului ciclului For...Next. Un caz clasic de utilizare al ciclurilor For...Next este când unciclu este în interiorul altuia, de exemplu:

For i=1 To 7For j=1 To 10

For k=1 To 9. . .

Next kNext j

Next i

Ciclul For Each...NextRepet| un grup de instrucÛiuni pentru fiecare element de tablou sau colecÛie.

For Each element In grup[instrucÛiuni][Exit For][instrucÛiuni]

Next [element]

element este o variabil| folosit| pentru parcurgerea iterativ| a elementelor din grup. PentrucolecÛii, element poate fi numai de tip Variant, variabil| obiect generic sau variabil| obiectspecific. grup este numele unei colecÛii de obiecte sau tablou. For Each...Next se începenumai 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 tuturorelementelor, când ciclul se termin| s|rindu-se la instrucÛiunea imediat urm|toare lui. Ôi aiciExit 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...WendExecut| instrucÛiuni cât tip condiÛie este True.

Page 242: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

246 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

While condiÛie[instrucÛiuni]

Wend

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 timpcondiÛie este True. Controlul revine la condiÛie dup| o execuÛie a corpului ciclului format dininstrucÛ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 utilizatorS| presupunem c| dorim s| lucr|m cu datele unei facturi într-un modul VBA. Într-un modelsimplificat, urm|toarele date ar fi de manipulat pentru fiecare facut|: ID - un num|r careidentific| unic o factur|, ContClient - num|rul de cont al clientului, Valoare - valoareade pl|tit, DFactura - data emiterii facturii, DAmanare - data pân| la care plata poate fiamânat|; DPlata - data pl|Ûii facurii, Expirata - în cazul în care factura expir|. Toateaceste date pot fi stocate în variabile simple astfel:

Dim ID As LongDim ContClient As StringDim Valoare As CurrencyDim DFactura As DateDim DAmanare As DateDim DPlata As DateDim Expirata As Boolean

Aceast| abordare are câteva probleme: ! dac| se lucreaz| cu mai multe facturi simultan, trebuie create câte un set devariabile pentru fiecare factura, acesta fiind un dezavantaj clar; ! nu exist| un mecanism intern pentru verificarea Õi manipularea datelor stocateîn aceste variabile.

O metod| de rezolvare a problemei este crearea unui tip de dat| definit| de utilizator carestocheaz| toate informaÛiile de manipulat prin:

Type FacturaID As LongContClient As StringValoare As CurrencyDFactura As DateDAmanare As DateDPlata As DateExpirata As Boolean

End Type

Pe baza acestui tip de dat| definit de utilizator se pot declara variabile noi, dup| cumurmeaz|:

Dim TestFactura As Factura

Page 243: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

247 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

TestFactura.ID = 1234TestFactura.ContClient = "AK72 - 12344"TestFactura.Valoare = 777.12345TestFactura.DFactura = DateTestFactura.DAmanare = Date + 30TestFactura.Expirata = False

Dac| dorim s| lucr|m cu mai multe facturi, tot ce trebuie s| facem, este s| declar|m maimulte 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|toarelecaracteristici:

! 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 codVBA pentru validarea valorii; ! obiectului i se pot pot implementa metode (de exemplu, pentru a verifica dac|o factur| este expirat|).

În tehnica program|rii obiectuale clasa reprezinta7 un Õablon. O variabil| de tipul clas| (uneorinumita7 s-i instant-iere) este un obiect care se creeaz| pe baza Õablonului, el avândcaracteristicile descrise de acesta. Aceste caracteristici sunt determinate de proprieta7 t-ile Õi demembrii clasei. Obiectul este o entitate care poate fi programat, manipulat sau controlat. ÎnAccess, formularele, controalele etc. sunt obiecte. O proprietate este o caracteristc| a unuiobiect, în Access, majoritatea propriet|Ûilor pot fi citite Õi scrise. O metod| reprezint| oacÛiune care poate fi efectuat| de obiect.

Crearea unei modul clas| • din fereastra bazei de date selectaÛi Modules; • clic pe butonul New; • din Insert selectaÛi Class Module; • folosit-i proprietatea Name pentru a modifica numele clasei de la Class1 laCFactura;

Tradit-ional, la specificarea numelui unei clase, acesta este prefixat cu un "C". Daca7 clasaCFactura 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 esteinstant-iat decât dupa7 ce se refera7 în cod.

Definirea membrilor data7Când se atribuie o valoare unei proprieta7 t-i din obiect, valoarea este stocata7 într-o variabila7interna7 care este accesibila7 numai respectivului obiect. Un utilizator al obiectului poatemanipula doar proprieta7 t-ile expuse, astfel datele specifice obiectului sunt protejate contramanipula7rilor directe s-i, eventual, gres-ite.

Page 244: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

248 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Prima sarcina7 , dupa7 crearea unui modul clasa7 , este specificarea acestor variabile interne claseicare se mai numesc s-i membri data7 . De obieci, se declara7 câte o variabila7 interna7 pentrufiecare data de stocat în obiect respectând regulile:

! fiecare variabila7 se declara7 folosind cuvântul cheie Private pentru a facevariabilele disponibile numai în interiorul acelui modul; ! tradit-ional, numele membrilor data7 se prefixeaza7 cu m_ pentru a indica ca7 estevorba despre un membru al unei clase.

Pentru exemplul nostru se vor declara variabile din figura urma7 toare:

Implementarea propriet|Ûilor claseiCel de al doilea pas consta7 în definirea proprieta7 t-ilor clasei. La fel ca s-i în cazul membrilordata, ideea sta7 în crearea unei proprieta7 t-i pentru fiecare articol de informat-ie stocat|. Acestpas 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 folosindcuvintele cheie Property Get Õi Property Set.

Modul de lucru cu Property GetProperty Get se foloseÕte pentru întoarcerea valorii curente a unei propriet|Ûi. Formatulgeneral pentru aceast| proprietate este:

Page 245: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

249 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Public Property Get numeproprietate( ) As tipdedat|[instrucÛiuni]numeproprietate = m_membrudat|

End Property

Folosirea lui Public face ca aceast| procedur|, sau proprietate, s| fie vizibil| pentru proceseexterne. 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 Geteste destul de rar.

Pentru exemplul nostru, propriet|Ûile Property Get folosite sunt:

Private m_ID As LongPrivate m_ContClient As StringPrivate m_Valoare As CurrencyPrivate m_DFactura As DatePrivate m_DAmanare As DatePrivate m_DPlata As DatePrivate m_Expirata As Boolean

' Intoarce valoarea curenta a valorii proprietatii CFactura.IDPublic Property Get ID() As Long ID = m_IDEnd Property

' Intoarce valoarea curenta a proprietatii CFactura.ContClientPublic Property Get ContClient() As String ContClient = m_ContClientEnd Property

' Intoarce valoarea curanta a proprietatiui CFactura.ValoarePublic Property Get Valoare() As Currency Valoare = m_ValoareEnd Property

' Intoarce valoarea curenta a proprietatii CFactura.DFacturaPublic Property Get DataFactura() As Date DataFactura = m_DFacturaEnd Property

' Intoarce valoarea curenta a proprietatii CFactura.DPlataPublic Property Get DataPlata() As Date DataPlata = m_DPlataEnd Property

Page 246: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

250 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

' Intoarce valoarea curenta a proprietatii CFactura.ExpirataPublic Property Get EsteExpirata() As Boolean EsteExpirata = m_ExpirataEnd Property

Modul de lucru cu Property LetCu excepÛia cazului în care doriÛi ca proprietatea s| poat| fi, doar citit|, trebuie definit| oprocedur| care permite atribuirea unei noi valori propriet|Ûii. În acest scop se va folosi oprocedur| Property Let care are forma general|:

Public Property Let numeproprietate(ValoareNou| As tipdedat|)[instrucÛiuni]m_membrudat| = ValoareNou|

End Property

La fel ca Õi înainte numeproprietate este numele propriet|Ûii, de asemenea, ValoareNou|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|a c|rei valoare se va modifica. Ôi aici pot fi ad|ugate instrucÛiuni în plus. Acestea testeaz|, deobicei, noua valoare înainte de a modifica membrul dat|.

Pentru CFactura, propriet|Ûile Property Let sunt:

' Modifica valoarea proprietatii CFactura.ContClientPublic Property Let ContClient(ContClient As String) m_ContClient = ContClientEnd Property

' Modifica valoarea proprietatii CFactura.ValoarePublic Property Let Valoare(Cantitate As Currency) 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 = CantitateEnd Property

' Modifica valoarea proprietatii CFactura.DFacturaPublic Property Let DataFactura(DF As Date) If DF < Date Then DF = Date MsgBox "Nu se poate introduce o factura in trecut!" & _ Chr(13) _

Page 247: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 m_DAmanare = m_DFactura + 30End Property

' Modifica valoarea proproetatii CFactura.DPlataPublic Property Let DataPlata(DP As Date) m_DPlata = m_DPlata m_Expirata = FalseEnd Property

Propriet|Ûile Property Let ContClient, Property Let ID permit modificareamembrilor dat| m_ContClient, m_ID f|r| a realiza verificarea noilor valori. ProprietateaProperty Let DataFactura permite modificarea datei facturii numai dac| aceasta estemai mare decât data curent|. În caz contrar se afiÕeaz| un mesaj prin care utilizatorul esteavertizat 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.

ObservaÛi c| nu exist| proceduri Property Let pentru propriet|Ûile ID ÕiEsteExpirata, astfel ele devin propriet|Ûi care pot fi doar citite (read-only).

Crearea metodelor claseiOrice obiect are Õi un grup de metode care acÛioneaz| asupra obiectului. În acest scop, încadrul 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.ActualizarePublic Sub Actualizare() If m_DAmanare < Date And m_DPlata = 0 Then m_Expirata = True End IfEnd Sub

Definirea evenimentelor claseiClasele definite de utilizator suport| lucrul cu dou| evenimente: Initialize ÕiTerminate.

Evenimentul InitializeAcesta apare atunci când se realizeaz| la instanÛierea obiectului de tipul clas|, adic| atuncicând:

! se declar| o variabil| obiect de tipul clasei prin folosirea lui New; evenimentulapare la prima folosire a variabilei în cod, de exemplu:

Dim test As New CFacturatest.ID = 1234 'evenimentul Initialize apare aici

Page 248: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 scrierealui Set prin care variabila este egal| cu noua instanÛiere a clasei

Dim test1 As CFacturaSet test1 = New CFactura 'evenimentul Initialize

Pentru a folosi acest eveniment se adaug| clasei o procedur| Private care foloseÕteurm|torul format:

Private Sub Class_Initialize( )[codul de iniÛializare se pune aici]

End Sub

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

' Aceasta procedura este lansata in executie la aparitia' evenimentului de clasa "Initialize"Private Sub Class_Initialize() Randomize m_ID = Int((99999 - 10000) * Rnd + 10000) m_DFactura = Date m_DAmanare = m_DFactura + 30End Sub

Evenimentul TerminateAcest eveniment apare atunci când toate referinÛele la obiectul de tipul clas| sunt setate laNothing. Se foloseÕte atunci când eliberarea clasa a alocat dinamic memorie Õi aceastatrebuie eliberat|. Pentru a folosi acest eveniment se scrie, în clasa, o procedur| Private deforma:

Private Sub Class_Terminate( )[codul pentru terminare se pune aici]

End Sub

Utilizarea claseiCodul 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

Page 249: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 Debug.Print "Este expirata = "; test.EsteExpirata test.Valoare = 120 Debug.Print "Valoarea facturii este = "; test.ValoareEnd Sub

El se va lansa în execuÛie din fereastra imediat| (Ctrl+G).

ColecÛii VBACloecÛiile VBA furnizeaz| o metod| pentru tratarea unor obiecte definite de utilizator subforma unui grup. De exemplu, dac| avem mai multe obiecte de tipul CFactura Õi se doreÕterealizarea unei acÛiuni este mai simplu dac| aceste obiecte pot fi tratate, grupat, decât,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; ! 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 valoareanumeric| 1.

Crearea unei colecÛii VBAÎntrucât colecÛiile sunt obiecte, ele se creeaz| asemenea obiectelor. Prima oar| se declar| ovariabil| obiect care se va folosi ca referinÛ| la colecÛie, apoi, se foloseÕte Set pentru a crea oreferinÛ| de la variabila obiect colecÛie. Codul, principial, este de forma:

Dim Facturi As CollectionSet Facturi = New Collection

Propriet|Ûile Õi metodele obiectului colecÛieObiectul colecÛie are o structur| foarte simpl| având o singur| proprietate Õi trei metodeprezentate î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; estemetoda implicit|

Ad|ugarea unui articol la colecÛie

Page 250: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

De exemplu, pentru ad|ugarea obiectelor test1, test2, test3 de tipul CFacturacolecÛ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 test1.ContClient = "ab-1234" test2.ContClient = "bc-5555" test3.ContClient = "ab-3334" testi.Add test1, "unu" testi.Add test2, "doi" testi.Add test3, "trei"

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 articolde 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. ArgumenteleopÛionale Înainte Õi Dup| se pot folosi pentru a specifica poziÛia obiectelor în colecÛie.

Referirea unui obiectObiectele colecÛiei pot fi referite printr-un num|r sau valoarea cheii. Când articolele se refer|printr-un num|r întreg, numit Õi index, valoarea indexului, pentru primul obiect din colecÛie,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ÛieiCel 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

Page 251: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

testi.Remove 2 testi.Remove "trei"

Ôtergerea tuturor obiectelorO metod| pentru Õtegerea tuturor obiectelor din cloecÛie este parcurgerea ei Õi apelareametodei Remove pentru fiecare articol. Exist| îns| Õi o metod| mai rapid| în care sereatribuie obiectul colecÛie unei noi colecÛii:

Set testi = New Collection

Eliberarea spaÛului folosit pentru stocarea variabilei obiectColecÛiile sunt obiecte, din acest motiv spaÛiul folosit pentru stocarea variabilei colecÛietrebuie Õi el eliberat prin codul:

Set testi = Nothing

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" test3.ContClient = "ab-3334" 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

Page 252: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

256 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

testi.Remove "trei" Debug.Print "----" For Each test In testi Debug.Print test.ContClient Next test Set testi = New Collection Set testi = Nothing End Sub

Lansarea ei în execuÛie Õi afiÕarea rezultatelor se fac din fereastra imediat|.

Crearea unei clase pentru manipularea colecÛiilorCodul care urmeaz| implementeaz| o clasa pentru manipularea unei colecÛii. Pentru aceasta seva crea o clas| nou| care va avea proprietatea Name seat| la CFacturi Õi urm|torul cod:

Option Explicit

' Membru dataPrivate m_Facturi As New Collection

' Intoarce proprietatea CInvoices.ContorPublic Property Get Contor() As Long Contor = m_Facturi.CountEnd Property

Public Property Get Facturi() As Collection Set Facturi = m_FacturiEnd Property

' Functia este versiunea romana pentru metoda AddPublic 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 = facturaNouaEnd Function

Page 253: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

257 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

' Versiunea romana pentru metoda ItemPublic Function Articol(Index As Variant) As CFactura Set Articol = m_Facturi.Item(Index)End Function

' Versiunea romana pentru metoda RemovePublic Sub Sterge(Index As Variant) m_Facturi.Remove IndexEnd Sub

Pentru testarea clasei se va folosi procedura:

Public Sub TestCFacturi2()1 Dim testi As New CFacturi2 Dim test As CFactura3 4 testi.Adauga CClient:="ab-1234", ValFact:=777.775 testi.Adauga CClient:="bc-5555", ValFact:=333.336 testi.Adauga CClient:="ab-3334", ValFact:=555.557 Debug.Print testi.Contor8 9 For i = 1 To testi.Contor10 Debug.Print testi.Articol(i).ContClient11 Next i12 13 For Each test In testi.Facturi14 Debug.Print test.ContClient15 Next test16

17End Sub18

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. Pentruca aceast| metod| de parcurgere s| poat| fi folosit| a fost nevoie de proprietatea Facturicare s| întoarc| colecÛia curent| de facuri stocat| în membrul dat| m_Facturi.

Modul de lucru cu Property SetPentru a atribui o colecÛie propriet|Ûii Facturi trebuie folosit| o procedur| PropertySet. Acest tip de procedur| se foloseÕte pentru atribuirea unui obiect la o proprietate Õi areurm|torul format:

Public Property Set numeproprietate(ObiectNou As tipdedat|)[instrucÛiuni]Set m_membrudat| = ObiectNou

End Property

Page 254: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

258 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

numeproprietate este numele propriet|Ûii, ObiectNou esteobiectul pe care dorim s|-latribuim, tipdedat| este tipul de dat| al obiectului, iar m_membrudat| este variabil| membrudat| obiect.

Property Set este o varianta7 de Property Let care permite crearea unor proprieta7 t-i obiect.Proprieta7 t-ile obiect sunt proprieta7 t-i care sunt poantori la obiecte s-i nu sunt valori scalareobies-nuite. Creat-i un nou modul clasa7 cu numele CClient.

Option Compare DatabaseOption Explicit

Private m_ContClient As StringPrivate m_NumeClient As StringPrivate m_AdresaClient As StringPrivate m_FacturiClient As CFacturi

Public Property Let NumeClient(nume As String) m_NumeClient = numeEnd Property

Public Property Get NumeClient() As String NumeClient = m_NumeClientEnd Property

Public Property Let AdresClient(adr As String) m_AdresaClient = adrEnd Property

Public Property Get AdresaClient() As String AdresaClient = m_AdresaClientEnd Property

Public Property Let ContClient(cont As String) m_ContClient = contEnd Property

Public Property Get ContClient() As String ContClient = m_ContClientEnd Property

Public Property Get FacturiClient() As CFacturi Set FacturiClient = m_FacturiClientEnd Property

Public Property Set FacturiClient(ObiecteFacturi As CFacturi)

Page 255: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

259 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Set m_FacturiClient = ObiecteFacturiEnd Property

Pentru testarea clasei creat-i procedura urma7 toare:

Public Sub TestCClient()1 Dim tc As CClient2 Dim fa As CFacturi3 4 Set tc = New CClient5 With tc6 .ContClient = "12-3456"7 .AdresClient = "Fericirii 13"8 .NumeClient = "Ionel Vasile"9 Set .FacturiClient = New CFacturi10 End With11 12 Debug.Print "----"13 With tc.FacturiClient14 .Adauga tc.ContClient, "100.00"15 .Adauga tc.ContClient, "200.108"16 For i = 1 To .Contor17 Debug.Print .Articol(i).ContClient,E18.Articol(i).Valoare19 Next i20 End With21 Debug.Print "----"22 23 Set fa = tc.FacturiClient24 For i = 1 To fa.Contor25 Debug.Print fa.Articol(i).ContClient,E26fa.Articol(i).Valoare27 Next i28End Sub29

În majoritatea cazurilor, când se modeleaza7 o problema7 cu ajutorul obiectelor, se vor ga7sirelat-ii între obiecte. Deseori, aceste relat-ii sunt reprezentate grafic, sub forma unei diagramece poarta7 denumirea de modelul de obiecte al aplicat-iei. În principal, relat-iile dintre obiectesunt de natura7 ierarhica7 . Pentru reprezentarea realt-iilor între obiecte se folosesc poantori. Sevor declara poantori la obiecte copil în sect-iunea declarat-iilor modulului clasa7 pa7rinte. Maisus, pentru a modela relat-ia între factura7 s-i client s-a declarat o variabila7m_FacturiClient în sect-iunea declarat-iilor din clasa CClient. Ea primes-te, valoare înlinia 10 a secvent-ei pentru testarea clasei, cu ajutorul proprieta7 t-ii Set. Pentru a putea accesamembrii obiectului CFacturi s-a definit proprietatea Get FacturiClient la nivelulobiectului CClient. Fa7ra7 ea, liniile 14-20, din codul de testare ar fi fost imposibil de scris.

Page 256: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 liniecare, datorita7 lungimii prea mari, nu a putut fi scrisa7 complet pe un singur rând. Pe hîrtie, liniaprea 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 claseExista7 multe asema7na7ri între funct-ia din "matematica7" s-i cea din VBA. Prin definit-ie, avânddoua7 mult-imi D, C s-i G o parte a produsului cartezian D x C, astfel încât , cuproprietatea , se numes-te funct-ie (aplicat-ie sau transformare) definita7 pe D cuvalori C tripletul . D se numes-te domeniul de definit-ie, C codomeniul funct-iei, iarG graficul lui f. Deseori, în locul notat-iei se prefera7 sau y = f(x). x se numes-tevariabila7 independenta7 sau argument, iar y variabila7 depedenta7. Elementul unic , carecorespunde lui se numes-te imaginea lui x prin f sau valoarea funct-ie în x.Fie funct-ia , pentru care D=[0,4] s-i C=[1,3], în limbajul VBA, acesta7 funct-ie sedefines-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 esteafis-at în fereastra imediata7 (Immediate window). Vizualizarea acestei ferestre se face selectânddin View, Immediate Window. Deseori, aceasta7 fereastra7 este folosita7 pentru testarea unuisubprogram din interiorul unui modul. O alta7 situatie ar fi calculul valorii unei expresii sau aunei variabile. Pentru aceasta se va folosi caracterul ? urmat de numele variabilei, expresieisau funct-iei dupa7 care se apasa7 tasta Enter. Rezultaul se va afis-a, în fereastra imediata7 , pelinia urma7 toare expresiei de calculat.

Page 257: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

261 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

Aplicat-ii cu instruct-iunea IfIf se foloses-te atunci când pe parcursul rezolva7rii problemei, în secvent-a7 de pas-i de urmat,trebuie luata7 o decizie. În "vocabularul uman" corespondentul lui If este daca7. Sa7 presupunemca7 dorim sa7 scriem o funct-ie care ga7ses-te minimul dintre doua7 valori reale. Funct-ia se va priminumele de min2, pentru ca7 va calcula minimul dintre doua7 valori s-i va avea ca parametri pe as-i b.

Solut-ia problemei într-o formulare comuna7 ar fi:

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:

Daca7 a < b Atunciminim = a

Altfelminim =b

Terminare If

If a < b Then minim = aElse minim = bEnd If

Page 258: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 If a < b Then min2 = a Else min2 = b End IfEnd Function

Daca7 , pe baza funct-iei care ga7ses-te minimul dintre doua7 valori dorim sa7 scriem o funct-ie, cunumele min3, care ga7ses-te minumul dintre trei valori, acesta va fi:

Public Function min3(a As Double, b As Double, c As Double) AsE Double min3 = min2(min2(a, b), c)End Function

Observat-i ca7 valoarea lui min3 se determina7 prin apelarea de doua7 ori a lui min2. Prima oara7se ga7ses-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 maximuluidintre doua7 respectiv trei numere. Scriet-i apoi o procedura7 Sub, cu numele minmax3, pentrucalculul valorilor minime s-i maxime bazata7 pe funct-iile de mai sus.

Procedura Sub va avea trei argumente de intrare, pe a, b s-i c s-i doua7 de ies-ire, pe vmin s-ivmax. Observat-i, în fereastra imediata7 , ca7 des-i pe ultimele doua7 pozit-ii stau parametrii de

Page 259: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 aapelului lui minmax3. Pentru a sca7pa de aceasta7 scriere ei pot fi declarat-i ca parametriiopt-ionali dupa7 cum urmeaza7 :

Public Sub minmax3v1(a As Double, b As Double, c As Double, EOptional 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 "; vmaxEnd Sub

În acest caz, subprogramul cu numele minmax3v1 va putea fi apelat din fereastra imediata7prin linia minmax3v1 1,2,3.

AplicaÛii cu instrucÛiunea ForSe d| funcÛia definit| pe intervale:

g xx e x

x x xx

xx

x

( )sin( ) ,

, [ , ]cos( ) ,

=

<

+ + ∈ −

−>

⎪⎪

⎪⎪

− 15 1 1 1

41

7 5

2

Se cere s| se scrie o procedur| de tipul funcÛie pentru calculul valorilor lui g(x) Õi una de tipulsubrutin| 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 consecutiveconsiderându-se conoscute a, b Õi n. Aceast| distant| se numeÕte pas de parcurgere a

intervalului Õi se noteaz| cu h. Dac| , atunci valoarea punctului al i-elea vah b an

=−−1

calcula folosind formula . Cele dou| proceduri sunt implementate înx a i h= + −( )1continuare. ObservaÛi c| funcÛia g(x) are un parametru care este folosit pentru a monitorizaevaluarea 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

Page 260: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 Else g = Cos(x) / (x * x - 4) End If End IfEnd Function

Public Sub afisare(a As Double, b As Double, n As Integer) Dim x As Double, aux As Double, eroare As Boolean Dim h As Double Dim i As Integer If (b < a) Then MsgBox "a < b" Exit Sub 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 Debug.Print "Evaluarea functiei a generat eroare Epentru x = "; x Else Debug.Print i; ")"; x; aux End If Next iEnd Sub

Realizarea unei clase pentru lucrul cu numere complexeÎn continuare se por prezenta câteva dintre posibilit|Ûile de implementare a operaÛiilor cunumere complexe, în VBA, folosind tehnicile de progrmare deja discutate. În prima variant|,programarea procedurarl| este folosit| pentru implementarea adum|rii a dou| numerecomplexe. CreaÛi un modul cu urm|toarele proceduri:

Sub complex_aduna(re1 As Double, im1 As Double, re2 As EDouble, im2 As Double, sumare As Double, sumaim As Double) sumare = re1 + re2

Page 261: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

265 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

sumaim = im1 + im2End Sub

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 im2 = 4 complex_aduna re1, im1, re2, im2, re, im Debug.Print re; "+i*"; imEnd Sub

Procedura pentru adunarea a dou| numere complexe are Õase parametri, primii patru sunt deintrare, iar ultimii doi sunt de ieÕire. În aceasata variant| de implementare nu exist| nici uncontrol asupra valorilor de intrare, care, pâna la urm|, pot fi orice valori numerice Õi nuneap|rat p|rÛile reale Õi imaginare are unor numere complexe. O variant| îmbun|t|Ûit| ar fifolosirea unui tip de dat| pentru reprezentarea numerelor complexe. CreaÛi un nou modu cares| fie de forma:

Type complex re As Double im As Double End Type

Function complex_aduna(c1 As complex, c2 As complex) As Ecomplex complex_aduna.re = c1.re + c2.re complex_aduna.im = c1.im + c2.imEnd 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.imEnd Sub

ObservaÛi c| tipul de dat| complex ne opreÕte s| facem greseli în utilizarea valorilor re Õi

Page 262: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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-acreat 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 detipul î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 caacestea s| poat| acÛiona numai asupr| numerelor complexe. În varianta prezentat|, funcÛiacomplex_aduna() ar putea fi folosit| încorect de cineva care nu Õtie ca ea poate lucracorect numai cu tipul de dat| complex. SoluÛia este, ca atât datele, cât Õi procedurile caremanipuleaz| datele s| fie folosite pentru definirea unui nou tip de date. În acest scop se vadefini un modul de tipul clasa cu numele CComplex, dup| cum urmeaz|:

Private re As DoublePrivate im As Double

Public Property Let imaginar(img As Double) im = imgEnd Property

Public Property Let real(rea As Double) re = reaEnd Property

Public Property Get imaginar() As Double imaginar = imEnd Property

Public Property Get real() As Double real = reEnd Property

Public Sub complex_afis() Debug.Print re; "+i*"; imEnd Sub

Public Sub aduna(a As CComplex, b As CComplex) im = a.imaginar + b.imaginar re = a.real + b.realEnd Sub

Pentru testarea clasei se va folosi modulul:

Public Sub test2() Dim x As New CComplex, y As New CComplex, z As New ECComplex x.imaginar = 1 x.real = 2

Page 263: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

267 Introducere în limbajul de programare Visual Basic for Applications - cursul 10

y.imaginar = 3 y.real = 4 z.aduna x, y z.complex_afisEnd Sub

ObservaÛi c|, aici, începând cu operaÛia de atribuire a valorilor complexe, pân| la cea deafiÕare totul se face sub controlul strict al funcÛiilor specifice clasei CComplex oriceposibilitate de eroare în utilizarea unor date sau funcÛii incorecte fiind exclus|.

Page 264: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

268 Obiecte în Visual Basic for Applications - cursul 11

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

! ce sunt colecÛiile implicite;

! care este rolul obiectelor Container Õi Document;

! ce sunt evenimentele Õi tipurile lor;

! cum se depaneaz| Õi se depisteaz| erorile din proceduri.

Obiectivele cursului 11

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 265: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 TipulAbstract de Dat|, TAD, - un tip de dat| a c|rui form| intern| este ascuns| în spatele uneifuncÛii de acces. Obiectele de acest tip sunt create Õi inspectate numai prin apeluri la funcÛiilede acces. Aceasta permite ca implementarea tipului s| fie modificat| f|r| alte modific|ri demodule î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 datelorpot fi efectuate numai prin intermediul acestor metode, care sunt comune tuturor obiectelor ces-au n|scut prin instanÛierea aceleiaÕi clase particulare. Denumirea de clas| este folosit| înPOO pentru un prototip de obiect, fiind echivalentul noÛiunii de tip derivat din limbajeleprocedurale. O clas| este determinat| de o mulÛime de obiecte cu o structur| Õi uncomportament comun. Structura clasei este determinat| de variabilele care reprezint| stareaunui obiect din acea clas|, iar comportamentul ei este dat de metodele asociate clasei. Claselese 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| areo poziÛie în ierarhia de clase. Metodele sau codul unei clase pot fi transferate în josul ierarhieiunei 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 poatead|uga noi tr|s|turi sau poate s| le redefineasc| pe unele din cele moÕtenite. Apelurile deproceduri sunt descrise în POO în termenii transferurilor de mesaje. Un mesaj specific| ometod| Õ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 seajunge la o superclas| care nu mai este derivat|. Apelurile de procedur| întotdeauna întorc unobiect 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 peobiecte sunt Smalltalk creat la Palo Alto Research Center (PARC) a lui Xerox Õi C++-ul.

Obiecte Õi ColecÛii în VBAO baz| de date Access este format| din obiectele pe care le vedeÛi în fereastra bazei de date(Database Window): tabele, interog|ri, formulare, rapoarte, macro-uri, Õi module. Acesteobiecte 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 nepermite limbajul VBA. În Access unele obiecte conÛin alte obiecte, de exemplu, un fomularconÛine controale. Aceste leg|turi dintre obiecte determin| o ierarhie de obiecte. Obiectelesunt 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Ûalui. Un obiect cu numele NumeObiect al unei colecÛii cu numele NumeColecÛie poate fireferit prin trei metode din VBA:

Page 266: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

270 Obiecte în Visual Basic for Applications - cursul 11

Sintaxa SemnificaÛie Exemplu

Metoda1

NumeColecÛie!NumeObiectNumeColecÛie![Nume Obiect]

Numele obiectuluieste explicit scrisca un membru alcolecÛiei.Parantezele dreptesunt necesare dac|numele obiectuluiconÛine spaÛii.

Forms!ClientiForms![Zi rata]

Metoda2

NumeColecÛie("NumeObiect") Numele obiectuluieste explicit scrisca un membru alcolecÛiei sau sepoate folosi ovariabil| de tipulString pentru astoca numeleacesteia.

Forms("Clienti")

sau

s="Clienti"Forms(s)

Metoda3

NumeColecÛie(index) index specific|poziÛia obiectuluidin colecÛie.

Forms(1)

Fiecare form| sintactic| are avantajele ei. Atunci când referim un singur obiect, de exemplu alunui formular sau raport, Metoda 1, cu folosirea semnului de exclamare !, este cea maisimpl|. Dac| dorim s| facem anumite acÛiuni cu un grup de obiecte, ale c|ror nume estecunoscut, vom folosi Metoda 2. Metoda 3 se foloseÕte, în general, când dorim s| parcurgemîntreaga colecÛie pentru a realiza o acÛiune cu toate obiectele acesteia. Toate obiectele aupropriet|Ûi, metode asociate Õi dac| este cazul, proceduri de evenimente. Fiecare obiect areo mulÛime de caracteristici denumite propriet|Ûi. Acestea pot controla, de exemplu, modul deafiÕ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:

Page 267: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

271 Obiecte în Visual Basic for Applications - cursul 11

Declarat-iavariabilei obiect

Atribuireavarabilelor obiect

Forms![Clienti].Caption="Salutare!"

Fiecare colecÛie are o proprietate Count care conÛine num|rul actualizat de obiecte alecolecÛiei. Primul membru are index-ul 0 iar ultimul Count-1. Aceast| proprietate permiteparcurgerea unei colecÛii de obiecte.De exemplu, dac| dorim s| set|m titlurile tuturorformularelor deschise la "Formular nr. x", unde x este num|rul ordine al formularului dincolecÛie se poate scrie procedura Sub:

Sub ModificaCaption()Dim i As IntegerFor i=0 To Forms.Count-1

Forms(i).Caption = "Formular nr. " + str(i)Next

End Sub

Variabilele de tipul obiectDac| baza de date este mare, specificarea unor obiecte individuale în liniile procedurilor ducela programe greu de întreÛinut. În plus, uneori se poate s| dorim executarea aceloraÕi operaÛiicu obiecte diferite. În VBA exist| variabila obiect c|reia se poate asocia un tip de obiect.

O variabil| de tipul obiect se declar| dup| aceeaÕi sintax| cu avariabielor obiÕnuite prin folosirea lui Dim, ReDim, Static, Private sauPublic.

Atribuirea unei valori pentru cazul variabilelor obiect se face folosindinstrucÛiunea Set dup| sintaxa:

Set numevariabil| = ExpresieObiect

Dup| ce variabila a fost declarat| Õi i-a fost atribuit| o valoare se poate folosi asemeneaoric|rei varabile.

Obiecte Microsoft AccessNu toate obiectele lui Access pot fi reprezentate prin variabile. Tabelul care urmeaz| descrieobiectele Access utilizate mai des, specificând dac| pot s| participe sau nu într-o declaraÛie devariabil|.

Nume obiect Descriere Poate fi untip 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 uneiproceduri.

Nu

Form Formular sau subformular deschis. Da

Page 268: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

272 Obiecte în Visual Basic for Applications - cursul 11

Forms ColecÛie de formulare deschise. Nu

Module Modul de formular sau raport. Nu

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

Obiecte pentru accesul la datePe lâng| obiectele definite de aplicaÛia Microsoft Access, motorul bazelor de date MicrosoftJet, defineÕte obiecte pentru operaÛiile de gestionare a datelor din aplicaÛie. Aceste obiectepoart| denumirea de obiecte pentru accesul la date (Data Access Objects sau DAO) Õi pot fifolosite î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 accesla date utilizate mai des, specificând dac| pot s| participe sau nu într-o declaraÛie de variabil|.

Nume obiect Descriere Poate fi un tipobiect?

Container Obiect care conÛine informaÛii despre alte obiectedefinite de Microsoft Access sau motorul Jet.

Da

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într-o macro procedur|.

Nu

Page 269: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

273 Obiecte în Visual Basic for Applications - cursul 11

Document InformaÛii ale motorului Jet al bazelor de dateMicrosoft despre alte obiecte din baza de date.

Da

Documents ColecÛie de obiecte Document. Nu

Field Câmp al unui tabel, interogare, mulÛime deînregistr|ri, index sau relaÛie.

Da

Fields ColecÛie de obiecte Field ale unui tabel,interogare, mulÛime de înregistr|ri etc.

Nu

Parameter Parametru de interogare. Da

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

RecordSet MulÛime de înregistr|ri definite printr-un tabel sauinterogare.

Da

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 almotorului Jet al bazelor de date.

Da

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

Ierarhia DAO este prezentat| în figura care urmeaz|.

Cele dou| ierarhii prezentate pân| acum nu conÛin obiecte ci ceea ce în capitolul introductivnumeam 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 estetipul de dat|, iar variabila de acel tip este x, dac| scriem Dim spl As Workspace, clasaeste Workspace, iar variabila de acel tip este obiectul spl.

Determinarea tipului unui obiect de tipul ControlDac| o variabil| este declarat| de tipul Control, dar nu este specificat un tip de obiectcontrol concret este posibil s| dorim determinarea tipului de control care este stocat învariabil|. Î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 TipControlpoate fi unul dintre cuvintele rezervate: BoundObjectFrame, CheckBox, ComboBox,

Page 270: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

274 Obiecte în Visual Basic for Applications - cursul 11

CommandButton, Graph, Line, ListBox, UnboundObjectFrame,OptionButton, OptionGroup, Rectangle, Subform, Subreport, TextBox,ToggleButton, Label, PageBreak.

Un exemplu de procedur| care afiÕeaz| în fereastra imediat| tipul unui control este:

Sub DeterminaTipControl(VarControl As Control)If TypeOf VarControl Is CommandButton Then

Debug.Print "Controlul este de tipul " &ETypeName(MyControl)

ElseIf TypeOf VarControl Is CheckBox ThenDebug.Print "Controlul este de tipul " &E

TypeName(VarControl)ElseIf TypeOf VarControl Is TextBox Then

Debug.Print "Controlul este de tipul " &ETypeName(VarControl)

End IfEnd Sub

Unele propriet|Ûi ale obiectelor folosite mai desUneori dorim s| realiz|m modificarea atributelor unor obiecte din cauza unor condiÛiiconcrete ale aplicaÛiei. De exemplu, dorim s| realiz|m ascunderea unui control de tipul textpentru c| din lipsa unor date afiÕate nu este cazul s| fie afiÕat pe suprafaÛa formularului

Page 271: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

275 Obiecte în Visual Basic for Applications - cursul 11

deschis.

Propriet|Ûile obiectului ScreenPropriet|Û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.

Screen.ActiveReport Raportul curent activ.

Screen.ActiveControl Controlul unui formular care la momentul curent esteactiv.

În documentaÛia tehnic| original|, obiectul curent de interfaÛ| cu utilizatorul care este activ sezice c| are focus-ul (focus = focalizare în limba englez|).

Propriet|Ûi ale formularelor Õi rapoartelorFiecare formular sau raport are o proprietate numit| Me (Eu) care reprezint| formularul sauraportul însuÕi în codul care se execut|. Pentru a exploata aceast| proprietate pentru formularetrebuie s|: • creaÛi o procedur| public| care are un parametru de tipul Form Õi în care setaÛi oproprietate a formularului; • apelaÛi procedura cu argumentul Me pentru a modifica parametrul respectiv alformularului curent.

S| presupunem c| scriem o procedur| Sub pentru colorarea automata7 a sect-iunii de detalii aformularelor când acestea deschise:

Sub ColoreazaFormular (frm As Form)frm.Section(acDetail).BackColor = RGB(255,255,0)

End Sub

Apelând aceast| procedur| cu proprietatea Me în evenimentul Open (Deschidere) aformularului efectul va fi de modificare a culorii fondului formularului la verde (operat-ia nuse 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

Page 272: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 raportulactiv, iar proprietatea Me reprezint| formularul sau raportul al c|rui cod este în curs deexecuÛie (atunci când folosiÛi evenimentul Timer este posibil ca o procedur| a unui formulardeschis s| fie activat| la momente de timp definite de programator, în timp ce pe ecran maiexist| un alt formular deschis Õi activ, adic| care comunic| cu utilizatorul) .

ColecÛii impliciteGruparea obiectelor în colecÛii, a plecat în Access, de la ideea c| obiectele pot conÛine alteobiecte. Aceste leg|turi sunt cele care creeaz| ierarhia de obiecte. De exemplu, o baz| de dateconÛ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 suntgrupate în colecÛii. ColecÛiile pot fi privite asemenea unui tablou declarat automat de Accessla ale c|rui elemente ne referim prin denumirea de element de colecÛie. Din moment ce ocolecÛie este un obiect, aceasta are propriet|Ûile Õi metodele ei proprii. Multe obiecte au ocolecÛie implicit| de obiecte care grupeaz| cele mai probabile obiecte ce vor fi folosite. Deexemplu, Forms are o colecÛie implicit| de controale, iar Databases are o colecÛieimplicit| TableDefs. Nu exist| o colecÛie de obiecte controale, ne referim la un astfel deobiect ca la un membru al colecÛiei implicite a formularului sau raportului. De exemplu,Forms![Clienti]![IDClient] se refer| la controlul IDClient al formularuluiClienti din colecÛia implicit| de controale a formularului. Când lucraÛi cu DAO colecÛiileimplicite se pot folosi pentru o scriere mai scurt| a obiectului de identificat, deÕi folosindaceast| scriere relaÛia dintre obiecte devine mai criptic|, de exemplu, o referire la tabelulTClienti se poate scrie astfel:

DBEngine.Workspaces(0).Databases(0).TableDefs("TClienti")

sauDBEngine(0)(0)!TClienti

În primul caz, elementele colecÛiilor sunt scrise explicit, în al doilea cunoscându-se colecÛiileimplicite se trec numai index-urile corespunz|toare. Tabelul care urmeaz| prezint| câtevadintre 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

Page 273: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

277 Obiecte în Visual Basic for Applications - cursul 11

Crearea uneiproceduri Sub

TableDef Fields

User Groups

Workspace Databases

Propriet|Ûi ale obiectelor Õi colecÛiilorObiectele 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 dinbaza de date, afiÕând în fereastra imediat| numele propriet|Ûii Õi valoarea ei, dac| exist|.

• deschideÛi baza de date Northwind; • din fereastra bazei de date clic pe butonul Modules; • clic pe butonul New pentru a crea un modul nou;

• din meniul Insert selectaÛi Procedure; • daÛi numele PropTabel procedurii Sub, acceptaÛi toate celelalte set|ri implicite Õiclic 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)

For i = 0 To tbd.Properties.Count - 1

Debug.Print tbd.Properties(i).Name;Etbd.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 unuitabel din baza de date, de exemplu Orders sub forma PropTabel "Orders":

Page 274: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

278 Obiecte în Visual Basic for Applications - cursul 11

• la ap|sarea tastei Enter procedura va fi lansat| în execuÛie, iar rezultatle se vor afiÕasub 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)

For i = 0 To frm.Properties.Count - 1

Debug.Print frm.Properties(i).Name;Efrm.Properties(i).Value

Next

End Sub

Pentru exemplificarea parcurgerii unei colecÛii de obiecte prezint în continuare aceeaÕiprocedur| scris| folosind For Each...Next:

Public Sub PropFormular(NumeFormular As String)

Dim prp As Property

Page 275: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

279 Obiecte în Visual Basic for Applications - cursul 11

For Each prp In Forms(NumeFormular).Properties

Debug.Print prp.Name; prp.Value

Next

End Sub

ObservaÛi c| se foloseÕte colecÛia Forms care conÛine numai formularele deschise ale bazeide date. Din acest motiv, argumentul procedurii PropFromular trebuie s| fie un nume deformular care este deschis. Pentru ca s| puteÛi deschide formularul Customer Orders dinmeniul Window selectaÛi Northwind: Database. Clic pe butonul Forms din fereastra bazeide 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Ûieprocedura scriind PropFormular "Customer Orders". Fereastra Debug Windowpermite afiÕarea imediat| a valorilor unor variabile din procedurile aplicaÛiei. Figura careurmeaz| prezint| cele patru ferestre care au fost parcurse folosind meniul Windows pentru adeschide un formular. Este posibil s| aveÛi deschise mai multe formulare la un moment dat, înacelaÕi timp puteÛi avea mai multe module deschise între care puteÛi comuta folosind meniulWindows. Meniul va conÛine numele tuturor obiectelor Access din fereastra bazei de datecare sunt deschise, indiferent de modul lor de vizualizare (foaie de date, proiectare, formularetc.).

Obiectele Container Õi DocumentInformaÛiile legate de baza de date curent| Õi toate obiectele ei sunt stocate de Access înobiectele Container Õi Document. Acestea pot fi folosite pentru enumerarea obiectelorstocate în baza de date, modificarea proprietarului (ownership), obiectelor sau a drepturilorde acces ale utilizatorilor (user permission) la obiectele din baza de date. Fiecare baz| dedate conÛine o colecÛie Containers format| din obiecte Container. Unele dintre acesteobiecte sunt definite de Access, altele de motorul Jet al bazelor de date Access:

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

Page 276: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

280 Obiecte în Visual Basic for Applications - cursul 11

InformaÛiile individuale ale unui obiect salvat sunt conÛinute în obiectul Container care areo colecÛie Documents. Fiecare obiect Document din colecÛia Documents stocheaz|informaÛii despre un obiect individual. De exemplu, obiectul Container pentru obiecteleForms are o colecÛie Documents care include câte un obiect Document pentru fiecareobiect salvat în baza de date.

Nota7: DeÕi folosesc acelaÕi nume, obiectul Container pentru obiectele Forms Õi colecÛiaForms sunt obiecte distincte. În primul caz g|sim numai informaÛii legate de formularelesalvate f|r| a conÛine obiectele în sine. ColecÛia Forms conÛine obiectele de tipul Formdeschise. De exemplu, nu se poate folosi obiectul Documents pentru a modifica titlul unuiformular, pentru aceasta trebuie s| ne referim direct la obiect prin colecÛia Forms. Proceduracare urmeaz| afiÕeaz| toate obiectele Õi propriet|Ûile acestora din colecÛia Containers alebazei de date curente:

Public Sub AfisarePropContainere()

Dim db As Database

Dim ctr As Container

Dim prp As Property

Page 277: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

281 Obiecte în Visual Basic for Applications - cursul 11

Set db = CurrentDb()

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

Next ctr

db.Close

End Sub

Procedura care urmeaz| afiÕeaz| toate formularele salvate în baza de date curent|:

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

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

Page 278: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

282 Obiecte în Visual Basic for Applications - cursul 11

Specificarea uneiproceduri detratare a unuieveniment

• apariÛia unor erori.

Access-ul r|spunde automat la evenimentele care apar în cazul unor obiecte cucomportament 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. Amvorbit deja despre proceduri de evenimente, în figura care urmeaz| se prezint| un obiect

formular, în ferestra propriet|Ûilor (din dreapta) observaÛi propriet|Ûile de eveniment specificeacestui obiect.Comportamentul unui obiect se poate defini prin procedurile de evenimente pentru cazulapariÛiei unui eveniment la care obiectul ar putea reacÛiona (r|spunde). În cazul apariÛiei unuieveniment care este afiÕat în lista propriet|Ûilor obiectului r|spunsul este determinat astfel: • dac| numele propriet|Ûii eveniment nu este specificat, Access-ul r|spunde prinlansarea 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-ulexecut| procedura de eveniment corespunz|toare.

• deschideÛi baza de date Northwind; • vizualizaÛi formularul Customer Labels Dialog în modproiectare; • clic oriunde în afara suprafeÛei formularului, apoi clic pebutonul 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 specificeobiectului curent;

Page 279: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

• în dreapta lui On Open apare textul [Event Procedure], pentru începereaedit|rii procedurii de eveniment corespunz|toare evenimentului On Open, care apare ladeschiderea formularului, clic pe butonul din dreapta cu trei puncte.

Numele procedurii de eveniment este dat conform convenÛiei deja cunoscute, utilizatorul vaintroduce codul dorit între liniile Private Sub Form_Open ... Õi End Sub. Esteposibil ca Access-ul s| apeleze o funcÛie definit| de utilizator ca r|spuns la apariÛia unuieveniment, în acest caz în locul textului [Event Procedure] se va introduce semnul =urmat de numele procedurii funcÛie.

Tipuri de evenimenteAtunci când utilizatorul deruleaz| o operaÛie cu un obiect, Access-ul lanseaz| o secvenÛ| deevenimente. De exemplu, când se deschide un formular evenimentele care apar sunt: Open, Load

Page 280: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

284 Obiecte în Visual Basic for Applications - cursul 11

Deschiderea unuiformular

Închiderea unuiformular

Õ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. Deexemplu, la apariÛia evenimentului Open se poate închide o alt| fereastr| deschis|, iar înainteca formularul s| devin| activ, se poate afiÕa o bar| de instrumente specific| lui. O parte dinevenimente pot fi anulate, de exemplu, se poate anula deschiderea unui formular dac| anumitecondiÛ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 cuformularul sau raportul.

de focalizare Activate, Deactivate, Enter, Exit, GotFocus,LostFocus

Obiectul primeÕte sau pierdefocalizarea sau devine activrespectiv inactiv.

de date AfteDelConfirm, AfterInsert, AfterUpdate,BeforeDelConfirm, BeforeInsert,BeforeUpdate, Change, Current, Delete,NotInList, Update

Se fac modific|ri ale datelor sauînregistr|rilor.

de mouse Clic, DblClick, MouseDown, MouseMove,MouseUp

Apare o acÛiune cu mouse-ul.

de tastatur| KeyDown, KeyPressed, KeyUp Utilizatorul apas| taste saufoloseÕte funcÛia SendKeys pentrutransmiterea unei acÛiuni.

de tip|rire Format, Print, Retreat Un raport este tip|rit sau esteformatat în vederea tip|ririi.

de ceas Timer Generat de Access la intervale detimp definite de utilizator.

de eroare Error Generat de Access dac| a ap|rut oeroare în procedurile Access.

Evenimente specifice formularelor Õi controalelorDac| deschideÛi un formular care conÛine un control activ, adic| uncontrol care poate primi focalizarea, urm|toarele evenimente suntdeclanÕ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 deevenimente declanÕate de Access este: Unload - Deactivate - Close. Dac|nu sunt controale active în formular, Access-ul declanÕeaz| Õi

Page 281: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

285 Obiecte în Visual Basic for Applications - cursul 11

Intrarea într-uncontrol

Ies-irea dintr-uncontrol

Comutarea întredoua7 formularedeschise

Modificarea unuitext într-un TextBox sau ComboBox

Actualizarea datelorîntr-un control sauîntregistrare

evenimentul LostFocus între evenimentele Unload Õi Deactivate.

Când se deschide un formular care conÛine unul sau mai multecontroale 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-uldeclanÕeaz| numai evenimentul GotFocus pentru control.

La ieÕirea dintr-un control, de exemplu prin selectarea unui altuicontrol, urm|toarea secvenÛa de evenimente este declanÕat|: Exit -LostFocus

Dac| se comut| între dou| formulare deschise care conÛin controaleactive, Access-ul declanÕeaz| evenimentele Deactivate Õi Activate aleprimului formular (F1), de pe care se comut| Õi ale celui de al doilea(F2), pe care se comut| astfel: Deactivate(F1) - Activate(F2). Dac| nuexist| controale active pe formulare, ordinea declanÕ|rii evenimentelor

este: LostFocus(F1) - Deactivate(F1) - GotFocus(F2) - Activate(F2).

Evenimente de dateEvenimente 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 ComboBox apare evenimentul Change. El apare la fiecare modificare aconÛinutului controlului Õi înainte de trecerea pe un alt control sauînregistrare. De exemplu, într-un Text Box pentru fiecare introduceresau Õ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 altcontrol al formularului se declanÕeaz| evenimentele BeforeUpdate înaintede reîmprosp|tarea controlului Õi AfterUpdate dup| reîmprosp|tarea controlului. De exemplu, dac| se reîmprosp|teaz| datele dintr-unText 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

Page 282: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

286 Obiecte în Visual Basic for Applications - cursul 11

Inserarea uneiînregistrari

S, tergerea uneiînregistra7ri

selectarea lui Save Record din meniul File, apar evenimentele BeforeUpdate Õi AfterUpdate atâtpentru control cât Õi pentru formular. De exemplu, dac| se adaug| un caracter într-un TextBox Õi apoi selectaÛi Save Record, secvenÛa de evenimente care apare este: KeyDown -KeyPressed - Change -KeyUp - BeforeUpdate(TB) - AfterUpdate(TB)- BeforeUpdate(F) - AfterUpdate(F).

La introducerea de date într-o înregistrare nou|, Access-ul declanÕeaz|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 deevenimente 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Ûaevenimentelor declanÕate este: BeforeUpdate(TB1) - AfterUpdate(TB1) - Exit(TB1) -LostFocus(TB1) - Enter(TB2) - GotFocus(TB2) - MouseDown(TB2) - MouseUp(TB2) - Click(TB2) -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 evenimentelordeclanÕate este: BeforeUpdate(TB2) - AfterUpdate(TB2) - AfterUpdate(F) - AfterInsert(F).

La selectarea unei înregistr|ri pentru Õtergere prin ap|sarea tastei DelAccess-ul declanÕeaz| evenimentul Delete. Dac| evenimentul nu esteanulat, se declanÕeaz| Õi evenimentele BeforeDelConfirm Õi AfterDelConfirm.SecvenÛele declanÕate sunt în ordinea: Delete - Current - BeforeDelConfirm

se afiÕeaz| fereastra de dialog:

apoi se declanÕeaz| evenimentul AfterDelConfirm dac| în fereastra de mai sus s-a ap|sat butonulYes.

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, ResponseEAs Integer)

. . .

Page 283: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

287 Obiecte în Visual Basic for Applications - cursul 11

Cancel = True

Response=AacDataErrContinue

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| evenimentulBeforeDelConfirm este anulat, datele sunt ref|cute din aceast| zon| temporar|. Pentru evitareaafiÕ|rii ferestrei de confirmare a Õtergerii se poate seta parametrul Response la valoareaacDataErrContinue.

Exist| proceduri de eveniment cu parametri care prin valori atribuite în corpul lor potmodifica secvenÛa de prelucrare a evenimentelor care urmeaz| dup| procedura în cauz|. Celemai frecvente cazuri sunt când dorim s| anul|m un eveniment asociat unei proceduri deeveniment. Urm|toarele evenimente fac parte din categoria celor care pot fi anulate:BeforeDelConfirm, BeforeInsert, BeforeUpdate, DblClick, Delete, Error, Exit, Format, Open, Print, Unload.

Evenimente impliciteUnele tipuri de obiecte sunt folosite mai des pentru anumite acÛiuni c|rora le corespunde uneveniment specific. De exemplu, un obiect buton va fi cel mai des ap|sat, acÛiunea de ap|sareva declanÕa evenimentul Click. Pentru a simplifica scrierea procedurilor de evenimente s-audefinit evenimente implicite. Când creaÛi un control, dac| acesta este selectat Õi ap|saÛibutonul 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|toareevenimentului implicit al controlului. Tabelul care urmeaz| prezint| lista evenimentelorimplicite ale obiectelor Access:

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

Page 284: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

288 Obiecte în Visual Basic for Applications - cursul 11

Option Button Click

Option Group BeforeUpdate

Rectangle Click

Report Open

Section Format

Subform Enter

Text Box BeforeUpdate

Toggle Button Click

Unbound Object Frame Update

Erori Õi proceduri de tratare a erorilor Î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 dinproceduri. Limbajul VBA detecteaz| aceste erori în timpul compil|rii de exemplu, prinfolosirea opÛiunii Compile All Modules din meniul Debug (acest meniu este afiÕat cândvizualiz|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 aopÛiunii Auto Syntax Check. Aceast| opÛiune controleaz| momentul în care VBA va raportaerorile de sintax|. Când opÛiunea este validat|, VBA-ul va afiÕa mesajul de eroare într-ofereastr| de dialog imediat cum se p|r|seÕte linia care conÛine eroarea de sintaxa în timpulfazei de creare a procedurii; • erori în timpul execuÛiei aplicaÛiei: apar din cauz| c| Access-ul nu poate executa oanumit| instrucÛiune, un exemplu clasic este cel al împ|rÛirii cu zero. VBA nu poate executaoperaÛia de împ|rÛire dac| împ|rÛitorul unei expresii ia valoarea 0; • erori logice: sunt erori care apar datorit| scrierii unor secvenÛe de intrucÛiuni corectesintactic Õi care pot fi executate de VBA, dar care logic sunt invalide motiv pentru care producrezultate 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 Õidepistarea erorilor pe timpul execuÛiei aplicaÛiilor Access. Depanarea programelor este multuÕurat| dac| se respect| urm|toarele reguli: • aplicaÛia va fi divizat| în proceduri de tipul Sub Õi Function cu rol clar, fiecare avândnume corespunz|toare acÛiunii pe care o realizeaz| Õi comentarii care descriu modul deoperare a procedurii împreun| cu rolul fiec|rui parametru. În VBA, o linie comentariu începeprin caracterul ' (apostrof) sau cu textul REM urmat de un spaÛiu Õi textul comentariului, iat|câteva exemple:

Page 285: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

289 Obiecte în Visual Basic for Applications - cursul 11

Suspendareaexecut-iei uneiproceduri

'*************************************************************

Rem * NumeTabel este un sir de caractere care contine *

Rem * numele tabelului ale carui proprietati vor fi afisate *

• folosiÛi instrucÛiunea Option Explicit în secÛiunea declaraÛiilor pentru fiecaremodul. 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ÕteOption Explicit un mesaj de eroare va fi dat la scrierea unui astfel de nume devariabile; • examinaÛi funcÛionarea codului în vederea depist|rii instrucÛiunilor cu probleme prin

folosirea punctelor de întrerupere (Breakponit) care suspend| temporar execuÛia codului; • folosiÛi fereastra pentru depanare (Debug Window) în vederea examin|rii valorilorunor 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|instrucÛiune din cod este posibil| suspendarea execuÛiei codului laatingerea unei instrucÛiuni. VBA permite folosirea punctelor deîntrerupere sau a instrucÛiunii Stop în acest scop. La folosirea unuipunct 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.

Page 286: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

290 Obiecte în Visual Basic for Applications - cursul 11

Scoaterea unui punct de întrerupere se face prin poziÛionarea pe instrucÛiunea marcat|, apoiclic pe aceeaÕi pictogram|.

Cazurile de mai sus au fost întreruperi executate voit de programator, dar VBA va suspendaexecuÛia codului Õi în cazul în care apare o eroare la execuÛia unei instrucÛiuni, acestea senumesc erori în execuÛie.

Not|: Utilizatorul poate întrerupe de la tastatur| execuÛia unui cod prin combinaÛia de tasteCtrl+Break, de exemplu pentru o porÛiune de program care a intrat într-un ciclu infinit.

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 selectapictograma Reset, ca urmare toate variabilele numerice îÕi pierd valoarea actual| Õi vor firesetate la valoarea 0, variabilele de tipul Variant primesc valoarea Empty, Õirurile culungime variabil| valoarea "" iar cele cu lungime fix| sunt iniÛializate cu valoarea ASCII 0.

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 controlulutilizatorului, pentru vizualizarea modific|rilor aduse de aceasta variabilelor sau obiectelordin baza de date. Pentru execuÛia pas cu pas a codului se va folosi pictograma (StepInto), VBA va executa instrucÛiunea curent| Õi avanseaz| automat la urm|toarea dup| caresuspend| execuÛia codului. Este posibil ca uneori s| fim siguri de funcÛionarea corect| a uneiproceduri Õ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 pastoate 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.

Fereastra pentru DepanareCând se creeaz| Õi testeaz| procedurile VBA este posibil s| doriÛi vizualizarea valorilor unorexpresii, variabile, propriet|Ûi sau câmpuri. Pentru acest scop a fost creat| fereastra pentrudepanare (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 sauFunction apelându-le direct din aceasta. Pentru a vizualiza valorile unui obiect trebuie s| nepoziÛ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 deprogram ArieCerc = pi * R ^ 2 a fost marcat| cu un punct de întrerupere. ProceduraArieCerc 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ÛiuneaDebug.Print folosit| pentru afiÕarea valorii unei variabile în ferestra imediat| (ImmediateWindow - partea de jos a ferestrei de depanare). În codul VBA, Debug.Print se poatefolosi pentru afiÕarea unor valori în fereastra imediat|. Fereastra de depanare nu se deschideautomat la întâlnirea unei instrucÛiuni Debug.Print în cod, aceasta trebuie deschis| de

Page 287: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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|la cap|t prin selectatrea pictogramei (Go/Continue).

Depanarea procedurilor de evenimenteUnele evenimente care Ûin de sistemul de operare Microsoft Windows pot pune probleme ladepanarea unor proceduri de eveniment VBA pe care le declanÕeaz|. Uneori este necesar s|modificaÛi valorile pe care le iau anumite variabile legate de evenimente pentru ca depanareas| 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ândveÛ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 eliberatdin 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Ûiaunor mesaje inconsistente, evitarea situaÛiei f|cându-se prin folosirea lui Debug.Print pelocul punctului de întrerupere.

Page 288: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

292 Obiecte în Visual Basic for Applications - cursul 11

Aplicat-ie

Page 289: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

293 Tratarea erorilor în VBA s- i Access SQL - cursul 12

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

! instrucÛiunile de baza ale limbajului SQL:

- SELECT pentru selecÛii împreun| cu clauzele SELECT, FROM,

WHERE, ORDER BY;

- predicatele ALL, DISTINCTROW Õi DISTINCT;

- operatorul de reuniune;

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

Obiectivele cursului 12

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 290: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

294 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Tratarea erorilor în VBAErorile 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| posibilitateaapariÛiei unei erori, în loc ca Access-ul s| fie l|sat s| afiÕeze un mesaj de eroare, prin folosireaunui 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. Tratareaerorii const|, fie în corectarea automat| a ei, fie prin atenÛionarea utilizatorului asupra uneisecvenÛe de acÛiuni pe care trebuie s| le deruleze pentru evitarea acesteia. În continuare seprezint| metode de tratatre a erorilor în cursul execuÛiei aplicaÛiei. Erorile datorate scrieriiincorecte ale unor instrucÛiuni se g|sesc în faza de compilare a modulului în cauz|, cele deexecuÛie se rezolv| conform tabelului:

Unde apare eroarea Cum se trateaz|

Formular sau raport Se scrie cod pentru procedura de eveniment Error a obiectuluirespectiv.

În codul VBA Se foloseÕte instrucÛiunea On Error pentru prinderea ei Õi oporÛiune de program specific| pentru tratarea ei.

Folosirea evenimentului ErrorCâ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|ÛiiOn Error la [EventProcedure] Õi apoi realizând clic pe butonul . Un exemplu delucru ar putea fi ad|ugarea codului urm|tor formularului TContacte1 subform creat în cursul8. 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|, înlimba român|, asupra incorectitudinii acÛiunii.

Private Sub Form_Error(DataErr As Integer, Response AsInteger)

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"

Page 291: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

295 Tratarea erorilor în VBA s- i Access SQL - cursul 12

MesEr = MesEr & " trebuie sa existe o inregistrare" & NL

MesEr = MesEr & "in TTipContacte."

MsgBox MesEr, vbCritical, "Violare a integritatiiEreferentiale"

Response = acDataErrContinue

End Select

End Sub

ApariÛia unei erori în TContacte1 subform face ca Access-ul s| execute proceduraForm_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 înlist|. InstrucÛiunea Select Case foloseÕte aceast| valoare pentru a prinde eroarea Õi a genera oacÛ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 unuimesaj de eroare standard. Întrebarea care se pune este de unde s| cunoaÕtem valoareanumeric| corespunz|toare tuturor erorilor care pot s| apar|? În exemplul de mai sus am scrisliniile:

Debug.Print DataErr, Error(DataErr)

Stop

înainte de scrierea celorlate linii de cod pentru a afla valoarea numeric| în cauz|. Pe ecran, înferestra 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 uneivalori incorecte. Apoi, aceste linii vor fi transformate în comentarii Õi codul poate fi introdusîn continuare.

Este posibil| sugerarea unor acÛiuni pe care utilizatorul trebuie s| le fac| pentru evitareaerorii, de exemplu se poate ad|uga codul DoCmd.OpenForm "FTTipContact" ce vadeschide formularul în care trebuie introduse noile tipuri de contacte. Pentru aceastaprocedura se va scrie sub forma:

Private Sub Form_Error(DataErr As Integer, Response AsEInteger)

Dim MesEr As String, NL As String

NL = Chr$(13) & Chr$(10)

'Debug.Print DataErr, Error(DataErr)

'Stop

Page 292: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

296 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Select Case DataErr

Case 2237

MesEr = "Conform integritatii referentiale," & NL

MesEr = MesEr & "Pentru IDInfContact dinETContacte1"

MesEr = MesEr & "trebuie sa existe o inregistrareE" & NL

MesEr = MesEr & "TTipContacte."

MsgBox MesEr, vbCritical, "Violare a integritatiiEreferentiale"

SendKeys "{ESC}", True

DoCmd.OpenForm "FTTipContact"

Response = acDataErrContinue

Case Else

Response = acDataErrDisplay

End Select

End Sub

Procedura SendKeys transmite ferestrei curente una sau mai multe taste ca Õi când acestea arfi tastate prin ap|sare de la tasatatur|. În cazul de mai sus s-a folosit tasta Esc, care va anulamodific|rile f|cute în controlul (sau câmpul) curent.

InstrucÛiunea On ErrorErorile în timpul execuÛiei codului VBA pot fi tratate prin folosirea instrucÛiunii On Error Õiad|ugarea codului corespunz|tor trat|rii erorii. InstrucÛiunea On Error va fi codul VBA carese va executa, în caz de eroare, ea specificând modul în care va fi tratat| eroarea ap|rut|. Esteposibil ca mai multe instrucÛiuni On Error s| apar| într-o singur| procedur|, dar numai ceamai recent| este activ|. On Error are mai multe variante care vor fi discutate în continuare.

InstrucÛiunea On Error GoTo eticheta7

Aceast| form| este cea mai puternic| modalitate de tratare a erorilor pentru c| permitecontrolul cel mai flexibil asupra celor ce vor fi de f|cut în cazul apariÛiei erorilor. Pentruforma On Error GoTo eticheta7 VBA va s|ri la o porÛiune de cod specific|, marcat| prinetichet|. PorÛiunea de cod care urmeaz| exemplific| cea mai comun| variant| de tratare aerorilor:

Sub ProceduraGenericadeTratareaErorilor()

Page 293: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

297 Tratarea erorilor în VBA s- i Access SQL - cursul 12

On Error GoTo CodGenericPentruTratareaErorilor

'Orice cod care poate genera o eroare în timpul execut-iei lui

Iesire_in_caz_de_Eroare:

Exit Sub

CodGenericPentruTratareaErorilor:

'Codul pentru tratarea erorii

MsgBox Err.Description

Resume Iesire_in_caz_de_Eroare

End Sub

Când o eroare apare, controlul este dat etichetei specificate în linia On Error GoToCodGenericPentruTratareaErorilor. Eticheta trebuie s| apar| scris| în cadrulaceleiaÕi proceduri cu instrucÛiunea On Error GoToCodGenericPentruTratareaErorilor. Prin convenÛie, codul pentru tratarea erorii sescrie 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 OnClick este:

Private Sub Command13_Click()

On Error GoTo Err_Command13_Click

DoCmd.Close

Exit_Command13_Click:

Exit Sub

Err_Command13_Click:

MsgBox Err.Description

Resume Exit_Command13_Click

End Sub

Page 294: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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Ûianormal| a liniilor din program. Dac| o eroare a ap|rut controlul este dat porÛiunii de cod caretrateaz| eroarea aceast| fiind o starea special| a procedurii în care: < codul de tratare a erorii definit prin instrucÛiunea On Error GoToCodGenericPentruTratareaErorilor nu mai are efect. Aceasta înseamn| c| încazul apariÛiei unei erori în porÛiunea de cod care trateaz| prima eroare, noua eroare estetratat| ca Õi cum nu exist| un cod pentru tratarea acesteia; < se poate folosi instrucÛiunea Resume (care va fi descris| în paragraful urm|tor) pentrua reda controlul procedurii principale Õi pentru a relua modalitatea de tratare normal| aerorilor; < nu se poate executa o instrucÛiune End Sub sau End Function pentru p|r|sireacodului de tratarea a erorii. Trebuie folosit| explicit una dintre instrucÛiunile Exit Sub sauExit Function pentru p|r|sirea procedurii. O tehnologie software comun| spune c| oprocedur| ar trebui s| aib| un singur punct de intrare Õi unul singur de ieÕire, deci o idee ar fiutilizarea lui Resume etichet| pentru a reda controlul codului principal, într-un punct dep|r|sire comun mai multor porÛiuni al acestuia.

InstrucÛiunea On Error Resume NextCrearea unui cod de tratare a erorilor prin On Error GoToCodGenericPentruTratareaErorilor necesit| uneori un num|r mare de linii decod. Dac| se doreÕte ignorarea erorilor, din motivul de mai sus sau pentru c| într-o porÛiunede cod a unei proceduri poate s| apar| numai un singur fel de eroare pe care dorim s| oignor|m se poate folosi instrucÛiunea On Error Resume Next care spune VBA-ului c| sedoreÕ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 alinstrucÛiunii Kill care Õterge un fiÕier dac| acesta exist| pe disc Õi dac| nu este utilizat dealtcineva în momentul în care se doreÕte Õtergerea lui.

Sub StergeFisier(ByVal numefisier As Strig)

On Error Resume Next

Kill numefisier

End Sub

Dac| de exemplu, fiÕierul de Õters nu exist|, instrucÛiunea Kill genereaz| o eroare în timpulexecuÛ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 cazinstrucÛiunea End Sub.

InstrucÛiunea On Error GoTo 0

Page 295: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

299 Tratarea erorilor în VBA s- i Access SQL - cursul 12

La folosirea uneia dintre instrucÛiunile On Error Resume Next, On Error GoToCodGenericPentruTratareaErorilor, efectul lor va r|mâne pân| la p|r|sireaprocedurii sau pân| la declararea unei noi porÛiuni de cod pentru tratarea erorilor. Exist|posibilitatea anul|rii codului de tratare a erorilor prin instrucÛiunea On Error GoTo 0.

InstrucÛiunea Resume NextPentru revenirea în porÛiunea principal| a procedurii din codul de tratare a erorii se foloseÕteinstrucÛiunea Resume. Aceasta are formele:

Resume: red| controlul instrucÛiunii care a generat eroarea. Se foloseÕte atunci când codul detratare a erorii a rezolvat motivul apariÛiei ei Õi se doreÕte continuarea din locul în care aap|rut problema;

Resume Next: se foloseÕte în interiorul codului de tratare al erorii atunci când se doreÕteignorarea ei sau când ca urmare a imposibilit|Ûii corect|rii ei se doreÕte continuarea cu liniaurm|toare instrucÛiunii care a generat eroarea;

Resume eticheta7: se foloseÕte când doriÛi s| reveniÛi la o linie de program oarecaremarcat| cu eticheta7.

Obiectul ErrVBA are un obiect pentru determinarea erorii ap|rute în timpul execuÛiei codului. Câtevadintre propriet|Ûile obiectului se prezint| în tabelul care urmeaz|.

Proprietatea Descriere

Err.Description Stocheaz| un Õir de caractere asociat erorii ap|rute.

Err.Number Stocheaz| o valoarea numeric| care identific| eroarea. Aceastaeste proprietatea implicit| a obiectului Err.

Err.Source Stocheaz| numele obiectului sau aplicaÛiei care a generateroarea iniÛial|.

Ierarhii ale codului pentru tratarea erorilorAtunci când o procedur| apeleaz| o alta, VBA foloseÕte o strategie ierarhic| de tratare aerorilor. 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 cumlinia de apel a procedurii a generat eroarea, ca efect, VBA-ul va c|uta înapoi, pe bazaadreselor 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 aerorii va afiÕa un mesaj de eroare propriu Õi va opri execuÛia codului.

Page 296: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

300 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Vizualizarea uneiinteroga7ri în modSQL

Access SQLLimbajul SQL (Structured Query Language) este cel mai popular limbaj neprocedural pentruaccesul la datele stocate în SGBDR-uri pe toate tipurile de calculatoare (calculatoarepersonale, 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 decercetare la IBM San Jose Research, azi IBM Almaden Research Center, în care s-a introduslimbajul 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 standardSQL ap|rut în 1986, descria elementele de baz| ale limbajului pentru definirea Õi manipulareatabelelor. Revizia din 1989 ad|uga limbajului extensii pentru integritatea referenÛial| Õiconstrângerile de integritate generalizat|. O alt| revizie în 1992 furniza facilitatea demanipulare a schemei bazei de date Õi de administrare a datelor împreun| cu îmbun|t|ÛirisubstanÛiale pentru definirea Õi manipularea datelor.

Cum se foloseÕte Access SQL-ul?Spre deosebire de alte produse care suport| SQL, Access-ul nu are o fereastr| în care dup|introducerea unei linii SQL Õi ap|sarea tastei Enter rezultatele corespunz|toare s| fie directafiÕate. În schimb, interog|rile pot fi vizualizate Õi editate în format SQL. Pentru afiÕarearezultatelor trebuie s| comutaÛi pe vizualizare în mod foaie de date a interog|rii. Oriceinterogare poate fi vizualizat| în mod SQL. În acest caz veÛi vedea instrucÛiunile SQLcorespunz|toare specificaÛiilor folosite în fereastra Access QBE, în modul de proiectare, cânds-a creat interogarea.

• deschideÛi baza de date Northwind; • clic pe butonul Queries; • din list| selectaÛi interogarea cu numele Quarterly Orders; • clic pe butonul Design;

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

Page 297: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

301 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Sintaxa comenzilor SQLAcest paragraf prezint| conveÛiile folosite la scrierea comenzilor SQL.

ConvenÛie SQL SemnificaÛie

MAJUSCULE Literele majuscule indic| cuvinte cheie Õi cuvinte rezervate, caretrebuie introduse întocmai.

înclinate Cuvintele scrise cu caractere înclinate reprezint| variabilespecificate de utilizator.

< > Parantezele unghiulare conÛin elemente de sintax| care trebuiescrise. Cuvintele din interiorul acestor paranteze descriuelementele f|r| a specifica sintaxa lor.

[ ] Parantezele dreptunghiulare conÛin informaÛii opÛionale, separatede câte o bar| vertical| (|). Dac| sunt mai multe se alege una saunici una dintre ele. Nu se introduc parantezele sau caracterul bar|.De menÛionat c| Microsoft Access necesit| în multe cazuriintroducerea de nume între paranteze. Atunci când parantezele suntnecesare, facând parte din sintaxa variabilei pe care trebuie s-od|m, parantezele sunt înclinate, ca în [Tabelul Meu].[CâmpulMeu].

{ } Acoladele includ una sau mai multe opÛiuni, separate de câte uncaracter bar| (|), dac| sunt mai multe nu se introduce paranteza saucaracterul |.

( ) Parantezele rotunde indic| repetarea unui articol, o dat| sau de maimulte 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,

Page 298: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

<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 uncuvânt cheie a limbajului.

InstrucÛiunea SELECTSELECT este inima limbajului SQL. Se foloseÕte pentru a selecta sau a extrage linii Õicoloane din tabelele bazei de date. Sintaxa instrucÛiunii SELECT conÛine cinci clauze majoredup| cum urmeaz|:

SELECT < list| de câmpuri >

FROM < list| de tabele >

[WHERE < specificarea liniei selectate >]

[GROUP BY < specificarea modului de grupare >]

[HAVING < specificarea grupului selectat >]

[ORDER BY < specificarea ordon|rii >]

Clauza SELECTSe foloseÕte pentru specificarea coloanelor care s| fie incluse în mulÛimea de înregistr|rirezultat|. Numele coloanelor se specific| analog cu cele din grila Access QBE.

SELECT {* | expresie1 [AS alias1] [, expresie2 [AS alias2] [,...]]]}

expresie poate fi un simplu nume de coloan|, o expresie de nume de coloane sau de funcÛiiSQL de agregare. Similar cu QBD, * Õi aici indic| toate câmpurile unui tabel. DefiniÛiasintactic| 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| deutilizator folosind VBA.(expresie): o expresie cu unul sau mai mulÛi termeni.constant|: o constant| alfabetic| sau numeric|. Constanta alfabetic| trebuie inclus| întreghilimele simple sau duble. Pentru a introduce un apostrof în constanta alfabetic|, e necesar s|

Page 299: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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| oconstant| 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 folosinumele 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Õinume-coloana apare în dou| sau mai multe dintre tabelele sau interog|rile incluse îninterogare, acesta trebuie modificat cu numele interog|rii, numele tabelului, sau cu unulcorespunz|tor, ca de exemplu [tabelA].[coloana1].+| -| * | / | \ | MOD: operatori ce definesc calcule. Dac| apar e necesar ca toate subexpresiiledin interiorul unei expresii s| poat| fi evaluate ca date de tip numeric. &: operator folosit pentru concatenarea constantelor alfabetice.

Exemple: SELECT *

SELECT [Nume] & " " & [Lastname] AS [Prenume]

Clauza FROMDefineÕte tabelele Õi/sau interog|rile prev|zute care reprezint| surse de date pentruinterogarea 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| ÕiFROM-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 sefolosesc pentru scrierea mai scurt| a unor nume, sunt îns| obligatorii când se specific|asocieri (self joins) sau subinterog|ri corelate.

Exemple:

SELECT *FROM TComenzi;

SELECT ComandaID, ComandaData, ComandaPretFORM TComenzi;

SELECT ComandaID, ComandaData, ComandaPretFORM TComenzi AS [Tabelul Comenzilor];

Page 300: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

304 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Clauza WHEREClauza restricÛioneaz| (filtreaz|) rândurile întoarse de o interogare. Ea corespunde liniilorCriteria sau Or din Access QBE. Coloanele referite în WHERE nu trebuie s| fie incluse înlista 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 definitede utilizator Õi operatori în fiecare expresie

Exemple:

SELECT ComandaID, ComandaData, ComandaPretFORM TComenziWHERE ComandaPret > 100000;

SELECT ComandaID, ComandaData, ComandaPretFORM TComenziWHERE ComandaPret > 100000 AND ComandaData > #5/11/1999# AND NumeClient Like"V*";

Clauza ORDER BYClauza opÛional| se foloseÕte pentru sortarea rândurilor întoarse de o interogare cu una saumai multe coloane. Cuvintele cheie ASC sau DESC specific| sortarea cresc|toare saudescresc|toare. Sortarea cresc|toare este implicit|. Clauza corespunde liniei Sort din AccessQBE, iar precedenÛa sort|rii este de la stânga la dreapta.

ORDER BY coloana1 [{ASC | DESC}] [, coloana2 [{ASC | DESC}] [, ...]]

Este posibil| Õi sortarea pe baza valorilor unor expresii. Sortarea pe baza coloanelor indexateeste mult mai rapid| decât pe baza unor expresii oarecare.

Exemple:

SELECT *FORM TClientiORDER BY Nume, Prenume;

SELECT *FORM TClienti

Page 301: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

305 Tratarea erorilor în VBA s- i Access SQL - cursul 12

ORDER BY Nume & " " & Prenume;

Asocierea tabelelorDac| baza de date a fost normalizat| este necesar| crearea unor interog|ri care au ca surs| dedate 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 ausemnificaÛie. Dac| tabelele nu sunt asociate, rezultatul interog|rii va fi produsul cartezian altabelelor care sunt sursele de date.

Exist| dou| metode de asociere a tabelelor în Access SQL: prin folosirea clauzei FROM Õiprin 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 Õicoloana2 se face astfel:

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

Folosirea lui OUTER este opÛional|.

Exemple:

De exemplu, dac| am dori s| select|m câmpurile ComandaID, ComandaData, Nume ÕiPrenume cu toate comenzile care au fost f|cute înainte de 28 iulie 2000, folosind SQL-89scriem:

SELECT ComandaID, ComandaData, Nume, Prenume AS ClientiFROM TComenzi, TClientiWHERE TClienti.ClientID = TComenzi.ComandaIDAND ComandaData <= #07/28/2000#

Page 302: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

306 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Folosind sintaxa SQL-92 scriem:

SELECT ComandaID, ComandaData, Nume, Prenume AS ClientiFROM TComenzi INNER JOIN TClientiON TClienti.ClientID = TComenzi.ComandaIDWHERE ComandaData <= #07/28/2000#

Este de preferat folosirea sintaxei lui SQL-92 pentru c| mulÛimile de întregistr|ri nu se potactualiza.

Asociere multipl| (Multiple Joins)La fel în cazul lui Access QBE, instrucÛiunea SELECT poate asocia mai multe tabele. Osintax| simplificat|, unde apare numai JOIN, f|r| INNER JOIN, LEFT OUTER JOIN sauRIGHT OUTER JOIN, a clauzei FROM pentru asocierea mai multor tabele este:

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

Asociere non-equiAsocierile discutate se numesc în literatura de specialitate equi joins, adic| se bazeaz| peegalitatea unui câmp cu altul. Asocieri non-equi sunt cele în care se apar operatorii >, <, >=,<=, <> sau Between.

Predicatele ALL, DISTINCTROW Õi DISTINCTLista coloanelor din clauza SELECT poate fi precedat| cu unul dintre predicatele decuantificare mutual exclusive: ALL, DISTINCTROW (specific Acces SQL-ului) sauDISTINCT. 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 toaterândurile care respec| criteriul impus. Nu se fac prelucr|ri speciale pentru asigurarea unicit|Ûiirândurilor. În Access QBE aceasta se realizeaz| prin setarea propriet|Ûilor UniqueValues ÕiUniqueRecords a interog|rii la valoarea No. Folosirea lui DISTINCT produce eliminarearândurilor duplicate în mulÛimea de înregistr|ri rezultat| pe baza coloanelor conÛinute înclauza SELECT. Când se foloseÕte DISTINCT mulÛimea de înregistr|ri ale interog|rii nu sepoate actualiza, iar performanÛele interog|rii scad. Setarea propriet|Ûii UniqueValues la Yes

Page 303: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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|. Nuare efect dac| interogarea are un singur tabel surs| sau dac| nu întoarce cel puÛin câte ocoloan| din fiecare tabel. Predicatul DISTINCTROW este echivalent cu proprietateaUniqueRecords. Pentru majoritatea tipurilor de interogare pentru care se poate aplicaDISTINCTROW (interog|ri cu mai multe tabele Õi unde cel puÛin un tabel este inclus înclauza FROM f|r| o coloan| corespondent| în clauza SELECT - adic| un tabel este inclusf|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 datelorInterog|rile de agregare sunt utile pentru sumarea datelor, calcule statistice, depistarea datelorgreÕite. Acest tip de interog|ri produc mulÛimi de înregistr|ri (recordset) care pot fi numaicitite. 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; • interog|ri cu GROUP BY folosind instruncÛiunea SELECT împreun| cu clauzaGROUP BY.

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 deagregare

Efect Poate lucra cuvalori Null?

Avg([coloana]) Valoarea medie. nu

Count([coloana]) Num|r| valorile care nu au valoareaNull din coloan|.

nu

Count(*) Num|r| toate rândurile din mulÛimea deînregistr|ri.

da

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 almulÛimii de înregistr|ri rezultate.

da

Last([coloana]) Valoarea coloanei din ultimul rând almulÛimii de înregistr|ri rezultate.

da

StDev([coloana]) Abaterea standard pentru un eÕantion depopulaÛie.

nu

StDevP([coloana]) Abaterea standard pentru o populaÛie. nu

Page 304: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

308 Tratarea erorilor în VBA s- i Access SQL - cursul 12

Var([coloana]) VariaÛia statistic| pentru un eÕantion depopulaÛie.

nu

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âmpuluiCheltuieli scriem: Sum(Abs([Cheltuieli])).

Pentru a calcula valoarea medie a costului unor articole putem scrie: Avg([Pret]*[Cantitate]*(1-[Reducere])).

Interog|ri de agregare f|r| clauza GROUP BYSe poate folosi instrucÛiunea SELECT f|r| clauza GROUP BY pentru a calcula însum|ristatistice pe rânduri care îndeplinesc condiÛia clauzei WHERE. Aceasta este util| pentru totalela nivel de tabel sau la nivelul unei submulÛimi de tabel. Acest tip de interogare de agregare secreeaz| prin includerea numai de funcÛii de agregare în clauza SELECT a instrucÛiuniiSELECT.

Exemplu:

SELECT COUNT(ComenziID) AS NumarulTotal, MIN(ValoareComanda) ASComandaMinima, MAX(ValoareComanda) AS ComandaMaximaFROM TComenzi;

Interog|ri de agregare cu clauza GROUP BYClauza GROUP BY se foloseÕte pentru a defini grupuri de rânduri pentru care se doreÕtecalculul funcÛiei de agregare. Iat| modul în care clauza GROPU BY se intercaleaz| în sintazainstrucÛ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:

Page 305: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

309 Tratarea erorilor în VBA s- i Access SQL - cursul 12

GROUP BY expresie1 [, expresie2 [,...]]

Expresiile din clauza GROUP BY pot referi coloane de tabele, câmpuri calculate sauconstante. Termenii expresiei nu pot fi funcÛii de agregare. Câmpurile din GROUP BYdefinesc grupurile întoarse de interogare. La folosirea clauzei GROUP BY, toate câmpuriledin clauza SELECT trebuie s| fie argumente ale unei funcÛii de agregare sau s| fie prezente înclauza GROUP BY.

Exemplu:

Pentru calculul num|rului comenzi ale unor clienÛi scriem:

SELECT ClientID, COUNT(*) AS NumardeComenziFROM TClientiGROUP BY ClientID;

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.Orice criterii din WHERE sunt aplicate înainte de gruparea rândurilor. Din acest motiv clauzaWHERE se poate folosi pentru excluderea rândurilor care nu doriÛi s| fie grupate. Oricecriterii din HAVING sunt aplicate dup| grupare. Astfel, se pot filtra rânduri pe bazastatisticilor 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 unindivid, exculzându-i pe cei care au comandat mai puÛin de 3 articole. Pentru c| se doreÕteexcluderea rândurilor care nu respect| criteriul impus înainte de a se face gruparea lor vomfolosi clauza WHERE astfel:

SELECT DenumireArticol, Avg(Cantitate)AS CantitateMedieComandata

Page 306: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

310 Tratarea erorilor în VBA s- i Access SQL - cursul 12

FROM TArticole INNER JOIN TComenzi ON TArticole.ArticolID=TComenzi.ArticolIDWHERE Cantitate > 3GROUP BY DenumireArticol;

Dac| doriÛi s| realizaÛi aceleaÕi calcule cu eliminarea articolelor din muÛimea de înregistraredac|, în medie, mai puÛin de 3 articole au fost vândute pe o comand|, criteriul trebuie aplicatdup| ce s-au evaluat valorile medii pentru fiecare grup. Pentru aceasta se va folosi clauzaHAVING dup| cum urmeaz|:

SELECT DenumireArticol, Avg(Cantitate)AS CantitateMedieComandataFROM TArticole INNER JOIN TComenzi ON TArticole.ArticolID=TComenzi.ArticolIDGROUP BY DenumireArticolHAVING Avg(Cantitate) > 3;

Este simplu s| reÛineÛi când se aplic| cele dou| clauze dac| priviÛi poziÛia lor în instrucÛiuneaSELECT. WHERE se scrie înaintea lui GROUP BY, adic| caluza WHERE se aplic| înaintede grupare, iar HAVING se scrie dup| GROUP BY corespunzând aplic|rii clauzei HAVINGdup| aplicarea criteriilor de grupare.

Interog|ri de reuniune (UNION Queries)În Access este obligatorie utilizarea SQL-ului pentru crearea unei interog|ri de reuniune; nuexist| un echivalent în Access QBE pentru crearea acestui tip de interogare. UNION este unoperator Õi nu o instrucÛiune sau clauz| producând o mulÛime de înregistr|ri care pot fi numaicitite. Sintaxa lui este:

instrucÛiune-select1

UNION[ALL]

instrucÛiune-select2

[UNION[ALL]

instrucÛiune-select3]

[...]

Access-ul pune în corespondenÛ| coloanele din fiecare SELECT pe baza poziÛiilor dinSELECT Õi nu pe baza numelor de coloane. Implicit, Access-ul elimin| înregistr|rileduplicate. 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

Page 307: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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, CodFROM TProfesoriUNIONSELECT Nume & ": " Prenume AS Nume, Adresa, Oras, CodFROM TElevi

Se poate folosi clauza ORDER BY pentru sortarea înregistr|rilor din mulÛimea de înregistr|rirezultat|. Dac| unele nume de coloane difer|, se va folosi numele din ultimul SELECT pentrua specifica ordinea din mulÛimea de înregistrare rezultat|.

SELECT NumeFROM TProfesoriUNION ALLSELECT NumeElevFROM TEleviORDER BY Nume;

Compatibilitatea interog|rilorInterog|rile sunt compatibile pentru a fi reunite dac| au acelaÕi num|r de coloane. Access-ulfoloseÕ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 unsingur tip de dat| care este compatibil cu toate tipurile de date ale coloanelor.

Subinterog|riEste 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 interogarepe baza valorilor unei alte interog|ri (subinterogarea). Urm|toarele forme sintactice suntdefinite pentru subinterog|ri: • expresie [NOT] IN (instrucÛiune-select): se foloseÕte pentru a verifica dac| valoareaunei 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.

Page 308: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

312 Tratarea erorilor în VBA s- i Access SQL - cursul 12

SELECT ProdusID, DescriereProdus, PretFROM TProduseWHERE ProdusID IN (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 uneivalori cu valorile din rândurile unei subinterog|ri.

Predicat Descriere

f|r| Realizeaz| comparaÛia cu o singur| valoare.

ANY, SOME Este adev|rat| dac| comparaÛia este adev|rat| pentruunul sau mai multe rânduri din subinterogare.

ALL Este adev|rat| dac| comparaÛie este adev|rat| pentrutoate rândurile din subinterogare.

Exemplu:

Dac| dorim s| cunoaÕtem care sunt automobilele mai scumpe decât SKODA:

SELECT DescriereProdus, PretFROM TProduseWHERE Pret >(SELECT Pret FROM TProduse WHERE DescriereProdus = "Automobil SKODA");

• [NOT] EXIST (instrucÛiune-select): permite compararea unor valori pentru a verificaexistenÛa lor în una sau mai multe rânduri ale unei subinterog|ri. Dac| subinterogarea are celpuÛ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 NOTEXIST scriem:

SELECT ProudID, DescriereProdus, PretFROM TProduseWHERE NOT EXIST(SELECT * FROM TProduseDetalii WHERE ProdusID = TProduse.ProdusID);

Page 309: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

313 Tratarea erorilor în VBA s- i Access SQL - cursul 12

SQL cu parametriLa fel ca în Access QBE Õi în SQL se pot specifica parametrii care vor fi rezolvaÛi în timpulexecuÛiei aplicaÛiei. Sintaxa pentru declaraÛia parametrilor este:

PARAMETERS parametru1 tip1 [, parametru2 tip2 [, ...]];

instrucÛiune-sql;

Exemplu:

Dac| doriÛi s| afiÕ|m comenzile din tabelul Orders între dou| date Data1 Õi Data2 scriem:

PARAMETERS Data1 DateTime, Data2 DateTime;SELECT Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShippedDateFROM OrdersWHERE (((Orders.ShippedDate) Between [Data1] And [Data2]));

Fiecare parametru trebuie s| aib| un tip de dat| din lista tipurilor SQL prezentate în tabelulcare 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

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,CHARACTER, STRING

Text

LONGTEXT, MEMO, NOTE Memo

LONGBINARY, GENERAL, OLEOBJECT OLE Object

GUID AutoNumber, FildSize=ReplicationID

Page 310: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 poatefolosi pentru actualizarea, Õtergerea sau copierea înregistr|rilor. InstrucÛiunile SQL care au ocorespondenÛ| în Access QBE se prezint| în tabelul care urmeaz|:

InstrucÛiune SQL Echivalent în Access QBE

UPDATE Update

DELETE Delete

INSERT INTO Append

SELECT INTO Make-table

Toate fac parte Õi din ANSI SQL, cu excepÛia ultimei, mai precis SELECT INTO este folosit|cu totul altfel pentru mutarea unui singur rând de date într-o list| de variabile.

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)datelor. Expresia din clauza SET poate fi o constant| sau rezultatul unor calcule.

Exemplu:

Pentru a creÕte preÛul produselor care nu sunt automobile din tabelul TProduseDetalii cu 1.05scriem:

UPDATE TProduseDetaliiSET TProduseDetalii.Pret = [Pret]*1.05WHERE 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 ooarecare echivalenÛ| în funcÛionare.

Page 311: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

315 Tratarea erorilor în VBA s- i Access SQL - cursul 12

InstrucÛiunea DELETESe foloseÕte pentru Õtergerea rândurilor dintr-un tabel. Sintaxa ei este:

DELETE [tabel.*]

FROM clauza-form

[WHERE criteriu];

Folosirea lui tabel.* este opÛional| pentru interog|ri ce se refer| la un singur tabel. Esteposibil| Õtergerea rândurilor din tabel asociate respectând regulile: • se pot folosi datele unui tabel pentru a decide care rânduri s| fie Õterse dintr-un tabelasociat. Aceasta se realizeaz| folosind o asociere în clauza FROM sau prin folosirea uneisubinterog|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 de1º1; • se pot Õterge rânduri din tabelele asociate printr-o relaÛie 1ºM cu o serie de interog|riDELETE.

Exemplu:

Pentru a Õterge toÛi clienÛii din TClienti care nu au f|cut o comand| în ultimii 3 ani scriem:

DELETEFROM TClientiWHERE TClienti.ClientID NOT IN(SELECT ClientID FROM TClienti WHERE DataComenzii > DateAdd('yyyy',-3,Date()));

InstrucÛiunea INSERT INTOPermite copierea de rânduri dintr-un tabel sau interogare într-un alt tabel sau se mai poatefolosi 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 TClientiNoiSELECT * FROM TClienti;

Page 312: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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:

INSERT INTO tabel-interogare [(coloana1 [, coloana2 [, ...]])]

VALUES (valoare1 [, valoare2 [, ...]]);

Dac| referinÛele coloanelor sunt omise trebuie incluse valori pentru fiecare coloan| în ordineade 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.

Exemplu:

Pentru a insera un rând nou în tabelul TProduse scriem:

INSERT INTO TProduse (ProdusID, Pret, DescriereProdus)VALUES (108, 90000000, "Automobil SKODA Felicia");

InstrucÛiunea SELECT INTOEste specific| Access SQL-ului Õi permite crearea unui tabel nou din rândurile unui alt tabelsau interogare. Sintaxa este:

SELECT coloana1 [, coloana2 [, ...]] INTO tabel-nou

FROM lista-tabele

[WHERE clauza-where]

[ORDERED BY clauza order-by];

Exemplu:

Pentru crearea tabelului TComenziVasile scriem:

SELECT ComandaID, DataComada, ClientIDINTO TComenziVasileFROM TComanziWHERE ClientID = 7;

Atât INSERT INTO cât Õi SELECT INTO pot include orice instrucÛiune SELECT careproduce o mulÛime de întregistr|ri folosind clauza GROUP BY, asocieri, subinterog|ri sauoperatorul UNION.

Page 313: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

317 Tratarea erorilor în VBA s- i Access SQL - cursul 12

DefiniÛia datelor cu SQLExist| trei metode pentru crearea Õi manipularea schemei bazelor de date prin programeAccess: ActiveX Data Objects (ADOX), interog|ri Data Definition Language (DDL) Õi maivechea Data Access Objects (DAO). În paragraful care urmeaz| se vor prezenta, într-oversiune concentrat|, interog|rile DDL. La fel ca Õi în cazul interog|rilor de reuniune, selucreaz| interog|ri DDL ce folosesc SQL. Nu exist| un corespondent în Access QBE. Deasemenea, se pot executa interog|ri DDL prin definirea Õi executarea unei definiÛii deinterogare folosind VBA. Tabelul care urmeaz| prezint| 4 instrucÛiuni DDL suportate deSQL:

InstrucÛiune DDL Efect

CREATE TABLE Creeaz| schema unui tabel nou.

ALTER TABLE Modific| schema unui tabel existent.

CREATE INDEX Creeaz| un index nou.

DROP Ôterge schema unui tabel sau un index.

InstrucÛiunea CREATE TABLEInstrucÛ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]

[, ...]]

[CONSTRAINT constrângere1-tabel [, constrângere2-tabel [, ...]]]);

Tipul de dat| al coloanelor este specificat conform tabelului prezentat în paragraful SQL cuparametri. Parametrul opÛional dimensiunea permite specificarea lungimii unei coloane text.Dac| dimensiunea este nespecificat|, valoarea dimensiunii atribuite implicit este de 255. Prinfolosirea lui CREATE TABLE se pot crea dou| tipuri de constrângeri, indexuri simple Õimulti-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);

Page 314: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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|ugateunui tabel; crearea cheilor primare Õi str|ine; forÛarea valorilor unor coloane s| fie unice(UNIQUE) sau nenule (NOT NULL); crearea regulilor de validare (prin constrângereaCHECK). Pentru c| singura constrângere pe care Access-ul o suport| este cea legat| dedefiniÛia indexurilor, este convenabil s| ne gândim c| în Access clauza CONSTRAINT sefoloseÕte pentru a crea indexuri. Sintaxa pentru crearea unei chei simple este:

CONSTRAINT nume

{PRIMARY KEY | UNIQUE | REFERENCES tabel-str|in [(coloan|-str|in|)]}

iar pentru crearea unei chei multi-coloan| este:

CONSTRAINT nume

{PRIMARY KEY (coloana1 [, coloana2 [, ...]])

| 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 indexunic câmpul DescriereProdus scrie:

CREATE TABLE TProduseNoi(ProdusID LONG, DescriereProdus TEXT CONSTRAINT DescriereProdus UNIQUE, PretCURRENCY);

În continuare s| presupunem c| dorim crearea a dou| tabele TComenziNoi Õi TArticoleNoi întrecare 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|, iarComandaID va fi cheia str|in|.

CREATE TABLE TComenziNoi(ComandaID LONG CONSTRAINT CheiePrimara PRIMARY KEY, DataComenziiDATETIME, Client ID LONG);

CREATE TABLE TArticoleNoi(ComandaID LONG CONSTRAINT TComenziNoiChStraina REFERNCES TComenziNoi ,

Page 315: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

319 Tratarea erorilor în VBA s- i Access SQL - cursul 12

AtricolID LONG, DescriereAtricol TEXT (100), CONSTRAINT CheiePrimara PRIMARYKEY (ComandaID, AtricolID));

InstrucÛiunea CREATE INDEXAl|turi de clauza CONSTRAINT din instrucÛiunile CREATE TABLE Õi ALTER TABLE sepoate folosi instrucÛiunea CREATE INDEX (care nu face parte din ANSI SQL) pentru creareaunui index al unui tabel deja existent. Sinatxa comenzii este:

CREATE [UNIQUE] INDEX index

ON tabel (coloana1 [, coloana2 [, ...]])

[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}];

Cuvântul cheie UNIQUE face ca valorile indexului s| fie unice. PRIMARY permite creareaunui 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. DISALLOWNULL opreÕte utilizatorul s| introduc| o valoare Null în câmpul index.

InstrucÛiunea ALTER TABLESe foloseÕte pentru modificarea schemei unui tabel existent. Ea permite ad|ugarea uneicoloane 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 ALTERTABLE. Sintaxa pentru ad|ugarea unei coloane este:

ALTER TABLE tabel ADD [COLUMN] tipdata [(dimensiune)]

[CONSTRAINT costrângere_coloan|_unic|];

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;

Page 316: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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.

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

InstrucÛiunea DROPSe foloseÕte pentru Õtergerea tabelelor sau a indexurilor. Are dou| forme sintactice. Sintaxapentru Õtergerea unui tabel din baza de date este:

DROP TABLE tabel;

Sintaxa pentru Õtergerea unui index este:

DROP INDEX index ON tabel;

Interog|ri SQL Pass-ThroughAcest tip de interogare este transmis| neinterpretat| unui server de baze de date. Access-ul nuva 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 finalPass-Through. O interogare normal| nu se poate converti în una Pass-Through.

Page 317: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

321 Programarea cu obiectul DAO - cursul 13

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

! 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

înregistr|ri;

! cum se creeaz| folosind VBA obiecte ale bazei de date.

Obiectivele cursului 13

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 318: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 modificareadatelor din baz|. Uneori, aplicaÛiile trebuie s| aib| controlul direct asupra datelor pentru aputea derula anumite sarcini speciale. Limbajul de programare VBA împreun| cu obiectelepentru accesul la date (DAO), asigur| un limbaj de manipulare al datelor, sumar prezentat încursul 11. Când creaÛi o baz| de date în Access 2000 acesta va presupune c| doriÛi s| folosiÛinumai obiectul ADO (care va fi prezentat în cursul 14) Õi va include referinÛe numai c|treaceast| 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 Õimodul de lucrul cu ADO. Dac| în Access 2000 doriÛi s| folosiÛi biblioteca DAO, în timp ceeditaÛi codul VBA, selectaÛi din Tools pe Reference Õi ad|ugaÛi Microsoft DAO 3.6 ObjectLibrary î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 obiecteDAO încep prin referirea obiectului DBEngine. În cadrul unei aplicaÛii, motorul Jet conÛine ocolecÛie de unul sau mai multe obiecte. Fiecare obiect Workspace conÛine o colecÛie de unulsau mai multe obiecte Database. Fiecare obiect Database conÛine o colecÛie de obiecteTableDefs, care la rândul lor conÛin colecÛii de obiecte Fields Õ.a.m.d. Un obiect particular sepoate stoca într-o variabil| Õi poate fi manipulat prin intermediul acesteia. Pentru a referi bazade date curent| în DAO, soluÛia este plecarea din DBEngine Õi coborârea prin colecÛiaWorkspaces pân| la colecÛia Databases, unde prin Databases(0) Access-ul va referitocmai baza de date curent|. Conform celor spuse exist| dou| metode de scriere pentruaceasta:

DBEngine.Workspaces(0).Databases(0)

sau forma scurtat|:

DBEngine(0)(0)

în plus Access-ul are Õi o funcÛie CurrentDB() care întoarce o referinÛ| la baza de datecurent|. 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 serviciipropriu 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-ulfurnizeaz| DBEngine.Workspaces(0).Databases(0) în acelaÕi scop. În momentulde faÛ| exist| o problem| subtil| legat| de cele dou| metode de acces. CurrentDB() ÕiDBEngine(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 carese 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 pentrucare, din acel moment în continuare, orice referire la colecÛiile bazei de date curente vor fiinvalide. Pentru codul care urmeaz|, în procedura AsaNu() când se ajunge la doc.Nameapare o eroare fatal|. Obiectul din baza de date care a fost referit nu mai exist|, iar doc devineo referinÛ| invalid|. Dac| îns| se foloseÕte DBEngine(0)(0) în locul lui CurrentDB()procedura va lucra corect.

Page 319: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

323 Programarea cu obiectul DAO - cursul 13

Sub AsaNu()

Dim doc As Document

Set doc = CurrentDb.Containers("Forms").Documents(0)

Debug.Print doc.Name

End Sub

Sub AsaDa()

Dim db As Database

Dim doc As Document

Set db = CurrentDb()

Set doc = db.Containers("Forms").Documents(0)

Debug.Print doc.Name

End Sub

Procedura AsaDa() lucreaz| de asemenea corect pentru c| se lucreaz| cu o variabil| de tipulbaz| de date în locul unei simple referinÛe. Când folosiÛi numai Jet-ul pentru a accesa dateledintr-o baz| utilizaÛi DBEngine(0)(0), dac| lucraÛi din Access, baza de date curent| poatefi referit| prin ambele metode. Baza de date referit| prin CurrentDb() este întodeaunaactualizat| la baza de date deschis| din Access. La utilizarea lui DBEngine(0)(0) trebuieapelat| 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 semodific| astfel:

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| cucaracteristicile fiec|reia.

Tip mulÛime deînregistr|ri

Descriere Avantaje Dezavantaje

Table MulÛime deînregistr|ri pe bazaunui tabel.

Poate folosiindexuri pentruc|ut|ri rapide;datele pot fi editate.

Se poate folosi numaipentru tabele localeAccess, nu Õi în cazultabelelor ataÕate.

Page 320: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

324 Programarea cu obiectul DAO - cursul 13

Dynaset MulÛime de poantori(pointers) referinddatele unui tabel sauinterog|ri din bazade date.

Poate include datedin mai multe tabelelocale sau ataÕate;poate folosi SQL; înmajoritateacazurilor datele potfi editate.

În unele cazuri mulÛimeade întregistrare nu sepoate edita; nu permitec|ut|ri rapide pe baza deindex.

Snapshot O copie instantaneea unei mulÛimi deînregistr|ri, valorilesunt o copie fix| adatelor Õi nupoantori la acestea.

Poate fi folosit|numai pentruparcurgere în avansasigurând creÕtereavitezei unoroperaÛii.

Datele nu se pot edita;toate datele se citesc înmulÛime înainte deredarea controluluiprogramului, deci nu vorreflecta modific|rile înregimul de lucru cuutilizatori multipli(multiuser); nu permitec|ut|ri rapide prinindexuri.

Crearea unei mulÛimi de înregistr|riO mulÛime de înregistr|ri se creeaz| pân| la inclusiv Access 97 cu unul din grupurile deinstrucÛiuni:

Dim rs As Recordset

Set rs = db.OpenRecordset(Sursa, Tip, Optiuni, BlocareEditare)

sau

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 deinterogare, o instrucÛiune SQL. Pentru cel de al doilea exemplu, obiect este sursa de date Õipoate fi orice obiect al bazei de date care este deschis Õi întoarce înregistr|ri: tabel, interogaresau alt| mulÛime de înregistr|ri. Parametrul Tip specific| tipul mulÛimii de înregistr|ri Õipoate lua valorile pe baza constantelor predefinite din tabelul care urmeaz|:

Page 321: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

325 Programarea cu obiectul DAO - cursul 13

Numele tipului mulÛime deînregistrare

Descriere

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 fiparcurs| numai în sensul avansului (forward-only).

Parametrul Optiuni controleaz| accesul în regimul de utilizatori multipli Õi comportamentulla actualizarea înregistr|rilor din mulÛime. Constantele predefinite se dau în tabelul careurmeaz|:

Constant| Descriere

dbAppendOnly Se pot ad|uga numai înregistr|ri noi (se aplic| numai tipuluiDynaset).

dbSQLPassThrough Face ca SQL-ul s| fie transferat direct server-ului pentruprelucrare (numai pentru tipul Snapshot).

dbSeeChanges Jet-ul genereaz| o eroare dac| un alt utilizator modific|datele editate la momentul curent (numai pentru tipulDynaset).

dbDenyWrite CeilalÛi utilizatori nu pot modifica sau ad|uga înregistr|ri,toate înregistr|rile tabelului vor fi blocate împreun| cu celeale celorlalte tabele care formeaz| sursa de date ale tipuluiDynaset.

dbDenyRead CeilalÛi utilizatori nu pot vizualiza datele tabelului (numaipentru 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 secopiaz| într-o zon| temporar| de memorie, viteza deparcurgere 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 Õimodifica.

dbInconsistent Permite actualiz|ri inconsistente (numai pentru tipul Dynasetcu folosirea lui dbInconsistent saudbInconsistent).

Page 322: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

326 Programarea cu obiectul DAO - cursul 13

dbConsistent Permite numai actualiz|ri consistente (numai pentru tipulDynaset cu folosirea lui dbInconsistent saudbInconsistent).

Parametrul BlocareEditare controleaz| concureÛa utilizatorilor multipli pentru accesul lanoua mulÛime de înregistr|ri. Urm|toarele constante sunt predefinite:

Constant| Descriere

dbReadOnly Înregistr|rile pot fi vizualizate de utilizatorul curent, alÛii le potmodifica (se foloseÕte fie în OpÛiuni fie în BlocareEditare, darnu 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. Aceastaeste opÛiunea implicit| pentru Jet.

dbOptimistic Blocare optimist|; o pagin| este blocat| numai la folosirea metodeiUpdate fiind blocat| un timp foarte scurt corespunz|tor actualiz|riidatelor.

ConsistenÛa Õi inconsistenÛa actualiz|rilorLa crearea unei mulÛimi de înregistr|ri bazat| pe mai multe tabele, implicit, Access-ul permitemodific|ri numai în partea "mulÛi" a asocierii. Aceasta se cunoaÕte sub numele deactualizare consistent|. Dac| doriÛi actualizarea de câmpuri situate de ambele p|rÛi aleasocierii trebuie s| folosiÛi opÛiunea dbInconsistent. Aceasta poate duce la violarearelaÛiilor dintre tabelele aplicaÛiei. Dac| aÛi activat integritatea referenÛial| pentru relaÛie Õi aÛivalidat cascadarea actualiz|rilor, dbInconsistent Õi dbConsistent produccomportament identic. În acest caz integritatea referenÛial| este mai puternic| Õi actualizarease va face Õi pentru câmpurile din partea mulÛi împreun| dac| se face actualizarea celor dinparte 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)

Page 323: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

327 Programarea cu obiectul DAO - cursul 13

Set rsVanzari = db.OpenRecordset("QVanzari", dbOpenDynaset)

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

sirSQL="SELECT [Nume Client] AS Nume FROM TClienti" & _

"ORDER BY [Nume Client]"

Set rsClienti = db.OpenRecordset(sirSQL, dbOpenDynaset)

3. MulÛime de înregistr|ri creat| pe baza unui tabel care blocheaz| accesul altor utilizatori la sursa de date:

Dim db As Database

Dim rsClienti As RecordSet

Set db = CurrentDB()

Set rsClienti = db.OpenRecordset("TClienti", dbOpenTable,EdbDenyRead)

4. MulÛime de înregistr|ri creat| pe baza unei definiÛii de interogare (QueryDef):

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)

Page 324: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

328 Programarea cu obiectul DAO - cursul 13

Ciclul parcurge toÛi parametri obiectului QueryDef (dac| acesta nu are parametri, ciclul nuse execut|). Pentru fiecare parametru, codul evalueaz| proprietatea Name folosind funcÛiaEval() Õi atribuie valoarea întoars| propriet|Ûii Value a parametrului. În acest fel toatevalorile 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 bazaunei interog|ri despre care nu Õtim nimic pân| în momentul execuÛiei aplicaÛiei când ar puteafi 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 parametrinecesari pot fi evaluaÛi înainte de crearea muÛimii de înregistr|ri. Obiectul QueryDef arecolecÛ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 pebaza unei definiÛii de interogare, deÕi parametrii sunt cunoscuÛi, singura modalitate derezolvare fiind codul prezentat deja. De exemplu, dac| avem o interogare care are caparametru câmpul Forms!FTContacte![Nume Contact], containerul QueryDef vaconÛine un singur obiect parametru pentru care numele va fi Forms!FTContacte![NumeContact].

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 tipDynaset care are ca surs| de date tabelul sau interogarea care este sursa de date aformularului.

Parcurgerea unei mulÛimi de înregistr|riDup| ce au fost create, mulÛimile de înregistr|ri au întotdeauna o înregistrare curent|. Cândreferim 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|risau imediat dup| ultima înregistrare din mulÛimea de înregistr|ri. În anumite cazuri specialeeste posibil ca poziÛia curent| s| fie nedefinit|. Navigarea printre înregistr|rile mulÛimii seface 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.

Page 325: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

329 Programarea cu obiectul DAO - cursul 13

MovePrevious Deplasare pe înregistrarea anterioar|.

Move Deplasare înainte sau înapoi, relativ la un marcaj (bookmark).

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 facepe baza valorilor indexului, care se poate modifica prin proprietatea Index. În lipsa unuiindex, ordinea înregistr|rilor este nedefinit|. MulÛimile de înregistr|ri, prin propriet|ÛileAbsolutePosition Õi PercentPosition, permit citirea sau scrierea poziÛiei curentepe baza datelor din mulÛimea de înregistr|ri. Metodele MoveFirst, MoveLast,MoveNext, MovePrevius au o acÛiune evident|, pentru cazul lui Move îns| treabadevine 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, <0deplasarea 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|, altfeldeplasarea este relativ| la marcaj.

G|sirea num|rului de înregistr|ri din mulÛimeProprietatea RecordCount permite aflarea num|rului de înregistr|ri dintr-o mulÛime. Eastocheaz| 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 secomplic|. Dac| datele sunt partajate între mai mulÛi utilizatori Õi dac| mai mulÛi utilizatori audeschis mulÛimi de înregistr|ri pe baza aceleiaÕi surse de date, Õtergerile nu vor fi v|zuteimediat î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Õtemetoda MoveLast pentru a ne deplasa la sfârÕitul mulÛimii; se citeÕte valoarea stocat| înRecordCount.

Testarea limitelor mulÛimii de înregistr|riOrice mulÛime de înregistrare are propriet|Ûile BOF Õi EOF pentru a indica dac| înregistrareacurent| este la sfârÕitul (EOF) sau începutul (BOF) mulÛimii:

< la folosirea lui MovePrevious dac| prima înregistrare este curent|, BOF devineTrue Õi nu va mai exista rând curent;

< dac| se foloseÕte din nou MovePrevious, BOF r|mâne True dar apare o eroare înexecuÛie; < la folosirea lui MoveNext, dac| ultima înregistrare este curent|, EOF devine True Õinu va mai exista înregistrare curent|; < dac| se foloseÕte MoveNext din nou, EOF r|mâne adev|rat| dar se genereaz| oeroare î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

Page 326: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

330 Programarea cu obiectul DAO - cursul 13

ambele True, mulÛimea nu are înregistr|ri):

If Not rs.BOF And Not rs.EOF Then

'aici se ajunge numai daca7 mult-imea are înregistr|ri

End If

Deseori, în instrucÛiunile de ciclare dorim s| test|m terminarea relu|rii operaÛiei ciclate, iardac| mulÛimea nu are înregistr|ri ciclul nici m|car s| nu fie început, codul folosit pentruaceasta este:

Do Until rs.EOF

'operaÛiile ciclate vin aici ...

'undeva aici se face Õi avansul la înregistrarea'urm|toare, de exemplu cu rs.MoveNext

Loop

C|utarea unor înregistr|ri specificeUrm|toarele metode se pot folosi pentru localizarea unor înregistr|ri din mulÛimile de tipurileDynaset 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.

FindPrevious criteriu G|seÕte înregistrarea anterioar| care satisface criteriul.

Metodele Find necesit| specificarea unui criteriu de selecÛie de forma unei ecuaÛii ceconÛine nume de câmpuri care iau valori specifice. De exemplu, dac| dorim s| g|sim primaapariÛie a numelui "Ioan" scriem:

rs.FindFirst "[Nume Contact] = 'Ioan' "

InstrucÛiunea WithPermite executarea unei serii de instrucÛiuni ale unui singur obiect f|r| a specifica în modrepetat numele obiectului. Sintaxa instrucÛiunii este:

With obiect

Page 327: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

331 Programarea cu obiectul DAO - cursul 13

[instruct-iuni]

End With

Dac| dorim, de exemplu s| g|sim toate contactele cu [Nume Contact] = Ioan atuncitrebuie realizat un ciclu care parcurge toate înregistr|rile mulÛimii verificând criteriul doritdup| cum urmeaz|:

sircriteriu = "[Nume Contact] = 'Ioan' "

With rs

.FindFirst sircriteriu

Do While Not .NoMatch

Debug.Print ![Nume Contact]

.FindNext sircriteriu

Loop

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 decâmpuri, folosirea unei interog|ri de acÛiune este mai eficient|.

C|utarea în tabeleMetoda Seek se foloseÕte pentru localizarea unei înregistr|ri dintr-o mulÛime indexat| detipul Table care satiface un criteriu pentru indexul curent. Sintaxa ei este:

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 decomparaÛie Õi poate fi: "=", "<=", "<", ">=", ">". Argumentele cheie sunt una sau mai multevalori pe care VBA le compar| cu valorile indexului din tabel. Dac| indexul este formatdintr-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 caresatisface criteriul.

Sub SeekIndex()

Dim db As Database

Page 328: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

332 Programarea cu obiectul DAO - cursul 13

Dim rs As Recordset

Set db = CurrentDb()

Set rs = db.OpenRecordset("TContacte", dbOpenTable)

rs.Index = "IDContact"

rs.Seek "=", 1

If Not rs.NoMatch Then Debug.Print rs![Nume Contact]

Do Until Not rs.NoMatch

Debug.Print rs![Nume Contact]

rs.Seek "=", 1

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 unortabele. Pentru c| num|rul actual de înregistr|ri se poate modifica oricând, mai ales în regimde 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 permitep|strarea Õi poziÛionarea rapid| pe înregistrarea curent| dintr-o mulÛime de înregistr|ri.Fiecare mulÛime de înregistr|ri are o singur| înregistrare curent|. Pentru a stoca poziÛiaacesteia se poate stoca marcajul rândului respectiv care este un întreg pe 4 biÛi unic, generat desistem, pentru fiecare înregistrare. Valoarea numeric| a marcajului are o semnificaÛie numaipentru Access, ea nu se poate folosi în cadrul unor expresii aritmetice. Pentru a salva valoareaunui 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 valoareavariabilei. 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 dintremetodele Seek sau FindFirst pentru a reveni la înregistrarea original| pe baza valoriicheii primare salvate; stocaÛi valoarea marcajului - v| poziÛionaÛi pe o alt| înregistrare, apoifolosiÛi marcajul pentru a reveni la înregistrarea original|. Dac| de exemplu, dorim s| folosimmarcajul înregistr|rii curente dintr-o mulÛime la care apoi s| revenim, codul va fi ceva deforma:

Page 329: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

333 Programarea cu obiectul DAO - cursul 13

Dim bm As Variant

bm= rs.Bookmark

rs.MoveFirst 'Pozit-ionare pe prima înregistrare

'Realizat-i ca7utarea dorita7 ....

'Pentru revenire la înregistrarea originala7

rs.Bookmark=bm

Dup| închiderea mulÛimii de înregistr|ri prin folosirea metodei Close valoarea marcajuluidevine invalid|.

Sortarea înregistr|rilor dintr-o mulÛime de înregistr|riÎ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 cheiiprimare. Specificarea ordinii de sortare se face dând propriet|Ûii Index a variabilei mulÛimede înregistr|ri (recordset), mai jos rs, numele unui index al tabelului, mai jos id. Imediatdup| setarea acestei propriet|Ûi, înregistr|rile apar în noua ordine. Dup| modificareaindexului, Access-ul se pare c| face prima înregistrare ca înregistrare curent|, îns| acestcomportament nu este documentat. Dac| proprietatea Index este setat| la un index inexistentse va genera o eroare care va putea fi tratat| conform procedurilor din cursul anterior.

Procedura care urmeaz| afiÕeaz| câmpurile indexate, în ordinea specific|rii indexurilor pentrutabel. Indexurile tabelului cu numele stocat în variabila NumeTabel se obÛin prinparcurgerea 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 indexatcorespunz|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

Page 330: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

334 Programarea cu obiectul DAO - cursul 13

Dim sircamp As String

Set db = CurrentDb()

Set tdf = db.TableDefs(NumeTabel)

Set rs = db.OpenRecordset(NumeTabel, dbOpenTable)

For Each id In tdf.Indexes

rs.Index = id.Name

Debug.Print "Index este: "; rs.Index

rs.MoveFirst

Do While Not rs.EOF

For Each fl In id.Fields

sircamp = sircamp & vbTab & rs(fl.Name)

Next fl

Debug.Print sircamp

sircamp = ""

rs.MoveNext

Loop

Next id

rs.Close

End Sub

Pentru a testa procedura de mai sus, folosind baza de date ex1.mdb, care conÛine tabelul cunumele TContacte, scriem AfisareCampuriIndexate "TContacte" în fereastraimediat|.

Sortarea prin folosirea clauzei SQL ORDER BYCâ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. Deexemplu, pentru sortarea ascendent| a înregist|rilor unui tabel TContacte folosind codul:

Dim db As Database

Page 331: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

335 Programarea cu obiectul DAO - cursul 13

Dim rs As Recordset

set rs=db.OpenRecordset("SELECT * FROM TContacte ORDER BYE[Nume Contact];")

În acest caz, mulÛimea de înregistr|ri poate fi creat| numai folosind un obiect baz| de date Õiun Õir SQL, iar mulÛimea de înregistr|ri rezultat| este implicit de tip Dynaset (eventual de tipSnapshot dac| se cere explicit aceasta).

Sortare folosind proprietatea SortMetoda se poate aplica pentru tipurile de mulÛime de înregistr|ri Dynaset Õi Snapshot prinsetarea propriet|Ûii Sort folosind un criteriu asem|n|tor cu cel al clauzei ORDER BY. Se vaspecifica câmpul pe baza c|ruia se face sortarea, opÛional tipul cresc|tor sau descresc|tor alsort|rii. Câteva exemple de setare a propriet|Ûii Sort sunt:

rs.Sort = "[Nume Contact]"

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

Dim rssortat As Recordset

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 sefoloseÕte proprietatea Index.

Filtrarea mulÛimilor de înregistr|ri

Page 332: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

336 Programarea cu obiectul DAO - cursul 13

Este posibil| Õi filtrarea înregistr|rilor care vor face parte din mulÛimea de înregistr|ri, încontinuare fiind prezentate dou| metode cu avantajele Õi dezavantajele lor.

Filtrarea folosind clauza SQL WHERESe poate crea o mulÛime de înregistr|ri prin folosirea instrucÛiunii SQL cu clauza WHEREastfel:

Sub Filtrare()

Dim db As Database

Dim rs As Recordset

Dim fl As Field

Set db = CurrentDb()

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

Loop

rs.Close

End Sub

Metoda se poate folosi numai când cre|m mulÛimea de înregistr|ri utilizând un obiect al bazeide 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 FilterMulÛimile de înregistr|ri cu tipurile Dynaset Õi Snapshot pot fi filtrate utilizând proprietateaFilter. Aceasta este un Õir de caractere, identic cu cel folosit în clauza WHERE. Filtrareava avea efect la urm|toarea creare a unei mulÛimi de întergistr|ri.

Page 333: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

337 Programarea cu obiectul DAO - cursul 13

Sub Filtrare1()

Dim db As Database

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*'"

Set rsFil = rs.OpenRecordset()

Do While Not rsFil.EOF

For Each fl In rsFil.Fields

Debug.Print fl.Name; " = "; rsFil(fl.Name).Value

Next fl

rsFil.MoveNext

Loop

rs.Close

rsFil.Close

End Sub

Editarea datelor unei mulÛimi de înregistr|riDatele unei mulÛimi de înregistr|ri se pot modifica sau nu în funcÛie de permisiuni. Ladeschiderea mulÛimii de înregistr|ri este posibil ca datele s| nu se poat| modifica ci numaivizualiza. Încercarea de a modifica aceste date duce la o eroare de execuÛie a aplicaÛiei care sepoate trata prin cod. MulÛimile de înregistr|ri de tipul Table Õi Dynaset pot fi întotdeaunaeditate cu excepÛia cazului în care altcineva a blocat tabelul (prin folosirea opÛiunilor deblocare prezentate). La Dynaset în plus, regulile de asociere pot opri editarea anumitorcâmpuri. Cele de tipul Snapshot nu se pot modifica prin definiÛie.

Modificarea unei înregistr|ri existenteModificarea 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;

Page 334: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

338 Programarea cu obiectul DAO - cursul 13

3. RealizaÛi modific|rile;

4. FolosiÛi metoda Update pentru salvarea modific|rilor.

Sub EditareRand()

Dim db As Database

Dim rs As Recordset

Set db = CurrentDb()

Set rs = db.OpenRecordset("TContacte", dbOpenDynaset)

With rs

.FindFirst "[Nume Contact] = 'Grisa Marius'"

If .NoMatch Then

MsgBox "Nu exista persoana de contact !",EvbCritical

Else

.Edit

![Nume Contact] = "Grigore Mariuta"

.Update

End If

End With

rs.Close

End Sub

Ad|ugarea unei înregistr|ri noiAd|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 luavalorile implicite;

2. AtribuiÛi valorile dorite câmpurilor;

3. FolosiÛi metoda Update pentru a salva noua înregistrare.

Sub AdaugareRand()

Dim db As Database

Page 335: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

339 Programarea cu obiectul DAO - cursul 13

Dim rs As Recordset

Set db = CurrentDb()

Set rs = db.OpenRecordset("TContacte", dbOpenDynaset)

With rs

.AddNew

![Nume Contact] = "Sebastian Corina"

.Update

End With

rs.Close

End Sub

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 Moveavâ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 cazulmulÛimii de înregistr|ri de tipul Table, dac| este definit un index, Access plaseaz|înregistrarea în poziÛia corespunz|toare valorii indexului.

Ôtergerea unor înregistr|ri dintr-o mulÛime de înregistr|riÔ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|, estenecesar| 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

Page 336: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

340 Programarea cu obiectul DAO - cursul 13

Dim rs As Recordset

Set db = CurrentDb()

Set rs = db.OpenRecordset(NumeTabel)

With rs

If .RecordCount > 0 Then

.MoveFirst

Do

.Delete

.MoveNext

Loop Until .EOF

End If

.Close

End With

End Sub

Modificarea unui grup de înregistr|riModificarea unui grup de înregistr|ri se poate realiza folosind instrucÛiunile de ciclareprezentate, 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 folosicodul:

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([InfoEContact]-1))"

sirSQL = sirSQL + " WHERE ((Left([Info Contact],1)=""1""));"

Page 337: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

341 Programarea cu obiectul DAO - cursul 13

qdef.SQL = sirSQL 'Definirea proprietatii SQL

qdef.Execute 'Lansarea interogarii

qdef.Close 'Inchiderea interogarii

End Sub

O alt| variant| de scriere a codului se mai sus este:

Sub Modifica1()

Dim db As Database

Dim qdef As QueryDef

Dim sirSQL As String

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([InfoEontact]-1))"

sirSQL = sirSQL + " WHERE ((Left([Info Contact],1)=""1""));"

qdef.SQL = sirSQL 'Definirea proprietatii SQL

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), obiectulrezultat este automat ad|ugat colecÛiei QueryDefs, altfel obiectul rezultat este temporar.

Page 338: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

342 Programarea cu obiectul DAO - cursul 13

DefiniÛiile de interogare temporare se folosesc în cazul unor Õiruri SQL pentru obiectele carenu 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|prima este Õtears| - cea de a dou| procedur| exemplific| acest mod de lucru.

Modificarea datelor prin tranzacÛiiTermenul de prelucrarea a tranzacÛiilor (transaction) se refer| în bazele de date la grupareamodific|rilor aduse datelor în secvenÛe speciale care sunt tratate asemenea unei singureoperaÛii. Un astfel de grup reuÕeÕte dac| fiecare operaÛie a grupului reuÕeÕte Õi atunci spunemc| tranzacÛia (commit) a reuÕit. Dac| oricare dintre operaÛiile de modificare ale grupului nureuÕ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 metodepentru 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 celmai recent BeginTrans. Cele trei metode sunt ale obiectului Workspace, iar codul careurmeaz| este un Õablon pentru folosirea acestora în derularea tranzacÛiilor:

On Error GoTo Tratare_Eroare

Dim ws As WorkSpace

Dim StareTr As Boolean

StareTr = False

Set ws = DBEngine.Workspaces(0)

. . .

ws.BeginTrans

StareTr=True

ws.CommitTrans

StareTr=False

. . .

Tratare_Eroare:

if StareTr then

ws.Rollback

End If

' alte prelucrari

Page 339: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

343 Programarea cu obiectul DAO - cursul 13

În cazul formularelor legate Access-ul are propria lui metod| de tratare a tranzacÛiilor, dinacest motiv nu se pot folosi tranzacÛii în proceduri de evenimente pentru a grupa modific|rileaduse datelor prin intermediul formularului.

DefiniÛia datelor cu DAOO baz| de date poate fi creat| Õi prin folosirea exclusiv| a metodelor DAO Create... ÕiAppend. Acestea permit crearea tuturor obiectelor ce alc|tuiesc o baz| de date.

Crearea obiectelor bazelor de datePentru crearea unui obiect nou se parcurg paÕii:

1. FolosiÛi una din metodele Create... pentru a crea obiectul (CreateTable,CreateField, CreateIndex, CreateQueryDef, CreateRelation, ...);

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 maitârziu. Majoritatea metodelor Create... au argumente opÛionale care permit specificareapropriet|Ûilor obligatorii ale noului obiect;

3. FolosiÛi metoda Append pentru ad|ugarea obiectului la colecÛia din care face partepentru 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, trebuiecreat obiectul primar, se creeaz| subobiectele care fac parte din acesta Õi se adaug| la colecÛiacorespunz|toare, iar în final obiectul primar se adaug| Õi el colecÛiei corespunz|toare lui.

Crearea unui tabelS| presupunem c| dorim s| cre|m un tabel nou numit TAdrese care are câmpurile AdreseID,Tip adresa, Adresa folosiÛi codul:

Sub CreeazaTabelTel()1

Dim db As Database2

Dim tdf As TableDef3

Dim fl1 As Field4

Dim fl2 As Field5

Dim fl3 As Field6

7

Set db = CurrentDb()8

Set tdf = db.CreateTableDef("")9

tdf.Name = "TAdrese"10

Page 340: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

344 Programarea cu obiectul DAO - cursul 13

11

Set fl1 = tdf.CreateField("AdreseID", dbLong)12

Set fl2 = tdf.CreateField("Tip adresa", dbText, 30)13

Set fl3 = tdf.CreateField("Adresa", dbText, 100)14

15

With tdf.Fields16

.Append fl117

.Append fl218

.Append fl319

End With20

21

With db.TableDefs22

.Append tdf23

.Refresh24

End With25

26

Application.RefreshDatabaseWindow27

End Sub28

Pân| la atingerea liniei 14 tabelul Õi cele trei câmpuri exist| numai în memorie. Pentru caaceste obiecte s| devin| permanente trebuie folosit| metoda Append care le va ad|uga unorcolecÛii f|cându-le permanente. Pentru câmpuri, ad|ugarea se face în liniile 16-20, iar pentrutabel, în liniile 22-25. În linia 24 se foloseÕte metoda Refresh prin care se actualizeaz|conÛinutul colecÛiei, noul tabel devenind numai în acest mod disponibil Õi pentru alÛiutilizatori care lucreaz| cu aceeaÕi baz| de date (regim multiuser). DeÕi tabelul estedisponibil pentru utilizare, Access-ul nu reîmprosp|teaz| conÛinutul fereastrei bazei de datedecât dac| ne poziÛion|m pe o alt| colecÛie Õi apoi revenim pe cea a tabelelor. Pentru a rezolvaaceast| 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 tabelulcare urmeaz|:

Obiect Metod| Argumente

Tip dedat|

Descriere

Tabel (Table) CreateTableDef Nume String Numele nouluitabel.

Page 341: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

345 Programarea cu obiectul DAO - cursul 13

Atribute Integer Set|ri pentru tabeleataÕate, de sistem Õiascunse.

Surs| String Sursa de date a unuitabel ataÕat.

Conexiune

String Calea c|tre tabelulcare este sursa dedate a tabeluluiataÕat.

Câmp (Feld) CreateFiled Nume String Numele nouluicâmp.

Tip Integer Tipul de dat| alnoului câmp.

M|rime Integer M|rimea câmpuluidac| este de tipultext.

Index CreateIndex Nume String Numele nouluiindex.

Interogare (Query) CreateQueryDef Nume String Numele noiiinterog|ri.

TextSQL String Un Õir QL valid caredefineÕte nouainterogare.

Relat-ie (Relation) CreateRelation Nume String Numele noii relaÛii.

Tabel String Numele cheiiprimare din relaÛie.

Tabelasociat

String Numele cheiistr|ine din tabelulasociat.

Atribute Integer Setarea tipului derelaÛie, forÛareaintergrit|ÛiirelaÛionale.

Spat-iu de lucru(Workspace)

CreateWorkspace Nume String Numele nouluispaÛiu de lucru.

Utilizator String Numele unuiutilizator existent.Acesta va deveniproprietarul nouluispaÛiu de lucru.

Page 342: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

346 Programarea cu obiectul DAO - cursul 13

Parol| String Parola pentru noulspaÛiu de lucru.

Tip Long Valoare care indic|sursa datelor (Jetsau ODBCDirect).

Baza7 de date(Database)

CreateDatabase Nume String Numele fiÕieruluicare va conÛine bazade date.

Indirecte String Ôir care specific|date colaterale(limb|, parol|implicit|).

OpÛiuni Integer Valoare caredefineÕte dac| nouabaz| de date estesau nu incriptat| Õiversiunea de Jetfolosit| la stocareafiÕierelor.

Grup (Group) CreateGroup Nume String Numele nouluigrup.

PID String Identificatorpersonal al nouluigrup.

Utilizator (User) CreateUser Nume String Numele nouluiutilizator.

PID String Identificatorpersonal al nouluiutilizator.

Parol| String Parola pentru noulobiect utilizator.

Crearea unui IndexEste posibil ca într-o aplicaÛie s| fie necesar| crearea unui index prin program. Etapelenecesare 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 unuiobiect index toate propriet|Ûile lui pot fi setate dup| cum dorim. În general vor fi setatepropriet|Ûile Name, Primary, Unique Õi Required. Dac| obiectul index a fost ad|ugatunei colecÛii, propriet|Ûile lui nu mai pot fi modificate fiind necesar| Õtergerea lui Õi crearea

Page 343: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 fiecarecâmp index va fi ad|ugat colecÛiei Fields;

4. FolosiÛi metoda Append a obiectului TableDef pentru ad|ugarea index-ului încolecÛia Indexes.

Function CreareCheiePrimara(NumeTabel As String, NumeCheieP E1As String, ParamArray VectorParametri() As Variant) As E2Boolean3

Dim id As Index4

Dim tdf As TableDef5

Dim fld As Field6

Dim varCP As Variant7

Dim varid As Variant8

Dim ids As Indexes9

Dim db As Database10

11

On Error GoTo CreareaCheieP_Eroare12

13

Set db = CurrentDb()14

Set tdf = db.TableDefs(NumeTabel)15

Set ids = tdf.Indexes16

17

varCP = GasesteCheiaPrimara(tdf)18

If Not IsNull(varCP) Then19

ids.Delete varCP20

End If21

22

Set id = tdf.CreateIndex(NumeCheieP)23

24

id.Primary = True25

26

For Each varid In VectorParametri27

AdaugaCamp id, varid28

Next varid29

Page 344: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

348 Programarea cu obiectul DAO - cursul 13

30

ids.Append id31

CreareCheiePrimara = True32

33

CreareaCheieP_Iesire:34

Exit Function35

36

CreareaCheieP_Eroare:37

MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E38")"39

CreareCheiePrimara = False40

Resume CreareaCheieP_Iesire41

End Function42

Private Function GasesteCheiaPrimara(tdf As TableDef) As E1Variant2

3

Dim id As Index4

5

For Each id In tdf.Indexes6

If id.Primary Then7

GasesteCheiaPrimara = id.Name8

Exit Function9

End If10

Next id11

GasesteCheiaPrimara = Null12

End Function13

Private Function AdaugaCamp(id As Index, varid As Variant) AsE1Boolean2

Dim fld As Field3

4

On Error GoTo AdaugaCamp_Eroare5

If Len(varid & "") > 0 Then6

Set fld = id.CreateField(varid)7

Page 345: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

349 Programarea cu obiectul DAO - cursul 13

id.Fields.Append fld8

End If9

AdaugaCamp = True10

11

AdaugaCamp_Iesire:12

Exit Function13

14

AdaugaCamp_Eroare:15

AdaugaCamp = False16

Resume AdaugaCamp_Iesire17

End Function18

Sub TestCreareCP()

Debug.Print CreareCheiePrimara("TAdrese", "CheiePrimata",E"AdreseID", "Tip adresa")

End Sub

FuncÛia CreareCheiePrimara() creeaz| cheia primar| cu numele NumeCheieP a unuitabel 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 indexdrept 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ÛieiIndex a definiÛiei de tabel TableDef.

O procedur| de tip funcÛie sau subprogram poate avea ultimul parametru precedat de cuvântulopÛional ParamArray Õi urmat de paranteze rotunde (). În acest fel parametrul se defineÕteca un tablou cu elemente de tipul Variant. Aceasta este metoda disponibil| în VBA pentrua transfera unei funcÛii un num|r variabil de argumente.

FuncÛia GasesteCheiaPrimara() are ca parametru de intrare o definiÛie de tablou Õi arerolul de a g|si numele cheii primare dac| aceasta exist|. Rezultatul întors este numele cheiiprimare sau Null în cazul când aceasta nu exist|.

FuncÛia AdaugaCamp() adaug| un obiect câmp unui obiect index. Rezultatul întors esteTrue în caz de reuÕit| sau False altfel.

Crearea unei relaÛiiPentru crearea unei relaÛii se va folosi metoda CreateRealtion a obiectului baz| de date

Page 346: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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

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. Pentrufiecare obiect câmp se seteaz| proprietatea ForeignName ce corespunde numeluicorespunz|tor din tabelul ataÕat;

5. FolosiÛi metoda Append pentru ad|ugarea noi relaÛii în colecÛia Relations a bazeide date.

Tabelul care urmeaz| prezint| constantele predefinite care pot fi date propriet|ÛiiAttributes a obiectului relaÛie:

Constant| Descriere

dbRelationUnique RelaÛia este 1º 1.

dbRelationDontEnforce Integritatea referenÛial| nu este activat|.

dbRelationInherited RelaÛia dintre tabele este definit| într-o baz| dedate 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 uncorespondent în cel de al doilea tabel.

dbRelationRight RelaÛia este de tip asociere la dreapta extern|,aceasta include toate înregistr|rile din cel de aldoilea tabel (cel din dreapta), inclusiv cele care nuau 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 programatorilorfolosesc 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 tabeleleTContacte Õi TAdrese având Õtergerea cascadat|.

Function CreeazaRelatie() As Boolean

Dim db As Database

Page 347: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

351 Programarea cu obiectul DAO - cursul 13

Dim rel As Relation

Dim fld As Field

On Error GoTo CreazaRelatie_Eroare

Set db = CurrentDb()

Set rel = db.CreateRelation("Relatia1", "TContacte", E"TAdrese", dbRelationLeft Or dbRelationDeleteCascade)

Set fld = rel.CreateField("IDContact")

fld.ForeignName = "AdreseID"

rel.Fields.Append fld

db.Relations.Append rel

CreazaRelatie = True

CreazaRelatie_Iesire:

Exit Function

CreazaRelatie_Eroare:

MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E")"

CreazaRelatie = False

Resume CreazaRelatie_Iesire

End Function

AtaÕarea tabelelor din bazele de date externePe lâng| posibilitatea definirii de noi tabele, exist| posibilitatea ataÕ|rii unor tabele din bazede date externe. La ataÕarea unui tabel extern, informaÛia de conectare este stocat| în baza dedate Access, iar conectarea are loc automat la deschiderea bazei de date. Datele îns| vorr|mâne stocate în baza de date extern|. Dup| ataÕare, aceste tabele pot fi folosite asemeneatabelelor interne ale Access-ului îns| nu se pot crea obiecte Recordset de tipul Table pebaza lor. Proprietatea Connect a obiectului TableDef permite controlul tabelelor ataÕateîmpreun| cu proprietatea SourceTableName Õi metoda RefreshLink. Fiecare obiectTableDef are o proprietate Connect care este un Õir ce identific| tipul Õi locul tabeluluiataÕat. Numele tabelului este stocat separat în proprietatea SourceTableName. Dac|

Page 348: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 1. FolosiÛi metoda CreateTableDef a obiectului baz| de date (Database) pentru acrea un nou obiect TabelDef pentru tabelul ataÕat. DaÛi tabelului un nou nume prin care vafi identificat în baza de date local|;

2. SetaÛi propriet|Ûile SourceTableName Õi Connect ale obiectului TableDefpentru 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 dedate.

În funcÛie de tipul tabelului extern care va fi ataÕat este posibil ca unele informaÛii adiÛionales| fie necesare în proprietatea Connect (parol|, nume de utilizator, driver ISAM sauODBC). Un cod tipic pentru ataÕarea unui tabel este de forma:

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"

.SourceTableName = "Customers"

End With

db.TableDefs.Append tdf

Pus sub forma unei proceduri de tipul funcÛie codul devine:

Function CreareTabelAtasat(NumeTabel As String, Cale As EString, NumeTabelExtern As String) As Boolean

Dim db As Database

Dim tdf As TableDef

Dim strConnect As String

Dim vIntoarsedeFunctie As Boolean

Page 349: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

353 Programarea cu obiectul DAO - cursul 13

On Error GoTo CreareTabelAtasat_Eroare

Set db = CurrentDb()

Set tdf = db.CreateTableDef(NumeTabel)

With tdf

.Connect = ";DATABASE=" & Cale

.SourceTableName = NumeTabelExtern

End With

db.TableDefs.Append tdf

vIntoarsedeFunctie = True

CreareTabelAtasat_Iesire:

CreareTabelAtasat = vIntoarsedeFunctie

Exit Function

CreareTabelAtasat_Eroare:

MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E")"

vIntoarsedeFunctie = False

Resume CreareTabelAtasat_Iesire

End Function

ReataÕarea tabelelorDe multe ori, din motive independente de voinÛa noastr|, poziÛia tabelelor externe se poatemodifica pe discul folosit pentru stocarea lor. AplicaÛia Access va genera o eroare în execuÛiedac| unul dintre tabelele externe au fost mutate într-un alt director sau disc. Este util| scriereaunei funcÛii s| verifice dac| tabelele ataÕate au fost mutate, iar dac| au fost, s| fac| reataÕarealor pe baza noii poziÛii ocupate de acestea pe disc. FuncÛiaVerificaAtasareaTabelului() verific| ataÕarea tabelului NumeTable, iar dac|acesta nu mai este ataÕat, încearc| s|-l ataÕeze folosind calea din parametrul CaleNouaparcurgâ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

Page 350: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

354 Programarea cu obiectul DAO - cursul 13

încerca reataÕarea tabelului. În cazul în care încercarea este nereuÕit| se afiÕeaz| un mesaj deeroare Õi se revine cu valoarea False;

4. Dac| încercarea de accesare a reuÕit înseamn| c| tabelul este ataÕat corect Õi se revinecu valoarea True din funcÛie.

Function VerificaAtasareaTabelului(NumeTabel As String, ECaleNoua As String) As Boolean

Dim db As Database

Dim strName As String

VerificaAtasareaTabelului = True

On Error Resume Next

Set db = CurrentDb()

strName = db.TableDefs(NumeTabel).Fields(0).Name

If Err.Number <> 0 Then

If Not ReatasareTabel(NumeTabel, CaleNoua) Then

MsgBox "Nu am reusit reatasarea tabelului :'" & ENumeTabel & "'"

VerificaAtasareaTabelului = False

End If

End If

On Error GoTo 0

End Function

Function ReatasareTabel(NumeTabel As String, CaleNoua As EString) As Integer

Dim db As Database

Dim tdf As TableDef

ReatasareTabel = True

Set db = CurrentDb()

Set tdf = db.TableDefs(NumeTabel)

Page 351: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

355 Programarea cu obiectul DAO - cursul 13

If Len(tdf.Connect) > 0 Then

tdf.Connect = ";DATABASE=" & CaleNoua

On Error Resume Next

tdf.RefreshLink

ReatasareTabel = (Err = 0)

On Error GoTo 0

End If

End Function

Page 352: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

356 Access 2000, ADO s- i ADOX - cursul 14

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

! 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

(crearea de tabele locale Õi legate, crearea Õi modificarea interog|rilor, crearea de

indexuri Õi relaÛii).

Obiectivele cursului 14

Dupa7 parcurgerea acestui curs vet-i cunoas-te:

Page 353: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

357 Access 2000, ADO s- i 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:VBA, formulare Õi rapoarte, obiectele pentru accesul la date, internet/intranet.

VBA în Access 2000Editorul Access pentru module de program a fost înlocuit cu cel folosit în limbajul deprogramare 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ÛiiMicrosoft Office (Excel Õi Word) Õi cu cel al firmelor terÛe care permit programarea aplicaÛieilor din VBA; • întregul cod VBA din modulele globale, formulare Õi rapoarte se poate proteja printr-osingur| 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 COMpentru aplicaÛii add-ins (o procedur| Visual Basic împreun| cu obiectele pe care lemanipuleaz| ce poate fi stocat| sau Õtears| din baza de date sub controlul unui programgestionar de add-ins-uri) care cresc productivitatea scrierii, analizei Õi format|rii coduluiVBA.

Formulare Õi rapoarte în Access 2000Aici 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 jurultextului 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 omulÛime de înregistr|ri DAO sau ADO.

Accesul la date în Access 2000Accesul la date a suferit o modificare important|, motorul bazei de date vine cu o opÛiunenou|, 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 DataEngine (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 dedate 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Ûiilemultilingve sunt mai uÕor de scris; • Access-ul 2000 foloseÕte noul model de date ActiveX Data Objects (ADO) ca model

Page 354: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

358 Access 2000, ADO s- i 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 tuturorutilizatorilor care acceseaz| baza de date Õi permite inhibarea leg|rii de noi utilizatori la bazade 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 schemabazei de date Õi întreÛinerea acesteia: ADOX Õi JRO. ADOX permite investigarea Õimodificarea schemei bazei de date, iar JRO permite compactarea Õi repararea bazelor de date.

Facilit|Ûile internet Õi intranet ale lui Access 2000În aceast| versiune de Access Generatorul de pagini Web este înlocuit cu pagini pentruaccesul la date. O pagin| pentru accesul la date este o pagin| Web care se poate folosi lavizualizarea Õi editatrea datelor dintr-o baz| de date Access, MSDE sau SQL Server 7 prinintermediul lui Internet Explorer 5. Câteva dintre informaÛiile legate de aceste pagini sunt: • paginile pentru accesul la date se folosesc de capacitatea lui IE5 de legare la dateleunui client; • pagina pentru accesul la date face parte dint-o pagin| HTML care foloseÕte eXtensibleMarkup Language (XML); • paginile pentru accesul la date pot fi folosite dintr-o baza de date MDB, proiect ADPsau 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Ûinutulunei 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înregistr|rilor unei baze de date Õi pentru realizarea de rapoarte datorit| facilit|Ûilor îngrupare.

ADO sau DAO?Versiunile anterioare de Access foloseau o bibliotec| numit| DAO pentru accesul la date dinprogram. DAO Õi-a început existenÛa ca interfaÛ| cu motorul Jet odat| cu Access 1 Õi treptat aajuns la o m|rime Õi complexitate impresionant| sub Access 97, sau cu alte cuvinte a devenitprea complicat. Începând cu Access 2000, DAO nu mai este modelul preferat pentru accesulla date, locul ei fiind luat de ADO. Exist| situaÛii când este de preferat folosirea lui DAO înAccess 2000, cele mai importante sunt: • folosirea unei mulÛimi de înregistr|ri a unui formular dintr-o baz| de date Access esteo 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Õteimplicit ADO).

Page 355: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

359 Access 2000, ADO s- i ADOX - cursul 14

Specificarea referinÛelorLa crearea unei baze de date noi (fiÕierul are extensia MDB) sau a unui proiect (fiÕierul areextensia ADP) Access 2000 presupune c| veÛi lucra cu ADO Õi va seta referinÛa din figuraurm|toare c|tre biblioteca Microsoft ActiveX Data Objects 2.1. ReferinÛa se poate seta Õimanual din editorul de module VisualBasic al Access-ului selectând dinTools pe References. Pentru aceasta înfereastra de dialog References, undesunt afiÕate sub forma unei liste toatebibliotecile de obiecte instalate pecalculator, se activeaz| butonul devalidare corespunz|tor numeluiaplicaÛiei dorite. Dac| validaÛiMicrosoft ActiveX Data Objects 2.1Library, aplicaÛia va folosi ADO, dac|validaÛi Microsoft DAO 3.6 ObjectLibrary aplicaÛia va folosi DAO. Esteposibil s| fie ambele biblioteci validatesimultan, caz în care apar uneleprobleme de scriere întrucât exist|obiecte ale celor dou| biblioteci care auacelaÕi nume. De exemplu, atât DAO cât Õi ADO au obiectul Recordset, astfel o linie deprogram de forma:

Dim rs As Recordset

nu se Õtie la ce fel de mulÛime de înregistr|ri se refer|. Pentru rezolvarea ambiguit|Ûii numelebibliotecii va preceda numele obiectului astfel vom scrie:

Dim rs1 As ADODB.Recordset

Dim rs2 As DAO.Recordset

Noua ierarhie de obiecteLa fel cu versiunile anterioare, Access-ulare propria lui ierarhie de obiecte princare putem avea acces la informaÛii cuprivire la paginile, formularele, rapoarteledeschise sau la modulele aplicaÛiei.Figura care urmeaz| le prezint| parÛial peacestea. Ierarhia obiectului aplicaÛie(Application) include toate obiectele(formularele, rapoartele, paginile

Page 356: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

360 Access 2000, ADO s- i ADOX - cursul 14

Diferent-e întreADO s-i DAO

deschise Õi modulele de cod etc. ) cu care Access-ul poate lucra. În cele ce urmeaz|, dinpunctul 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 cumotorul 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 ultimafigur| se prezint| colecÛia Properties comun| obiectelor Connection, Command, RecordsetÕi Filed.

DAO a devenit în timp o bibliotec| uriaÕ|, ADO foloseÕte trei modelede obiecte distincte pentru a furniza aceeaÕi funcÛionalitate cu DAO.Acestea sunt ADO (ADODB), Microsoft ADO Extensions for DDLand 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 careacceseaz| datele se numeÕte consumator de date (de exemplu, Access 2000 sau un programscris în Visual Basic 6.0), iar programul care asigur| accesul la date se numeÕte, furnizor debaz| de dat| (de exemplu, Microsoft OLE DB Provider for SQL Server sau Microsoft Jet 4.0OLE DB Provider).

Manipularea datelor prin ADOADO permite aplicaÛiilor client s| acceseze Õi s| manipuleze date prin orice furnizor deservicii OLE DB (OLE DB este o component| a unui SGBDR care implementeaz| accesuleficient prin reÛea local| sau internet la mai multe tipuri de surse de date: date stocate conformmodelului relaÛional, fiÕiere de poÕt| electronic|, foi de calcul). ADO conÛine obiecte pentruconectarea la o surs| de date Õi manipularea acestora. În ADO obiectul Connection defineÕteo sesiune de lucru pentru un utilizator al unei surse de date particulare. În DAO obiectulWorkspace defineÕte o sesiune de lucru a unui utilizator, iar obiectul Database defineÕte

Page 357: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

361 Access 2000, ADO s- i ADOX - cursul 14

sursa de date. Obiectul ADO Command este similar obiectului DAO QueryDef, ambeleputând fi folosite pentru executarea de instrucÛiuni SQL asupra unei surse de date. ObiectulRecordset este folosit în ambele biblioteci pentru vizualizarea conÛinutului unui tabel sau arezultatelor execuÛiei unei instrucÛiuni SQL.

DefiniÛia datelor Õi securitatea cu ADOXADOX 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 pentrudefiniÛia datelor. Fiecare obiect Catalog este asociat unui singur obiect Connection, în timpce în DAO obiectul Workspace putea conÛine mai multe obiecte Database. Obiectele ADOTabel, 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 JROModelul JRO conÛine obiecte pentru crearea, modificarea Õi sincronizarea mai multor replici aunei baze de date. Se poate folosi numai pentru baze de date ale motorului Microsoft Jet.Replica este obiectul primar folosit pentru crearea de replici noi, pentru modificareapropriet|Ûilor unei replici Õi pentru sincronizarea replicilor.

Utilizarea variabilelor obiectPentru 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(Integer). În cazul unei variabile obiect (o variabil| care refer| un obiect pentru accesul la datesau un obiect de interfaÛ| cu utilizatorul) Access-ul creeaz| numai un poantor, adic| aloc|spaÛiu suficient numai pentru stocarea unei adrese de obiect. Deci, în Access 2000 dac| scriemliniile:

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) laobiect. În acest moment în aceste variabile nu sunt îns| stocate Õi adresele obiectelor, pentruaceasta trebuie s| scriem codul:

Set con = CurrentProject.Connection

Set rs = New ADODB.Recordset

Page 358: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

362 Access 2000, ADO s- i 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| peparcursul codului scris variabila obiect iese în afara scopului, Access-ul va elibera (obiectuleste Õters din RAM) Õi spaÛiul de RAM corespunz|tor obiectului poantat de variabilarespectiv| î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 poaterealiza Õi explicit prin:

Set rs = Nothing

Unele obiecte au o metod| Close, aceasta trebuie apelat| înainte de dezalocarea spaÛiuluipentru obiectul în cauz|, deci ordinea va fi:

rs.Close

Set rs = Nothing

Obiectul ConnectionEste obiectul din vârful ierarhiei ADO, orice alt obiect se poate folosi numai dac| s-aspecificat conexiunea care va fi folosit| pentru accesul la date. Obiectul corespunde uneisingure conexiuni la un furnizor de date OLE DB. Obiectul Connection poate fi creat explicitsau se poate crea implicit când se lucreaz| cu un obiect derivat al lui, de exemplu obiectulRecordset, când este necesar| Õi specificarea informaÛiei de conectare. Dac| codul se scrie înAccess se poate folosi obiectul CurrentProject pentru a obÛine o referinÛ| la conexiuneabazei de date curente.

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

Page 359: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

363 Access 2000, ADO s- i ADOX - cursul 14

Set con = Nothing

End Sub

iar rezultatul afiÕat în fereastra imediat| este:Provider=Microsoft.Jet.OLEDB.4.0;Password="";UserID=Admin;Data Source=C:\My Documents\db2000-test.mdb;Mode=Share Deny None;Extended Properties="";LocaleIdentifier=1033;Jet OLEDB:System database="";JetOLEDB:Registry Path="";Jet OLEDB:Database Password="";JetOLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;JetOLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global BulkTransactions=1;Jet OLEDB:New Database Password="";JetOLEDB:Create System Database=False;Jet OLEDB:EncryptDatabase=False;Jet OLEDB:Don't Copy Locale onCompact=False;Jet OLEDB:Compact Without ReplicaRepair=False;Jet OLEDB:SFP=False

Procedura Sub de mai sus foloseÕte proprietatea CurrentProject.Path pentru adetermina calea c|tre baza de date curent| sau fiÕierul proiect. R|spunsul afiÕat conÛine unnum|r foarte mare de propriet|Ûi ale conexiunii, dar singurele necesare pentru realizarea uneiconexiuni sunt numele furnizorului OLE DB (Provider) Õi numele bazei de date care se vadeschide (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

Set con = CurrentProject.Connection

Debug.Print con.ConnectionString

End Sub

Enumerarea obiectelor unei colecÛiiPrezint în continuare cel mai simplu mod de parcurgere a unei colecÛii prin folosireainstrucÛiunii For Each ... Next. Este necesar| crearea unei variabile care s| poat| referi tipulde obiect specific colecÛiei care va fi parcurs|. Baza de date folosit| se numeÕteADDBOOK.MDB, iar tabelul Members. Figura care urmeaz| conÛine Õi codul pentruprocedura de tipul Sub cu numele ListareCampuri.

Codul parcurge iterativ fiecare element al colecÛiei Õi foloseÕte un Set implicit pentru a poantala variabila obiect corespunz|toare pentru fiecare obiect al colecÛiei. Când ajunge la liniaNext fld, valoarea poantorului se va modifica la urm|torul element al colecÛiei.

Page 360: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

364 Access 2000, ADO s- i ADOX - cursul 14

Public Sub ListareCampuri(NumeTable As String)

Dim rs As ADODB.Recordset

Dim fld As ADODB.Field

Set rs = New ADODB.Recordset

rs.Open NumeTable, CurrentProject.Connection

For Each fld In rs.Fields

Debug.Print fld.Name

Next fld

rs.Close

Set rs = Nothing

End Sub

Page 361: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

365 Access 2000, ADO s- i ADOX - cursul 14

AcelaÕi cod rescris cu un For ... Next clasic devine:

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

rs.Open NumeTable, CurrentProject.Connection

For i = 0 To rs.Fields.Count - 1

Set fld = rs.Fields(i)

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Î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 decursor 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Ûimide înregistr|ri. ADO permite folosirea a patru tipuri de cursoare care sunt descrise în tabelulurm|tor:

Tipul cusorului Descriere Avantaje Dezavantaje

Dynamic MulÛime deînregistr|ri dintr-untabel sau dintr-o alt|surs| de date.

AfiÕeaz| toatemodific|rile f|cutede alÛi utilizatori.

Permite folosireamarcajelor numaidac| furnizorul lesuport|. Nu poatelucra cu jet ole db înacest mod.

Page 362: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

366 Access 2000, ADO s- i ADOX - cursul 14

Keyset MulÛime de poantori(bookmarks) carerefer| datele unuitabel sau interogaredin baza de date.

AfiÕeaz| toatemodific|rile f|cutede alÛi utilizatori.Suport| lucrul cumarcaje întotdeauna.

Nu afiÕeaz| noileînregistr|ri ad|ugatede alÛi utilizatori.Împiedic| accesul laînregistr|rile Õtersede alÛi utilizatori.

Static Copie a uneimulÛimi deînregistr|ri aÕa cumera ea la momentulcre|rii ei.

Întotdeuna suport|marcaje. Singurul tipde mulÛime deînregistrare esteclient-side cursor

Nu reflect|modific|rile adusedatelor în regimul delucru cu mai mulÛiutilizatori

Forward-only Copie a uneimulÛimi deînregistr|ri aÕa cumera ea la momentulcre|rii ei.

Mai rapid| decâtcursorul static

Permite navigarea înmulÛime numai înfaÛ|.

Deschiderea unei mulÛimi de înregistr|riCodul pentru deschiderea unei mulÛimi de înregistr|ri este de forma:

Dim rs As ADODB.Recordset

Set rs = New ADODB.Recordset

rs.Open Sursa7, Conexiune, TipCursor, TipBlocare, Opt-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:

rs.Connection = CurrentProject.Connection

rs.CursorType = adOpenStatic

rs.LockType = adLockOptimistic

rs.Open "Members"

rs.Open "Members", CurrentProject.Connection, adOpenStatic, _adLockOptimistic

Parametrul Sursa7 specific| locul din care vin datele Õi trebuie s| fie:

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

Page 363: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

367 Access 2000, ADO s- i 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 navigareaprintre î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.

adOpenStatic Deschide o mulÛime de înregistr|ri statice.

adOpenForwardOnly Deschide o mulÛime de înregistr|ri pentru navigareîn faÛ|.

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:

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 folosimetoda UpdateBatch pentru actualizarea maimultor înregistr|ri într-o singur| operaÛie.

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 Sursa7, el poate luavalorile prezentate în tabelul urm|tor:

Numele constantei de evaluare Descriere

adCmdText Spune furnizorului s| evalueze sursa ca Õi instrucÛiuneSQL.

adCmdTable Spune ADO-ului s| genereze o interogare SQL pentrucitirea tuturor înregistr|rilor unui tabel sau interogare ac|rui nume este specificat în surs|.

Page 364: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

368 Access 2000, ADO s- i ADOX - cursul 14

adCmdTableDirect Spune furnizorului s| întoarc| toate înregistr|rile unuitabel sau interogare a c|rui nume este specificat însurs|.

adCmdStoredProc Spune furnizorului s| evalueze sursa ca un nume deprocedur| stocat| sau ca interogare.

adCmdUnknown Spune ADO-ului s| interogheze furnizorul pentru adetermina dac| sursa este o procedur| stocat|, un numede tabel sau o instrucÛiune SQL.

adCmdFile Spune ADO-ului c| parametrul surs| este numele unuifiÕ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 dedate ADDRBOOK.MDB este:

Public Sub DeschideMultimedeInregistrariADO()

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,EadLockReadOnly

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 fiafiÕate în fereastra imediat| prin parcurgerea iterativ| a colecÛiei Fields.

Page 365: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

369 Access 2000, ADO s- i ADOX - cursul 14

Crearea obiectelor mulÛime de înregistrareMarele 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:

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

Set rs = New ADODB.Recordset

rs.Open "[NumeInterogare]", CurrentProject.Connection

3. Crearea unei mulÛimi de înregistr|ri care se poate edita Õi permite navigareaîmpreun| cu sortare:

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

rs.CursorLocation=adUseServer

rs.Open "NumeTable", CurrentProject.Connection, adOpenKeyset,EadLockOptimistic, adCmdTableDirect

Cursorul clientObiectul ADO Recordset are o proprietate CursorLocation care nu exista în DAO Õi careafecteaz| 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| daterecent accesate Õi care este proiecat| pentru a creÕte viteza de acces în cazul referirii aceloraÕidate) sau de poantori la înregistr|ri furnizate de motorul bazei de date la deschiderea uneimulÛ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| cuutilizatorul bazei de date), iar cel server se creeaz| pe aceeaÕi maÕin| cu server-ul, care poatefi 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 cursorulserver Õi adUseClient pentru cursorul client. Când se specific| cursorul client, ADOtransfer| cererile serviciului Microsoft Cursor Service pentru OLE DB care este proiectatpentru 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).

Page 366: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

370 Access 2000, ADO s- i ADOX - cursul 14

Apoi realizeaz| un cache local pentru date Õi le prezint| aplicaÛiei ca o mulÛime de înregistr|ristatic|. În majoritatea cazurilor cursorul client din interiorul unei baze de date Access duce larealizarea de dou| cache-uri pentru date pe aceeaÕi maÕin|: odat| de motorul Jet, apoi deServiciul Cursor. TotuÕi, acest cursor extinde funcÛionalitatea obiectului, de exemplu se poatefolosi metoda Sort sau se poate folosi o mulÛime de înregistr|ri deconectat| care va fi maitâ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 cazulcând funcÛionalitatea adus| de cursorul client este necesar|.

Navigarea printre înregistr|riLa fel ca Õi la DAO, ADO are metodele Move, MoveFirst, MoveLast, MoveNext ÕiMovePrevious pentru deplasarea de la o înregistrare la alta. Codul care urmeaz| prezint|folosirea lui MoveNext pentru a parcurge toate întegistr|rile obiectului Recordset.

Public Sub ParcurgeMultimedeInregistrariADO()

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,EadLockReadOnly

Do Until rs.EOF

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

Page 367: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

371 Access 2000, ADO s- i ADOX - cursul 14

C|utarea înregistr|rilorAtâ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 pentruc| 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 ÕiFindPrevious pentru c|utare. ADO are o singur| metod| pe Find care cu ajutorulparametrilor permite specificarea sensului c|ut|rii Õi poziÛia din care începe c|utarea. Formageneral| a lui Find este:

Recordset.Find Criteriu, SariRanduri, SensCautare, Inceput

SemnificaÛia parametrilor este:

1. Criteriu: este un Õir de caractere de forma unei clauze WHERE format| la fel ca înexpresiile SQL, dar f|r| cuvântul WHERE, de exemplu, PersonID = 3. Poate conÛinenumai 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 avanssau 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

Dim fld As ADODB.Field

Dim crt As String

crt = "[LastName] = 'Fuller'"

Set rs = New ADODB.Recordset

rs.Open "Members", CurrentProject.Connection, EadOpenKeyset, adLockOptimistic, adCmdTable

rs.Find crt

Do While Not rs.EOF

For Each fld In rs.Fields

Debug.Print fld.Value & ", ";

Page 368: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

372 Access 2000, ADO s- i ADOX - cursul 14

Next

Debug.Print

rs.Find crt, 1

Loop

rs.Close

Set fld = Nothing

Set rs = Nothing

End Sub

Tabelul care urmeaz| prezint| echivalenÛa între metodele de c|utare DAO Õi metoda FindADO:

Metoda DAO SariRanduri dinFind

SensCautare din Find

FindFirst 0 adSearchForward (dac| nu suntempoziÛionaÛi pe prima înregistrare se foloseÕteMoveFirst înainte de Find).

FindLast 0 adSearchBackward (dac| nu suntempoziÛionaÛi pe ultima înregistrare se foloseÕteMoveLast înainte de Find).

FindNext 1 adSearchForward

FindPrevious 1 adSearchBackward

DAO Õi ADO folosesc o sintax| diferit| pentru localizarea înregistr|rilor cu valori Null. ÎnDAO se scria un Õir de forma: "LastName Is Null" sau "LastName Is Not Null". ADO nurecunoaÕ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 poatefolosi metoda Seek pentru localizarea mai rapid| a unei înregistr|ri folosind codul careurmeaz|. 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 seva realiza c|utarea. Dac| c|utarea se va face dup| cheia primar| trebuie s| cunoaÕteÛi numeleei (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 dec|utare Õi a uneia sau a mai multor valori de c|utare. Dac| index-ul este format din mai multecâmpuri se vor furniza toate valorile de câmpuri printr-un tablou care se poate construifolosind funcÛia Array.

Page 369: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

373 Access 2000, ADO s- i ADOX - cursul 14

Seek lucreaz| numai cu mulÛimi de înregistr|ri care au proprietatea CursorLocationsetat| la ceva diferit de adUserClient. Pentru c| setarea implicit| este adUseServeraceasta, de obicei, nu va fi o problem|. OpÛiunile de c|utare se specific| prin constantelepredefinite din tabelul care urmeaz|:

OpÛiune Seek Descriere

adSeekAfterEQ C|utarea cheii egal| cu valoarea specificat| sau dac| nu este oastfel de cheie, prima cheie dup| punctul unde egalitatea ar fiap|rut.

adSeekAfter C|utarea primei chei dup| punctul în care egalitatea apare sau arfi ap|rut.

adSeekBeforeEQ C|utarea cheii egal| cu valoarea specificat| sau dac| nu este oastfel de cheie, prima cheie înaintea punctului unde egalitatea arfi ap|rut.

adSeekBefore C|utarea primei chei înaintea punctului în care apare egalitateasau 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

Set rs = New ADODB.Recordset

rs.Open "Members", con, adOpenKeyset, adLockReadOnly, EadCmdTableDirect

rs.Index = "PrimaryKey"

rs.Seek 5, adSeekFirstEQ

If Not rs.EOF Then

Debug.Print rs.Fields("FirstName").Value, Ers.Fields("LastName").Value

End If

Page 370: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

374 Access 2000, ADO s- i ADOX - cursul 14

rs.Close

Set rs = Nothing

End Sub

Dac| Seek reuÕeÕte s| localizeze înregistrarea, înregistrarea curent| devine cea care conÛinevaloarea specificat|. Dac| operaÛia nu reuÕeÕte, proprietatea EOF a mulÛimii de înregistrare iavaloarea True.

Editarea datelor unei mulÛimi de înregistr|riDac| o mulÛime de înregistr|ri se poate actualiza prin specificarea tipului corespunz|tor DAOsau în ADO prin parametrii TipCursor Õi TipBlocare se pot modifica, ad|uga Õi Õtergeînregistr|ri prin folosirea obiectului Recordset.

Modificarea unei înregistr|riModificarea 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

Set con = CurrentProject.Connection

Set rs = New ADODB.Recordset

rs.Open "Members", con, adOpenKeyset, adLockOptimistic,EadCmdTable

With rs

.Find "[LastName] = 'Davolio'"

If .EOF Then

MsgBox "Nu exist asa un nume!"

Else

.Fields("LastName") = "Marinica"

Page 371: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

375 Access 2000, ADO s- i ADOX - cursul 14

.Update

End If

End With

rs.Close

Set rs = Nothing

End Sub

Î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 metodeiUpdate 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ÛimulÛimea de înregistr|ri ADO va genera o eroare în execuÛie dac| nu aÛi folosit metodaUpdate.

Ad|ugarea unei înregistr|ri noiUnei mulÛimi de înregistr|ri care se poate actualiza Õi care are securitatea aÕa încât s| nepermit| aceasta, i se adaug| o înregistrare parcurgând etapele:

1. FolosiÛi metoda AddNew pentru ad|ugarea unei înregistr|ri. Toate câmpurile vorprimi 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Ûimetoda 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 vagenera o eroare în execuÛie.

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,EadCmdTable

With rs

.AddNew

Page 372: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

376 Access 2000, ADO s- i ADOX - cursul 14

.Fields("HouseholdName") = "Vasilis"

.Fields("Address") = "Muncii 103-105"

.Update

End With

rs.Close

Set rs = Nothing

End Sub

Ôtergerea unei înregistr|riPentru a Õterge o înregistrare dintr-o mulÛime de înregistr|ri se parcurg etapele:

1. PoziÛionare pe înregistrarea dorit|;

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 sepoate reveni asupra Õtergerii. Dup| Õtergere înregistrarea care s-a Õters r|mâne cea curent|, deexemplu 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

Dim rs As ADODB.Recordset

Set con = CurrentProject.Connection

Set rs = New ADODB.Recordset

rs.Open "Members", con, adOpenStatic, adLockOptimistic,EadCmdTable

With rs

If .RecordCount > 0 Then

.MoveFirst

Do

.Delete

Page 373: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

377 Access 2000, ADO s- i ADOX - cursul 14

.MoveNext

Loop Until .EOF

End If

End With

rs.Close

Set rs = Nothing

End Sub

Codul prezentat Õterge toate înregistr|rile tabelului Members din baza de dateADDRBOOK.MDB deÕi metoda nu este cea mai bun| pentru rezolvarea acestei probleme. Înpractic| veÛi folosi pentru aceasta o interogare de Õtergere (Delete Query).

Actualiz|ri în grupDac| 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 toatemodific|rile furnizorului OLE DB pentru a fi stocate într-o singur| operaÛie. Codul careurmeaz| 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

Dim crt As String

Set con = CurrentProject.Connection

Set rs = New ADODB.Recordset

crt = "[Country] = 'USA'"

With rs

.CursorLocation = adUseClient

.Open "Household", con, adOpenKeyset, EadLockBatchOptimistic

.Find crt

Do While Not .EOF

.Fields("Country") = "Transilvania"

Page 374: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

378 Access 2000, ADO s- i ADOX - cursul 14

.Find crt, 1

Loop

.UpdateBatch

End With

rs.Close

Set rs = Nothing

End Sub

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 proprietateaFilter împreun| cu constanta adFilterAffectedRecords pentru filtrareainterog|rilor afectate de ultimul Delete, UpdateBatch sau CancelBatch.

Executarea interog|rilorLa fel ca Õi în DAO Õi în ADO interog|rile pot fi executate îns| cu o tehnic| Õi ofuncÛionalitate m|rit|.

Executarea unei interog|ri f|r| parametri stocate în baza de dateO 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 careurmeaz| lucreaz| cu o astfel de interogare:

Public Sub ExecutieInterogareStocataADO()

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 "[Invoices]", con, adOpenForwardOnly, EadLockReadOnly, adCmdStoredProc

With rs

Do Until .EOF

Page 375: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

379 Access 2000, ADO s- i ADOX - cursul 14

For Each fld In .Fields

Debug.Print fld.Value & "' ";

Next

Debug.Print

.MoveNext

Loop

.Close

End With

Set rs = Nothing

Set con = Nothing

End Sub

ObservaÛi c| interogarea se foloseÕte la fel ca Õi în DAO cu diferenÛa c| aici numeleinterog|rii în Open se scrie între paranteze dreptunghiulare. Ea foloseÕte interogarea Invoicesdin baza de date Northwind.mdb.

Executarea unei interog|ri cu parametri stocate în baza de dateO interogare cu parametri stocat| în baza de date este o instrucÛiune SQL care a fost salvat| înbaza 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()

Dim con As ADODB.Connection

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#), EadCmdStoredProc)

Page 376: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

380 Access 2000, ADO s- i ADOX - cursul 14

With rs

Do Until .EOF

For Each fld In .Fields

Debug.Print fld.Value & "' ";

Next

Debug.Print

.MoveNext

Loop

.Close

End With

Set rs = Nothing

Set con = Nothing

End Sub

O alt| form| de scriere al aceluiaÕi cod, îns| prin folosirea parametrului Parameters dinobiectul Command în locul metodei Execute este:

Public Sub ExecutieInterogareStocatacuParametriADO1()

Dim con As ADODB.Connection

Dim cat As ADOX.Catalog

Dim com As ADODB.Command

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 YearEDialog]!BeginningDate") = _ #7/28/1996#

com.Parameters("Forms![Sales By Year Dialog]!EndingDate")E

Page 377: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

381 Access 2000, ADO s- i ADOX - cursul 14

= #1/28/2000#

Set rs = New ADODB.Recordset

rs.Open com, , adOpenForwardOnly, adLockReadOnly,EadCmdStoredProc

With rs

Do Until .EOF

For Each fld In .Fields

Debug.Print fld.Value & "' ";

Next

Debug.Print

.MoveNext

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 uneiinterog|ri despre care nu Õtim prea multe este codul:

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

Page 378: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

382 Access 2000, ADO s- i ADOX - cursul 14

Set com = pro.Command

For Each par In com.Parameters

par.Value = Eval(par.Name)

Next

Set rs = com.Execute

With rs

Do Until .EOF

For Each fld In .Fields

Debug.Print fld.Value & "' ";

Next

Debug.Print

.MoveNext

Loop

.Close

End With

Set rs = Nothing

Set con = Nothing

Set pro = Nothing

Set cat = Nothing

End Sub

Pentru ca exemplul prezentat s| funcÛioneze,trebuie deschis formularul "Sales by YearDialog" din baza de date Northwind.mdb.Dac| interogarea are ca parametri obiecte aleunui formular trebuie ca formularul s| fiedeschis, cu valorile parametrilor completaÛi,înainte de lansarea interog|rii din program.ObservaÛi modul ciudat de stocare a obiectuluiCommand. Se foloseÕte ADOX (despre care seva vorbi mai pe larg în paragraful urm|tor)

Page 379: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

383 Access 2000, ADO s- i ADOX - cursul 14

pentru a extrage proprietatea Command a obiectului Procedure (o interogare stocat|). ÎncondiÛii normale s-ar fi creat un obiect Command Õi s-ar fi atribuit propriet|ÛiiCommandText numele interog|rii stocate în baza de date. Aceast| metod| îns| funcÛioneaz|numai cu interog|ri f|r| parametri. Furnizorul Jet nu va popula corect colecÛia Parametresa obiectului Command decât dac| obiectul Command este înc|rcat prin ADOX.

Definirea Õi înc|rcarea schemei bazelor de dateOrice baz| de date conÛine un num|r de tabele, indexuri, constrângeri etc. DefiniÛiile acestorobiecte, toate la un loc, poart| denumirea de schema bazei de date. Atât DAO cât Õi ADO punla 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 dinprogram ale acestor obiecte trebuie setat| referinÛa c|tre Microsoft ADO Extensions for DDLand Security sau ADOX.

Crearea unei baze de dateÎ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

Obiectului DAO Database îi corespunde în ADOX obiectul Catalog, iar pentru creareaunei baze de date se foloseÕte metoda Create. În ADOX, încriptarea Õi versiunea bazei dedate 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 Jetprin 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 dateExemplul care urmeaz| afiÕeaz| toate tabelele bazei de date prin parcurgerea colecÛiei ADOX

Page 380: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

384 Access 2000, ADO s- i ADOX - cursul 14

Tables:

Public Sub AfisareTabele()

Dim cat As ADOX.Catalog

Dim tbl As ADOX.Table

Set cat = New ADOX.Catalog

cat.ActiveConnection = CurrentProject.Connection

For Each tbl In cat.Tables

If ((tbl.Type <> "VIEW") And (tbl.Type <> "SYSTEM ETABLE")) Then Debug.Print tbl.Name, tbl.Type

Next

End Sub

În DAO colecÛia TableDefs stoca tabele (obiecte TableDef) bazei de date, în ADOXcolecÛia Tables conÛine obiectele Table din baza de date. În ADO îns| colecÛia Tablespoate 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 pecare le poate lua proprietatea Type:

Valoarea proprieta7t-ii Type Descriere

ACCESS TABLE Tabelul este unul de sistem al Microsoft Access-ului.

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 tabelelorBazele 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 dateexterne bazei în care sunt folosite, dar prin intermediul unei leg|turi o copie a definiÛieitabelului este stocat| în baza de date din care aceasta este referit|.

Page 381: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

385 Access 2000, ADO s- i ADOX - cursul 14

Strategia pentru crearea unui obiect al bazei de date este sintetic prezentat| în etapeleurm|toare:

1. DeschideÛi obiectul Catalog corespunz|tor bazei de date;

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 partea bazei de date.

Crearea unui tabel local

Public Sub CreeazaUnTabelADOX()

Dim cat As ADOX.Catalog

Dim tbl As ADOX.Table

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") = ETrue

.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

Page 382: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

386 Access 2000, ADO s- i ADOX - cursul 14

End Sub

În ADOX nu este necesar| folosirea metodei Create pentru crearea unei coloane înainte dead|ugarea ei la colecÛie. Metoda Append va fi folosit| atât pentru crearea cât Õi pentruad|ugarea coloanei. Denumirile tipurilor de date pentru coloane sunt diferite faÛ| de DAO Õisunt prezentate comparativ în tabelul urm|tor:

Tip de dat| DAO Tip de dat| ADO

dbBinary adBinary

dbBoolean adBoolean

dbByte adUnsignedTinyInt

dbCurrency adCurrecy

dbDate adDate

dbDecimal adNumeric

dbDouble adDouble

dbGUID adGUID

dbInteger adSamllInt

dbLong adInteger

dbLongBinary adLongVarBinary

dbMemo adLongVarWChar

dbSingle adSingle

dbText adVarWChar

Exist| Õi alte atribute ale unui tabel sau ale unei coloane care nu pot fi setate la creareatabelului sau coloanei în DAO numai prin folosirea propriet|Ûii Attributes, în ADOsetarea lor se face cu aceeaÕi proprietate, iar echivalenÛa între propriet|Ûile DAO Õi ADO sedau în continuare sub form| tabelar|. În noul model de date unele propriet|Ûi au r|mas înADO iar altele sunt specifice furnizorului Microsoft Jet.

ProprietateTableDef

DAO

Valoare Proprietate TableADOX

Valoare

Attributes dbAttachExclusive Jet OLEDB: ExclusiveLink

True

Attributes dbAttachSavePWD Jet OLEDB: CacheLink Name/Password

True

Page 383: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

387 Access 2000, ADO s- i ADOX - cursul 14

Attributes dbAttachedTable Type "LINK"

Attributes dbAttachedODBC Type "PASS-THROUGH"

ProprietateField DAO

Valoare Proprietate ColumnADOX

Valoare

Attributes dbAutoIncrement AutoIncrement True

Attributes dbFixedField ColumnAttributes adColFixed

Attributes dbHyperlinkField Jet OLEDB:Hyperlink

True

Attributes dbSystemField nu are echivalent -

Attributes dbUpdatableField Attribute (obiectulField)

adFldUpdatable

Attributes dbVariableField ColumnAttribute Not adColFixed

În exemplul prezentat proprietatea ParentCatalog a obiectului Catalog este setat| lacea a furnizorului înainte de setarea propriet|Ûii AutoIncrement la valoarea True dincolecÛ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 tabeluluilegat ca Õi când acesta ar face parte din baza de date. Pentru crearea unui tabel legat trebuiespecificat| sursa datelor externe Õi numele tabelului extern. În ADOX, propriet|Ûi specificefurnizorului Microsoft Jet sunt folosite pentru crearea leg|turii. La referirea colecÛieiProperties 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 tabelulextern. Alte opÛiuni de conectare sunt specificate în proprietatea Jet OLEDB: LinkProvider String, de exemplu aici se va specifica dac| este cazul numele de utilizator Õiparola 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 dedate bdnoua2000.mdb. Pentru aceasta se va deschide baza de date Northwind.mdb, iarcodul 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

Page 384: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

388 Access 2000, ADO s- i ADOX - cursul 14

Dim tbl As New ADOX.Table

cat.ActiveConnection = CurrentProject.Connection

tbl.Name = "Clienti-legati"

Set tbl.ParentCatalog = cat

tbl.Properties("Jet OLEDB:Create Link") = True

tbl.Properties("Jet OLEDB:Link Datasource") =E".\bdnoua2000.mdb"

tbl.Properties("Jet OLEDB:Link Provider String") = ""

tbl.Properties("Jet OLEDB:Remote Table Name") = "Clienti"

cat.Tables.Append tbl

Set cat = Nothing

End Sub

ObservaÛi în codul de mai sus linia Dim cat As New ADOX.Catalog, aceasta esteechivalenta liniilor:

Dim cat As ADOX.Catalog

Set cat = New ADOX.Catalog

Modific|ri aduse tabelelorOdat| ce un tabel a fost creat se pot aduce modific|ri acestuia, astfel putem ad|uga sau Õtergecoloane, 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 datebdnoua2000.mdb.

Public Sub AdaugaunCampADOX()

Dim cat As New ADOX.Catalog

Dim col As New ADOX.Column

cat.ActiveConnection = CurrentProject.Connection

Page 385: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

389 Access 2000, ADO s- i ADOX - cursul 14

With col

.Name = "Observatii"

.Type = adLongVarWChar

End With

cat.Tables("Clienti").Columns.Append col

Set col = Nothing

Set cat = Nothing

End Sub

În cazul tabelelor legate, dac| parola de conectare la baza de date sau poziÛia bazei de date pedisc care conÛine tabelele legate se modific|, de exemplu datorit| mut|rii acesteia într-un altdirector, codul care urmeaz| va realiza legarea tabelelor dac| se va specifica noua parol| Õinoua cale c|tre baza de date.

Public Sub ActualizareLegaturicuADO()

Dim cat As New ADOX.Catalog

Dim tbl As ADOX.Table

cat.ActiveConnection = CurrentProject.Connection

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

Page 386: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

390 Access 2000, ADO s- i ADOX - cursul 14

End Sub

Crearea Õi modificarea interog|rilorÎn DAO obiectul QueryDef era folosit pentru ad|ugarea automat| a interog|rii la colecÛiaQueryDefs. Obiectul Command este într-un fel echivalentul lui QueryDef, darinterog|rile create cu acesta sunt temporare. Ele trebuie explicit ad|ugate colecÛiei Views sauProcedures pentru ca acestea s| fie stocate în baza de date. Furnizorul Microsoft JetdefineÕte interog|rile motorului Jet ca vederi (Views) dac| acestea nu au parametri Õi întorcînregist|ri.

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.

Public Sub CreareIntrogareStocatecuADO()

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

Set com = Nothing

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" & _

Page 387: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

391 Access 2000, ADO s- i ADOX - cursul 14

"Clienti.Nume FROM Clienti WHERE (((Clienti.Nume) LikeE[Nume" & "client]));"

cat.Procedures.Append "ClientiPar", com

cat.Procedures.Refresh

Set cat = Nothing

com.Execute

End Sub

Modificarea instrucÛiunii SQL a unei interog|riPentru modificarea instrucÛiunii SQL a unei interog|ri trebuie creat un obiect Command bazatpe 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 careurmeaz|:

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

Set cat.Procedures("ClientiPar").Command = com

Set cat = Nothing

Set com = Nothing

End Sub

Crearea unui indexCrearea unui obiect index necesit| folosirea obiectului ADOX Index. Dup| creareaobiectului, trebuie ad|ugat unui câmp, apoi se va specifica c| va fi cheie primar|, unic| Õiordinea 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 coloaneconÛin valori Null. Tabelul care urmeaz| prezint| proprietatea ADOX IndexNullscomparativ cu cele din DAO.

Page 388: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

392 Access 2000, ADO s- i ADOX - cursul 14

DAORequired

DAOIgnoreNulls

ADOX IndexNulls Descriere

True False adIndexNullsDisallow Valoarea Null nu estepermis| în câmpulindex; nu se adaug| ointrare index.

False True adIndexNullsIgnore Valoarea Null estepermis| în câmpulindex; nu se adaug| ointrare index.

False False adIndexNullsAllow Valoarea Null estepermis| în câmpulindex; se adaug| ointrare index.

Implicit proprietatea IndexNulls este setat| la valoarea adIndexNullsDisallow ceea ceface ca valorile Null s| fie nepermise în index Õi nu se va ad|uga o intrare cu un index careare 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

Set tbl = cat.Tables("Clienti")

With ind

.Name = "PrimaryKey"

.Columns.Append "IDClient"

.Columns("IDClient").SortOrder = adSortAscending

.IndexNulls = adIndexNullsDisallow

.PrimaryKey = True

End With

tbl.Indexes.Append ind

Page 389: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

393 Access 2000, ADO s- i ADOX - cursul 14

Set cat = Nothing

Set tbl = Nothing

Set ind = Nothing

End Sub

Crearea unei relaÛiiCrearea unei relaÛii se face prin obiectul ADOX Key, care dup| crearea Õi setareapropriet|Ûilor lui se va ad|uga obiectului Tabel. RelaÛia din codul care urmeaz| se creeaz|î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()

Dim cat As New ADOX.Catalog

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"

.UpdateRule = adRICascade

End With

cat.Tables("Products").Keys.Append che

Set cat = Nothing

Set che = Nothing

End Sub

Page 390: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

394 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

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 trebuiepl|tite de c|tre o firm| sau de c|tre o persoan| particular|, asiguratorului. Schema bazei dedate este:

Baza de date se va numi curs15.mdb. Des-i este scris| în Access 2002, ea funcÛioneaza7 Õi înAccess 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:

Nume Tabel Nume câmp Tip/Propriet|Ûi

TFirme IDFirma Data Type: AutoNumberPrimaryKey

Firma Data Type: TextField Size: 100

Profil Data Type: Memo

TPolite IDPolita Data Type: AutoNumberPrimaryKey

IDFirma Data Type: NumberField Size: Long Integer

Data Data Type: Date/Time

Page 391: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

395 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

TRate IDRata Data Type: AutoNumberPrimaryKey

IDPolita Data Type: NumberField Size: Long Integer

Data ratei Data Type: Date/Time

Achitat Data Type: Yes/No

Sincronizarea a dou| subformulareFormularul pentru introducerea firmelor care au de pl|tit poliÛe este:

ObservaÛi c| exist| dou| regiuni în formular, cea de sus, în care datele sunt prezentate maisumar, motiv pentru care se poate alege o form| de afiÕare care s| cuprind| mai multe firme Õicea de jos, în care pentru fiecare firm| selectat| în regiunea de sus se vor afiÕa toate detaliileclientului. 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 RecordSource va fi vid|, iar pentru c| f|r| date nu sunt necesare nici instrumentele de navigarepropriet|Ûile corespunz|toare navig|rii vor fi setate la valorile din tabelul care urmeaz|:

Page 392: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

396 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Proprietate Valoare

Scroll Bars Neither

Record Selectors No

Navigation Buttons No

Dividing Lines No

Border Style Dialog

On Open Set Forms!FFirme!sf2.Form.Recordset =Forms!FFirme!sf1.Form.Recordset

În vederea sincroniz|rii celor dou| subformulare se foloseÕte proprietatea Recordset carereprezint| sursa de date (Record Source) pentru cele dou| subformulare. Aceast| proprietate

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 formularuluiprincipal. MenÛionez c| aceast| metod| de sincronizare funcÛioneaz| numai în Access 2000 Õi2002. În figura anterioar| se prezint| formularul FFirme în modul proiectare.

În versiunile anterioare de Access formularul p|rinte afiÕa subformularele sub forma unor

Page 393: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

397 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Realizarea unuimeniu

dreptunghiuri albe. Începând cu Access 2000, subformularele sunt Õi ele afiÕate în modulproiectare. 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|masupra controalelor lui. Ôi pentru a face lucrurile Õi mai incomode este imposibil s| deschidemun subformular într-o fereastr| separat| cât timp formularul p|rinte este deschis. Problema sepoate rezolva numai dac| deschideÛi prima oar| subformularul Õi apoi formularul p|rinte. Înaces caz subformularul va fi afiÕat ca un dreptunghi alb în formularul p|rinte, dar va putea fieditata7 uÕor în propria lui fereastr|.

Pentru subformularul sf1 proprietatea Default View are valoare Datasheet. Pentrusubformularul sf2 urma7 toarele proprieta7 t-i sunt modificate: Default View º SingleForm, Record Selectors º No, Navigation Buttons º No, Dividing Lines º No.Proprietatea Record Source este, pentru ambele subformulare, setat| la TFirme. sf1 va aveavizibile numai controalele corespunza7 toare câmpurilor Firma, Adresa, Telefon1. Toatecelelalte controale vor fi ascunse cu ajutorul lui Hide. De asemenea, pe evenimentul DoubleClick a formularului corespunz|tor lui sf1 se va scrie codul:

Private Sub Form_DblClick(Cancel As Integer)

If Not IsNull(Forms!FFirme!sf1.Form.IDFirma) Then

DoCmd.OpenForm "FFirma", , , , , acDialog,EForms!FFirme!sf1.Form.IDFirma

End If

End Sub

Acesta, la realizarea unui clic dublu, pe selectorul de înregistra7ri a subformularului sf1, vaduce la deschiderea formularul cu numele FFirma (care înca7 nu exista7). De asemenea, se vatransmite ca argument, noului formular deschis, conÛinutul câmpuluiForms!FFirme!sf1.Form.IDFirma din subformularul sf1. Valoarea va fi folosit|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. Deschidereaformularului 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 aunui meniu Popup care s| permit| sortarea înregistr|rile din sf1 cresc|toare saudescresc|toare. Tehnologia de realizare a meniurilor este aceeaÕi în toat| gama de aplicaÛiiOffice începâd cu Office 97.

• selectaÛi pe rând View, Toobars, Customize; • clic pe butonul New, introduceÛi în fereastra de dialog NewToolbar, Sortare, care va fi numele noului meniu (vezi figura

Page 394: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

398 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

urma7 toare);

î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 butonulCommands 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|murm|toarele:

1. RealizaÛi un modul nou cu numele de Sortare care s| conÛin| codurile funcÛiilorurm|toare:

Public Function SortareCrescatoare()

Forms!FFirme!sf1.Form.OrderByOn = True

Forms!FFirme!sf1.Form.OrderBy = "[" &EScreen.ActiveControl.Name & "] ASC"

Set Forms!FFirme!sf2.Form.Recordset =EForms!FFirme!sf1.Form.Recordset

End Function

Public Function SortareDescrescatoare()

Forms!FFirme!sf1.Form.OrderByOn = True

Forms!FFirme!sf1.Form.OrderBy = "[" &EScreen.ActiveControl.Name & "] DESC"

Set Forms!FFirme!sf2.Form.Recordset =EForms!FFirme!sf1.Form.Recordset

Page 395: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

399 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

End Function

Public Function Nesortate()

Forms!FFirme!sf1.Form.OrderByOn = False

Forms!FFirme!sf1.Form.OrderBy = ""

Set Forms!FFirme!sf2.Form.Recordset =EForms!FFirme!sf1.Form.Recordset

End Function

2. RealizaÛi urm|toarele macro-uri:

ObservaÛi c| fiecare macro va lansa în execuÛie o funcÛie corespunz|toare unei intrari înmeniul pe care urmeaz| s|-l construim (ultimul macro n-a mai fost prezentat mai sus, el valansa în execuÛie funcÛia SortareDescrescatoare()).

• realizaÛi clic cu butonul din dreapta pe noul

meniu apoi, selectaÛi

Customize; selectaÛi pe Commands Õi apoi pe AllMacros, în fereastra Commands (vezi fereastraala7 turata7) vor fi afiÕate cele trei macro-uri; folosiÛitehnica drag-and-drop pentru a trage numeleacestor macro-uri pe suprafaÛa noului meniu pentruca el s| fie de forma:

• în fereastra de dialog Customize daÛi clic pe Toolbars, apoi selectaÛi numele

Page 396: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 listameniurilor. Daca7 dori t-i sa7-l mai modificat-i, selectat-i Customize, Toolbars, Properties, iar înSelected Toolbar ca7utat-i s-i selectat-i numele Sortare, apoi setat-i pe Type la Menu Bar s-imeniul va deveni vizibil din nou. • pentru asocierea noului meniu Popup controlului sf1 se intr| în modul de editare alformularului p|rinte, apoi al subformularului Õi proprietarea Shorcut Menu Bar asubformularului va fi setat| la Sortare (vezi figura urm|toare).

• dac| ne poziÛion|m acum undeva pe suprafaÛa lui sf1 Õi facem clic pe butonul dindreapta meniul Sortare va fi afiÕat sub forma:

Sincronizarea a trei formulare

Page 397: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 aformularului FFirme, formularul TFirme1 va fi deschis având ca înregistre curent| firma pecare s-a realizat dublu clic în formularul FFirme. Pentru ca s| se poat| realiza aceast|sincronizare între dou| formulare independente formularul deschis transmite ca s-i parametrucelui 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 pentrupoziÛionarea pe înregistrarea cu acelaÕi IDFirma. Evenimetul Open apare când un formulareste deschis, dar înainte de afiÕarea înregistr|rilor. La prima deschidere a unui formularevenimentele care apar sunt: Open - Load - Resize - Activate - Current.

Private Sub Form_Open(Cancel As Integer)

Dim IDFirma As Long

If Not IsNull(Me.OpenArgs) Then

IDFirma = CLng(Me.OpenArgs)

DoCmd.GoToControl "IDFirma"

DoCmd.FindRecord IDFirma, , True, , True, , True

End If

End Sub

Page 398: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

402 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Când se folosescsubformularele?

Valoarea parametrului IDFirma este stocat| în proprietatea OpenArgs a formularului carese deschide prin metoda OpenForm. Daca7 proprietatea OpenArgs cont-ine o valoare atuncise va ga7si înregistrarea care are acea valoare în controlul IDFirma. Pentru aceasta primaoara7 , folosind metoda GoToControl, se va muta focusul pe controlul IDFirma dinformular. În continuare, prin folosirea metodei FindRecord, se va ga7si înregistraeea careare î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.Formularul p|rinte (FFirma) are ca surs| de date (Record Source) tabelul TFirme, sf1 petabelul TPolite, iar sf2 pe tabelul TRate. Ambele subformulare vor avea proporietatea DefaultView setat| la Datasheet.

Pentru afiÕarea sau introducerea datelor în mai multe tabele care se afl|într-o relaÛie 1-M (one-to-may) pot fi folosite subformulare. Unsubformular este un formular legat de formularul din care face parteputând fi afiÕat în modurile foaie de date (Datasheet view) sau

formular (Form view). Din punctul lor de vedere subformularele sunt formulare, dar dinpunctul de vedere al formularului p|rinte sunt simple controale. Pot fi create prin mai multemetode, cea mai simpl| este tehnologia drag-and-drop, adic| se selecteaz| un formular din

Page 399: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

403 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Accesul lacontroalele unuisubformular

fereastra bazei de date, apoi se trage pe suprafaÛa unui formular p|rinte. Dac| între tabelelecelor dou| subformulare s-au definit relaÛii Access va crea automat leg|tura între formularulp|rinte Õi subformular. În cazul nostru leg|tura între formularul p|rinte Õi sf1 se face prinpropriet|Ûile LinkChildFields Õi LinkMasterFields care vor fi setate la valoareaIDFirma. Aceste propriet|Ûi controleaz| relaÛia dintre formularul p|rinte Õi subformularrespectiv modul în care acestea interacÛioneaz|. Numai dac| aceste propriet|Ûi sunt setatecorect 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 subformulareste cea deja discutat| prin selectarea controlului Subform din cutia cu instrumente(Toolbox).

În condiÛii normale se pot crea leg|turi numai între formularul p|rinte (principal) Õisubformulare. În cazul nostru este nevoie de crearea unei leg|turi speciale pentru a puteasincroniza o înregistrare din subformularul poliÛelor cu înregistr|rile corespunz|toare ratelorde pl|tit pentru o anumit| polit|. Pentru aceasta este nevoie de un artificiu. Pe suprafaÛaformularului pa7rinte se pune un control Text care va fi Unbound pentru ca nu va avea trecutnimic la proprietatea Control Source. La fiecare trecere pe o înregistrare nou| însubformularul sf1 valoarea acestui control va fi actualizat|, în acelaÕi timp numele acestuicontrol va fi trecut cu mâna în propriet|Ûile LinkChildFields Õi LinkMasterFieldsale subformularului sf2. Actualizarea valorii controlului IDPolita se realizeaz| prinprocedura 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 IDPolitadin formularul p|rinte.

La crearea unei referinÛe prin cod între un formular Õi un subformularsunt importante numai numele formularului Õi al controluluisubformular, adic| valorile propriet|Ûilor Name. În acest sens numelesubformularului conÛinut în proprietatea Source Object nu estefolosit nic|ieri pentru referirea controlului de tip subformular.

Subformularul este doar un control Õi de multe ori numele acestuia va fi diferit de cel alnumelui formularului conÛinut în subformular.

Pentru a referi un subformular al unui formular se foloseÕte proprietatea Form a controluluisubformular de referit astfel:

Forms![NumeFormular]![NumeControlSubformular].Form.

Page 400: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

404 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Tratareaexcept-iilor

Dac| dorim s| referim un control cu numele NumeControlSF al subformularului care arenumele de control NumeControlSubformular atunci putem folosi formele de scriere:

Forms![NumeFormular]![NumeControlSubformular].Form.!E

NumeControlSF

Forms("NumeFormular")("NumeControlSubformular").Form.EControls("NumeControlSF")

ObservaÛi c| sintaxa este destul de complicat|, pentru ca s| înÛelegeÛi motivul acestei scrieritrebuie 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, setransform| într-un set de paranteze rotunde Õi de ghilimele în jurul obiectului, astfelscrierea:

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

În cazul formularului FFirma un caz particular este cel în caresubformularul sf1 nu are înregistra7ri. Secvent-a7 de cod care urmeaza7se va atas-a evenimentului On Current. Ea va fort-a dispari t-iaîntregistra7rilor afis-ate în subformularul sf2.

Private Sub Form_Current()

If (Me!sf1.Form.RecordsetClone.RecordCount <= 0) Then EForms!FFirma!IDPolita = ""

End Sub

Ad|ugarea, prin cod, de date în dou| tabele aflate în relaÛie one-to-manyPân| acum majoritatea codului a fost orientat pe sincronizarea între formulare. Ad|ugarea dedate într-un formular este o operaÛie care trebuie s| decurg| sigur Õi f|r| erori. În aces scopscrierea unui cod care s| genereze setul de date care se doreÕte a fi introdus în tabele devineesenÛial|. În formularul FFirma, la ap|sarea butonului Adauga, se va realiza introducerea

Page 401: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 Õiuna 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 ladata curent|; numele firmei care în acest formular nu se poate modifica; numa7rul de rate alpoliÛei care trebuie s| fie cel puÛin 1) Õi pentru a îndruma utilizatorul cu privire la valorile caretrebuie introduse, îns| exist| posibilitatea modific|rii lor în funcÛie de necesit|Ûi.

Dup| completarea tuturor controalelor formularului FNou, la ap|sarea butonului Nou, noiledate vor fi generate Õi ad|ugate în cele dou| tabele. Observat-i ca7 , în figura de mai sus,controlul de tipul Text Box, cu numele Firma, apare invalidat, ca urmare a seta7riiproprieta7 t-ii Enable la No. De asemenea, cele doua7 subformulare, corespunza7 toare poli t-elor s-iratelor vor avea setate, la nivel de formular, proprietatea Allow Additions la No. Aceasta vaopri introducerea directa7 a datelor de la tastatura7 în aceste subformulare act-iunea fiindposibila7 , exclusiv, doar prin folosire formularului FNou.

În continuare se vor prezenta dou| moduri de scriere a codului care realizeaz| înscrierea întabele, primul folosind DAO Õi al doilea folosind ADO. Pentru p|strarea simplit|Ûii coduluiam 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| t-iireferenÛiale) Õi nu se pot întrerupe pentru a se face individual Õi independent. În figura de maisus 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 loculcelor ini t-iale prezint propriet|Ûile care trebuie s| fie setate. Fereastra propriet|Ûilor unuicontrol este "mai ciudat|" întrucât exemplul a fost scris în Office XP.

Dataazi

Dataaluna

Dataaan

Datauzi

Datauluna

DatauanFirma

Rate

Data

Polita

Page 402: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

406 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Prima variant| de cod prezentat| foloseÕte DAO. Principiul de funcÛionare a codului var|mâne acelaÕi Õi în cazul implement|rii cu ADO. Variabilele da Õi du sunt folosite pentrustocarea datei de azi Õi a datei pentru urm|toarea rat|. Din diferanÛa acestor date se poatecalcula num|rul de zile între rata curent| Õi cea care urmeaz|. Pentru realizarea operaÛiilor

Page 403: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 estecalculat| folosind funcÛia DateDiff() în linia 33. În liniile 14 Õi 16 funcÛiaDateSerial() este folosit| pentru a crea o valoare de tipul dat| plecând de la o dat|"spart| în zi, luna Õi an". Liniile 35-46 adaug| o înregistrare în tabelul TPolite, iar liniile 50-66adaug| una sau mai multe înregistr|ri în tabelul TRate prin intermediul ciclului whilecontrolat 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 unBookmark 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 ÕiTRate, deci în câmpul cheie str|in| din TRate aceast| valoare va trebui s| fie aceeaÕi pentrutoate ratele asociate unei anumite polite.

Public Sub NoucuDAO()1

Dim db As DAO.Database2

Dim rs1 As DAO.Recordset3

Dim rs2 As DAO.Recordset4

Dim t As String5

Dim da As Date6

Dim du As Date7

Dim Rate As Integer, c As Integer8

Dim d As Integer9

Dim IDPolita As Long10

11

On Error GoTo eroare12

13

da = DateSerial(Forms!FNou!Dataaan, Forms!FNou!Dataaluna,E14Forms!FNou!Dataazi)15

du = DateSerial(Forms!FNou!Datauan, Forms!FNou!datauluna,E 16Forms!FNou!Datauzi)17

18

If (da >= du) Then19

MsgBox "Data PRIMEI RATE trebuie sa fie mai mica (<)E20decit data RATEI URMATOARE", vbCritical, "Eroare la E21introducerea datelor"22

Exit Sub23

End If24

25

If IsNull(Forms!FNou!Rate) Then26

Page 404: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

408 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

MsgBox "Numarul de rate trebuie obligatoriu E27completat", vbCritical, "Eroare la introducerea numarului E 28de rate"29

Exit Sub30

End If31

32

d = DateDiff("d", da, du)33

34

t = "TPolite"35

Set db = CurrentDb36

Set rs1 = db.OpenRecordset(t)37

38

rs1.AddNew39

rs1!Polita = Forms!FNou!Polita40

rs1!Data = Forms!FNou!Data41

rs1!IDFirma = Forms!FFirma!IDFirma42

rs1.Update43

rs1.Bookmark = rs1.LastModified44

IDPolita = rs1!IDPolita45

rs1.Close46

47

Rate = Forms!FNou!Rate48

c = 149

t = "TRate"50

Set rs2 = db.OpenRecordset(t)51

While (Rate > 0)52

rs2.AddNew53

rs2![Data ratei] = da54

If (Rate > 1) Then55

rs2![Denumire rata] = "Rata " + Str(c)56

c = c + 157

Else58

rs2![Denumire rata] = "Expira"59

End If60

rs2![IDPolita] = IDPolita61

Page 405: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

409 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

rs2.Update62

Rate = Rate - 163

da = DateAdd("d", d, da)64

Wend65

rs2.Close66

Forms!FFirma!sf1.Requery67

Forms!FFirma!sf2.Requery68

69

iesire:70

Exit Sub71

72

eroare:73

MsgBox Err.Description74

Resume iesire75

End Sub76

SecvenÛa de cod care urmeaz| realizeaz| aceeaÕi acÛiune cu cea anterioar|. Exist| îns| ofoarte mare diferenÛ| faÛ| de cea anterioar| datorit| modului de lucru a metodei Update dinADO. Dac| în cazul lui DAO înregistrarea curent| trebuia g|sit| prin folosirea luiLastModified, aici, înregistrarea curent| r|mâne curent| Õi dup| apelarea metodeiUpdate. Din acest motiv în linia 45 s-a scris IDPolita = rs1!IDPolita imediat dup|aplicarea metodei Update.

Public Sub NoucuADO()1

Dim rs1 As ADODB.Recordset2

Dim rs2 As ADODB.Recordset3

Dim t As String4

Dim da As Date5

Dim du As Date6

Dim Rate As Integer, c As Integer7

Dim d As Integer8

Dim IDPolita As Long9

10

On Error GoTo eroare11

12

Page 406: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

410 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

da = DateSerial(Forms!FNou!Dataaan, Forms!FNou!Dataaluna,E13Forms!FNou!Dataazi)14

du = DateSerial(Forms!FNou!Datauan, Forms!FNou!datauluna,E15Forms!FNou!Datauzi)16

17

If (da >= du) Then18

MsgBox "Data PRIMEI RATE trebuie sa fie mai mica (<)E19decit data RATEI URMATOARE", vbCritical, "Eroare la E20introducerea datelor"21

Exit Sub22

End If23

24

If IsNull(Forms!FNou!Rate) Then25

MsgBox "Numarul de rate trebuie obligatoriuE26completat", vbCritical, "Eroare la introducerea numaruluiE 27de rate"28

Exit Sub29

End If30

31

d = DateDiff("d", da, du)32

33

t = "TPolite"34

Set rs1 = New ADODB.Recordset35

rs1.CursorLocation = adUseClient36

rs1.Open t, CurrentProject.Connection, adOpenKeyset,E37adLockOptimistic, adCmdTable38

rs1.AddNew39

rs1!Polita = Forms!FNou!Polita40

rs1!Data = Forms!FNou!Data41

rs1!IDFirma = Forms!FFirma!IDFirma42

rs1.Update43

44

IDPolita = rs1!IDPolita45

rs1.Close46

47

48

Page 407: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

411 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Rate = Forms!FNou!Rate49

c = 150

t = "TRate"51

Set rs2 = New ADODB.Recordset52

rs2.CursorLocation = adUseClient53

rs2.Open t, CurrentProject.Connection, adOpenKeyset, E54adLockOptimistic, adCmdTable55

While (Rate > 0)56

rs2.AddNew57

rs2![Data ratei] = da58

If (Rate > 1) Then59

rs2![Denumire rata] = "Rata " + Str(c)60

c = c + 161

Else62

rs2![Denumire rata] = "Expira"63

End If64

rs2![IDPolita] = IDPolita65

rs2.Update66

Rate = Rate - 167

da = DateAdd("d", d, da)68

Wend69

rs2.Close70

Set rs1 = Nothing71

Set rs2 = Nothing72

73

Forms!FFirma!sf1.Requery74

Forms!FFirma!sf2.Requery75

76

iesire:77

Exit Sub78

79

eroare:80

MsgBox Err.Description81

Resume iesire82

Page 408: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

412 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

End Sub83

Crearea interog|rilor aplicaÛieiAplicaÛia va avea dou| interog|ri (Restantieri Õi Restantieri1) care sunt prezentate în figurilecare 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.

Page 409: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

413 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Butonul Tipareste va realiza afiÕarea raportului TFirme.

Crearea rapoartelor aplicaÛieiÎn cele ce urmeaz| vor fi create dou| rapoarte Õi un meniu principal pentru aplicaÛie. ObservaÛic| 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 înmodul proiectare:

Page 410: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 demeniu Fisiere, Formulare, Rapoarte.

Clic pe File din lista Categories a lui Commands, apoi clic pe meniul Fisiere, el se vadesf|Õ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

deforma: . EditaÛi fiecare articol al meniului Fisiere realizând clic

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 suntafiÕate la activarea propriet|Ûii Begin a Group Ea face ca articolul curent sa7 fi separat, de celanterior, printr-o linie orizontal| gri.

Articolelel unui meniu pot fi precedate de un simbol grafic. Exista7 câteva simboluripredefinite care se pot selecta din Change Button Image. Daca7 acestea nu sunt suficiente, noisimboluri pot fi create prin selectarea lui Edit Button Image ... .

drag-and drop

Clic pe butonul dindreapta s-i modificat-ipe Name: la Fisiere

Page 411: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

415 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

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 ReportscompletaÛi cele dou| meniuri astfel:

ModificaÛi numele articolelor din meniurile Formulare respectiv Rapoarte dup| cumurmeaz|: FFirme $ Firme, FFirma $ Polite/Rate, FRestantieri $ Restantieri, RTFirme$ Firme, TFirme $ Restantieri. SelectaÛi propriet|Ûile meniului Meniu, apoi realizaÛiset|rile din figura care urmeaz|. Cea mai important| dintre ele este tipul meniului care de laToolbar a fost schimbat în Menu Bar. Dup| realizarea set|rilor meniul se poate trage (prindrag-and-drop) deasupra meniului Access-ului, iar celelalte meniuri pot fi ascunse astfel încâtaplicaÛia s| aib| un singur meniu.

ProprietateaCaption

Page 412: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

416 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Meniu

În final, din meniulTools selectaÛiStartup Õi realizaÛiset|rile din figuraala7 turata7 .

Meniulaplicat-iei

Page 413: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

417 Formulare, subformulare, programare cu DAO Õi ADO - cursul 15

Din acest moment la fiecare pornire a aplicaÛiei ecranul va fi de forma:

ObservaÛi c| fereastra bazei de date nu mai este afiÕat|. Dac| aplicaÛia este pornit| Ûinândap|sat| tasta Shift efectul este numai cel de deschidere a bazei de date f|r| aplicarea set|rilordin Startup. Acest mod de pornire va fi folosit dac| dorim s| mai aducem mici modific|ribazei de date finale.

Page 414: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

449 Anexa 1 - Lista principalelor instruct-iuni VBA

ANEXA 1 - Lista principalelor instrucÛiuni VBA

DeÕi în cadrul lucr|rii au fost prezentate Õi utilizate cele mai populare instrucÛiuni VBA listalor 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

AppActivate titlu, asteptare Activeaz| o aplicaÛie în curs de execuÛie cu titlulsau ID de task specificat în titlu.

Beep Emite un semnal sonor folosind difuzorul.

Call nume, listaargumente Apelarea procedurii nume. Întrucât acelaÕi lucru sepoate obÛine numai prin folosirea lui numeinstrucÛiunea Call este folosit| destul de rar.

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Õiredeschise cu instrucÛiune Open Õi identificate prinlistanrfiÕiere.

Const NUMECONSTANTA Declar| o variabil| constant| cu numeleNUMECONSTANTA.

Date = data Schimb| data sistemului la data.

Declare nume Declata o procedur| dintr-un DLL (Dynamic LinkLibray).

Dim numevariabil| Declar| o variabil| cu numele numevariabil|.

Do ... Loop Reia un grup de instrucÛiuni cât timp o condiÛielogic| are valoarea True.

DoEvents Transfer| controlul sistemului de operare pentru caacesta s| poat| prelucra eventualele evenimenteasincrone ap|rute (ap|sare de taste, clic de mouse).

End cuvântcheie Termin| o procedur|, funcÛie sau o structur| decontrol.

Erase tablou Elibereaz| memoria dinamic| alocat| unui tablousau reiniÛializeaz| un tablou de m|rime fix|.

Err = num|reroare Seteaz| pe Err (starea erori curente) lanum|reroare.

Page 415: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

450 Anexa 1 - Lista principalelor instruct-iuni VBA

Error num|reroare Simuleaz| o eoare prin setarea lui Err la valoareanum|reroare.

Exit cuvântcheie IeÕirea dintr-o procedur|, funcÛie sau o structur| decontrol.

FileCopy surs|, destinaÛie Copiaz| fiÕierul cu numele surs| în cel cu numeledestinaÛie.

For Each ... Next Parcurge toÛi membrii unei colecÛii.

For ... Next Reia parcurgerea unei instrucÛiuni sau al unui grupde instrucÛiuni pân| când un contor ajunge la ovaloare impus|.

Function Declar| o funcÛie definit| de utilizator.

Get #nrfiÕier, numevariabil| CiteÕte un fiÕier de intrare/ieÕire deschis prininstrucÛiunea Open în variabila numevariabil|.

GoSub ... Return Face ramificarea Õi revenirea dintr-un subprogramî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 înfuncÛie de rezultatul unui test logic.

Input #nrfiÕier, list|variabile CiteÕte date în list|variabile dintr-un fiÕier deintare/ieÕire.

Kill cale Ôterge fiÕierul specificat în cale.

Let numevariabil| = expresie Seteaz| valoarea variabilei numevariabil| egal| cucea a lui expresie. Let este opÛional Õi în practic|aproape c| nu se mai foloseÕte.

Line Input #nrfiÕier, var CiteÕte a linie dintr-un fiÕier de intrare/ieÕire învariabila var.

Load Încarc| în memorie un formular definit de utilizatorf|r| al face vizibil pe ecran.

Lock #nrfisier, domeniuînreg Permite controlul accesului la un fiÕier deintrare/ieÕire.

LSet varsir = sir Realizeaz| alinierea la stânga a unui Õir într-ovariabil| String.

LSet var1 = var2 Copiaz| o variabil| cu tipul definit de utilizatorîntr-o alt| variabil| cu tipul definit de utilizatordiferit.

Mid ÎnlocuieÕte caracterele dintr-o variabil| de tipulString prin caracterele dintr-un al Õir.

Page 416: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

451 Anexa 1 - Lista principalelor instruct-iuni VBA

MidB ÎnlocuieÕte date, la nivel de octet, într-o variabil| detipul String prin caracterele unui alt Õir.

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

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 decomparaÛie între Õiruri.

Option Explicit ForÛeaz| programatorul s| declare toate variabilelefolosite într-un modul.

Option Private Specific| caracterul privat al unui modul acestaneputând fi accesat de procedurile din afaramodulului.

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

Property Get Declar| o proprietate procedur|.

Property Let Atribuie o valoare unei propriet|Ûi într-o proprietateprocedur| .

Property Set Seteaz| o referinÛ| la un obiect într-o proprietateprocedur| .

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

Page 417: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

452 Anexa 1 - Lista principalelor instruct-iuni VBA

Rem comentariu Spune lui VBA c| linia care urmeaz| este uncomentariu. Caracterul apostrof ( ' ) are aceeaÕisemnificaÛie fiind Õi mult mai des folosit.

Reset Închide toate fiÕierele de intrare/ieÕire deschise cuOpen.

Resume Dup| o eroare, reia execuÛia programului din liniacare a cauzat eroarea.

Return vezi Gosub ... Return.

RmDir cale Ôterge directorul specificat în cale.

RSet varsir = sir Realizeaz| alinierea la dreapta a unui Õir într-ovariabil| de tipul String.

SaveSetting numeaplicaÛie, etc. Salveaz| o setare în Registry-ul Windows-uluipentru aplicaÛia cu numele numeaplicaÛie.

Seek #nrfiÕier,poziÛie Seteaz| poziÛia curent| într-un fiÕier deintrare/ieÕire.

Select Case Execut| un grup de instrucÛiuni dintre mai multegrupuri pe baza valorii unei expresii.

SendKeys sir, durat| Transmite o "ap|sare de tast|" definit| prin siraplicaÛiei active.

Set varobiect = obiect Atribuie pe obiect unei variabile de tipul Object cunumele varobiect.

SetAttr cale, atribute Atribuie atributele specificate prin atribute unuifiÕier specificat prin cale.

Static numevariabil| Declar| o variabil| cu numele numevariabil| careva reÛine valorile stocate în ea tot timpul cât codulVBA 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 lanivel de modul).

Unload Descarc| un formular definit de utilizator dinmemorie.

Unlock #nrfiÕier, domeniuînreg Anuleaz| controlul accesului la un fiÕier deintrare/ieÕire.

While ... Wend Reia o porÛiune de cod cât timp o condiÛie esteTrue.

Page 418: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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 deintrare/ieÕire.

With ... End With Execut| un grup de instrucÛiuni pentru un obiectspecificat.

Write #nrfiÕier Scrie date într-un fiÕier de intrare/ieÕire.

Page 419: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

454 Anexa 2 - Lista principalelor funct-ii VBA

ANEXA 2 - Lista principalelor funcÛii VBA

F|r| a se dori un grupaj de cele mai utile funcÛii, în cele ce urmeaz| doresc s| prezint câtevadin grupurile de funcÛii VBA folosite mai des la scrierea aplicaÛiilor Access. ExplicaÛiile suntsumare, dar dac| numele unei funcÛii a fost identificat în listele prezentate se poate folosifiÕierul help VBA pentru explicaÛii mai detaliate Õi exemple de utilizare ale ei.

FuncÛii de conversie

FuncÛie Valoare întoars|

CBool(expresie) expresie convertit| la o valoare Boolean.

CByte(expresie) expresie convertit| la o valoare Byte.

CCur(expresie) expresie convertit| la o valoare Currency.

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 motivede compatibilitate cu versiunile anterioare.

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 deintervale de timp (intervalul de timp poate fi o zi, olun|, 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.

Page 420: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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.

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.

Second(timp) Secunda pentru timp-ul specificat.

Time Ora curent| a sistemului ca Variant.

Time$ Ora curent| a sistemului ca String.

Timer Num|rul de secunde trecut de la miezul nopÛii.

TimeSerial(ora, minut, secunda) Valoare Date definit| prin ora, minut Õi secunda.

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.

Err Codul numeric a erorii ap|rute în cursul execuÛiei programului.

Error(num|reroare) Mesajul de eroare, de tipul Variant, care corespunde luinum|reroare.

Error$(num|reroare) Mesajul de eroare, de tipul String, care corespunde luinum|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.

Page 421: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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Ûionaleatribut (de exemplu vbHidden). Întoarce Null dac|directorul sau fiÕierul nu exist|.

Dir$(cale, atribute) Numele fiÕierului sau directorului, ca Õi String, specificatprin cale care satisface atributele opÛionale atribut (deexemplu vbHidden). Întoarce Null dac| directorul saufiÕierul nu exist|.

EOF(nrfiÕier) True dac| cap|tul fiÕierului specificat prin nrfiÕier a fostatins.

FileAttr(nrfiÕier, tipîntors) Modul (intrare, ieÕire, ad|ugare, binar etc.)în care a fostdeschis 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 saumodificat ultima oar|.

FileLen(cale) Lungimea, în octeÛi, a fiÕierului specificat prin cale.

FreeFile(num|rdomeniu) Urm|torul num|r de fiÕier disponibil pentru instrucÛiuneaOpen.

GetAttr(cale) Un întreg reprezentând atributele fiÕierului specificat princale.

Loc(nrfiÕier) PoziÛia curent| de citire/scriere, ca Õi Long, într-un fiÕierde 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-unfiÕier de intrare/ieÕire deschis.

Shell(cale, stilfereastr|) Execut| aplicaÛia din cale Õi întoarce ID-ul de task alacesteia.

FuncÛii financiare

FuncÛie Valoare întoars|

DBB(cost, salvare, viaÛa, perioad|, factor) Deprecierea unui obiect într-operioad| specificat| folosind metodade calcul cu pant| dubl| (double-declining method).

FV(rata, nper, plata, pv, tip) Valoarea viitoare a unei investiÛii saua unui împrumut.

IPmt(rata, plata, mplata, pv, fv, type) Plata dobânzii pentru o perioad|specificat| a unui împrumut.

Page 422: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

457 Anexa 2 - Lista principalelor funct-ii VBA

IRR(valori, estim|ri) Rata intern| de plat| pentru o serie deplaÛi Õi facturi.

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 oinvestiÛie sau un împrumut.

NPV(rata, val1, val2, ...) Valoarea net| prezent| a uneiinvestiÛii pentru o serie de pl|Ûi Õifacturi cu o rat| de reducere.

Pmt(rata, nper, pv, fv, tip) Plata periodic| pentru un împrumutsau o investiÛie.

PPmt(rata, per, nper, pv, fv, tip) Plata principal| pentru un împrumutsau o investiÛie.

PV(rata, nper, plata, fv, tip) Valoarea prezent| a unei investiÛii.

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 linieidrepte (straight-line depreciation) aunui obiect pentru o perioad|.

FuncÛii matematice

FuncÛie Valoare întoars|

Abs(num|r) Valoarea absolut| a lui num|r.

Atn(num|r) Arctangenta lui num|r.

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

Page 423: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

458 Anexa 2 - Lista principalelor funct-ii VBA

Rnd(num|r) Un num|r aleator.

Sgn(num|r) Semnul lui num|r.

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

FuncÛie Valoare întoars|

Asc(Õir) Codul ANSI al primului caracter din Õir.

AscB(Õir) Octetul corespunz|tor primei litere din Õir.

AscW(Õir) Caracterul Unicode al primului caracter dinÕir.

Chr(codcaracter) Caracterul, c| Õi Variant, care corespundecodului ANSI specificat prin codcaracter.

Chr$(codcaracter) Caracterul, c| Õi String, care corespundecodului ANSI specificat prin codcaracter.

ChrB(codcaracter) Octetul care corespunde codului ANSI al luicodcaracter.

ChrW(codcaracter) Caracterul Unicode care corespunde coduluiANSI al lui codcaracter.

InStr(start, Õir1, Õir2) PoziÛia, în caractere, corepunz|toare primeiapariÛii ale lui Õir2 în Õir1 începând cu start.

InstrB(start, Õir1, Õir2) PoziÛia, în octeÛi, corepunz|toare primeiapariÛ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 ÕiVariant.

Left$(Õir, lungime) lungime caractere din stânga lui Õir ca ÕiString.

LeftB(Õir, lungime) lungime octeÛi din stânga lui Õir ca ÕiVariant.

LeftB$(Õir, lungime) lungime octeÛi din stânga lui Õir ca ÕiString.

Page 424: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

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.

LTrim(Õir) Un Õir Variant far| spaÛiile din parteastâng|.

LTrim$(Õir) Un Õir String far| spaÛiile din parteastâng|.

Mid(Õir, început, lungime) lungime caractere, ca Õi Variant, ale lui Õirplecând de la început.

Mid$(Õir, început, lungime) lungime caractere, ca Õi String, ale lui Õirplecând de la început.

MidB(Õir, început, lungime) lungime octeÛi, ca Õi Variant, ale lui Õirplecând de la început.

MidB$(Õir, început, lungime) lungime octeÛi, ca Õi String, ale lui Õirplecând de la început.

Right(Õir, lungime) lungime caractere din dreapta lui Õir ca ÕiVariant.

Right$(Õir, lungime) lungime caractere din dreapta lui Õir ca ÕiString.

RightB(Õir, lungime) lungime octeÛi din dreapta lui Õir ca ÕiVariant.

RightB$(Õir, lungime) lungime octeÛi din dreapta lui Õir ca ÕiString.

RTrim(Õir) Un Õir Variant far| spaÛiile din parteadreapt|.

RTrim$(Õir) Un Õir String far| spaÛiile din parteadreapt|.

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 ÕiVariant, 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Ûieilui Õir1 cu Õir2.

String(num|r, caracter) caracter, ca Õi Variant, repetat de num|r deori.

Page 425: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

460 Anexa 2 - Lista principalelor funct-ii VBA

String$(num|r, caracter) caracter, ca Õi String, repetat de num|r deori.

Trim(Õir) Un Õir, ca Õi Variant, f|r| spaÛiile dinstâ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.

Val(Õir) Num|rul conÛinut în Õir.

Alte funcÛii

FuncÛie Valoare întoars|

Array(listaargumente) Un tablou Variant conÛinând valorile dinlistaargumente.

Choose(index, arg1, arg2, etc,) Selecteaz| Õi întoarce o valoare a unui argumentdintr-o list| de argumente.

CreateObject(clasa) Un obiect Automation de tipul clasa.

Environement(Õir | num|r) O valoare String care reprezint| variabila demediu a sistemului de operare specificat prin Õir saunum|r.

Format(expresie, sirformat) expresie ca Õi Variant converit| conform luisirformat.

Format$(expresie, sirformat) expresie ca Õi String converit| conform luisirformat.

GetAllSettings(numeap, sectiune) Extrage din Registry toate set|rile pentru secÛiuneasectiune.

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

Input(num|r, #nrfiÕier) num|r caractere Variant ale fiÕierului deintrare/ieÕire specificat prin nrfiÕier.

Input$(num|r, #nrfiÕier) num|r caractere String ale fiÕierului deintrare/ieÕire specificat prin nrfiÕier.

InputB(num|r, #nrfiÕier) num|r octeÛi Variant ale fiÕierului de intrare/ieÕirespecificat prin nrfiÕier.

Page 426: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

461 Anexa 2 - Lista principalelor funct-ii VBA

InputB$(num|r, #nrfiÕier) num|r octeÛi String ale fiÕierului de intrare/ieÕirespecificat prin nrfiÕier.

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.

IsMissing(numeargument) True dac| numele numeargument nu a fosttransferat unei proceduri.

IsNull(expresie) True dac| expresie este Õirul nul ("").

IsNumeric(expresie) True dac| expresie este un num|r.

IsObject(expresie) True dac| expresie este un obiect.

LBound(numetablou, dimensiune) Cea mai mic| valoare de indice posibil| pentrutabloul definit prin numetablou.

MsgBox(întrebare, etc.) butonul pe care utilizatorul l-a selecata din fereastrade 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 luiculoare (un num|r între 1 Õi 15).

RGB(roÕu, verde, albastru) Culoarea care corespunde componentelor roÕu,verde Õi albastru.

Switch(expr1, valoare1, etc.) Evalueaz| expresiile (expr1 etc.) Õi întoarcevaloarea asociat| (valoare1 etc.) primei expresiicare 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 variabileinumevariabil|.

UBound(numetablou, dimensiune) Cea mai mare valoare de indice posibil| pentrutabloul definit prin numetablou.

VarType(numevariabil|) O constant| care indic| tipul de dat| al variabileinumevariabil|.

Page 427: Introducere in Microsoft Access

NU

CO

PIA

!.

Ace

st c

urs

este

pro

prie

tate

a lu

iA

NTA

L Ti

beriu

Ale

xand

ru.

Pt.

cum

para

re v

izite

aza:

http

://w

ww

.eas

t.utc

luj.r

o/m

b/m

ep/a

ntal

sau

suna

la:

0264

-401

667

462 Anexa 2 - Lista principalelor funct-ii VBA