CUPRINS
Obiectivele cursului 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Ce sunt datele? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Concepte de baz| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Definiii: Ce este o baz| de date? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Tipuri de relaii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Regulile relaionale ale lui Codd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Scopul unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 De ce Microsoft Access? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ct "poate duce" Access-ul? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Evoluia Access-ului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compatibilitatea ntre versiuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O introducere n Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introducere n instrumentele Accessului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 27 28 28 28 29
http://www.east.utcluj.ro/mb/mep/antal
Cuprins
Acest curs este proprietatea lui ANTAL Tiberiu Alexandru.
NU COPIA !.
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
0264-401667
CUPRINS
Introducerea n rapoarte (Reports) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Obiectivele cursului 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Proiectarea bazei de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ce ntreb|ri ne punem? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clarificarea a ceea ce dorim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reguli generale de proiectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Determinarea relaiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Teoria proiect|rii bazelor de date relaionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabele, unicitate, chei i domenii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relaii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relaii unu la unu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relaii unu la muli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relaii muli la muli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Normalizarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prima Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A Doua Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A Treia Form| Normal| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Subfoi de date (subdatasheets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reguli de integritate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reguli de integritate generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reguli de integritate specifice bazei de date . . . . . . . . . . . . . . . . . . . . . . . . . 46 46 46 46 48 48 48 49 49 50 50 50 50 51 51 52 53 54 54
Crearea unui tabel f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definirea tipurilor de cmpuri ale unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriet|ile cmpurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proprietatea Masc| de Intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................................. Stabilirea cheii primare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Salvarea unui Tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Ad|ugarea de nregistr|ri unui Tabel vizualizat n modul foaie de date . . . . . . . . . . . . . . . . 65 Utilizarea formatelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatarea pentru tipurile Text i Memo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatarea pentru tipurile Number i Currency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatarea pentru tipurile Date/Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
0264-401667
59 61 62 64 64 64 66 66 66 67
NU COPIA !.
Crearea unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Ad|ugarea de cmpuri folosind Generatorul de Tabele (Table Wizard) . . . . . . . . . . 56
http://www.east.utcluj.ro/mb/mep/antal
Deschiderea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Vizualizarea n modul proiectare (Design View) . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 nchiderea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
CUPRINS
Formatarea n cazul tipului Yes/No . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Utilizarea m|tilor de intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Validarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Obiectivele cursului 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Editarea nregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Selectarea nregistr|rilor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Selectarea nregistr|rilor folosind tastatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Selectarea cmpurilor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Selectarea coloanelor cu mouse-ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Selectarea cmpurilor i coloanelor de la tastatur| . . . . . . . . . . . . . . . . . . . . . . . . . . tergerea nregistr|rilor i a cmpurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 72 73 73 73 73 74
Vizualizarea i setarea valorilor implicite pentru foile de date . . . . . . . . . . . . . . . . . . . . . . . 74 Redefinirea ordinii de afiare a coloanelor unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Reordonarea cmpurilor unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Modificarea l|imii (width) unei coloane i n|limii (height) unui rnd . . . . . . . . . . . . . . . 76 Ascunderea (hiding) i vizualizarea (un-hiding) coloanelor . . . . . . . . . . . . . . . . . . . . . . . . . 77 nghearea (freeze) coloanelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Formatarea celulelor din foaia de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
Tip|rirea (Printing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Obiectivele cursului 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 C|utarea i nlocuirea informaiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 C|utarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Caractere generice (Wildcards) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 G|sirea unei valori specifice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 nlocuirea unor valori din cmpuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
0264-401667
CUPRINS
Sortarea nregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Ce este un filtru? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Filtrarea nregistr|rilor prin selecie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Filtrarea nregistr|rilor prin formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Scurt istoric al bazelor de date relaionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Deschiderea ferestrei cu relaii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Ad|ugarea tabelelor n fereastra relaiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Definirea relaiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Integritate Referenial| (Referential Integrity) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Obiectivele cursului 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Ce sunt interog|rile (Queries)? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Tipuri de interog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Posibilit|ile interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Ce sunt mulimile dinamice (dynaset)? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Crearea unei interog|ri folosind Generatorul de Interog|ri Simple (Simple Query Wizard) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Crearea unei interog|ri f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grila interog|rii (Query Grid) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operatori logici pentru criterii de selecie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Folosirea textului n criteriul de selecie - caractere generice (Wildcards) . . . . . . . Criterii multiple i alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cmpuri calculate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interog|ri cu totale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Categoria Group By . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Categoria Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Categoria Total Field Record Limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Categoria Aggregate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
0264-401667
101 102 104 105 106 107 109 109 109 109 109
Editarea relaiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
CUPRINS
Interogarea de creare a unui tabel (Make-Table Query) . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Interog|ri cu mai multe tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipuri de asocieri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Asocieri interne (inner joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Asocierea extern| la dreapta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Asocierea extern| la stnga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Autoasocieri (self-joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Asocierea de tip produs cartezian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 118 119 119 120 120 120
Interog|ri cu parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Interog|ri ncruciate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Propriet|ile interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Interogri pentru ntreinerea bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Find Duplicate Query Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Find Unmatched Query Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Opiuni pentru proiectarea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Obiectivele cursului 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
http://www.east.utcluj.ro/mb/mep/antal
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fereastra modului proiectare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Afiarea sau ascunderea liniarului (Rulers) . . . . . . . . . . . . . . . . . . . . . . . . . Afiarea listei de propriet|i (Properties) a unui obiect de pe suprafaa formularului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 139 140 140
0264-401667
NU COPIA !.
10
CUPRINS
Tipuri de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Cutia cu instrumente (Toolbox) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Propriet|ile de legate de afiarea controalelor Etichet| i Cutie Text . . . . . . . . . . . . . . . . 148
Tehnici de editare a datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Lista proprietilor unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Obiectivele cursului 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Crearea unei cutii combinate (Combo Box) folosind cutia cu instrumente (Toolbox) . . . . 162 Crearea unui formular cu o cutie combinat| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Modificarea propriet|ilor unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Crearea unui cmp calculat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Crearea unui formular cu subformular (Subform) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Implementarea regulilor de integritate specifice bazei de date sau controlul datelor stocate n
0264-401667
Manipularea proiectului de formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rolul controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Editarea controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a fixa poziia controalelor la punctele grilei . . . . . . . . . . . . . . . . . . . . . . . . . Pentru mutarea controalelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru mutarea independent| a cutiei text sau etichet| . . . . . . . . . . . . . . . . . . . . . . Pentru a redimensiona un control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a terge un control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a multiplica un grup de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a muta sau copia controale folosind meniul Edit . . . . . . . . . . . . . . . . . . . . . Pentru selectarea a dou| controale adiacente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a selecta un grup de controale neadiacente . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru alinierea unui grup de controale ntre ele . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a modifica spaierea dintre controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a salva un formular cu toate modific|rile f|cute asupra controalelor lui . . . Pentru a modifica dimensiunea unei seciuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a modifica l|imea unui formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pentru a modifica l|imea formularului i dimensiunea unei seciuni simultan . . .
http://www.east.utcluj.ro/mb/mep/antal
Afiarea listei cmpurilor (Field List) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Afiarea cutiei cu instrumente (Toolbox) . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Afiarea codului din spatele formularului . . . . . . . . . . . . . . . . . . . . . . . . . . 141 141 142 142 142 142 142 143 143 143 143 143 143 144 144 144 144 144 144
NU COPIA !.
11
CUPRINS
baz| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Modificarea ordinii Tab-urilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Butoane de comand| (Command Buttons) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Ad|ugarea unui buton de comand| la un formular . . . . . . . . . . . . . . . . . . . . . . . . . 179 ntreruperi de pagin| (Page Break) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
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
Rapoarte f|r| Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Crearea de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Setarea propriet|ilor raportului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Aplicaia 1 cu rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Interog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Aplicaia 2 cu rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Obiectivele cursului 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Limbajul de programare Visual Basic for Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
12
CUPRINS
Proceduri de tip Sub i Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Procedura de tip Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Procedura de tip Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proceduri private (Private) i publice (Public) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
http://www.east.utcluj.ro/mb/mep/antal
Programarea orientat| pe evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Proceduri de evenimente (Event Procedures) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Proceduri definite de utilizator (General Procedures) . . . . . . . . . . . . . . . . . . . . . . . 232 233 233 234 235
Variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Declararea variabilelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Scop i durat| de existen| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipul Variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipuri numerice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipul ir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipul dat|/or| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipul Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipul parametru de procedur| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabloul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Declararea tablourilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tablouri cu mai multe dimensiuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alocarea dinamic| a spaiului pentru stocarea tablourilor . . . . . . . . . . . . . . . . . . . . 237 237 237 238 239 239 239 239 240 240 240
Operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operatori aritmetici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operatori de comparaie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operatori de concatenare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operatori logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Controlul execuiei programului . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea Let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciuni pentru decizie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . If...Then . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . If...Then...Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Select...Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciuni de ciclare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ciclul Do...Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ciclul For...Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ciclul For Each...Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
0264-401667
241 242 242 242 243 244 244 244 245 245 245 246 246 247 247
NU COPIA !.
13
CUPRINS
Ciclul While...Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Tipuri de date definite de utilizator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei modul clas| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definirea membrilor dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementarea propriet|ilor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modul de lucru cu Property Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modul de lucru cu Property Let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea metodelor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definirea evenimentelor clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Evenimentul Initialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Evenimentul Terminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utilizarea clasei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Colecii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei colecii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriet|ile i metodele obiectului colecie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ad|ugarea unui articol la colecie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Referirea unui obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parcurgerea articolelor coleciei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tergerea obiectelor individuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tergerea tuturor obiectelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eliberarea spaului folosit pentru stocarea variabilei obiect . . . . . . . . . . . . . . . . . . Crearea unei clase pentru manipularea coleciilor . . . . . . . . . . . . . . . . . . . . . . . . . . Modul de lucru cu Property Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aplicaii VBA cu funcii i clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aplicaii cu instruciunea If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aplicaii cu instruciunea For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Realizarea unei clase pentru lucrul cu numere complexe . . . . . . . . . . . . . . . . . . . .
http://www.east.utcluj.ro/mb/mep/antal
248 249 250 250 251 252 253 253 254 254 255 255 255 255 256 256 257 257 257 257 258 260 262 263 265 266
Obiectivele cursului 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Ce este programarea orientat| pe obiecte? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Obiecte i Colecii n VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Variabilele de tipul obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Obiecte Microsoft Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Obiecte pentru accesul la date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Determinarea tipului unui obiect de tipul Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Unele propriet|i ale obiectelor folosite mai des . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Propriet|ile obiectului Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
0264-401667
NU COPIA !.
14
CUPRINS
Propriet|i ale formularelor i rapoartelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Colecii implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Propriet|i ale obiectelor i coleciilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instrumente pentru depanare (Debugging tools) . . . . . . . . . . . . . . . . . . . . . . . . . . . Execuia pas cu pas a procedurilor (Stepping) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fereastra pentru Depanare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Depanarea procedurilor de evenimente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
http://www.east.utcluj.ro/mb/mep/antal
Aplicaie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Obiectivele cursului 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 Tratarea erorilor n VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Folosirea evenimentului Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea On Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea On Error GoTo etichet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea On Error Resume Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea On Error GoTo 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea Resume Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Obiectul Err . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ierarhii ale codului pentru tratarea erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Access SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cum se folosete Access SQL-ul? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sintaxa comenzilor SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clauza SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clauza FROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clauza WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clauza ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Asocierea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 296 298 298 300 300 301 301 301 302 302 303 304 304 305 306 306 307
0264-401667
NU COPIA !.
15
CUPRINS
Obiectivele cursului 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Lucrul cu mulimi de nregistr|ri (sets of records) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Obiectul mulime de nregistr|ri (recordset) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei mulimi de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consistena i inconsistena actualiz|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Moduri de creare a mulimilore de nregistrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parcurgerea unei mulimi de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . G|sirea num|rului de nregistr|ri din mulime . . . . . . . . . . . . . . . . . . . . . . Testarea limitelor mulimii de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . C|utarea unor nregistr|ri specifice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea With . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C|utarea n tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utilizarea marcajelor (bookmark) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sortarea nregistr|rilor dintr-o mulime de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . Sortarea prin folosirea propriet|ii Index . . . . . . . . . . . . . . . . . . . . . . . . . . . Sortarea prin folosirea clauzei SQL ORDER BY . . . . . . . . . . . . . . . . . . . . Sortare folosind proprietatea Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtrarea mulimilor de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtrarea folosind clauza SQL WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtrarea prin proprietatea Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Editarea datelor unei mulimi de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 326 328 328 330 331 331 332 332 333 334 335 335 336 337 337 338 338 339
Definiia datelor cu SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea CREATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clauza CONSTRAINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea CREATE INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea ALTER TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea DROP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interog|ri SQL Pass-Through . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
http://www.east.utcluj.ro/mb/mep/antal
Asociere multipl| (Multiple Joins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Asociere non-equi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Predicatele ALL, DISTINCTROW i DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . Agregarea datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interog|ri de agregare f|r| clauza GROUP BY . . . . . . . . . . . . . . . . . . . . . . Interog|ri de agregare cu clauza GROUP BY . . . . . . . . . . . . . . . . . . . . . . . Interog|ri de reuniune (UNION Queries) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compatibilitatea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Subinterog|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SQL cu parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Actualizarea datelor cu SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea INSERT INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea SELECT INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
308 308 308 309 310 310 312 313 313 315 316 316 317 317 318 319 319 320 321 321 322 322
0264-401667
NU COPIA !.
16
CUPRINS
Obiectivele cursului 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 Ce aduce nou Access 2000? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VBA n Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formulare i rapoarte n Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Accesul la date n Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Facilit|ile internet i intranet ale lui Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . ADO sau DAO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specificarea referinelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Noua ierarhie de obiecte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Manipularea datelor prin ADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definiia datelor i securitatea cu ADOX . . . . . . . . . . . . . . . . . . . . . . . . . . Replicarea cu JRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Definiia datelor cu DAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea obiectelor bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unui tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabelul metodelor Create... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unui Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei relaii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ataarea tabelelor din bazele de date externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ataarea unui tabel extern unei baze de date Access . . . . . . . . . . . . . . . . . . Reataarea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
http://www.east.utcluj.ro/mb/mep/antal
Modificarea unei nregistr|ri existente . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ad|ugarea unei nregistr|ri noi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tergerea unor nregistr|ri dintr-o mulime de nregistr|ri . . . . . . . . . . . . . Modificarea unui grup de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modificarea datelor prin tranzacii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
339 340 341 342 344 345 345 345 346 348 351 353 354 355
359 359 359 359 360 360 361 361 362 363 363
Utilizarea variabilelor obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Obiectul Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Enumerarea obiectelor unei colecii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Lucrul cu mulimile de nregistr|ri n Access 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Deschiderea unei mulimi de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea obiectelor mulime de nregistrare . . . . . . . . . . . . . . . . . . . . . . . . . Cursorul client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Navigarea printre nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C|utarea nregistr|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Editarea datelor unei mulimi de nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modificarea unei nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ad|ugarea unei nregistr|ri noi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 371 371 372 373 376 376 377
0264-401667
NU COPIA !.
17
CUPRINS
Crearea unei aplicaii cu formulare, subformulare i cod n Access 2000 . . . . . . . . . . . . . . Sincronizarea a dou| subformulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sincronizarea a trei formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ad|ugarea, prin cod, de date n dou| tabele aflate n relaie one-to-many . . . . . . . Crearea interog|rilor aplicaiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea rapoartelor aplicaiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ce este tehnologia ActiveX Automation? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Automation Server i Automation Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modul de lucru cu obiectele Automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea i definirea unei referine la o alt| aplicaie. . . . . . . . . . . . . . . . . . . Modele de obiecte i navigatorul de obiecte . . . . . . . . . . . . . . . . . . . . . . . . Creare variabilelor de tipul obiect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Legare n avans i legare trzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funciile CreateObject i GetObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Argumentele Clasa pentru aplicaiile din Microsoft Office . . . . . . . . . . . . Automation cu Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inserarea datelor ntr-un document Word . . . . . . . . . . . . . . . . . . . . . . . . . . Inserarea datelor ntr-un document Word folosind bookmark-uri . . . . . . . . Automation cu Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Definirea i nc|rcarea schemei bazelor de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei baze de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nc|rcarea informaiilor legate de schema bazei de date . . . . . . . . . . . . . . . . . . . . . Crearea tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unui tabel local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unui tabel legat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modific|ri aduse tabelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea i modificarea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei interog|ri stocate n baza de date folosind colecia Views . . . Crearea unei interog|ri stocate n baza de date folosind colecia Procedures ..................................................... Modificarea instruciunii SQL a unei interog|ri . . . . . . . . . . . . . . . . . . . . . Crearea unui index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei relaii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
http://www.east.utcluj.ro/mb/mep/antal
tergerea unei nregistr|ri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Actualiz|ri n grup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Executarea interog|rilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Executarea unei interog|ri f|r| parametri stocate n baza de date . . . . . . . . Executarea unei interog|ri cu parametri stocate n baza de date . . . . . . . . .
378 379 380 380 381 385 385 385 386 387 389 390 392 392 392 393 393 395 396 397 402 406 414 415 420 420 420 420 422 424 424 426 430 430 431 435 440
Pagini pentru accesul la date (Data Access Pages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei PAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crearea unei PAD simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Folosirea generatoarelor pentru crearea de PAD . . . . . . . . . . . . . . . . . . . . . Create data access page in Design view . . . . . . . . . . . . . . . . . . . . . .
0264-401667
446 447 447 447 447
NU COPIA !.
18
CUPRINS
ANEXA 1 - Lista principalelor instruciuni VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 ANEXA 2 - Lista principalelor funcii VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcii de conversie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcii pentru dat| i timp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcii pentru tratarea erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcii pentru manipularea fiierelor i directorilor . . . . . . . . . . . . . . . . . . . . . . . . Funcii financiare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcii matematice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcii pentru prelucrarea irurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alte funcii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 456 456 457 457 458 459 460 462
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Bibliografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
http://www.east.utcluj.ro/mb/mep/antal
Create data access page by using wizard . . . . . . . . . . . . . . . . . . . . . 448 Edit Web page that already exists . . . . . . . . . . . . . . . . . . . . . . . . . . 448
0264-401667
NU COPIA !.
19
Obiectivele cursului 1
Dupa 7 parcurgerea acestui curs vet -i cunoas - te:
! ! ! ! ! !
concepte legate de: baze de date, tabele i relaii; care sunt regulile relaionale ale lui Codd;
termenul baz| de date relaional| (Relational Database); avantajele utiliz|rii bazelor de date;
elementele de baz| ale Access-ului: Tabele (Tables), Formulare (Forms), cum se lanseaz| n execuie Access-ul i obiectele care exist| pe fereastra
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
20
Introducere
Datele sunt entit|i individuale formate din texte, numere, imagini sau sunete care pot fi stocate i prelucrate pe un calculator. Acestea se obin prin observarea i m|surarea lumii reale. Prin ele nsele, datele, nu au o semnificaie, aceasta rezultnd n urma interpret|rii (sau prelucr|rii) lor. Informaia este semnificaia pe care o primesc datele ca urmare a modului lor de interpretare. Pentru a nelege diferena, Antal, 33, 1250000 semnific| prea puin ca dat|. Dar dac| se interpreteaz| ca numele unui profesor, Antal, care are vrsta de 33 de ani i salariul lunar de 1.250.000 de lei, datele primesc semnificaie i pot fi numite informaii. Aceast| interpretare nu este unic|, putnd exista de multe ori alternative. Uneori buc|ica de informaie este parte a unui ablon informaional mai complex.
Definiii:
Concepte de baz|
Fiier (File): o colecie de nregistr|ri grupate pe baza subiectului comun, de exemplu: lista clienilor (stocata 7 n fiierul sau n baza de date Clienti); lista produselor (stocata 7 n fis - ierul sau n baza de date Produse); lista facturilor emise (stocata 7 n fiierul sau baza de date Facturi). nregistrare (Record): grup de informaii elementare despre un singur articol sau entitate, de exemplu: Clientul - Horea; Produsul - plac| de baz|; Factura - NR 0011. Cmp (Field): dat| individual| elementar| stocat| ntr-o nregistrare, de exemplu: n fiierul Clienti - Nume, Adresa, Telefon; n fiierul Produse - Cod produs, Descriere, Pret; n fiierul Facturi - Cod produs, Nume vanzator, Data, Ora.
Este util ca s| privim datele ca materie prim| pentru o reet| care, realizat| din proporii diferite, conduce la rezultate diferite.
http://www.east.utcluj.ro/mb/mep/antal
Ce sunt datele?
Cmpurile se definesc, precis, n termenii tipului datelor pe care pot s| le conin| s -i a dimensiunii maxime ce se poate stoca n acel cmp.
O baz| de date despre profesori (care este stocata 7 pe disc n fis - ierul Profi) este folosit| pentru a exemplifica noiunile deja prezentate. nregistr|rile corespund liniilor din tabel, iar cmpurile coloanelor. De exemplu, primele dou| nregistr|ri sunt liniile care ncep cu: 1. ACHIMAS 2. ANCAU
0264-401667
NU COPIA !.
21
O definit -ie simpla 7 pentru o baz| de date este: O colect -ie structurata 7 de date interconectate relat -ional prin unul sau mai multe subiecte.
http://www.east.utcluj.ro/mb/mep/antal
Fiecare nregistrare stocheaz| categorii de informaii elementare n urm|toarele cmpuri: NUME DIRECTOR; PRENUME DIRECTOR; AN NASTERE; TITLU DIDACTIC.
NU COPIA !.
Un sistem de gestiune a bazelor de date (SGBD) este un program care permite utilizatorului definirea, crearea, ntret -inerea si controlul accesului la o baza 7 de date, astfel: ! utilizatorii definesc baza de date cu ajutorul unui limbaj pentru definirea datelor (Data Definition Language); ! utilizatorii pot insera, actualiza, s - terge si extrage date din baza 7 folosind limbajul de manipulare a datelor (Data Management Language) deseori numit si limbaj de interogare (query language); ! asigura 7 servicii pentru controlul accesului la baza de date prin: < sistemul de securitate n vederea bloca 7 rii accesului persoanelor neautorizate la date; < sistemul de integritate a datelor pentru pa 7 strarea consistent -ei datelor stocate; < sistemul de accesul concurent la date, etc.
-ie mai tehnica 7 ar fi: baza de date reprezinta 7 una sau mai multe mult -imi de date O definit persistente structurate, asociate de obicei cu un software pentru editarea si select -ia datelor.
0264-401667
22
Un sistem de gestiune a bazelor de date relat -ionale (Relational Database Management System - RDBMS) este o un sistem de gestiune a bazelor de date care folosete modelul relaional dezvoltat de E. F. Codd n 1970.
Un model de date este un formalism matematic cu o notaii pentru descrierea structurilor de date - organizarea datelor - i a mult -imii de operat -ii folosite pentru manipularea datelor.
n modelul de date relaional, toate datele sunt organizate n tabele (termenul tehnic este cel de relat -ie), care sunt formate din rnduri (termenul tehnic este de tupla 7 ) i coloane (uneori numite i cmpuri sau atribute). Tabelul este o colecie de rnduri, iar fiecare rnd al unui tabel conine aceleai cmpuri. Fiecare tabel are un nume, iar n interiorul tabelului, fiecare coloan| are un nume. Nu se menine o ordine prestabilit| ntre rndurile unui tabel, ele pot fi extrase n orice ordine determinat| de valorile din cmpuri. Unele cmpuri pot fi desemnate drept chei, ceea ce nseamn| c| toate c|ut|rile ale unor valori specifice ale acelui cmp vor folosi indexarea pentru creterea vitezei. Rndurile unor tabele distincte pot fi legate dac| au
0264-401667
NU COPIA !.
Pe baza celor spuse, n figura de mai sus se prezinta 7 , departamentele pentru vnza 7 rile de - i de contacte. Fiecare departament are propria ei aplicat -ie pentru accesarea bazei de produse s 7 rui departament, aplicat -ia de gestionare date prin intermediul SGBD. La nivelul fieca realizeaza 7 introducerea datelor, ntret -inerea datelor si generarea rapoartelor prin intermediul SGBD. Deseori, utilizatorii nu sunt interesat -i n a putea accesa ntreaga baza 7 de date n acest 7 mecanism de vedere (view mechanism), care permite ca sens, SGBD are o facilitate numita fiecare utilizator sa 7 aiba 7 o vedere proprie asupra bazei de date (o vedere este, n esent -a 7 , o parte a bazei de date).
http://www.east.utcluj.ro/mb/mep/antal
23
Bazele de date comune se prezint| sub dou| forme: 1. baza de date simpla 7 (flat database) - se folosete pentru stocarea unor liste simple ce pot conine date redundante, asemenea unor pagini dintr-o agend| n care unele informaii se repet|; 2. baza de date relat -ionala 7 (relational database) - se folosete pentru stocarea datelor n fiiere cu referine ncruciate pentru eliminarea redundanei. Din acest motiv g|sirea, analiza, gestionarea i protecia datelor este mai simpl| pentru c| acestea apar o singur| dat| n baz|.
n viaa de toate zilele utiliz|m frecvent baze de date, f|r| a fi contieni ns|. Iat| cteva exemple: cartea de telefoane; orarul colii; agenda.
http://www.east.utcluj.ro/mb/mep/antal
aceeai valoare ntr-un cmp particular din fiecare tabel (se mai zice c| tabelele au o asociere). O caracteristic| a modelului relaional este c| toat| informaia din baza de date este reprezentat| prin valorile stocate n tabele. Datele pot fi manipulate prin algebra relaional|. Limbajul SQL (care va fi tratat ntr-un capitol urm|tor) este implementarea unei astfel de algebre. SGBD-ul trebuie s| urm|reasc| datele importante pentru gestionarea bazei de date. De exemplu, va cunoate numele tabelelor i numele fiec|rui cmp dintr-un tabel. Acest tip de informaie poart| numele de meta-date (date despre date). Asemenea oric|ror alte date i acestea se vor stoca n tabele. Tabelele care descriu structura bazei de date poart| denumirea de schema bazei de date. SGBDR-urile mari, au scheme multiple, acestea fiind grupate n cataloage.
S| presupunem c| ntr-o firm| se ine pe calculator evidena angajailor, clienilor i a produselor sau a serviciilor pe care acesta le comercializeaz|. Pentru a obine un produs sau un serviciu clientul trebuie s| fac| o comand|. Se contureaz| deja cinci subiecte distincte care corespund la cinci fiiere sau tabele: Angajat (tabelul Employess); Client (tabelul Customers); Produs (tabelul Products); Comand| (tabelul Orders); Detalii comand| (tabelul Order Details).
0264-401667
NU COPIA !.
24
Este probabil s| fie comenzi cu mai multe produse motiv pentru care avem nevoie de un tabel legat pentru Detalii comand|.
n relaia unu-la-muli dintre tabelele Clieni-Comenzi (Customers-Orders) cmpul de leg|tur| ntre tabele este CustomerID. n tabelul Clieni este i cheie primar|. Cheia primar| identific| unic fiecare nregistrare din tabel. n unele cazuri aceasta se poate realiza prin folosirea unui singur cmp (de exemplu CustomerID) alteori se folosete o combinaie de orice num|r de cmpuri (de exemplu OrderID + NrLinie poate identifica unic o nregistrare n tabelul Order Details). Pe baza datelor din tabele trebuie s| se g|seasc| o combinaie de cmpuri care s| asigure identificarea unic| a nregistr|rilor din tabel. n tabelul Orders cmpul CustomerID se numete cheie str|in| i asigur| leg|tura cu tabelul Customer n care este cheie primar|.
Cnd un client emite o comand|, ea poate fi pentru unul sau mai multe produse, adic| pot fi mai multe produse pe o singur| comand|. O astfel de relaie se numete unu-la-muli (oneto-many). O relaie mai rar| este cea unu-la-unu (one-to-one). Un alt tip de relaie este muli-la-muli (many-to-many) care n Access nu este permis|. Ea se poate transforma n relaii unu-la-muli prin folosirea unui tabel intermediar de leg|tur|. n figura anterioar| 1 indic| partea de unu din relaie iar simbolul infinit 4 reprezint| partea de muli.
Tipuri de relaii
http://www.east.utcluj.ro/mb/mep/antal
Tabelele de mai sus se numesc legate ntre ele prin relaii (relationship): un angajat vinde mai multor clieni unei nregistr|ri din Angajai i corespund mai multe nregistr|ri din Clieni, conexiunea ntre acestea facndu-se prin Comand|; un client comand| unul sau mai multe produse unei nregistr|ri din Clieni i corespund mai multe nregistr|ri din Produse, conexiunea ntre acestea f|cndu-se prin Comenzi i Detalii comand|; ordinul de comand| conine un num|r de detalii specifice comenzii n cmpurile CustomerID, EmployeeID etc. i un cmp de conexiune, OrderID, cu Detalii comand| unde sunt detaliile fiec|rui produs vndut.
Codd a pus la punct un set de reguli care aveau ca scop asigurarea independenei ntre aplicaia de interfa| cu utilizatorul i modific|rile aduse modelului de date. Modelul relaional folosete un element comun, ca de exemplu CustomerID, pentru a lega rnduri ntre care exist| o relaie dar se afl| n tabele diferite. Exist| 13 reguli pe care un produs program trebuie s| le respecte pentru ca s| fie numit Sistem de Gestiune al Bazelor de Date Relaionale (SGBDR). Microsoft Access-ul se conformeaz| la toate cele 13 reguli enumerate de Codd. Tabelul care urmeaz| prezint| succint aceste reguli: Nr. Nume regula 7 Descriere Implementare Access
0264-401667
NU COPIA !.
25
Principul de baz|
Stocarea informaiei
Toate datele unui SGBD relaional se reprezint| explicit ca valori n tabele. Datele nu pot fi stocate prin alte metode.
http://www.east.utcluj.ro/mb/mep/antal
Orice SGBD Relaional (SGBDR) trebuie s| gestioneze ntreaga baz| de date numai prin posibilit|ile modelului relaional. Dac| un SGBD este dependent de un instrument de manipulare al datelor la nivel de ntregistrare, nu este total relaional.
Access-ul a fost primul SGBD care rula sub Windows i respecta aceast| regul|. Access-ul nu folosete numere de nregistr|ri. Access-ul i stocheaz| datele n tabelele motorului bazei de date Microsoft Jet. Access-ul respect| aceast| regul| prin folosirea Cheii Primare (Primary Key). Access-ul suport| lucrul cu valori Null pentru descrierea informaiilor lips|. Catalogul rezid| n motorul bazei de date Microsoft Jet. Se poate folosi OpenSchema din ADO pentru interogarea catalogului de sistem. Limbajul DDL SQL al motorului bazei de date Microsoft Jet ofer| posibilitatea cre|rii tabelelor, cheilor etc.
Garantarea accesului
Fiecare element de dat| trebuie s| fie accesibil logic printr-o combinaie de forma: cheie primar|, nume de tabel i nume de cmp. Valorile vide (Null) trebuie s| fie suportate explicit. Null-urile reprezint| informaia lips| sau imposibil de aplicat.
Catalogul de sistem
Descrierea bazei de date sau catalogul trebuie s| se fac| la nivelul logic sub forma unor valori n tabele. Limbajul relaional (SQL) trebuie s| poat| aciona asupra proiectului bazei de date n acelai mod n care acioneaz| asupra datelor stocate n structur|.
Lipsa informaiei
Limbaj cuprinz|tor
Un SGBD trebuie s| suporte un limbaj clar pentru manipularea datelor (SQL) care asigur| modalit|i cuprinz|toare pentru manipularea datelor, definirea datelor, definirea vederilor, constrngerile de integritate, limit|rile de tranzacii i de autorizare.
Access-ul, prin motorul Jet, asigur| SQL pentru manipularea datelor, crearea vederilor (Select Queries), constrngerile de intergritate (Relationships i CREATE CONSTRAINT). Access a fost primul SGBD pe PC-uri care a permis interog|ri de actualizare (Update Query).
Actualizarea vederilor
Toate vederile trebuie s| poat| fi actualizate de sistem. ntr-un SGBD total relaional majoritatea vederilor ar trebui s| se poat| actualiza.
0264-401667
NU COPIA !.
26
Datele trebuie s| fie fizic independente de programul aplicaie. Programul aplicaie SGBDR trebuie s| fie n stare s| urm|reasc| modific|rile fizice la nivelul datelor pe "sub aplicaie". De exemplu, programul SGBDR nu se va modifica dac| un index se adaug| sau se terge dintr-un tabel. Pe ct este posibil, aplicaiile software trebuie s| fie independente de modific|rile f|cute n tabelele de baz|. De exemplu, nu trebuie s| se rescrie codul n cazul n care tabelele sunt combinate ntr-o vedere. Integritatea datelor trebuie s| se poat| defini ntr-un limbaj relaional i s| fie stocat| n catalog. Constrngeri de integritate a datelor trebuie s| poat| fi construite la nivel de aplicaie. Acest concept este oarecum str|in modelului relaional. n modelul relaional, integritatea trebuie s| fie inerent| proiectului bazei de date. Capacit|ile SGBDR nu au voie s| fie limitate datorit| distribuiei unor componente ale acestuia n baze de date separate.
http://www.east.utcluj.ro/mb/mep/antal
Un SGBDR trebuie s| fac| mai mult dect simpla extragere a datelor. Trebuie s| aib| capacitatea de inserare, actualizare i tergere a datelor, privite ca o mulime relaional|
Access-ul permite modificarea obiectelor bazei de date f|r| alterarea celorlalte componete ale Accessului. Jet-ul are motor de stocare logic.
10
n Access, o interogare se poate lega la un formular sau la un raport la fel de simplu ca un tabel. Dei Microsoft-ul nu a documentat modul n care Jet-ul stocheaz| integrit|ile, se pot crea reguli de integritate via SQL. Jet-ul va stoca aceste informaii n proiectul bazei de date ca parte a catalogului.
11
Independena distribuiei
Pentru c| motorul Jet stocheaz| regulile de integritate la nivel de motor, alte componente ale motorului nu afecteaz| regulile de integritate.
0264-401667
NU COPIA !.
27
12
Inexistena submin|rilor
Pentru a r|spunde la aceast| ntrebare trebuie s| l|murim "clasa" sistemelor de gestionare a bazelor de date din care face parte Access-ul. Access-ul este un SGBD pentru calculatoare desktop, adic| calculatoare care "stau pe biroul cuiva", deci care deservesc un utilizator sau un
0264-401667
NU COPIA !.
Microsoft Access-ul este un Sistem de Gestiune a Bazelor de Date Relaionale (SGBDR) scris de firma Microsoft care este i produc|toarea sistemului de operare Windows. Aceast| aplicaie 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 selecie avansate pentru date. este stabil n contextul sistemului de operare Windows pentru c| este dezvoltat de aceeai firm| care scrie sistemul de operare. este uor de nv|at, asigurnd 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 acelai timp aprofundat are resurse suficiente pentru a susine dezvoltarea unor proiecte serioase. este foarte direct n posibilit|ile de manipulare a cmpurilor i a tabelelor cu date. este foarte r|spndit, motiv din care are scrise o mulime de biblioteci de tot felul de firme tere.
De ce Microsoft Access?
O baz| de date electronic| permite utilizatorului efectuarea acelorai operaii ca n cazul unei baze de date stocat| pe hrtie, 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 uoar| a datelor i c|utarea simpl| a datelor; permite preg|tirea unor rapoarte precise ntr-o form| dorit| de utilizator despre informaiile stocate; asigur| partajarea datelor cu alte pachete software, n reele de calculatoare asigur| i partajarea informaiilor ntre utilizatori, sc|znd mult timpul pentru duplicarea datelor; asigur| securitatea datelor prin protecie mpotriva accidentelor software i hardware.
http://www.east.utcluj.ro/mb/mep/antal
Dac| un SGBDR are un limbaj de manipulare "a unei singure nregistr|ri la un moment dat", acest limbaj nu va putea fi folosit la ocolirea regulilor de integritate sau a constrngerilor modelului relaional. Astfel nu numai c| SGBDR trebuie s| fie guvernat de reguli relaionale ci aceste reguli trebuie s| fie i primare.
Access-ul permite folosirea lui DAO i ADO pentru manipularea a cte unei singure nregistr|ri la un moment dat prin intermediu mulimilor de ntregistr|ri actualizabile (updateable recordsets). Nu se pot viola regulie de integritate prin aceste tehnologii de manipulare a datelor.
28
Evoluia Access-ului
n 1992 Microsoft a lansat Access 1.0 care a fost rapid urmat de versiunea 1.1. Aplicaia iniial| a fost ieftin| (n jur de 100 USD) fiind competitiv| numai datorit| acestui pre, altfel avnd o mulime de limit|ri.
n septembrie 1995 apare Access 95 (alias versiune 7.0) scris| pentru sistemul de operare Windows 95. Din nefericire, a fost instabil i cu multe erori, Access 2.0 r|mnd preferatul programatorilor.
Ultima versiune este Access 2000 ap|rut| n iunie 1999. Despre acesta n-am s| spun dect c| este un produs program mult superior celorlalte versiuni de Access i altor SGBDR-uri din clasa Access-ului, att n concepie, ct i n implementare.
O introducere n Access
Access-ul utilizeaz| aceleai denumiri cu cele prezentate anterior cu o excepie ns| i anume
0264-401667
NU COPIA !.
Versiunile de Access de pe pia| sunt practic produse distincte pentru c| nu asigur| compatibilitatea de la nou la vechi. O baz| de date scris| ntr-o versiune b|trn| se poate converti la una mai nou|, dar invers nu se poate. Erau dou| soluii pentru aceast| problem|: se p|stra o copie veche a bazei de date care va fi convertit| la versiunile noi sau se va deschide versiunea veche a bazei cu un Access nou, ns| numai n modul de citire (read only). La realizarea conversiei Access-ul ncearc| s| transforme ct mai bine posibil obiectele vechi n corespondentul lor nou, dar i aici apar des probleme.
n noiembrie 1996 apare Access 97 (alias Access 8.0) cu multe mbun|t|iri fa| de Access 2.0 i mult mai stabil n contextul sistemului de operare Windows 95/98.
n aprilie 1994 a ap|rut pe pia| Access 2.0 aceast| versiune eliminnd de pe pia| versiunile anterioare. Dup| scurt timp versiunea 2.0 a devenit principala baz| de date pe 16 bii.
http://www.east.utcluj.ro/mb/mep/antal
num|r mic de utilizatori. El nu poate concura cu Oracle, Informix, DB2 sau Microsoft SQL Server care sunt sisteme complexe de gestionare ale bazelor de date cu motoare superioare n termeni de vitez| i num|r de utilizatori care pot accesa simultan bazele de date. Totui, Access-ul poate fi folosit cu succes i n acest context pe post de interfa| (front-end package) dintre utilizator i aceste SGBD-uri complexe.
29
Fiierul se numete Tabel. Aceasta este o alegere normal| din moment ce majoritatea informaiilor se prezint| n practic| sub form| tabelar|.
Formularele se folosesc pentru introducerea, editarea sau vizualizarea datelor la nivel de nregistrare.
Lucrul cu o baz| de date implic| mai mult dect simpla stocare a datelor. Pentru a manipula, prelucra i vizualiza datele sub forma unor informaii este necesar un grup de obiecte. Acestea sunt stocate de c|tre Access ntr-un container al bazei de date (Database Container) i sunt: formulare, interog|ri, rapoarte, macro-uri, module i pagini.
http://www.east.utcluj.ro/mb/mep/antal
Forma de prezentare vizual| care urmeaz| se numete Foaie de date (Datasheet) i este cea mai comun| pentru prezentarea datelor n Access. Cea mai simpl| baz| de date se prezint| sub o astfel de form| i poate include un num|r imens de date.
Datele se pot grupa pentru operaiile de mai sus dup| cum dorete utilizatorul. Uneori, formularele pot imita perfect documente aflate pe hrtie pentru a uura introducerea i interpretarea datelor. O interogare este o ntrebare despre date, de exemplu: cte pl|ci de baz| defecte au fost cump|rate? ci bani mai am n
cont? La fiecare interogare din baza de date se extrag ultimele date (cele mai proaspete) legate de
0264-401667
NU COPIA !.
30
Acestea stocheaz| funciile sau programele scrise de utilizator. Tot ce se poate realiza cu un macro se poate realiza i cu un modul, dar f|r| interfaa de macro-uri care asigur| un dialog prietenos cu utilizatorul. Modulele sunt mult mai puternice i eseniale pentru scrierea unor aplicaii n regim multiuser (baze de date cu utilizatori multipli) pentru c| macro-urile nu pot trata erorile din regim de lucru. Majoritatea utilizatorilor ncep s| lucreze cu macro-urile pn| cnd realizeaz| limit|rile lor, n final, oprindu-se definitiv la module. Un tip de obiect nou apare numai din Access 2000. Paginile se folosesc pentru a introduce sau afia date prin Internet. Paginile sunt stocate sub forma unor fiiere HTML avnd datele citite sau scrise din baza de date.
Localizai simbolul Microsoft Access din meniul Start al Windows-ului sau Executai clic pe simbolul Microsoft Access de pe desktop (dac| acesta exist|).
Lansai n execuie Access-ul i afiai cutia de dialog Open. Localizai i selectai articolul care dorii s| fie ad|ugat n directorul Favorites. n
0264-401667
NU COPIA !.
Un macro este un grup de comenzi Access care rezolv| o sarcin| concret|. De exemplu, pentru a crea un buton care deschide un raport se poate folosi un macro care se lanseaz| n aciunea "OpenReport". Macro-urile se pot folosi pentru a seta valoarea unui cmp pe baza valorii altui cmp (aciunea "SetValue"), pentru a verifica ndeplinirea anumitor condiii nainte de salvarea unei nregistr|ri (aciunea "CancelEvent"). Ecranul de macro-uri afieaz| detalii despre felul n care se poate aplica fiecare aciune.
http://www.east.utcluj.ro/mb/mep/antal
Rapoartele se folosesc la tip|rirea i afiarea imformaiilor din baza de date. Rapoartele permit producerea rezultatelor cu informaia ntr-o form| dorit| de utilizator i permit: gruparea i sortarea informaiilor; calculul de totale i medii.
31
vei vedea o list| de forma care permite ad|ugarea articolului selectat prin Add Selected Item to Favorites n directorul Favorites.
Deschiderea unei baze de date din directorul Favorites
pentru a deschide un fiier din Favorites, prima oar| afiai fereastra de dialog Open;
dac| efectuai clic pe simbolul Look in Favorites (afiat n interiorul cutiei de dialog Open) orice articol care l-ai ad|ugat va fi afiat n fereastra de dialog astfel:
http://www.east.utcluj.ro/mb/mep/antal
efectuai clic pe articolul dorit, la noi Northwind.mdb i apoi efectuai clic pe butonul Open pentru a deschide fiierul.
0264-401667
NU COPIA !.
32
Bara cu instrumente conine butoane care permit selectarea direct| (pun la dispoziia utilizatorului scurt|turi) a unor comenzi din bara cu meniu aflate n submeniuri. Exist| mai multe bare cu instrumente care se pot activa - efectul activ|rii fiind afiarea lor pe ecran - prin selectarea lui View din Toolbars. Dac| nc| nu cunoatei semnificaia butonului pe care dorii s|-l ap|sai, inei mouse-ul pe buton un timp i un scurt mesaj de ajutor, n limba englez|, va fi afiat.
0264-401667
NU COPIA !.
Minimizare (Minimize), Refacere (Restore) i nchidere (Close). Dedesubt este Bara cu Meniu (Menu Bar), iar mai jos sunt barele cu instrumente. La pornirea Access-ului n Meniu se v|d numai dou| submeniuri File (fiiere) i Help (ajutor), iar majoritatea butoanelor de pe bara de instrumente sunt de culoare gri, adic| invalidate (la ap|sarea lor nu se petrece nimic). Acestea apar din cauz| c| nu este dechis| o baz| de date.
http://www.east.utcluj.ro/mb/mep/antal
Fereastra principal| a aplicaiei Access urmeaz| caracteristicile oric|rei aplicaii Microsoft Windows. O Bar| cu Titlu (Title Bar) este afiat| n cea mai de sus poriune a ecranului cu un Meniu de Control (Control Menu) n partea stng|, iar n dreapta Butoanele de
33
Obiectivele cursului 2
! ! ! ! ! ! ! ! ! !
cum se deschide o baz| de date la pornirea (lansarea n execuie) 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 cum se nchide o baz| de date;
Acces-ului;
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 vizualizeaz| un formular n mod de proiectare; care sunt principiile de utilizare ale rapoartelor (Reports). cum se deschid formularele (Forms) i pentru ce se utilizeaz|;
Access;
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
34
Nota 7 : Bazele de date recente vor fi afiate ntr-o list|, n figura al|turat| este numai una singur| Northwind,
de unde pot fi deschise efectund clic pe numele lor. O alt| variant| este selectarea
Deschidei baza de date n mod obinuit, cu oricare din procedurile descrise mai sus, fereastra de dialog va cere din partea dumneavoastr| confirmarea conversiei bazei de date vechi n cea nou| - opiunea Convert Database - sau p|strarea formatului original i deschiderea bazei de date - opiunea Open database. Dac| baza de date este deschis| f|r| a fi convertit| n formatul lui Access 97 datele din ea se pot edita dar nu se pot modifica proiectele formularelor, tabelelor i rapoartelor. Toate datele salvate vor putea fi utilizate n versiunea anterioar| de Access sub care s-a proiectat baza de date. n cazul n care se realizeaz| conversia, obiectele din baza de date vor putea fi manipulate din Access97 dar nu vor mai fi recunoscute de versiunile anterioare de Access.
0264-401667
NU COPIA !.
simbolului grafic Open database din bara de instrumente Standard. Cnd se deschide fereastra de dialog Open, selectai numele bazei de date din lista - n figura al|turat| s-a selectat Order Entry1 - i efectuai clic pe butonul Open.
Din meniul File selectai Open Database. Observai c| n dreapta textului Open database este scris Ctrl+O. Aceasta este scurt|tura c|tre comanda din meniu. Ea se execut| prin inerea ap|sat| a tastei Ctrl i ap|sarea scurt| a tastei O, dup| care ambele taste se elibereaz| i are ca efect selectarea lui Open Database din meniul File mai scurt, numai prin ap|sarea unui grup de taste (trecerea prin meniu este ocolit|).
http://www.east.utcluj.ro/mb/mep/antal
Din cutia de dialog Open selectai o baz| de date deja existent| i apoi efectuai clic pe butonul Open.
35
ase ferestre permit accesul la tabele (Tables), interog|ri (Queries), formulare (Forms), rapoarte (Reports), macro-uri (Macros) i module (Modules). Fiecare dintre acestea va fi examinat| n detaliu n cursurile urm|toare. Selecia uneia se realizeaz| efectund clic pe butonul (numit tab n englez|) cu numele corepunz|tor. Aceleai obiecte se pot selecta i din meniul View.
n fereastra bazei de date Access efectuai clic pe butonul Tables; n lista tabelelor efectuai clic dublu pe numele tabelului care dorii s| fie deschis sau efectuai clic pe numele tabelului i apoi clic pe butonul Open; tabelul este vizualizat sub forma unei foi de date (Datasheet view) care este modul de vizualizare implicit pentru tabele n Access. La deschiderea tabelului Meniul i Bara cu Instrumente se schimb| automat pentru a include opiunile care sunt relevante pentru tabele.
Numele de coloane (column headings) devin vizibile n foaia de date acestea specificnd cmpurile tabelului. Fiecare rnd conine o nregistrare (record) separat|.
0264-401667
NU COPIA !.
Pentru a nchide o baz| de date Access: selectai Close din meniul File sau efectuai clic n Meniul de Control al aplicaiei Access i selectai Close sau efectuai clic dublu pe butonul Meniului de Control sau ap|sai Ctrl+F4.
http://www.east.utcluj.ro/mb/mep/antal
Fereastra bazei de date Access apare n fereastra aplicaiei Access la deschiderea bazei de date. Ea asigur| o modalitate de acces elegant| i rapid| la obiectele bazei de date.
36
Este probabil ca tabelul s| aib| mai multe coloane dect cele care se pot afia n fereastr|, caz n care numai cele din stnga vor fi vizibile. Dreptunghiurile gri din dreapta nregistr|rilor se numesc selectori de nregistr|ri (record selectors). Un simbol s|geat| n selector indic| nregistrarea curent| (current record). Un asterisc (caracterul *) ocup| selectorul urm|toarei nregistr|ri vide - nc| necompletate- disponibile. n partea de jos a ferestrei (unde scrie Record:), imediat deasupra liniei de stare, o bar| pentru defilare (scroll bar) pune la dispoziia utilizatorului butoane de navigare i dreptunghiuri cu num|rul nregistr|rii curente, respectiv cu num|rul total de nregistr|ri. La deschiderea unui tabel, n mod normal, va fi indicat| prima nregistrare.
Se poziioneaz| cursorul mouse-ului (de obicei n form| de s|geat|) pe cmpul dorit i efectu|m clic pe butonul stng al mouse-ului. Cursorul i schimb| forma funcie de tipul cmpului.
Explorarea tabelelor
Tab
Ctrl+Home Ctrl+End
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
Selectai Go To din meniul Edit, apoi selectai First, Last, Next Previous sau New Record (vezi figura al|turat|).
View). Pentru a modifica un tabel trebuie mai nti s| comutai pe vizualizarea n mod
0264-401667
NU COPIA !.
La deschiderea unui tabel acesta este vizualizat, implicit, ca o foaie de date (Datasheet View). La crearea unui tabel, implicit, acesta este vizualizat n mod proiectare (Design
Ap|sai tasta F5 iar num|rul nregistr|rii se va selecta din bara de defilare; Introducei num|rul nregistr|rii pe care dorii s| v| plasai.
http://www.east.utcluj.ro/mb/mep/antal
38
proiectare.
http://www.east.utcluj.ro/mb/mep/antal
sau efectuai clic pe simbolul grafic Design View de pe bara de instrumente . selectai Datasheet View din meniul View sau efectuai clic pe simbolul grafic Datasheet View din bara de instrumente.
Interog|rile pot fi vizualizate, la fel ca i tabelele, n mod foaie de date sau n cel de proiectare. interogare vizualizata 7 n mod foaie de date interogare vizualizat| n mod proiectare
O interogare este o modalitate de a extrage informaii din baza de date. Se pot extrage date din tabele distincte i se pot combina mpreun|. Se pot specifica criterii pentru limitarea num|rului de nregistr|ri i se pot efectua calcule pentru a genera informaii care nu sunt stocate direct n tabele.
O interogare cu parametru (Parameter Query) este cea care cere introducerea unui criteriu din partea utilizatorului n mod interactiv. 7 de Cnd utilizatorul lanseaz| interogarea aceasta va afia o fereastra dialog sau mai multe pentru introducerea criteriilor necesare. Un exemplu simplu ar fi domeniul datelor pentru care se dorete aflarea vnz|rilor. deschidei fereastra bazei de date (Database Window); efectuai clic pe butonul Queries; efectuai clic pe butonul Design din fereastra bazei de date.
0264-401667
NU COPIA !.
39
Un formular poate fi copia exact| a unui formular de pe hrtie, ca de exemplu o factur| sau un orar. O multitudine de tehnici de proiectare permit folosirea de stiluri i m|rimi diferite de caractere, imagini scanate, desene, butoane de comand| sau grafice, toate ntr-o palet| de culori variat|.
Tipuri de formulare
Formularele (Forms) asigur| o prezentare prietenoas| a datelor din baz|. Modurile de utilizare ale formularelor sunt multiple: ad|ugare, tergere sau modificare de date; afiarea datelor; controlul modului i a ordinii n care utilizatorul are acces la date; afiarea de mesaje; tip|rirea de informaii. De asemenea, formularele se pot folosi pentru alc|tuirea unui sistem de meniuri pentru ghidarea utilizatorului prin orice operaii dorite. Toate formularele se bazeaz| pe datele unuia sau mai multor tabele a c|ror structur| r|mne neafectat| de modalitatea de prezentarea vizual| a formularului.
http://www.east.utcluj.ro/mb/mep/antal
din modul de vizualizare foaie de date (Datasheet View) efectuai clic pe simbolul grafic mod de proiectare (Design View) din bara de instrumente sau din modul de proiectare (Design View) efectuai clic pe simbolul foaie de date (Datasheet View) din bara de instrumente.
Microsoft Access pune la dispoziia utilizatorului Generatoare de Formulare (Form Wizard), cteva exemple, din baza de date NorthWind, rezultate prin folosirea acestor generatoare se prezint| n continuare:
0264-401667
NU COPIA !.
40
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
41
deschidei o baz| de date; selectai din Database Window butonul Forms; selectai formularul care va fi deschis - mai jos Customer; efectuai clic dublu pe numele formularului sau efectuai clic pe pe butonul Open din fereastra bazei de date (Database Window), iar formularul se va deschide - aceasta este reacia implicit| n Access - fiind afiat pe ecran n modul vizualizare (Form View).
http://www.east.utcluj.ro/mb/mep/antal
Un formular poate s| fie format pe baza cmpurilor unui singur tabel sau pe baza cmpurilor din mai multe tabele. n ambele cazuri, toate sau numai o parte din cmpuri pot s| ocupe loc n spaiul formularului. Vizualizarea n modul foaie de date (Datasheet View) permite afiarea datelor stocate n tabel. Vizualizarea n modul proiectare (Design View) permite modificarea sau crearea obiectelor de pe suprafaa formularului. efectuai clic pe butonul Datasheet View din bara de instrumente standard (standard toolbar) sau selectai din meniul aplicaiei Access pe View, apoi DatasheetView.
0264-401667
NU COPIA !.
42
efectuai clic pe pictograma Design View din bara de instrumente standard sau selectai View din meniul aplicaiei Access, apoi Design View.
http://www.east.utcluj.ro/mb/mep/antal
efectuai clic pe pictograma Form View din bara de instrumente standard sau selectai View din meniul aplicaiei Access, apoi Form View.
0264-401667
NU COPIA !.
43
efectuai clic pe butonul Close (vezi figura anterioar|) al formularului sau selectai din meniul aplicaiei Access, File, apoi Close sau selectai Close (vezi figura anterioar|) din meniul de Control al formularului (n stnga sus) sau ap|sai Ctrl+F4.
n figurile care urmeaza 7 prezint cteva tipuri de rapoarte extrase din baza de date Nortwind.
0264-401667
NU COPIA !.
Rapoartele sunt modul tradiional de vizualizare a rezultatelor din bazele de date. Dei se pot vizualiza i pe ecran, de regul| sunt create pentru a fi listate la imprimant|. Vizualizarea unui raport pe ecran, nainte de tip|rire este binevenit|, fiind posibil| ajustarea marginilor raportului pentru ca acesta s| intre n pagina hrtiei ct mai bine. Odat| cu evoluia tehnicilor de programare, rapoartele au trecut de faza n care plictisesc, acum fiind posibil ca un raport s| conin| sigla firmei sau alte desene, grafice sau imagini. Avantajul major al rapoartelor const| n posibilitatea grup|rii, sort|rii i realiz|rii de totale pentru oricare dintre cmpurile bazei rezultnd posibilitatea gestion|rii de cantit|i mari de date sub o form| de prezentare accesibil|. Dac| raportul are mai multe pagini exist| posibilitatea navig|rii printre pagini i m|ririi unor zone ale raportului, asta ns| numai n faza de vizualizare a lui. Atunci cnd nu 7 experint -a 7 n Access, dar suntem ct de ct obis - nuit -i cu editorul de texte avem prea multa Word, exista 7 posibilitatea exportului unui raport n editorul de texte al formei Microsoft sau n Excel. Aici, posibilita 7tile de aranjare n pagina 7s - i de mbuna 7 ta 7tire a imaginii documentului (raportul Access) sunt mult mai avansate si mai simplu de folosit dect n cazul rapoartelor Access. n general, rapoartele pot fi exportate s - i n alte tipuri de formate, cteva dintre acestea sunt: Ricth Text Format (RTF), HTML sau text obis - nuit.
http://www.east.utcluj.ro/mb/mep/antal
44
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
45
Obiectivele cursului 3
! ! ! ! ! ! ! ! ! ! ! ! !
de ce este necesar| pornirea fazei de proiectare pe hrtie cu creionul; cum se creeaz| o baz| de date nou| folosind Generatorul de Tabele cum se adaug| cmpuri folosind Generatorul de Tabele; cum se creeaz| un tabel f|r| Generator; cum se adaug| cmpuri f|r| Generator; cum se descrie semnificaia cmpului;
(Table Wizard);
cum se folosete Generatorul M|tilor de Intrare (Input Mask Wizard); cum se editeaz| Masca de Intrare; cum se definete Cheia Primar| (Primary Key);
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
46
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 dorete baza de date i ce se ateapt| de la ea. Aici cel mai important este definirea rezultatelor, adic| a ieirilor pe care aceasta le produce. Problemele serioase apar pentru c| muli proiectani decid asupra coninutului bazei de date f|r| s| tie exact ceea ce trebuie s| fac| aceasta. Cunoscnd ceea ce se dorete se pot analiza datele disponibile pentru a Ce avem la decide asupra modului de structurare n termeni de tabele i -ie? dispozit cmpuri.
Ce se dores -te? Ce este de fa 7 cut?
Ce ntreb|ri ne punem?
Aceast| ntrebare cere proiectantului s| g|seasc| toate prelucr|rile necesare pentru obinerea ieirilor dorite: c|ut|ri, sort|ri i calcule.
De exemplu, Vasile este patronul unei mici firme de calculatoare. El cump|r| produse de la furnizori. Are angajai. Magazinul este structurat pe categorii de produse (pl|ci de baz|, microprocesoare, memorii, discuri, imprimante etc.). Comenzile pentru clieni pot fi pentru unul sau mai multe produse. Firma fiind mic| nu ine marf| pe stoc, produsele fiind cump|rate de la furnizori numai pe baz| de comenzi.
Tabelele sunt formate din coloane (cmpuri), fiecare coninnd o informaie specific| (de exemplu: nume_client, pre) i rnduri (n unele c|ri numite i linii sau nregistr|ri) care colecteaz| toat| informaia particular| despre o persoan|, un loc sau despre ceva n general. Tentaia general| este aceea de a pune toate informaiile care descriu o problem| ntr-un
0264-401667
NU COPIA !.
n aceast| faz|, pe hrtie desen|m figuri geometrice n care scriem denumirile obiectelor ce intervin n naraiunea subiectului de rezolvat, eventual putem ncerca s| schi|m pe hrtie fluxurile de date ntr-o form| foarte sintetic|. Dac| baza de date este proiectat| pentru altcineva, ar|tai aceste desene persoanelor n cauz| pentru ca s| fii convini c| ai neles corect problema de rezolvat.
http://www.east.utcluj.ro/mb/mep/antal
Metoda clasic| i sigur| de proiectare a unei baze de date pentru persoanele f|r| experien| este hrtia i creionul. Timpul petrecut n aceast| faz| se justific| pe m|sur| ce procesul de dezvoltare al bazei de date se aprofundeaz|. Trecerea direct| la lucrul pe calculator va duce de multe ori la greeli de concepie care vor fora reproiectarea bazei pornind de la nceput. Cmpurile 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 cndva. La nceput tim doar ceea ce dorim s| facem i ceea ce avem la dispoziie, apoi trecem la g|sirea c|ilor prin care se obine ceea ce dorim cu ceea ce avem.
47
singur tabel, care ar avea un num|r mare de cmpuri din acest motiv. Un astfel de rnd (linie) este cel prezentat n continuare:
Acest mod de abordare are cteva deficiene: 1. conduce la dubluri de date: de cte ori acelai client face o nou| comand|, numele i adresa lui se vor repeta n baz|. Stocarea aceluiai nume i a aceleiai adrese n mod repetat (redundana datelor) va duce la risip| de spaiu i, n plus, se pot face uor greeli, de exemplu, numele sau adresa clientului pot fi reintroduse eronat din motive de neatenie; 2. nu exist| o metod| de predicie a num|rului de articole pe care le va comanda clientul, din acest motiv suntem tentai s| introducem un num|r mare de cmpuri Nume articol x, Cantitate x, Pret x i din nou apare risipa de spaiu; 3. se stocheaz| n baz| date care se pot calcula uor din celelalte date stocate n baz|, un astfel de cmp este Total. Pentru minimizarea num|rului acestor probleme se realizeaz| o etap| numit| normalizare care const| n organizarea cmpurilor n tabele i definirea relaiilor ntre tabele prin intermediul cmpurilor. Teoria matematic| a normaliz|rii este riguroas| i complicat|, dar testele care se pot aplica pentru a verifica dac| proiectarea bazei s-a f|cut corect sunt simple i se prezint| n continuare sub forma unor reguli.
Unicitatea 7 rilor ntregistra
Unicitatea cmpurilor
Dac| s-a repetat acelai tip de informaie ntr-un tabel, ea trebuie pus| ntr-un alt tabel. Este posibil ca ntr-un tabel s| avem, pe lng| alte cmpuri, cmpurile: Adresa1, Adresa2, Telefon1, Telefon2, Mobil. Se observ| c| tipul de informaie Adresa se repet| de 2 ori iar tipul de informaie Telefon de 3 ori. Aceste cmpuri vor fi separate din tabelul n cauz| i vor fi stocate n tabele diferite. Pentru exemplul prezentat n figura anterioar| astfel de cmpuri sunt Nume articol x, Cantitate x, Pret x. Fiecare cmp dintr-o nregistrare trebuie s| fac| parte din subiectul nregistr|rii. Dac| nu este aa atunci, fie este redundant, fie face parte dintr-un alt tabel.
0264-401667
NU COPIA !.
Fiecare tabel ar trebui s| aib| o cheie primar|. O cheie primar| este un cmp sau o grupare de cmpuri care permite identificarea n mod unic a nregistr|rilor. Cheia primar| se definete de c|tre proiectant i asigur| unicitatea nregistr|rilor. Dac| l|sai Access-ul s| defineasc| cheia primar| el va introduce un cmp num|r|tor (numit Counter Field n Access 95 i AutoNumber de la Access 97 n sus) la nceputul fiec|rei nregistr|ri. Valoarea acestuia se va incrementa automat la introducerea unei nregistr|ri noi n tabel. Dei aceast| metod| garanteaz| unicitatea nregistr|rii, ea nu asigur| neap|rata distincie a dou| nregistr|ri, cu execepia valorii stocate n cmpul num|r|tor.
http://www.east.utcluj.ro/mb/mep/antal
Trebuie s| fie posibil| modificarea oric|rui cmp al unei nregistra 7 ri f|r| afectarea altor cmpuri.
Pentru exemplul anterior, cmpul Total nu trebuie calculat i stocat n baz|, el se poate calcula numai atunci cnd se tip|rete un raport sau se deschide un formular.
Dup| ce se cunosc tabelele bazei de date trebuie s| decidem asupra modului de alc|tuire a relaiilor dintre acestea. Desenul realizat anterior va ajuta n parcurgerea acestei etape. Exist| trei tipuri de relaii: unu-la-unu (one-to-one), unu-la-muli (one-to-many) i mulila-muli (many-to-many). n proiectul final ns|, relaiile muli-la-muli trebuie s| dispar| i s| fie nlocuite prin crearea unui tabel adiional rezultnd dou| tabele unu-la-muli. Analitii de sistem folosesc notaii diferite pentru descrierea relaiilor. n Microsoft Access se folosesc urm|toarele notaii: o linie indic| o relaie ntre dou| tabele; un 1 la cap|tul unei linii marcheaz| partea de unu din relaie; simbolul 4 la cap|tul unei linii marcheaz| partea de muli din relaie.
Determinarea relaiilor
Ar fi util ca, de exemplu, oraul, adresa i telefonul unui client s| fie stocate n cmpuri separate pentru ca s| se poat| realiza analize bazate pe coninutul lor. De exemplu, v| putei ntreba ci clieni din oraul Cluj au cump|rat pl|ci de baz|. Pentru acetia cmpul ora va conine valoarea Cluj. Dac| oraul, adresa i telefonul sunt puse la "gr|mad|" ntr-un singur cmp, analiza pe baza unei poriuni din valorile stocate ntr-un cmp devine dificil|.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
Modalitatea prezentat| pentru proiectarea unei baze de date relaionale a fost laic| avnd intenia 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 relaional| dezvoltat| de Codd, ale c|rei reguli au fost prezentate n cursul 1, se pot identifica urm|toarele categorii de probleme: Tabele, unicitate, chei i domenii; Relaii; Normalizarea datelor; Reguli de integritate.
n modelul relaional, tabelele, sunt o reprezentare a unor entit|i din lumea real|. Fiecare tabel trebuie s| reprezinte o colecie de un singur tip de entitate. Entit|ile pot fi obiecte, procese sau evenimente din lumea real|. De exemplu, un astfel de obiect poate fi un client, o factur|, un produs etc. Dup| Regula nr. 1 toate datele trebuie stocate n tabele, iar dup| Regula nr. 2 tabelul trebuie s| fie constituit din rnduri i coloane unice. Modalitatea de garantare a unicit|ii fiec|rui rnd este cheia primar| (Primary Key) - o coloan| sau un grup
0264-401667
49
S| presupunem c| dorim s| realiz|m o baz| de date prin care s| urm|rim contactele dintr-o firm|:
Cheia primar| devine important| atunci cnd dorim s| o folosim n alte tabele, dup| cum se observ| n figura al|turat|:
Privind datele de mai sus chei candidate ar putea fi: Nume Contact, Telefon1 Contact sau E-mail Contact. O regul| de bun sim este ca cheia s| fie ct mai simpl|, ct mai unic| posibil i s| nu se modifice n timp. Numele unei persoane se poate modifica n caz de c|s|torie sau divor, modific|ri sunt posibile i pentru numerele de telefoane sau adresele de e-mail. n acest caz, Access-ul permite folosirea unui cmp de tipul AutoNumber pe post de cheie primar|. Acest tip de cmp genereaz| o valoare numeric| care se incrementeaz| automat la fiecare ad|ugare a unei nregistr|ri (rnd) noi.
http://www.east.utcluj.ro/mb/mep/antal
de coloane care conin valori unice pentru fiecare rnd din tabel. Access-ul permite setarea unui cmp ca i cheie primar| dac| tabelul este vizualizat n mod proiectare. Toate cmpurile cu valori unice din tabel se numesc chei candidat (candidate keys), dintre acestea va fi aleas| cheia primar|. O cheie simpl| (simple key) este format| dintr-o singur| coloan|, una compus| (composite key) din dou| sau mai multe coloane.
Se observ| c| se poate stoca cheia primar|, IDContact, a unui tabel, TContacte, ntr-un alt tabel, mai sus, TTipContact, pentru a reprezenta nregistrarea n acest tabel nou. Acest cmp introdus forat n noul tabel, se va numi cheie str|in| fiind baza pe care formeaz| relaiile 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| aceeai semnificaie i s| derive din acelai domeniu. Domeniile reprezint| o mulime comun| de valori din care coloanele iau valori.
Relaii
Cnd definii cheile primare i cele str|ine, definii n realitate relaii. Dup| Regula nr. 4 relaiile trebuie s| fie intergrate la nivelul motorului bazei de date. Access-ul poate lucra cu urm|toarele tipuri de relaii: unu la unu (11); unu la muli (1M); muli la muli (MM).
0264-401667
NU COPIA !.
50
Regulile enunate de Codd i prezentate anterior (Unicitatea nregistrarilor, Cmpurile trebuie sa fie dependente functional etc.) ntr-o form| ct mai accesibil| vor fi reluate n continuare sub o form| mai tehnic|. S-a spus c| acest proces de proiectare a bazei de date conform acestor reguli poart| denumirea de normalizare. Codd a enunat ase nivele de normalizare, n continuare se vor prezenta primele trei, acestea fiind cele care afecteaz| esenial deciziile de proiectare a bazei de date: Prima Form| Normal| (1NF); A Doua Form| Normal| (2NF); A Treia Form| Normal| (3NF).
Normalizarea datelor
Relaii muli la muli Dou| tabele au o relaie muli la muli cnd pentru fiecare rnd din primul tabel pot fi mai multe rnduri n al doilea i pentru fiecare rnd n cel de al doilea tabel, pot fi mai multe rnduri n primul tabel. Majoritatea SGBDR nu permit modelarea direct| a relaiilor MM, aa este i Access-ul. Pentru a modela aceast| relaie ntre dou| tabele, este nevoie de un al treilea tabel, numit tabel de leg|tur|.
Relaii unu la muli Este cea mai comun| relaie i apare cnd un tabel are zero, una sau mai multe rnduri corespunz|toare n cel|lalt tabel, dar pentru fiecare nregistrare din cel de al doilea tabel exist| exact un singur rnd n primul tabel. Aceste relaii mai sunt numite i copil-p|rinte.
http://www.east.utcluj.ro/mb/mep/antal
Relaii unu la unu Dou| tabele sunt n relaie unu la unu, dac| pentru fiecare rnd dintr-un tabel, exist| cel mult unul, n cel|lalt tabel al relaiei. n practic| relaiile unu la unu sunt rare, o astfel de relaie se va nate, n general, pentru a ocoli unele neajunsuri ale software-ului SGBDR i ca o necesitate a unei situaii din lumea real|. n Access, o relaie 11, se poate nate din motive de securitate ale unor cmpuri dintr-un tabel sau din cauz| c| num|rul de coloane este limitat la cel mult 255.
NU COPIA !.
Prima Form| Normal| 1NF spune c| toate coloanele unui tabel trebuie s| conin| valori atomice. Adic|, fiecare cmp poate conine numai o valoare de un singur tip, respectiv listele de valori i grupurile de date repetitive sunt interzise. Bazele de date "flat" stocheaz| datele ignornd aceast| regul| motiv pentru care c|utarea n ele poate deveni greoaie uneori.
0264-401667
51
A Doua Form| Normal| Un tabel care este pus n 1NF se zice c| este n 2NF dac| toate cmpurile care nu sunt chei sunt total dependente de cheia primar|. Cu alte cuvinte tabelul trebuie s| stocheze date legate numai de o singur| entitate, iar acea entitate trebuie s| fie complet descris| de cheia ei primar|. Dac| consider|m o cheie primar| compus| din cmpurile: IDContact, IDInfoContact i Info Contact, se observ| c| Nume Contact nu este dependent| de cmpurile IDInfoContact i Info Contact ale cheii primare. Pentru c| este dependent| numai de cmpul IDContact din cheia primar|, tabelul nu este n 2NF. Pentru a-l pune n 2NF, se pune toat| informaia legat| de contact ntr-un tabel nou, TContacte1, i vom stabili o relaie de tipul 1M ntre cele dou| tabele. Cele dou| tabele puse n 2NF sunt prezentate n continuare.
http://www.east.utcluj.ro/mb/mep/antal
A Treia Form| Normal| Cele dou| tabele sunt n 2NF, dar nu i n 3NF. Un tabel este n 3NF dac| este n 2NF i toate cmpurile necheie sunt mutual independente. Un exemplu bun de astfel de dependen| este un cmp calculat. Dependene care nu rezult| n urma calculelor pot, de asemenea, s| existe ntre cmpurile unui tabel. n tabelul TContacte1 se stocheaz| cmpurile IDInfoContact i Tip
0264-401667
NU COPIA !.
52
http://www.east.utcluj.ro/mb/mep/antal
Contact. Observai c| atunci cnd se cunoate valoarea lui IDInfoContact se cunoate automat i valoarea lui Tip Contact, din acest motiv tabelul nu este n 3NF. Pentru a ajunge la 3NF tabelul TContacte1 trebuie spart n dou| tabele, TContacte1 i TTipContact, ntre care din nou va exista o relaie 1M creat| pe baza cmpului IDInfoContact.
Uneori, cnd se realizeaz| vizualizarea datelor dintr-o foaie de date, dorim s| vedem nregistr|rile, din alte tabele, care sunt n relaie cu cele ale tabeului curent. ncepnd cu
0264-401667
NU COPIA !.
53
Cnd se face clic pe semnul + al unui rnd, nregistr|rile asociate din subfoia de date sunt afiate.
http://www.east.utcluj.ro/mb/mep/antal
Access 2000, n modul foaie de date, exist| posibilitatea vizualiz|rii ierahice a datelor. Subfoile de date afiate pot fi selectate manual n momentul proiec|rii tabelului sau pot fi determinate automat n baza relaiilor create ntre tabele. n cazul n care exist| o relaie, ntre tabelul curent i un alt tabel din baza de date, Access va afia o coloan| n stnga foii de date cu un + pentru fiecare rnd.
Subfoaia de date care se afieaz| se definete n modul proiectare al tabelului, fiind o proprietate a tabelului. Pentru afiarea propriet|ilor n mod proiectare selectai din View pe Properties; propietatea care controleaz| afiarea foii de date este Subdatasheet Name. Implicit, aceasta are valoarea Auto caz n care numele subfoii de date afiate se face pe baza relaiilor create n baza de date. n locul lui Auto, dac| se face clic pe proprietate n dreapta apare o s|geat| n jos. Dac| se face clic pe aceasta poate selecta din list| un alt tabel care s| fie afiat la deschiderea subfoii de date. Implicit subfoile de date nu sunt expandate, proprietatea Subdatasheet Expanded avnd valoare No. Dac| aceasta este setat| la Yes, odat| cu deschiderea tabelului n modul foaie de date, vor fi deschise i subfoile de date. Proprietaile Link Child Fields, Link Master Child se folosesc pentru legarea tabelului principal (Master) cu cel al subfoii de date (Child) n vederea afi|rii ei atunci cnd Access nu poate deduce care sunt cmpurile celor dou| tabele pe baza c|rora se face leg|tura ntre ele. Probleme de acest fel apar cnd cmpuri pe baza c|roa Access face automat aceast| leg|tura sunt redenumite.
Reguli de integritate
Modelul relaional definete mai multe reguli, care nu sunt parte a formelor normale, dar sunt
0264-401667
NU COPIA !.
54
necesare n orice baz| de date relaionale. Exist| dou| tipuri de reguli de integritate: generale i specifice bazei de date. Reguli de integritate generale Modelul relaional specific| dou| tipuri integrit|i generale - care se aplic| la toate bazele de date: integritate de entitate i integritate referenial|. Integritatea de entitate spune c| o cheie primar| nu poate conine valori Null (inexistente). Integritatea referenial| spune c| o baz| de date nu are voie s| conin| chei str|ine care nu au o cheie primar| corespondent|. Aceasta implic|: un rnd 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|, rndurile corespunz|toare din tabelul cu cheia str|in| nu trebuie s| r|mn| orfane. Pe baza definiiilor din modelul relaional, trei opiuni sunt disponibile cnd o cheie primar| i schimb| valoarea sau rndul care o conine este ters: Disallow: modificarea este strict interzis|; Cascade: pentru actualiz|ri, modificarea este propagat| n cascad| la toate tabelele dependente. La tergere, rndurile din toate tabelele dependente vor fi terse i ele; Nullify: pentru tergere, cheile str|ine dependente vor primi valoarea Null. Toate aceste opiuni se specific| n Access din fereastra de dialog Relationships, care se selecteaz| din meniul Relationships cu opiune Edit Relationship.... Opiunea devine activ| numai dac| dup| deschiderea ferestrei Relationships se va selecta o relaie prin clic pe linia ce leag| cele dou| chei.
http://www.east.utcluj.ro/mb/mep/antal
Reguli de integritate specifice bazei de date Toate regulile de integritate care nu sunt de entitate sau refereniale se grupeaz| sub termenul specific bazei de date sau specific unei afaceri. Acest tip de regul| este specific| fiec|rei baze de date n parte i vine din regulile procesului care s-a modelat. Aceste reguli sunt la fel de
0264-401667
NU COPIA !.
55
importante ca i cele discutate pn| acum, ele opresc stocarea unor date false n baz|.
Partea dificil| este proiectarea bazei de date, crearea fiind mult mai simpl|. Pentru unele aplicaii standard se poate folosi un Generator pentru a crea toate tabelele dup| care se poate trece la introducerea datelor n noile tabele. Uneori, dei aplicaia este standard dorim s| facem anumite modific|ri. Microsoft-ul a presupus c| toate |rile din lume folosesc aceleai compartiment|ri geografice, aceleai formate pentru telefoane, acelai sistem pentru codurile potale etc.
Indiferent dac| aplicaia se creeaz| f|r| Generator sau cu ajutorul acestuia, trebuie nelese noiunile de tipuri de date, tabel i proprietate de cmp. De asemenea, trebuie st|pnite noiunile de cheie primar| i index. Acestea sunt probabil cele mai dificile aspecte legate de crearea i ntreinerea unei baze de date. din meniul File selectai New Database sau ap|sai Ctrl+N sau efectuai clic pe simbolul grafic New Database din bara de instrumente standard (Standard toolbar).
efectuai clic pe simbolul grafic New din fereastra aplicaiei Access, aceasta va duce la afiarea cutiei de dialog New de forma:
http://www.east.utcluj.ro/mb/mep/antal
selectai simbolul grafic Blank Database din interiorul cutiei General ; efectuai clic dublu pe simbolul Blank Database i cutia de dialog File New Database va fi afiat| sub forma:
0264-401667
NU COPIA !.
56
clic pe unul din butoanele de opiuni n colul din stnga-jos al cutiei de dialog, putei selecta Business sau Personal;
0264-401667
introducei un nume de fiier (File name), iar dac| e cazul, comutai pe un alt director (Folder) pentru stocarea noii baze de date; apoi efectuai clic pe butonul Create, iar ecranul se va modifica ca n figura al|turat|, afind fereastra principal| a noii baze de date Access; numele de curs3, pe care l-am dat bazei de date se observ| n colul strnga sus; n fereastra bazei de date (Database Window) efectuai clic pe butonul Tables; apoi efectuai clic pe butonul New. n cutia de dialog New Table selectai opiunea Table Wizard din list|:
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
57
n figura care urmeaz| am selectat bazele de date cu caracter personal, prin butonul de opiune
selectai cmpul pe care dorii s|-l redenumii din lista Fields in my new database; clic pe butonul Rename Field din cutia de dialog iar pe ecran se afieaz| cutia de dialog:
introducei noul nume n acest cmp apoi ap|sai butonul OK; dup| ce ai ad|ugat toate cmpurile (AddressID - AdreseID, FirstName Prenume, LastName - Nume, SpouseName - Nume sotie, Address Adresa, City - Oras, Postal Code - Cod postal, Country -Tara) efectuai clic pe butonul Next, atunci se va afia urm|toarea pagin| a Generatorului de
0264-401667
NU COPIA !.
Personal, iar din lista afiat|, baza de date Addresses, care, fiind prima, se va selecta automat. Apoi cmpul FirstName a fost ad|ugat. cnd se adaug| un cmp, articolul selectat din lista Sample Fields dispare automat i apare n lista Fields in my new database. Pentru a ad|uga noi articole putei s| efectuai clic dublu pe articolul dorit;
http://www.east.utcluj.ro/mb/mep/antal
selectai un tabel din lista Sample Tables; selectai un cmp pe care dorii s|-l ad|ugai prin clic pe numele cmpului n lista Sample Fields;
58
Dac| ai selectat opiunea implicit| pentru introducerea datelor direct n tabel, ecranul va fi de forma:
0264-401667
NU COPIA !.
n condiii normale vei l|sa Generatorul s| selecteze o cheie primar|, dar dac| dorii putei s| o facei dumneavoastr|; clic pe butonul Next pentru a trece la urm|toarea pagin| a Generatorului; ultima pagin| a Generatorului este afiat|. aici se poate accepta opiunea implicit| pentru trecerea direct la introducrea datelor n tabelul tocmai creat sau exist| opiunea modific|rii proiectului de tabel (table design) sau se pot introduce date n tabel pe baza unui formular pe care Generatorul l va crea automat; dup| selectarea opiunii dorite se apas| butonul Finish.
http://www.east.utcluj.ro/mb/mep/antal
Tabele; n cutia de text (text box) What do you want to name your table? introducei numele sub care se va salva tabelul;
59
Dac| ai fi optat pentru introducerea datelor n tabel prin formularul creat de Generator, ecranul ar fi fost ceva de genul:
http://www.east.utcluj.ro/mb/mep/antal
introducei numele de cmp dorit n celula nc| vid| aflat| imediat sub Field Name;
0264-401667
NU COPIA !.
60
n acest caz tipul selectat este Text. Dac|, de exemplu, n cmp dorii s| stocai valori numerice, tipul selectat ar fi fost Number; ap|sai tasta Tab pentru a trece la celula urm|toare;
Descrierea -iei semnificat cmpului
acesta este un cmp opional al c|rui coninut explic| funcia cmpului n baza de date i care va fi folosit mai trziu n tabelele bazei;
ap|sai tasta Tab i vei putea ad|uga noi cmpuri, tipuri de date i descrieri n tabel; clic pe simbolul grafic Close n colul dreapta sus al ferestrei de proiectare al tabelului iar cnd vedei cutia de dialog care ntreb| dac| dorii s| salvai datele, clic pe butonul Yes;
http://www.east.utcluj.ro/mb/mep/antal
de exemplu, ai putea introduce Nume, apoi ap|sai tasta Tab pentru a trece la urm|toarea celul|; Aceast| celul| se numete Tipul de Dat| (Data Type). Ea permite controlul tipului de dat| care va fi stocat n acest cmp. Clic pe s|geata n jos pentru a afia lista tuturor opiunilor posibile;
introducei numele dorit (Nume si virsta), apoi clic pe butonul OK; Access-ul i va oferi suportul pentru definirea unei chei primare;
0264-401667
NU COPIA !.
61
clic pe butonul Yes pentru a crea o cheie primar|; n acest caz Access-ul va ad|uga un nou cmp n tabel cu numele ID i de tipul AutoNumber care va aciona pe post de identificator unic al unei nregistr|ri din tabel. Acest cmp poate fi folositor, dar este mai normal ca noi s| decidem care cmp sau combinaie va identifica unic o nregistrare din tabel i s| l facem cheie primar| nainte de salvarea tabelului; n acest moment vei vedea tabelul stocat ca un articol din lista Tables al bazei de date (vezi figura urm|toare).
http://www.east.utcluj.ro/mb/mep/antal
Exist| multe tipuri de date. La vizualizarea cmpurilor din baza de date n mod proiectare se pot vedea sub forma unei liste toate tipurile de date disponibile. Text permite stocarea caracterelor alfanumerice sau a oric|ror alte caractere;
Memo
la fel, permite stocarea de caractere alfanumerice, ns| spre deosebire de tipul Text unde lungimea este fixat|, aici lungimea cmpului este variabil| de la o nregistrare la alta. n practic| acest tip de dat| se folosete pentru comentarii, note sau explicaii ale c|ror lungime este nedeterminat|; cmpurile de acest tip pot stoca numai valori numerice care pot fi ntregi sau reale. Diferitele tipuri de numere sunt detaliate n tabelul care urmeaz|:
Number
0264-401667
NU COPIA !.
62
Denumire tip
Byte Integer Long Integer valori reale Single Double
Domeniu de valori
[0, 255] [-32768, 32767]
Precizie n zecimale
Spaiu de stocare
1 octet 2 octei 4 octei 4 octei 8 octei
http://www.east.utcluj.ro/mb/mep/antal
valori ntregi
fa 7 ra 7 fa 7 ra 7 fa 7 ra 7 7 15
Date/Time
tip folosit pentru stocarea de date sau ore. Exist| o varietate de formate ale datei i timpului n care valorile de acest tip pot fi specificate; tip folosit pentru dolari, lire, lei etc.;
Currency
Yes/No
un tip de dat| logic. Se folosete 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 aplicaii i care sunt stocate n cmpurile unui tabel Access. Cnd un cmp legat (linked field) este remprosp|tat din interiorul Access-ului sau al aplicaiei originale, modific|rile sunt valabile n ambele aplicaii, dac| obiectul este numai inclus (embeed) remprosp|tarea se face numai n aplicaia n care s-au f|cut modific|rile;
AutoNumber o valoare numeric| ce pleac| de la 1 i este incrementat| automat pentru fiecare nregistrare nou|. Se folosete deseori ca tip pentru cheile primare;
[-1787x10308, 1787x10308,]
NU COPIA !.
HyperLink
LookUp Wizard
permite crearea unui cmp prin care utilizatorul poate selecta o valoare dintr-un tabel diferit sau dintr-o list| de valori.
Dup| ce ai decis asupra tipului de dat| pentru fiecare cmp, trebuie parcurse i propriet|ile asociate tipului. Num|rul i natura lor este dependent| de tip, iar n unele cazuri, efectund clic n partea din dreapta proprietaii 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 afiarea unei liste de posibilit|i. Field Size Definete lungimea cmpului de text. Pentru un cmp numeric exist| 5 posibilit|i. n partea dreapt| se va afia un mesaj de ajutor cu privire la proprietatea curent|. Pentru cazul n care cmpul va fi asociat (joined) cu unul de tipul contor (AutoNumber) ntr-o relaie de tipul unu-la-muli este obligatorie selectarea tipului Long Integer;
Propriet|ile cmpurilor
0264-401667
63
Format
controleaz| forma de afiare a datelor i numerelor. Exist| un set de formate predefinite care se pot selecta dintr-o list|;
Input Mask asigur| un ablon - o masc| - pentru introducerea datelor. Pentru anumite tipuri de date se poate folosi un Generator de M|ti de Intrare (Input Mask Wizard); Caption text care va fi afiat ca denumire a cmpului n capetele de tabele, etichete de pe formulare sau n antetele de rapoarte; o valoare ce se insereaz| automat n cmp la crearea nregistr|rii; pentru tipurile numerice este setat| automat la 0. Utilizatorul poate introduce oricnd o alt| valoare n locul acesteia;
Default Value
http://www.east.utcluj.ro/mb/mep/antal
Validation Rule
o expresie care controleaz| modul n care noile date sunt introduse n tabel; un text care se afieaz| dac| regula de validare (Validation Rule) a datelor este nc|lcat|;
Validation Text
Required
dac| are valoarea Yes o dat| trebuie obligatoriu introdus| n acest cmp;
Allow Zero Length se aplic| numai pentru cmpurile de tipul Text, Memo i Hyperlink. Permite stocarea valorii de ir cu lungimea zero (zero-length string) n cmp (valoarea se scrie n limbajul de programare al Access-ului ca o secven| de dou| ghilimele""). Aceasta este diferit| de valoarea Null pe care un cmp "o are" dac| nu s-a introdus nimic nc| n el; Indexed ajut| la creterea vitezei n c|ut|ri. Dac| credei c| vei efectua c|ut|ri repetate pe baza unui cmp trebuie s|-l indexai. Valorile sunt Nu (No), Da (Yes -
0264-401667
NU COPIA !.
64
n modul proiectare al tabelului, selectai cmpul pentru care dorii s| definii o masc| de intrare. Din propriet|i selectai Input Mask apoi clic pe butonul cu cele 3 puncte de la cap|tul liniei m|tii de intrare; Clic aici
pentru editarea m|tii afiate de Generatorul M|tilor de Intrare selectai masca dorit| apoi clic pe Edit List. Realizai modific|rile dorite (eventual utiliznd sistemul de ajutor interactiv "on-line help") apoi activai i salvai modific|rile f|cute; clic pe meniul Help al Access-ului; selectai Contents and Index; selectai butonul Index; tastai InputMask Property; clic pe butonul Display.
Cheia primar| identific| unic fiecare nregistrare din tabel i asigur| urm|toarele avantaje: un index este creat automat pentru cheia primar|. Aceasta crete viteza n citirea i sortarea datelor. Deseori cheia primar| este folosit| n stabilirea relaiilor;
0264-401667
selectai formatul dorit apoi clic pe Next, parcurgei intruciunile ecranelor intermediare, iar cnd ajungei la cel final clic pe Finish;
Dup| cum am mai spus asigur| un ablon pentru introducerea datelor. Este posibil ca Generatorul M|tilor de Intrare (Input Mask Wizard) s| nu fie instalat !
http://www.east.utcluj.ro/mb/mep/antal
Duplicates OK) i Da (Yes - No Duplicates). Cheile primare sunt automat indexate i cu proprietatea Indexed setat| pe No Duplicates. Un index este o secvent -a 7 de perechi (cheie, poantor), stocat| ntr-un fiier intern special, n care fiecare poantor poanteaza 7 o nregistrare din baza de date care cont -ine valoarea cheii stocata 7 ntr-un cmp particular. Indexul este sortat pe baza valorilor din 7 utarea rapida 7 a unei valori particulare de cheie (de cheie pentru a permite ca exemplu, folosind algoritmul de ca 7 utarea binara 7 ). Index-ul este folosit "inversat" n sensul ca 7 valoarea cheii este utilizat| pentru ga 7 sirea nregistra 7 rii n loc sa fie invers. Pentru bazele de date n care nregistra 7 rile pot fi sortate pe baza a mai multor cmpuri se pot crea indexuri multiple care snt sortate pe -ine goluri pentru a permite baza valorilor acelor chei. Un index poate cont ada 7 ugarea de noi intra 7 ri pentru sortarea corecta 7 fa 7 ra 7 a realiza deplasarea intra 7 rilor care nu snt n pozit -ia corecta 7 . Fereastra de indexuri se poate vizualiza, individual, pentru fiecare tabel n modul proiectare din View, Indexes.
NU COPIA !.
65
vizualiznd Tabelul n mod proiectare (Table Design View), selectai cmpul care va fi f|cut cheie primar|. Efectuai fie clic undeva pe cmp fie pe selectorul din stnga numelui de cmp; selectai Primary Key din meniul Edit sau clic pe simbolul grafic Primary Key din bara de instrumente
standard.
Setarea mai multor cmpuri ca -i Cheie Primara s
vizualiznd Tabelul n mod proiectare (Table Design View), selectai primul cmp prin selectorul din stnga lui. inei ap|sat| tasta Ctrl i clic pe fiecare selector al cmpurilor dorite; selectai Primary Key din meniul Edit sau clic pe pictograma Primary Key din bara de instrumente
standard.
selectai Save din meniul File; dac| salvai tabelul pentru prima oar|, tastai un nume n cutia Table Name, apoi ap|sai Enter i clic pe OK. Access-ul d| automat un nume tabelului la prima lui salvare. Deoarece acest nume nu descrie semnificativ tabelul, el trebuie ntotdeauna schimbat ntr-unul mai sugestiv.
Dac| nc| tabelul nu este salvat, Access va ntreba dac| dorii s|-l salvai. Toate foile de date i formularele au o ultim| nregistrare vid| indicat| de un asterisc (*) pe coloana selectorului de nregistr|ri (n stnga primului cmp). n cazul unui tabel nou aceasta este singura nregistrare. poziionai cursorul n primul cmp al nregistr|rii vide; introducei o valoare apoi ap|sai Tab pentru trecerea la cmpul urm|tor, repetai procedura
pentru toate cmpurile; cnd ai ajuns la ultimul cmp, ap|sarea tastei Tab mut| cursorul pe primul cmp al unei noi nregistr|ri vide. Access va
0264-401667
NU COPIA !.
Dup| ce ai terminat etapa de proiectare a tabelului se pot ad|uga nregistr|ri n acesta prin comutarea pe vizualizarea n modul foaie de date (Datasheet View).
http://www.east.utcluj.ro/mb/mep/antal
nregistr|rile ntr-un formular sau foaie de date (Datasheet) sunt afiate n ordinea valorilor cheii primare; nu este posibil| dublarea unor nregistr|ri fiind garantat| unicitatea lor. O cheie primar| se formeaz| din unul sau mai multe cmpuri.
66
salva nregistrarea curent| numai la deplasarea pe urm|toarea nregistrare, care acum este din nou una vid|.
Utilizarea formatelor
Proprietatea Format, dupa 7 cum am mai spus, permite afis - area datelor sub o forma 7 diferita 7 de secvent -a originala 7 de caractere folosita 7 la introducerea datelor. Formatele variaza 7 n funct -ie de tipurile de date folosite. Unele tipuri de date au formate predefinite, altele, nu au si trebuie definite de utilizator, iar n unele cazuri sunt posibile ambele situat -ii. Formatele nu act -ioneaza 7 asupra modului de stocare a datelor n tabele ci influent -eaza 7 numai modul de afis - are al lor.
Simbolurile din tabelul urma 7 tor sunt folosite de Access pentru la formatarea datelor stocate n cpuri de tipurile Text s - i Memo. Simbol @ & < >
-ie Semnificat
Fort -eaza 7 afis - area tuturor caracterelor cu litere mici. Fort -eaza 7 afis - area tuturor caracterelor cu litere mari.
Pentru tipurile Number s - i Currency exista 7 mai multe formate predefinite si o mult -ime de simboluri care pot fi folosite pentru crearea unor formate definite de utilizator. Tabelul care urmeaza 7 prezinta 7 cteva dintre formatele predefinite: Tip format
7 r introdus Numa
Numa 7 r afis - at
General Currency
123456.789 123456.789
123456.7 $123,456.78
######.# $###,##0.00
0264-401667
NU COPIA !.
Simbolurile @, & act -ioneaza 7 la nivel de caracter, n timp ce simbolurile <, > act -ioneaza 7 asupra ntregului s - ir de caractere ale cmpului. Daca 7 vret -i sa 7 fit -i siguri ca 7 un nume va fi ntotdeauna afis - at cu majuscule introducet -i n proprietatea Format simbolul >. Daca 7 dorit -i sa 7 stocat -i un numa 7 r de telefon, folosind un cmp de tipul Text, fa 7 ra 7 sa 7 introducet -i liniut -e pentru gruparea cifrelor din numa 7 r, n proprietatea Format vet -i scrie @@-@@-@@. Daca 7 de la 7 vet -i introduce 123456, cnd va 7 pozit -ionat -i pe o alta 7 nregistrare, valoarea se va afis -a taststura sub forma 12-34-56. O problema 7 ar putea fi numerele de telefoane care nu au fost introduse n 7 sect -iuni separate prin ;. Prima se foloses - te baza de date. Proprietatea Format poate avea doua pentru formatarea cmpului cnd acesta cont -ine text, a doua este formatul n cazul n care nu s-a introdus o valoare n cmp (lipsa valorii se poate reprezenta printr-un sir de lungime zero sau printr-o valoarea speciala 7 null). Daca 7 pentru proprietatea Format folosim pe @@-@@-@@[Blue];"neintrodus"[Red], atunci cnd introducem o valoare un cmp ea va fi - ata 7 cu liniut -e n culoarea albastra 7 , iar daca 7 valoarea lipses - te se va scrie n locul ei afis neintrodus n ros - u.
http://www.east.utcluj.ro/mb/mep/antal
67
123456.78
78.9%
1.22%+05
Toate formatele de mai sus sunt implicite si bazate pe setarea proprieta 7tii Decimal place pe Auto.
-iuni: (1) pentru valori pozitive; (2) Formatele numerice personalizate pot avea patru sect pentru valori negative; (3) pentru valori zero; (4) pentru valori nespecificate. De asemenea, se poate specifica o culoare care sa 7 ajute la observarea unori valori critice. Daca 7 scriem un formatul #.##0.00[Green]; (-3,330.00)[Red];"zero";"neintrodus", valorile pozitive se vor afis -a n verde, cele negative n ros - u, cele 0 se vor afis - a ca si zero, iar cele nespecificate ca si neintrodus. Cteva dintre simbolurile care pot fi utilizate ntr-un cmp personalizat sunt: punctul (.), virgula (,), 0 (cifra 7 care va fi afis - ata 7 ca si 0 ntotdeauna, daca 7 nu cumva are o alta 7 valoare), $ (pentru afis - area semnului $), % (pentru afis - area semnului %).
Posibilit|ile de formatare ale tipurilor Date/Time sunt cele mai multe existnd apte opiuni predefinite: ! General Date: (Implicit) Valoarea afiat| depinde de cea introdus|; introducerea numai a unei date duce la afiarea numai a datei, la fel i n cazul unei ore; formatul standard pentru dat| i timp este: 2/17/01 10:19 PM; ! Long Date: Afiarea se face conform set|rilor din Windows Regional Settings, Seciunea Long Date; un exemplu ar fi: Wednesday, February 10, 2001; ! Mediu Date: 17-Feb-01; ! Short date: Conform set|rilor din Windows Regional Settings, Seciunea Short Date; 2/17/01; ! Long Time: Conform set|rilor din Windows Regional Settings, Seciunea Time; 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 de utilizator, cteva dintre acestea fiind: : separator de timp (luat din Windows Regional Settings, Seciunea 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|mnii (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|mn| (1-7); ww s|pt|mna din an (1-53); m, mm luna anului - una sau dou| cifre (1-12);
http://www.east.utcluj.ro/mb/mep/antal
123,456.78
0264-401667
NU COPIA !.
68
Access stocheaz| datele de tipul Yes/No ntr-un fel mai puin ateptat. Valoarea Yes este stocat| ca i -1, iar cea No ca i 0. n lipsa unor set|ri de formatare acestea sunt valorile care trebuie introduse i afiate. Cu ajutorul formatelor valorile de tipul Yes/No pot fi aduse la o form| mai uor de recunoscut i de manipulat. Cele trei formate predefinite sunt: ! Yes/No: (Implicit) afieaz| -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.
Masca de intrare permite creterea controlului cu privire la caracterele introduse ntr-un cmp. Ea permite definirea unui ablon care va fi folosit pentru introducerea datelor n cmp. ablonul va fi afiat pe ecran nainte ca utilizatorul s| introduc| datele n cmp. Coninutul ablonului nu se salveaz| n baza de date mpreun| cu datele introduse. De exemplu, dac| s-a definit o proprietate masc| de intrare de forma 999-(9)99-000.000 parantezele rotunde i linia se afieaz| pe poziiile corespunz|toare la introducerea datelor, iar caracterul underscore,
0264-401667
NU COPIA !.
Formatele definite de utilizator n cazul tipului Yes/No pot conine pn| la trei seciuni. Prima nu are efect asupra datelor i trebuie s| fie obligatoriu caracterul ;. Cea de a doua se folosete pentru afiarea valorii On sau True (stocat| n baz| ca i -1). Seciunea a treia se folsete pentru specificarea afi|rii lui Off sau False (stocat| n baz| ca i 0). De exemplu, dac| dorin s| afiam Da n verde i Nu n rou vom folosi formatul definit astfel: ;"Da"[Green]; "Nu"[Red]. Exist| cteva probleme n acest caz cu afiarea datelor pe baza formatului definit mai sus. n primul rnd, dac| se definete un format, pentru acest tip, de c|tre utilizator trebuie modificat| i proprietatea Display Control din Lookup de la Check Box la Text Box pentru a vedea datele conform noului format. n al doilea rnd, dei datele vor fi afiate conform formatului, atunci cnd datele vor fi introduse de la tastatur| trebuie folosite valorile 1 i 0.
Dei utilizatorul poate specifica i alte formate pentru tipurile Date/Time, acestea vor fi afiate pe baza set|rilor din fereastra de dialog Regional Setting Properties din Windows Control Panel. Alte caractere pot fi ad|ugat formatelor, dar acestea trebuie incluse ntre ghilimele, de exemplu, formatul mmm dd","yyyy va afia, February 07, 2001 dac| se introduce data 02/07/01.
http://www.east.utcluj.ro/mb/mep/antal
mmm mmmm q y yy yyyy h, hh n, nn s, ss ttttt AM/PM sau A/P am/pm sau a/p AMPM
primele trei caractere ale lunii (Jan-dec); numele complet al lunii (January-December); data afiat| din 4 trimestre (1-4); num|rul zilei din an (1-365); ultimele dou| cifre ale anului (01-99); anul complet (0100-9999); ora - una sau dou| cifre (0-23); minutul - una sau dou| cifre (0-59); secunda - una sau dou| cifre (0-59); la fel cu Long Time; ora se afieaz| cu 12 ore urmat| de AM/PM; ora se afieaz| cu 12 ore urmat| de am/pm; ora se afieaz| cu 12 ore urmat| de specificaiile din Windows Regional Settings, Seciunea forenoon/afternoon.
69
Caracter
Efect
Cifr| ntre 0 i 9 obligatoriu de introdus; nu se pot folosi semnele - i + Cifr| sau spaiu opional|; nu se pot folosi semnele - i +
Cifr| sau spaiu opional|; caracterele neintroduse sunt comverite n spaii; se pot folosi semnele - i +
NU COPIA !.
Afieaz| caracterul care urmeaz| f|r| a-l interpreta, ci doar ca i un caracter obinuit specificator de poziie, separator de mii, dat| i timp determinai de set|rile din seciunea Regional Setting a lui Control Panel
.,:;-/
Validarea datelor const| n limitarea valorilor care pot fi introduse de la tastatur| ntr-un cmp. Ea poate fi automat|, de exemplu, se poate verifica dac| ntr-un cmp numeric a fost introdus un text sau dac| data introdus| este valid| sau poate fi definit| de utilizator pe baza unei expresii care se evalueaz| pentru fiecare dat| nou| care se introduce n cmp. Expresia care este testat| pentru acceptarea valorii introduse se scrie n Validation Rule, iar mesajul de eroare care va fi afiat dac| regula de validare este nc|lcat| se scrie n Validation Text. De exemplu, dac| tipul cmpului este Date/Time i dorim ca data care se introduce s| fie n domeniul 1/1/1998 i 1/1/2000, regula de validare va fi scris| sub forma between #1/1/98#
Validarea datelor
0264-401667
Foreaz| completarea m|tii de intrare de la dreapta la stnga cnd caracterele din partea stng| sunt opionale; implicit completarea se face de la stnga la dreapta
http://www.east.utcluj.ro/mb/mep/antal
adic| _, va fi afiat n locul fiec|rui 9 sau 0. Access va ad|uga automat cte un caracter \ n faa specificatorilor de poziie (placeholders ) irul format devenind 999"-("9\)99\-000.000. Masca de intrare poate conine cel mult trei seciuni separate prin caracterul ;. Prima definiete masca n sine. Cea de a doua spune lui Access dac| s| stocheze (dac| ia valoarea 0) sau nu (dac| ia valoarea 1 sau este vid) i masca mpreun| cu datele n baza de date. Cea de a treia seciune specific| caracterul pe care Access l folosete pentru afiarea spaiilor n masca de intrare. Implicit, acesta este caracterul underscore. Dac| dorii s| folosii spaiul acesta trebuie curpins ntre ghilimele. Cteva dintre caracterele care se pot folosi n masca de intrare sunt descrise n continuare:
70
n expresia care se scrie pentru a testa valoarea introdusa 7 poate sa 7 participe s - i numele cmpului care se testeaza 7 , simplu, sau ca s - i paramtru al unei funct -ii, dar nu pot sa 7 participe nume ale altor cmpuri din tabel. De exemplu, n cazul unui cmp de tipul Date/Time, cu numele DataNast, este corect sa 7 scrie o expresie pentru validare de forma Year([DataNast]) < 1977. Aceasta va permite introducerea unor date de nas - tere care au anul mai mic dect 1977.
http://www.east.utcluj.ro/mb/mep/antal
and #1/1/00#. Dac| se dorete limitarea datei la cea crent| se va scrie expresia <Date( ). Dac| avem un cmp numeric, un exemplu de regul| de validare ar fi <100, caz n care vor fi acceptate numai valori numerice mai mici ca 100. Expresia de validare poate conine orice funcii scrise de noi sau dintre cele ale limbajului VBA. De exemplu, dac| avem un cmp cu numele Sex de tipul Text n care dorim s| stoc|m sexul folosind iniialele: B - b|rb|tesc, F femeiesc, N - nespecificat, regula de validare va fi InStr("BFN",[Sex])>0
0264-401667
NU COPIA !.
71
Obiectivele cursului 4
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
cum se selecteaz| (Select) nregistr|rile dintr-un tabel; cum se selecteaz| o nregistrare folosind selectorul de nregistr|ri (Record 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 coninutul unui cmp;
Selector);
cum se nlocuiete (Replace) coninutul unui cmp; cum se vizualizeaz| i selecteaz| opiunile unei foi de date (Datashheet); cum se redefinete ordinea coloanelor n tabele; cum se nghea| (Freeze) coloanele; cum se ascunde (Hide) sau se vizualizeaz| (Un-hide) o coloan|; cum se mut| (Move) sau copiaz| (Copy) cmpurile sau nregistr|rile; cum se previzualizeaz| (Preview) o foaie de date.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
72
Majoritatea operaiilor de editare necesit| selectarea datelor n prealabil. Pentru a nlocui ntreg coninutul unui cmp, acesta trebuie selectat, apoi se introduce de la tastatur| noul coninut. Poriunea gri din stnga fiec|rei nregistr|ri, ntr-o foaie de date, se numete selector de nregistrare (record selector). Urm|toarele simboluri specific| starea unei nregistr|ri: nregistrarea curent|; nregistrarea este selectat|; nregistrarea se editeaz|;
http://www.east.utcluj.ro/mb/mep/antal
Exist| o varietate mare de posibilit|i de editare a nregistr|rilor att pentru formulare (Form) ct i pentru foi de date (Datasheet).
Editarea nregistr|rilor
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 intersecia dintre selectorii de nregistr|ri i coloane;
clic pe selectorul primei nregistr|ri, se ine ap|sat butonul stng al mouse-ului i se deplaseaz| cursorul pn| pe ultima
0264-401667
NU COPIA !.
73
ap|sai Ctrl+A sau din meniul Edit (Alt+E) selectai Select All Records (A).
clic la un cap|t al cmpului i cu butonul stng al mouse-ului ap|sat se deplaseaz| cursorul pn| pe cel|lat cap|t; deplasarea mouse-ului cu butonul ap|sat va fi numit| n continuare tragere (dragging). se plaseaz| mouse-ul la nceputul cmpului. Cursorul i va modifica forma ntr-un semn plus "+"; clic pe butonul stng al mouse-ului. se va selecta un prim cmp cu ajutorul mouse-ului; innd tasta Shift ap|sat| ne folosim de tastele pentru deplasarea cursorului (6, 7, 8, 9) pentru a selecta cmpuri n sensul indicat de respectivele taste.
http://www.east.utcluj.ro/mb/mep/antal
poziionai-v| folosind tastele 6, 7 pe nregistrarea dorit|; selectai din meniul Edit (Alt+E); selectai Select Record (L).
cursorului se va schimba ntr-o s|geat| neagr| care arat| n jos; clic pe butonul din stnga.
clic pe selectorul de coloan| apoi cursorul se trage peste selectorii coloanelor adiacente sau clic pe selectorul de coloan| i innd ap|sat| tasta Shift, clic pe ultima coloan| care va fi selectat|.
0264-401667
NU COPIA !.
74
ap|sai F2.
selecteaz| un cmp cu F2; inei ap|sat| tasta Shift; ap|sarea uneia dintre cel 4 taste "cu s|gei" va produce selectarea cmpului adiacent aflat n sensul s|geii.
La crearea unui tabel dimensiunile coloanelor i liniilor corespund unor set|ri implicite. De
0264-401667
NU COPIA !.
selectai nregistrarea; ap|sai tasta Delete; dac| dorii efectuarea tergerii clic pe butonul Yes, pentru anularea tergerii lansate clic pe No.
http://www.east.utcluj.ro/mb/mep/antal
ap|sai tasta Tab pentru a selecta cmpul din dreapta sau Shift+Tab pentru a selecta cmpul din stnga celui curent.
75
Uneori este de dorit modificarea ordinii n care Access-ul afieaz| coloanele unui tabel.
selectai coloana i eliberai butonul stng al mouse-ului; clic pe selectorul de cmp i tragei coloana pe noua poziie. Pe m|sur| ce deplasai coloana, o bar| mai groas| vertical| indic| poziia curent| a coloanei care este n curs de mutare; eliberai butonul stng al mouse-ului.
Avnd dat un tabel uneori se dorete reordonarea modului n care cmpurile sunt aranjate. comutai pe vizualizarea n mod proiectare (Design View) i Pentru a reordona i cmpul care dorii s| fie repoziionat prin clic pe selectorul de selecta cmpurile din cmp (butonul din stnga numelui de cmp); tabel tragei i l|sai cmpul pe noua lui poziie; o bar| orizontal| groas| va ar|ta poziia curent| a cmpului care se mut|;
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
clic pe meniul Tools, selectai Options apoi Datasheet i urm|toarea fereastr| de dialog va fi afiat|: modificai oricare dintre aceste opiuni implicite apoi
NU COPIA !.
76
cnd eliberai butonul stng al mouse-ului, cmpul se g|sete n noua lui poziie; salvai tabelul pentru a face modific|rile permanente.
clic dublu pe butonul din stnga mouse-ului i automat l|imea coloanei se va modifica astfel nct toate datele din ea s| fie complet selectai coloanele; clic pe butonul din dreapta al mouse-ului avnd cursorul de
vizibile
mouse poziionat pe oricare din cmpurile selectate i selectai Column Width; pe ecran apare fereastra de dialog: clic pe Best Fit.
plasai cursorul de mouse peste linia de separaie dintre doi selectori de rnd; tragei linia pe noua poziie, n|limile tuturor rndurilor se vor modifica automat la cea specificat| sau
0264-401667
NU COPIA !.
plasai cursorul mouse-ului pe linia din dreapta numelui cmpului; cursorul va lua forma unei bare verticale scurte intersectat| de o s|geat| cu dou| capete; tragei marginea coloanei, n stnga sau dreapta, la dimensiunea pe care o dorii.
selectai coloanele; tragei marginea coloanei celei mai din dreapta n noua poziie sau clic pe butonul din drepta al mouse-ului, selectai Column Width din lista ap|rut| i introducei noua l|ime.
http://www.east.utcluj.ro/mb/mep/antal
77
clic pe butonul drept al mouse-ului, selectai Row Height din lista ap|rut| i apoi introducei noua n|lime pentru toate rndurile.
Este posibil| ascunderea unor coloane din tabel n cazul n care acestea nu prezint| interes pentru o anumit| vizualizare particular| de date ale foii de date.
Pentru ascunderea unei coloane
clic pe Format din meniul aplicaiei Access selectai UnHide Columns i urm|toarea fereastr| de dialog va ap|rea pe ecran: n fereastra de mai sus cmpul cu numele Category Name este ascuns. Pentru a deveni din nou vizibil activai cutia de selectare (check box) din dreapta numelui cmpului apoi clic pe Close.
selectai coloana sau coloanele; selectai Freeze Columns din Format sau clic pe butonul drept al mouse-ului ntr-o coloan| i selectai Freeze Column. selectai Unfreeze All Columns din Format.
n mod frecvent tabelele au un num|r mai mare de cmpuri dect cele care se pot afia pe ecran. n acest caz cmpurile din stnga se pierd din vedere la deplasarea spre dreapta prin cmpurile tabelului. nghearea coloanelor cauzeaz| p|strarea pe ecran ale acestora n timp ce ne deplas|m prin celelalte coloane de tabel.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
78
Efectele format|rii cuprind liniile pentru delimitarea celulelor (grid lines) pe vertical| i pe orizontal|, culoarea lor i a fondului pe care se scrie, efecte de prezentare ale celulelor de
tipul: plat (Flat), ieit (Raisen) i ngropat (Sunken), stilul de caractere folosit la afiarea datelor. din Format selectai Cell. Pe ecran se va afia fereastra de dialog Cell Effects; n seciunea Gridlines Shown a cutiei de dialog selectai, pentru afiare sau deselectai, pentru ascunderea liniilor, pe Horizontal sau Vertical. n seciunea Gridline Color clic pe s|geata n jos i selectai din list| culoarea dorit|.
n seciunea Cell Effect a cutie de dialog Cell Effects selectai unul din cuvintele Flat, Raisen sau Sunken.
n seciunea Background Color clic pe s|geata n jos apoi selectai din list| culoarea dorit|.
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
79
foii de date
Deja trebuie s| fii familiarizai cu procedura selecteaz| apoi manipuleaz|. Datele care se doresc 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 destinaie. La fel ca n cazurile anterioare, att tastatura ct i mouse-ul pot fi folosite n acest scop. Denumire n romn| T|iere Din meniu Edit Din Toolbar De la tastatur| Ctrl+X Aciune
Cut
Copiere
Copy
Ctrl+C
Inserare
Paste
Ctrl+V
selectai datele care urmeaz| a fi copiate sau mutate; selectai Copy din meniul Edit sau clic pe simbolul grafic Copy din Toolbar sau ap|sai Ctrl+C. selectai datele care vor fi mutate; selectai Cut din Edit sau clic pe simbolul grafic Cut din Toolbar sau ap|sai Ctrl+X.
Pentru a ta 7 ia date din cmp n Clipboard Pentru a insera -inutul din cont Clipboard ntr-un cmp
clic n cmpul destinaie unde dorii ca datele s| fie inserate; selectai Paste din meniul Edit sau clic pe simbolul grafic Paste din Toolbar sau
0264-401667
NU COPIA !.
La copierea sau mutarea ntregistr|rilor ntr-o foaie de date, Access-ul insereaz| datele n noile cmpuri n ordinea de apariie a coloanelor n foaia de date f|r| a ine cont de numele cmpurilor. n cazul formularelor, pentru aceleai operaii, Access-ul va ine cont de numele de cmpuri ordinea de aranjare a cmpurilor fiind nesemnificativ|.
http://www.east.utcluj.ro/mb/mep/antal
din Format selectai Fonts, fereastra de dialog cu numele Fonts se va afia; selectai tipul (Font), stilul (Font style), m|rimea (Size) Pentru modificarea caracterelor dorite din listele corespunz|toare; tipului de ap|sai butonul OK. caractere (Fonts) a
Copiaz| datele selectate n Clipboard. Insereaz| datele din Clipboard n noua zon| selectat| ncepnd din poziia curent| a cursorului.
80
Operaiile de editare descrise pn| acum se pot aplica i pentru obiectele bazei de date. Fie lista obiectelor de tipul tabel selectat| (procedurile care urmeaz| se pot aplica pentru toate
obiectele bazei de date dei vor fi exemplificate, pentru nceput, folosind obiecte de tipul tabel).
Pentru a copia un tabel
Toate obiectele bazei (Tabele, Formulare, Interog|ri, Rapoarte, Macrouri, Module) de date pot fi copiate, redenumite sau terse. selectai obiectul care va fi redenumit; selectai Rename din Edit; introducei un nou nume pentru obiect (acesta se scrie peste numele celui existent); ap|sai tasta Enter.
0264-401667
NU COPIA !.
selectai tabelul care va fi copiat; selectai Copy din meniul Edit sau clic pe simbolul grafic Copy din Toolbar; selectai Paste din meniul Edit sau clic pe simbolul grafic Paste din Toolbar; n fereastra de dialog introducei numele noului tabel; selectai una din opiunile de inserare. Structure Only pentru a prelua numai structura tabelului f|r| date, Structure and Data pentru a prelua structura i datele din tabelul original, Append Data to Existing Table pentru a ad|uga datele unui tabel deja existent.
http://www.east.utcluj.ro/mb/mep/antal
ap|sai Ctrl+V. Este posibil| copierea coninutului a mai multor cmpuri sau coloane prin Clipboard aplicnd aceleai operaii care au fost descrise deja; ceea ce difer| este numai selecia.
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 definiiilor de obiecte. Cele care urmeaz| presupun c| obiectul n cauz| este fie deschis, fie este selectat din fereastra bazei de date (Database Window).
Vizualizarea unui formular sau foi de date
7 : Dac| ncercai tergerea unui tabel care particip| ntr-o relaie cu alte tabele, Access-ul Nota va afia un mesaj de eroare iar ergerea nu se va realiza.
Tip|rirea (Printing)
selectai Print Preview din meniul File sau clic pe simbolul grafic Print Preview din Toolbar.
paginile urm|toare.
Pentru a vedea o -iune marita 7a sect foii de date
Prima pagin| a foii de date sau a formularului se va afia pe ecran. Folosii butoanele de navigaie din colul stnga jos pentru a trece la
Not|: Se poate folosi butonul Zoom din bara de instrumente Zoom pentru a m|ri sau micora zone din ecran. dac| se dorete tip|rire parial|, selectai nregistr|rile
0264-401667
NU COPIA !.
deschidei foaia de date din Print Preview; poziionai cursorul de mouse pe suprafaa foii de date. Acesta va lua forma unei lupe; clic pe butonul stng al mouse-ului. Access-ul va m|ri zona selectat|; clic pe butonul mouse-ului pentru a vedea din nou ntreaga pagin|.
http://www.east.utcluj.ro/mb/mep/antal
selectai obiectul care va fi ters; selectai Delete din meniul Edit. Fereastra de dialog care apare pe ecran se prezint| n continuare: clic pe Yes pentru a terge obiectul sau pe No pentru abandonarea tergerii.
82
http://www.east.utcluj.ro/mb/mep/antal
selectai Print din meniul File sau clic pe simbolul grafic Print, acesta va afia fereastra de dialog Print: selectai domeniul paginilor (Print Range) i num|rul de copii (Copies). Dac| dorii s| tip|rii numai anumite pagini consecutive selectai Pages From i introducei num|rul primei i ultimei pagini ale domeniului; clic pe OK.
0264-401667
NU COPIA !.
83
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
Obiectivele cursului 5
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
cum se ncepe o c|utare; cum se g|sete o valoare specific|; cum se nlocuiete o valoare specific|;
cum se sorteaz| nregistr|rile prin formulare; cum se terge filtrul; cum se deschide fereastra relaiilor;
cum se filtreaz| nregistr|rile unui tabel vizualizat ca foaie de date; nelege conceptele care stau n spatele relaiilor (Relationships); cum se adaug| tabele n fereastra relaiilor; cum se creeaz| o relaie ntre dou| tabele;
ce este conceptul de Integritate Referenial| (Referential Integrity); cum se vizualizeaz| toate relaiile din baz|; cum se vizualizeaz| o relaie particular|; cum se terg relaiile;
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
84
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
clic n cmpul pe baza c|ruia dorii s| facei c|utarea; selectai 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 cmpului';
introducei valoarea pe care dorii s| o g|sii n cutia cu numele Find What:. Exist| un num|r de opiuni care se pot folosi pentru a rafina c|utarea dup| cum urmeaz|:
http://www.east.utcluj.ro/mb/mep/antal
G|sirea informaiilor ntr-un tabel mic nu este o problem|, dar ce facem cnd tabelul vizualizat n mod foaie de date trece cu mult de dimensiunea ecranului. Access-ul are cteva instrumente care simplific| aceast| sarcin|. Dou| dintre acestea sunt Caut| (Find) i nlocuiete (Replace). n cursurile care urmeaz| vei avea o metod| mult mai puternic| de c|utare i nlocuire a datelor numit| interogare (query). Dac| operaia pe care dorii s| o realizai se repet| i este complicat|, probabil vei dori s| scriei o interogare. G|sirea informaiilor este mai rapid| dac| cmpul pe baza c|ruia se caut| este cheia primar| sau are un index. Se poate folosi meniul Edit, bara cu instrumente sau tastele "scurt|tur|" pentru g|sirea informaiilor. nainte de aceasta trebuie s| facei clic n cmpul pe baza c|ruia dorii s| facei c|utarea.
C|utarea
NU COPIA !.
Semnificaie
Implicit este selectat| Match Whole Field, adic| ntregul coninut al cmpului trebuie s| fie identic cu valoarea pentru a fi g|sit. Celelalte opiuni sunt: Any Part of Field - orice parte din cmp i Start of Field - nceputul cmpului.
Search
Permite selectarea sensului de c|utare n raport cu poziia curent| a cursorului: Up - n sus, Down - n jos, All - peste tot. Dac| este activat| se ine cont de literele mari i mici.
Match Case
Se va selecta dac| dorii s| c|utai informaia dup| cum este formatat| i nu dup| cum este stocat| n tabel.
Dac| nu suntei siguri de cmpul n care se afl| informaia sau dac| valoarea poate s| apar| n mai multe cmpuri inactivai aceast| opiune.
0264-401667
85
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
Scriere ?
Orice caracter aflat pe aceeai poziie cu ?. De exemplu, pentru ma?a se va g|si: mama, mana
Asterisc
Orice grup de caractere pe aceeai poziie cu *. De exemplu, pentru m*a se va g|si: mama, mana, maneta, mecanica etc. Se folosete pentru o singur| cifr| de pe aceeai poziie
Hash
Paranteze drepte
[]
Cuprind unul sau mai multe caractere cnd dorim ca n c|utare s|-l includem pe unul dintre acestea. De exemplu, pentru I[oa]n se va g|si Ion, Ian Se folosete pentru specificarea unui domeniu de caractere, domeniul trebuie specificat n ordinea cresc|toare De exemplu, pentru I[a-o]n se va g|si Ian, Ien, ..., Ion.
Minus
De exemplu, pentru I[!oa]n se vor g|si Ien etc. dar nu se vor g|si Ion, Ian
Caracterele generice sunt f|cute pentru lucrul cu cmpuri de tipul Text, uneori pot fi folosite cu succes i pentru c|utarea n cmpuri de tip Date dar asta numai dac| nu ai f|cut modific|ri n set|rile de regiune (Reginal Settings) pentru tipul respectiv.
Nota 7 : la ad|ugarea unei nregistr|ri ntr-un tabel, dac| ntr-un cmp nu s-a introdus nimic, Access-ul va stoca valoarea null n cmp. Dac| s-a introdus un spaiu sau "", Access-ul consider| data introdus| un ir de lungime zero. Dac| dorii g|sirea unei valori null introducei textul Null, dac| dorii g|sirea unui ir de lungime zero introducei "".
0264-401667
NU COPIA !.
Semn de exclamare
De exemplu, 19#7 corespunde numerelor ntregi 1907, 1917, 1927, 1937, ... 1997.
http://www.east.utcluj.ro/mb/mep/antal
Dac| nu suntei siguri asupra tuturor caracterelor din valoarea pe care dorii s| o c|utai - ceea ce introducei n cutia Find What - putei folosi n locul acestora caractere generice dup| cum urmeaz|: Semnificaie
86
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
Dac| valoarea exist| Access-ul o va g|si i se va poziiona pe prima apariie a ei afind-o distinct. clic pe butonul Replace;
Dac| nregistrarea nu este cea dorit|, clic pe Find Next pentru a g|si urm|toarea apariie. clic pe Close pentru a nchide fereastra de dialog "Replace in field: ...:". clic n cmpul pentru care se face c|utarea; selectai Replace din meniul Edit sau ap|sai Ctrl+H; n cutia Find What tastai textul care va fi nlocuit; n cutia Replace With tastai noul text; clic pe butonul Replace All.
0264-401667
NU COPIA !.
n cutia Find What tastai valoarea care se va nlocui, mai sus Metasoft; n cutia Replace With introducei noua valoare, mai sus Metasoft SRL; modificai opiunile dup| cum este cazul apoi clic pe butonul Find Next;
Ga 7 sirea 7 toarei aparit -ii urma -i valoare de aceeas dupa nchiderea cutiei de dialog
clic pe Find Next pentru a g|si urm|toarea apariie cu aceeai valoare sau clic pe Close pentru a termina c|utarea; ap|sai Shift+F4 sau clic pe pictograma Find Next (dac| este disponibil) din bara de instrumente standard.
clic pe cmpul pentru care se face c|utarea; selectai Replace din meniul Edit sau ap|sai Ctrl+H, pe ecran apare fereastra de dialog:
http://www.east.utcluj.ro/mb/mep/antal
Access-ul se mut| pe prima nregistrare al c|rei cmp are valoarea c|utat| i afieaz| cmpul distinct (fondul devine negru, caracterele albe pentru a scoate n eviden| prima soluia a c|ut|rii);
87
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
Nota 7 : dac| nu este activat| opiunea Match Whole Field aciunea poate deveni periculoas|!
Dac| dorii ca nregistr|rile s| fie afiate ntr-o ordine diferit| selectai Quick Sort. De exemplu, este posibil ca angajaii s| fie afiai n ordinea descresc|toare a salariilor i la un moment dat s| dorii s|-i afiai n ordinea alfabetic|. ntr-un tabel vizualizat ca foaie de date, sortarea se poate realiza pe baza mai multor cmpuri adiacente, ntr-un formular ns| suntem limitai la sortarea pe baza unui singur cmp. Dac| ai selectat mai multe cmpuri, cel mai din stnga este cmpul primar de sortare. Din acest motiv uneori este necesar| rearanjarea ordinii coloanelor nainte de sortare.
Sortarea nregistrarilor unui tabel n modul de vizualizare foaie de date
selectai coloana sau coloanele pe baza c|rora dorii s| sortai nregistr|rile; selectai Sort din meniul Records apoi selectai Sort Ascending sau Sort Descending din submeniu dup| cum dorii sortarea cresc|toare sau descresc|toare sau clic pe simbolurile grafice Sort Ascending sau Sort
Descending
Nota 7 : la sortarea cresc|toare nregistr|rile sunt aranjate ncepnd cu valoarea cea mai mic|, de exemplu, cifre de la 0 la 9 i litere de la A la Z. La sortarea descresc|toare este invers.
Sortarea nregistrarilor pe baza mai multor cmpuri
selectai cmpurile pe baza c|rora se va face sortarea; clic pe unul dintre simbolurile grafice Sort Ascending sau Sort Descending din bara de instrumente standard.
http://www.east.utcluj.ro/mb/mep/antal
Sortarea nregistr|rilor
tabelul iniial
coloanele selectate
rezultate
Filtrele sunt interog|ri simple care se aplic| numai tabelelor sau formularelor deschise. Se utilizeaz| pentru alterarea temporar| a modului de vizualizare a datelor dintr-un tabel pentru:
Ce este un filtru?
0264-401667
NU COPIA !.
88
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
deschidei tabelul; clic n celula care conine articolul pe baza c|ruia se va face filtrarea; - aici m-am poziionat pe o celul| a cmpului Company Name care conine valoarea Alfreds Futterkiste
din bara de instrumente. - au fost afiate numai nregistr|rile care conin valoarea Alfreds Futterkiste n cmpul Company Name
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
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 coninutului ctorva cmpuri; sortarea cmpurilor n sensuri diferite (unul ascendent, altul descendent).
89
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
Dei exemplul prezentat de mine este simplu, acest mod de filtrare poate produce rezultate mult mai complexe. De ce? Observai n figura care urmeaz|, n colul din dreapta jos, cteva butoane care conin cuvintele Or.
Dup| ce ai completat o valoare de filtrare apare un Or nou. Se vor filtra valori care satisfac prima condiie sau (Or) a doua i aa mai departe. ntre valorile de cmpuri ale aceleiai linii de filtrare se face i logic. Astfel, prima condiie se poate citi astfel: selecteaz| acele rnduri din tabel care au n cmpul Company Name valoarea "Alfreds Futterkiste" i (And) n cmpul Contact Name valoarea "Ofelia Chiorean". La clic pe noul Or valorile setate se terg automat i se poate defini o nou| configuraie de valori de cmpuri pentru care se face filtrarea.
http://www.east.utcluj.ro/mb/mep/antal
clic pe s|geat| n jos i o list| se va desf|ura, de aici putei selecta o singur| valoare pentru filtrare; n exemplul prezentat eu am selectat Alfreds Futterkiste; clic pe pictograma Apply Filter i numai nregistr|rile care au cmpul Company Name identic cu Alfreds Futterkiste vor fi afiate; clic pe pictograma Remove Filter .
nainte de 1970, bazele de date erau un domeniu n care utilizatorii navigau urm|rind poantori (pointers) de la o nregistrare la alta pe nite drumuri fixate, eventual prin plasarea unor "indicatori de stare curent|", care erau folosii n cazul cnd navigatorul se pierdea, n vederea reg|sirii drumului fixat de la care deviase. n 1970, E.F. Codd a propus o paradigm| total
0264-401667
NU COPIA !.
90
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
Cum am spus n capitolul de proiectare a bazei de date, trebuie determinate tabelele i relaiile dintre acestea mpreun| cu tipul relaiilor care se vor folosi. Dup| ce tabelele au fost create prin procedurile descrise deja, trebuie create relaiile dintre acestea. Pentru aceasta trebuie prima oar| deschis| fereastra relaiilor (Relationship window). Dac| baza de date este proiectat| corect este garantat| unicitatea nregistr|rilor prin cheile primare (primary keys) din tabele. Apoi, aceste chei primare se vor folosi drept chei str|ine (foreign keys) n alte tabele pentru stabilirea relaiilor. Cnd se creeaz| o relaie ntre dou| tabele, tabelul cu cheia primar| se numete tabel primar (primary table) iar tabelul cu cheia str|in| se numete tabel asociat (related table). Tabelul asociat poate avea la rndul lui o cheie primar| care se poate folosi ntr-o alt| relaie n care tabelul va fi primar.
Proiectele numite System R i Ingres au implementat prototipuri care ar|tau c| modelul relaional se putea folosi pentru manipularea unor cantit|i enorme de date. n loc s| implementeze algebra sau calculul relaional, proiectanii lui System R, au dezvoltat un nou limbaj al bazelor de date, care iniial s-a numit Structured English Query Language sau SEQUEL iar azi, din motive de politic| comercial|, se numete Structured Query Language, adic| SQL. Diferent -a esent -iala 7 dintre SQL s - i alte limbaje consta 7 n faptul ca 7 n SQL instruct -iunile specifica 7 ce operat -ii se vor face cu datele si nu modul cum se realizeaza 7 acestea. Dei SQL-ul a fost dezvoltat de IBM, primul produs comercial bazat pe SQL a fost produs de o companie mic| numit| Relational Software, Inc., n 1979. Produsul s-a numit Oracle, iar numele a fost ulterior adoptat i de companie, care azi a devenit un gigant.
http://www.east.utcluj.ro/mb/mep/antal
nou| de abordare a datelor, unde toate relaiile semnificative dintre date se reprezentau prin valorile datelor i nu prin poantori ascuni sau prin conexiuni. Viziunea lui Codd a permis exprimarea interog|rilor ntr-un format neprocedural adic| independent de structura i algoritmii folosii la implementarea bazei de date - un concept pe care Codd l-a numit independena datelor. Articolul original al lui Codd spunea c| interog|rile despre datele stocate n formatul relaional se puteau exprima fie prin calculul predicatelor de ordinul unu fie prin utilizarea unei colecii de operatori relaionali cum sunt asocierea (join) i proiecia (projection). n articole ulterioare, a dezvoltat aceste dou| abord|ri sub forma a dou| limbaje de acces la bazele de date care au devenit cunoscute sub denumirile calcul relaional i algebra relaional|. Majoritatea muncii din acea perioad| s-a focalizat asupra operatorilor din algebra relaional|.
Definiiile relaionale ntre tabelele din baz| vor asigura proiectarea ct mai facil| a obiectelor din baz|. De multe ori rapoartele, formularele sau interog|rile lucreaz| cu date din mai multe tabele. n acest scop Access-ul trebuie s| cunoasc| cum sunt legate tabelele care particip| n aceste obiecte.
Pentru a deschide fereastra relaiilor (Relationship window), deschidei fereastra bazei de din bara de instrumente standard.
Dac| s-au creat sau modificat deja relaiile din baz|, fereastra se va afia la fel cu ultima ei afiare, astfel se va afia i fereastra de dialog Show Table peste aceasta.
0264-401667
NU COPIA !.
91
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
dac| fereastra de dialog Show Table nu este deschis| clic pe pictograma Show Table din bara de instrumente Relationships;
http://www.east.utcluj.ro/mb/mep/antal
selectai tabelul care dorii s| fie ad|ugat din lista Table. Folosii tasta Ctrl pentru ad|ugarea mai multor tabele neconsecutive sau tasta Shift pentru ad|ugarea unui grup de tabele consecutive; clic pe butonul Add;
0264-401667
NU COPIA !.
92
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
tragei numele cmpului din primul tabel peste numele cmpului din al doilea. Dac| unul dintre cmpurile tabelelor este cheie primar| va fi afiat ngroat (bold), vei trage cheia primar| pe cheia secundar| corespunz|toare din al doilea tabel. Tabelul din care se trage cheia se numete tabel primar (primary table); tabelul peste care se plaseaz| cheia se numete tabel asociat (related tabel). Fereastra de dialog a relaiei se va afia sub forma:
Definirea relaiilor
http://www.east.utcluj.ro/mb/mep/antal
Pentru acest exemplu am folosit 3 tabele cu numele: Persoana, Adrese, Telefoane. Cmpurile IDAdresa din Adrese si IDPersoana din Persoana sunt de tipul AutoNumber, IDPersoana din Adrese s - i IDAdresa din Telefoane sunt de tipul Long Integer, Remarci din Adrese este de tipul Memo, celelalte cmpuri sunt de tipul Text. Cheile primare sunt afiate ngroat (IDPersoana n tabelul Persoana s - i IDAdresa n tabelul Adrese) n figur|. Tabelul Telefoane nu are cheie primar|.
0264-401667
NU COPIA !.
93
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
1. Pentru ad|ugarea unei nregistr|ri n tabelul asociat, tabelul cheii primare trebuie s| conin| o nregistrare a c|rei cheie primar| s| fie identic| cu cheia str|in| corespondent| din tabelul asociat pentru noua nregistrare. De exemplu, pentru ad|ugarea unei nregistr|ri n tabelul Adrese, trebuie s| avem prima oar| n tabelul Persoana o nregistrare a c|rei cheie primar| (IDPersoana) s| fie aceeai cu cheia stra 7 ina 7 din tabelul Adrese (IDPersoana); 2. Nu se poate terge o nregistrare din tabelul primar dac| exist| nregistr|ri corespondente n tabelul asociat. De exemplu, nu se poate terge un nume de persoan| din tabelul Persoana dac| are nregistr|ri stocate n tabelul Adrese, adic| exist| cel puin o nregistrare avnd valoarea stocat| n cmpul IDPersoana aceeai cu una a lui IDPersoana din tabelul Persoana.
http://www.east.utcluj.ro/mb/mep/antal
Dac| o cheie primar| i o cheie str|in| se folosesc pentru legarea a dou| tabele se zice c| lega 7 tura se bucur| de integritate referenial|. Adic| urm|toarele condiii sunt forate:
n majoritatea cazurilor forarea integrit|ii refereniale este de dorit. Pentru exemplul prezentat, activarea integrit|ii refereniale va shimba forma de afiare a relaiei dup| cum se observ| n figura anterioara 7. Selectarea opiunii "actualizarea cascadat| a cmpurilor legate" (Cascade Update Related Fields) nseamn| c| modificarea cheii primare n una din nregistr|rile tabelului primar va fi remprosp|tat| automat de Access n toate cmpurile legate corespondente.
Selectarea opiunii "tergerea cascadat| a nregistr|rilor legate" (Cascade Delete Related Records) nseamn| c| tergerea nregistr|rii care are cheia primar| duce la tergerea automat| a nregistr|rilor legate corespondente din toate tabelele legate.
0264-401667
NU COPIA !.
94
Introducere n Microsoft Access: Ca 7 utare, sortare n tabele si intergritatea referent -iala 7 - cursul 5
Ambele opiuni afecteaz| integritatea referenial|, motiv pentru care se vor utiliza cu precauie. Pentru exemplul prezentat, relat -iile finale vor fi cele prezentate n figura care urmeaza 7:
deschidei fereastra relaiilor; selectai Show All din meniul relaiilor sau clic pe pictograma Show All Relationships
Editarea relaiilor
http://www.east.utcluj.ro/mb/mep/antal
din bara de
instrumente Relationships.
deschidei fereastra relaiilor; clic pe Show Direct Relationships din bara de instrumente Relationships sau selectai Show Direct din meniul relaiilor. deschidei fereastra relaiilor; clic pe linia relaiei care leag| cele dou| tabele; ap|sai tasta Delete. deschidei fereastra relaiilor; clic pe tabelul care va fi scos; ap|sai tasta Delete.
0264-401667
NU COPIA !.
95
Obiectivele cursului 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 cum se selecteaz| cmpurile care vor participa ntr-o interogare; cum se construiete o interogare n mod proiectare (Design View); cum se construiete o interogare avnd 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 ieire ale unei
Wizard);
interog|ri;
ce sunt interoga 7 rile cu parametri s - i cele ncrucis - ate (crosstab); care sunt cele mai importante proprieta 7ti ale interoga 7 rilor.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
96
n principal, interog|rile din Access pot fi grupate n urm|toarele categorii de baz|: ! Select -ie: sunt cele mai populare; permit selectarea de informaii din unul sau mai multe tabele pe baza unor criterii, crearea unei mulimi dinamice pentru afiarea rezultatelor ntr-o foaie de date n scopul vizualiz|rii i analizei; datele din rezultatele afiate pot fi modificate, aceste modific|ri afectnd datele din tabelele originale; ! Totale: sunt o versiune special| de interog|ri de selecie; au posibilitatea de a realiza sume sau de a genera totale (de exemplu, pot num|ra toate nregistr|rile care ndeplinesc un anumit criteriu) ntr-o interogare de selecie; la selectarea acestui tip de interogare Access adaug| un rnd numit Total n fereastra QBE; ! Act -iune: permit crearea unor noi tabele (Make Tables) sau modificarea unor date (delete, update i apend) din tabelele existente. n cazul interog|rilor de selecie toate modific|rile aduse datelor se fac, individual, la nivelul fiec|rei nregistr|ri, n cazul interog|rilor de aciune mai multe nregistr|ri pot fi modificate n timpul unei aciuni individuale; ! ncrucis - ate: genereaz| informaii de sintez|, sub forma unui tabel avnd rndurile i capetele de coloan| bazate pe cmpurile tabelului. Prin definiie, celulele individuale ale mulimii dinamice rezultate sunt de tipul tabelar, adic| se extrag sau se calculeaz|; ! SQL: aceste interog|ri se scriu n limbajul SQL avnd tipurile: Union, Pass-Through i Data Definition; se folosesc pentru manipularea bazelor de date
Tipuri de interog|ri
S| presupunem c| dorii s| tii cum stau angajaii departamentului de vnzare la capitolul de vnz|ri, pentru o anumit| perioad| particular|. Probabil, informaia va trebui extras| din trei tabele: Angajati, Comenzi i Detalii Comenzi. Tabelul Angajai va fi necesar pentru numele vnz|torilor; tabelul Comenzi va conine datele la care s-au efectuat vnz|rile; tabelul Detalii Comenzi va conine sumele ncasate din vnz|ri. Angajai i Comenzi se vor lega prin num|rul de identificare al angajatului; Comenzi i Detalii Comenzi se vor lega pe baza num|rului de comand|. Vom dori delimitarea nregistr|rilor din Comenzi i Detalii Comenzi pentru o perioad| dat|. De asemenea, suntem interesai numai de rezultatele personalului de la vnz|ri care a fost angajat n aceeai perioad|. Ideal ar fi ca rezultatele s| fie puse sub forma unui raport sau, mai sugestiv, sub forma unui grafic. Pna 7 a ajunge la acestea ns|, trebuie ca datele s| fie extrase din tabelele corespunz|toare, respectnd limit|rile impuse. Pentru aceasta se va folosi o interogare.
Interog|rile au mai multe forme i tipuri. Se pot salva n baz|, asemenea unui tabel sau pot fi executate numai n memorie. Pot fi create folosind instruciuni ale limbajului SQL (Structured Query Language) sau prin folosirea unei interfee grafice numit| grila (grid) QBE (Query by Example). O interogare poate prezenta direct datele unui tabel sau poate realiza anumite grup|ri sau calcule cu datele, nainte de afiarea rezultatelor.
http://www.east.utcluj.ro/mb/mep/antal
Un Sistem de Gestiune a Bazelor de Date (SGBD) este folosit, n principal, pentru stocarea i reg|sirea informaiilor. Modelul relaional stocheaz| datele n mai multe tabele distincte - n loc de unul singur uria - dar legate ntre ele, pentru creterea eficienei i evitarea duplic|rii datelor. De multe ori este necesar| g|sirea unor informaii care sunt submulimi ale mulimilor de date stocate n tabele. Ele se prezint|, fie sub forma unei submulimi de cmpuri dintr-un tabel, fie sub forma unei submulimi de nregistr|ri, fie combinat.
0264-401667
NU COPIA !.
97
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 afiate ntr-o foaie de date ale c|rei nregistr|ri se numesc dynaset (mulime dinamic| de date). Acestea au acelai aspect cu un tabel deschis n modul foaie de date. Aceast| mulime este dinamic| (uneori, se mai numete virtual|) i nu se stocheaz| n baza de date. La nchiderea interog|rii mulimea dinamic| nceteaz| s| mai existe. Dei mulimea dinamic| nu mai exist|, datele pe baz| c|reia s-a generat r|mn n continuare n tabele. La execuia interog|rii, Access plaseaz| datele rezultate n mulimea dinamic|. La salvarea interog|rii, informaiile nu se salveaz|; numai structura interog|rii este salvat| (sursele de date, cmpurile, ordinea de sortare, limit|rile etc.). Avantajele acestui mod de lucru sunt: # un spaiu mai mic este folosit pentru stocare; # interogarea folosete cea mai actual| variant| a datelor de la ultima ei execuie. La fiecare execuie, interogarea citete datele din sursele de date i recreaz| mulimea dinamic|. ntruct mulimea nu se stocheaz|, o interogare reflect| automat orice modificare
0264-401667
NU COPIA !.
Interog|rile ofer| posibilitatea de a vizualiza datele, virtual, n orice mod dorit de utilizator. Majoritatea SGBD-urilor evolueaz| continuu dezvoltnd noi i tot mai puternice instrumente n acest scop. Cteva dintre posibilit|ile oferite de interog|ri Access sunt: ! Selectarea tabelelor: informaiile pot fi obinute dintr-un singur tabel sau din mai multe tabele care sunt legate prin date comune; n ambele cazuri rezultatele sunt prezentate de Access sub forma unei singure foi de date; ! Selectarea cmpurilor: pot fi specificate care cmpuri ale fiec|rui tabel s| fie prezente n mulimea de date dinamic| rezultat|; ! Selectarea nregistra 7 rilor: nregistr|rile care vor fi afiate n mulimea dinamic| pot fi selectate pe baza unor criterii; ! Sortarea nregistra 7 rilor: informaiile afiate n mulimea dinamic| de date pot fi afiate ntr-o ordine specific| (cresc|toare sau descrec|toare); ! Realizarea de calcule: interog|rile pot fi folosite pentru realizarea unor calcule pe baza datelor afiate cum sunt: valoare medie, suma, minim etc.; ! Crearea de tabele: se pot crea noi tabele pe baza datelor dintr-o nregistrar; n acest caz pe baza mulimii dinamice, se va crea un nou tabel; ! Crearea de formulare si rapoarte pe baza unei interoga 7 ri: mulimea dinamic| rezultat| poate fi necesar| pentru realizarea unui formular sau a unui raport; n acest caz, la afiare sau tip|rire informaiile fiind extrase printr-o interogare vor fi actualizate cu datele existente n momentul curent n baza de date; ! Crearea de grafice pe baza unei interoga 7 ri: se poate realiza reprezentarea grafic| a datelor dintr-o interogare care s| fie inclus| ntr-un formular sau raport; ! Folosirea unei interoga 7 ri ca si sursa 7 de date pentru o alta 7 interogare: se pot crea noi interog|ri pe baza unor interog|ri deja existente; ! Modificarea unor tabele: interog|rile Access pot avea ca i surse de date baze de date dBASE, Paradox, Btrieve i Microsoft SQL Server.
Posibilit|ile interog|rilor
http://www.east.utcluj.ro/mb/mep/antal
SQL client/server; ! Topp(n): este un limitator care se poate folosi numai n conjuncie cu celelalte tipuri de interog|ri prezentate; permite specificarea unui procent din num|rul maxim al al nregist|rilor care vor fi afiate de o interogare.
98
deschidei baza de date (pentru exemplul care urmeaz| Northwind); din fereastra bazei de date (Database Window) selectai butonul Query; clic dublu pe interogarea care dorii s| fie deschis|.
Crearea unei interog|ri folosind Generatorul de Interog|ri Simple (Simple Query Wizard)
n fereastra bazei de date, clic pe butonul Queries; clic pe butonul New pentru afiarea cutiei de dialog New Query;
http://www.east.utcluj.ro/mb/mep/antal
selectai opiunea Simple Query Wizard, apoi clic pe butonul OK pentru a trece la pagina urm|toare a Generatorului; fereastra de dialog care se va afia va fi de forma:
0264-401667
NU COPIA !.
99
clic pe s|geata n jos a cutiei de tip list| (list box) numit| Tables/Queries pentru a vizualiza toate tabelele i interog|rile ale c|ror cmpuri ar putea fi selectate pentru a participa la interogare; n figura care urmeaz| am selectat tabelul Orders; pentru ad|ugarea unui cmp n interogare selectai din cutia tip list| Available Fileds numele cmpului care va fi ad|ugat, apoi efectuai clic pe s|geata la dreapta ; numele dispare din list| i apare n lista Selected Fields;
http://www.east.utcluj.ro/mb/mep/antal
dup| ce ai terminat ad|ugarea tuturor cmpurilor facei clic pe butonul Next i urm|toarea fereastra 7 de dialog va fi afiat|:
0264-401667
NU COPIA !.
100
clic pe butonul Finish pentru terminarea proiectului interog|rii. Rezultatele se vor afia ca n figura urm|toare. Nota 7 : n exemplul prezentat au fost selectate cmpuri dintr-un singur tabel. Prezentarea a avut un rol didactic, dorind s| descriu un principiu prin ea. Dac| dorii, putei selecta cmpuri i din mai multe tabele sau interog|ri, dup| cum dicteaz| necesit|ile pentru extragerea informaiilor dorite.
http://www.east.utcluj.ro/mb/mep/antal
Access-ul are un num|r mare de Generatoare care ajut| la definirea interog|rilor. Totui, n marea majoritate a cazurilor aceste Generatoare sunt inadecvate pentru interog|ri complexe.
0264-401667
NU COPIA !.
101
din fereastra obiectelor bazei de date clic pe butonul Queries; clic pe butonul New pentru afiarea listei posibilit|ilor de creare ale unei interog|ri, de aici selectai Design View; clic pe butonul OK;
Pe ecran apare grila interog|rii (Query Grid) peste ea fiind suprapus| fereastra de dialog Show Table care conine lista tabelelor din baz| ce pot participa ntr-o interogare.
http://www.east.utcluj.ro/mb/mep/antal
n acest caz interogarea trebuie creat| "cu mna" folosind vizualizarea n modul proiectare. Acest mod de vizualizare permite specificarea cmpurilor care vor participa la interogare i a criteriilor de selecie specifice acesteia.
din list| selectai tabelul Customers apoi ap|sai butonul Add; clic pe butonul Close pentru a nchide fereastra de dialog.
Interogarea poate avea ca i sursa 7 de date unul sau mai multe tabele. Acestea sunt afiate dac| n fereastra de dialog Show Table este selectat butonul Tables. Dac| este necesar, interog|ri deja existente pot s| formeze surse de date pentru interog|rii care se creeaz|. Ele sunt afiate n fereastra de dialog Show Table dac| este selectat butonul Queries. Se pot crea i
0264-401667
NU COPIA !.
102
Din zona tabelelor i interog|rilor un cmp se poate selecta prin tragerea lui pe gril|, clic dublu pe numele lui sau prin clic pe numele lui n lista care se afieaz| la ap|sarea s|geii n jos din Field. Se vor afia numai acele cmpuri care au selectat| linia Show din gril|. nregistr|rile afiate pot fi restricionate prin specificarea unor criterii sau filtre specifice unor cmpuri din nregistrare. Datele afiate de interogare se pot sorta pe baza unuia sau a mai multor cmpuri folosind Sort. Dac| efectuai clic pe linia Sort se vor afia opiunile de sortare cresc|toare (Ascending) i descresc|toare (Descending). Sortarea se face de la stnga la dreapta dac| sunt mai multe coloane specificate. Dac| dorii s| revenii la starea iniial|, n care nu se face sortare, selectai not sorted.
http://www.east.utcluj.ro/mb/mep/antal
combinaii de tabele cu interog|ri, afiarea lor simultan| n list| se face prin selectarea butonului Both. Toate tabelele sau interog|rile vor fi afiate n panoul de sus al ferestrei. Ele apar sub forma unor ferestre mici n care sunt afiate cmpurile corespunz|toare lor.
Uneori dorii s| includei cmpuri n interogare dar nu i n r|spunsul care va fi afiat. Asta n cazul n care dorii s| selectai sau s| sortai nregistr|ri pe baza unui cmp ale c|rui date nu dorii s| apar| ca o coloan| de date n r|spuns. n Show vizualizarea coloanei este automat activat| la selectarea cmpului, iar pentru inactivare efectuai clic pe dreptunghi i semnul U va disp|rea. Dac| dorii reafiarea coloanei, clic pe acelai dreptunghi i semnul U va ap|rea din nou, indicnd afiarea coloanei n cadrul rezultatelor.
Observai c| n figura care urmeaz| sursa de date a interog|rii s-a modificat de la tabelul Customers la tabelul Employees. Etapele parcurse pentru aceast| modificare sunt: realizai clic, n panoul de sus, pe tabelul Customer; ap|sai tasta Delete, toate cmpurile tabelului Customers, din panoul de jos, i tabelul Customers, din panoul de sus, vor disp|rea; din meniul Query, folosind opt -iunea Show Tables, deschidet -i fereastra Show
Ordinea de afiare a coloanelor se poate modifica prin selectarea coloanelor i tragerea lor n noua poziie.
0264-401667
NU COPIA !.
103
Dup| ce ai terminat crearea interog|rii, lansarea n execuie se face selectnd din meniul Query pe Run. Pentru definiia interog|rii care se prezint| n figura urm|toare, din tabelul Employees al bazei de date Northwind au fost selectate cmpurile EmployeeID, LastName, FirstName, Title i BirthDate. Toate cmpurile vor fi afiate n r|spuns, cu excepia ultimului, pentru c| toate dreptunghiurile corespunz|toare din linia Show sunt bifate (U), mai puin ultimul. Sortarea se va face cresc|tor (Ascending) pe baza coninutului cmpurilor LastName i FirstName.
http://www.east.utcluj.ro/mb/mep/antal
Operatorii logici permit construirea unor criterii complexe de selecie ale nregistr|rilor din tabele. Semnificaia lor este uor de neles, mai problematic| este ns| modul lor de utilizare n Access.
0264-401667
NU COPIA !.
104
Semnifcaie egal
Scriere =
Exemplu 7 sau =7
Semnificaie Selecteaz| nregistr|rile care au angajaii cu ID (EmployeeID) egal cu 7. Selecteaz| nregistr|rile care au angajaii cu ID mai mic cu 7. Selecteaz| nregistr|rile care au angajaii cu ID mai mare cu 7. Selecteaz| nregistr|rile care au angajaii cu ID mai mic sau egal cu 7. Selecteaz| nregistr|rile care au angajaii cu ID mai mare sau egal cu 7. Selecteaz| nregistr|rile care au angajaii cu ID diferit de 7. Selecteaz| nregistr|rile cu angajaii care au n cmpul LastName stocat King sau Peacock . Selecteaz| nregistr|rile care au angajaii n cmpul LastName cu numele ncepnd cu 'D'. Selecteaz| nregistr|rile care au angajai cu date de natere (BirthDate) n domeniul [1/1/40, 31/12/99].
EmployeeID
mai mic
<
<7
EmployeeID
mai mare
>
>7
EmployeeID
<=
<=7
EmployeeID
>=
>=7
EmployeeID
<>
<>7
EmployeeID
sau
or
"King" or "Peacock"
LastName
asemenea
like
Like "D*"
LastName
http://www.east.utcluj.ro/mb/mep/antal
ntre, i
between, and
BirthDate
0264-401667
NU COPIA !.
105
Scriere ? * #
Se folosete pentru
Exemplu Pentru ma? se g|sesc mai, mat, mac . Pentru m*ie se g|sesc martie, mamaie, migraie. Pentru 196# se vor g|si toi anii n domeniul [1960-1969].
Orice grup de caractere pe aceeai poziie cu *. O singur| cifr| n aceeai poziie cu semnul #.
Grila interog|rii permite specificarea unor criterii complexe de selecie. n exemplele care urmeaz| se va folosi n continuare baza de date Northwind cu tabelul Products (produse). Se poate introduce un criteriu mai lung de un singur cmp de exemplu, se poate s| dorii selecia tuturor produselor ale c|ror nume ncep cu litera P i sunt ntr-un num|r mai mare de 10 buc|i pe stoc. Combinaia acestor criterii va fi folosit| pentru definirea interog|rii. Num|rul
http://www.east.utcluj.ro/mb/mep/antal
de criterii poate s| fie orict de mare. Uneori, este nevoie, n plus, de specificarea unor criterii alternative. De exemplu, se poate s| dorii selectarea tuturor produselor care ncep cu litera C sau P. Num|rul criteriilor alternative este i el nelimitat. Rezultatele seleciei sunt:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Se pot forma combinaii 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 C indiferent de buc|ile existente pe stoc. Observai c| Or-ul (sau-ul) se aplic| ntregii interog|ri i nu unei singure coloane. De exemplu, dac| dorii s| selectai toate produsele care ncep cu litera P i sunt pe stoc n num|r mai mare de 100 sau (Or) ncep cu litera C i sunt pe stoc n num|r mai mare de 10 atunci, trebuie repetat criteriul >10 n UnitsInStoc n linia Or.
Uneori este necesar s| efectu|m calcule pe baza datelor selectate n rndurile unei interog|ri. De exemplu, dorim s| cunoatem preul ce include TVA-ul pentru fiecare produs. Tabelul produselor (numit Products) va conine numai preul net deci va fi necesar| ad|ugarea unui cmp al c|rui coninut va fi calculat pe baza unei expresii aritmetice.
Cmpuri calculate
clic n primul cmp liber al liniei Field - cmpul urm|tor lui QuantityPerPrice; introducei expresia aritmetic| dorit|; pentru calculul preului cu TVA se nmulete preul f|r| TVA cu 1.19 (consider|m TVA-ul
0264-401667
NU COPIA !.
107
unde Expri este numele coloanei iar expresie este o expresie aritmetic| cu urm|toarele componente: Component| Semnificaie
[nume_de_cmp] * / + ()
Un nume de cmp al unuia dintre tabelele care iau parte la interogare, cuprins ntre paranteze dreptunghiulare.
Operatorul de nmulire.
Operatorul de mp|rire.
Paranteze rotunde pentru a indica ordinea de efectuare a operaiilor ntr-o expresie complex|.
http://www.east.utcluj.ro/mb/mep/antal
de 19%); la ap|sarea tastei Enter sau la clic pe urm|torul cmp liber, expresia este automat prefixat| de Access cu eticheta Expr1. Aceast| etichet| va fi numele cmpului calculat i se va afia n rezultatele interog|rii. Pentru exemplul nostru, vom da numele de PretcuTVA.
De asemenea, este posibil| folosirea unor constante numerice sau a funciilor din biblioteca Access-ului (de exemplu, funcia Format pentru formatarea datelor afiate n cmpuri sub o form| special| sau pentru o anumit| ordine de specificare a zilelor, lunilor i a anilor unei date). Expresii care au fost calculate n interogarea prezentat| sunt: PretUnitatecuTVA: [UnitPrice]*1.19
0264-401667
NU COPIA !.
108
Cmpurile calculate conin calcule care opereaz| n cadrul unei nregistr|ri. Ar fi util| posibilitatea realiz|rii unor calcule care opereaz| cu un grup de nregistr|ri sau chiar cu toate nregistr|rile. Aceste tipuri de interog|ri care asigur| posibilitatea centraliz|rii (termenul tehnic este cel de agregare) folosind anumite criterii se numesc interog|ri cu totale. Se pot folosi pentru a calcula suma valorilor stocate ntr-o coloan| particular| sau pentru a calcula subtotale pentru o coloan| dependent| de valorile altei coloane, de exemplu, subtotalul vnz|rilor n fiecare s|pt|mn|. Din meniul View activai opiunea Totals. O linie nou|, cu numele de Totals, se va ad|uga n seciunea de gril| a interog|rii. Termenul de agregare se foloses - te pentru a desemna operat -ii cu un grup de obiecte, astfel o funct -ie de agregare act -ioneaza 7 asupra unui grup de nregistra 7 ri -ie matematica 7 cu ntregul grup. Aceast| linie va fi folosit| pentru a realiznd o oarecare operat 7 pe realiza calcule de mai multe categorii la nivel de coloan| a interog|rii. Unele se realizeaza baza unor opt -iuni multiple cum sunt, funct -iile de agregare (cteva dintre acestea fiind: suma (sum), media (average), maximul (maximum) etc.) altele, cum sunt, Group By, Expression, -iuni fiind unice. Total Field Record Limit nu au opt Categoria Group By Aceasta 7 categorie are o singura 7 opt -iune, pe cea Group By. Ea se foloses - te cnd dorim sa 7 specifica 7 m ca 7 un anumit cmp al ferestrei QBE va fi folosit pentru grupare. Ea este opt -iunea implicita 7 pentru Total. Aceste grupuri de nregistra 7 ri vor fi folosite pentru a realiza calcule de agregare ntr-un alt cmp al interoga 7 rii. Categoria Expression 7 opt -iune, pe Expression. Se foloses - te pentru a crea cmpuri calculate prin Are o singura folosirea funct -iilor de agregare.
Interog|ri cu totale
http://www.east.utcluj.ro/mb/mep/antal
Categoria Total Field Record Limit Aceasta are o singura 7 opt -iune, pe Where. Ea permite specificarea unui criteriu de limitare pentru un cmp agregat. Limitarea se realizeaza 7 nainte de executarea opt -iunii de agregare.
0264-401667
NU COPIA !.
109
Nota 7 : Interog|rile cu totale lucreaz| diferit de cele clasice. Ele nu afieaz| toate nregistr|rile care satisfac criteriile de selecie impuse ci numai totalul acestora. n plus, cmpurile care se includ n nregistrare trebuie s| fie numai cele necesare, de exemplu, numai cmpurile pe baza c|rora se vor face calculele i cmpurile pe baza c|rora se vor face sort|ri. Includerea altor cmpuri vor produce confuzie n cazul calculelor.
Crearea unei 7 ri cu totale interoga
Modalitatea cre|rii unei interog|ri cu totale este simpl|: selectai cmpurile i criteriile asemenea ca la interog|rile normale, apoi specificai ce se va petrece n linia Totals pentru fiecare cmp. n condiii normale vei selecta prima oar| pe Group By pentru un cmp - acesta formnd grupul pentru care se vor realiza calculele - apoi vei specifica un calcul pentru cmp. n exemplul urm|tor, din baza de date Northwind, am folosit tabelul Products. Gruparea s-a realizat pe baza cmpului SupplierID i coninutul tuturor cmpurilor UnitPrice pentru nregistr|rile cu acelai SupplierID au fost nsumate prin folosirea funct -iei de agregare Sum n linia Totals.
http://www.east.utcluj.ro/mb/mep/antal
Categoria Aggregate Aceasta are noua 7 opt -iuni, cteva dintre ele sunt: Sum, Avg, Min, Max etc. Fiecare dintre aceste opt -iuni realizeaza 7 un anumit calcul cu datele si ntorc noi date ntr-o celula 7 a mult -imii dinamice rezultate.
Pentru exemplificare, prezint n continuare efectul interog|rii cu total i tabelul pe baza c|ruia s-a realizat interogarea. Observai c| n tabelul Products, furnizorul (Supplier) Exotic Liquids apare de 3 ori cu urm|toarele preuri pe unitate (UnitPrice) n dolari: 18.00, 19.00 i 10.00. Gruparea pe baza numelui de furnizori i totalizarea preurilor pe unitate (SumOfUnitPrice) face ca n interogare s| apar| o singur| linie cu Exotic Liquids avnd totalizate cele trei valori din tabel (18.00 + 19.00 + 10.00 = 47.00) n cmpul SumOfUnitPrice.
0264-401667
NU COPIA !.
110
Se pot efectua orice num|r de calcule ntr-o interogare cu total. Se poate, de exemplu, realiza gruparea pe furnizori (SupplierID) i calcula suma pe baza cmpului UnitPrice i valoarea medie pe baza cmpului UnitsInStoc (unit|i pe stoc).
http://www.east.utcluj.ro/mb/mep/antal
Se poate folosi orice num|r de coloane pentru grupare: se poate realiza gruparea pe |ri i pe nume de furnizori. Dac| se realizeaz| gruparea pe baza mai multor coloane, Access lucreaz| de la stnga la dreapta pentru a determina precedena grup|rilor.
Totale de expresii
n tabelul Orders a bazei de date Northwind nu exista 7 un cmp care sa 7 afis - eze valoarea totala 7 a unei comenzi. Interogarea va avea ca si sursa 7 de date doua 7 tabele, pe Orders s - i pe Order Details, iar valoarea totala 7a
0264-401667
NU COPIA !.
111
Sa 7 presupunem ca 7 dorim sa 7 acelas - i grup de calcule ca si nainte, dar 7 , de exemplu pentru anul 1997. pentru o perioada de timp limitata Limitarea se va pune pe cmpul Order Date, folosind pe Where n Total, iar cont -inutul acestuia nu se va mai afis - a n rezultatele obt -inute.
http://www.east.utcluj.ro/mb/mep/antal
Interog|rile de actualizare permit modificarea rapid| a unui num|r de nregistr|ri dintr-un tabel. nregistr|rile actualizate depind de criterii specificate de utilizator. S| presupunem c| n baza de date Northwind dorim s| modific|m preul pe unitate (Unit Price) pentru categoria de produse care au CategoryID cuprins n domeniul [1,7] din tabelul Products. Modificarea se va face numai pentru furnizorii a c|ror SupplierID are valoarea mai mic|
0264-401667
NU COPIA !.
112
selectai din meniul Query opiunea Update Query ; n zona grilei interog|rii apare o nou| linie numit| Update To. Specificai regulile pentru actualizarea unei coloane sau l|sai libere cmpurile corespunz|toare coloanelor unde nu dorii modific|ri. Uneori este util| includerea unor coloane n interogare, pentru care se vor specifica criteriile de selecie f|r| a dori ca aceste coloane s| fie actualizate de interogare. n practic|, este mai s|n|tos ca prima dat| s| definii toate criteriile de selecie i s| lansai n execuie interogarea. R|spunsul afiat pe ecran const| n acele rnduri care se vor modifica dac| interogarea normal| se transform| n una de actualizare. Dac| criteriile de selecie sunt:
http://www.east.utcluj.ro/mb/mep/antal
realizai o interogare de selecie (Select Query sunt interog|rile 'normale', cele utilizate pn| acum) de forma:
0264-401667
NU COPIA !.
113
acum, dup| procedura descris| anterior, transform|m interogarea normal| n una de actualizare. Fereastra QBE specific| este prezentat| n figura urm|toare. Aici n linia Update To a cmpului UnitPrice s-a introdus formula 1.1*[UnitPrice]. Ea definete noile valori ale cmpului dup| execuia interog|rii de actualizare. Lansarea n execuie se face la fel ca n cazul interog|rilor normale prin selectarea lui Run din meniul Query. nainte de execuia interog|rii de actualizare Access-ul deruleaz| un dialog cu utilizatorul n care l avertizeaz| asupra num|rului de nregistr|ri care se vor modifica; dac| totul este n ordine selectai butonul OK al cutiei de dialog. Dac| dorii abandonarea interog|rii de actualizare selectai No i nregistr|rile nu vor fi modificate.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
114
noile valori afiate n cazul unei interog|ri de select -ie vor fi:
Interog|rile de ad|ugare copiaz| rezultatele unei interog|ri ntr-un tabel. Tabelul destinaie trebuie s| aib| aceleai cmpuri cu cele incluse n interogare.
Pentru crearea unei interog|ri de ad|ugare selectai pe din meniul Query. Se poate specifica tabelul la care se face ad|ugarea mpreun| cu localizarea lui care poate fi n baza de date curent| sau ntr-o alt| baz| de date. Dup| setarea cmpurilor i criteriilor, interogarea se lanseaz| n executie normal, prin selectarea lui Run din meniul Query. Access va afia un mesaj referitor la num|rul de nregistr|ri care vor fi ad|ugate, fiind necesar| confirmarea ad|ug|rii pentru ca aceasta s| aib| loc efectiv.
Nota 7 : Dac| realizai o interogare de ad|ugare pe o submulime de nregistr|ri a unui tabel, din punct de vedere practic, este o procedur| s|n|toas| s| specificai criteriile prima oar| ntr-o interogare de select -ie. Verificai r|spunsurile afiate i numai apoi modificai tipul interog|rii, de la cea de selecie la cea de ad|ugare, n urma c|reia linia Append To va fi afiat|.
0264-401667
NU COPIA !.
Expresia scris| n UpdateTo este format| din componentele standard discutate deja la "Definirea unui cmp calculat". La nevoie, pot participa inclusiv constante sau funcii definite n bibliotecile Access.
http://www.east.utcluj.ro/mb/mep/antal
115
7 : O interogare de creare a unui tabel poate avea ca surs| de date o submulime a Nota nregistr|rilor unui tabel deja existent. i n acest caz procedura de lucru s|n|toas| presupune vizualizarea nregistr|rilor selectate printr-o interogare de select -ie, apoi transformarea ei n una de tipul Make-Table.
Pentru realizarea unei interog|ri de creare a unui tabel din meniul Query selectai . Noul nume de tabel poate fi stocat n baza de date curent| sau n una extern|. Specificarea cmpurilor i a criteriilor se face normal. Dup| specificarea lor selectai Run ( ) din meniul Query pentru lansarea n execuie a interog|rii. Access va afia un mesaj prin care ne spune cte nregistr|ri va copia n noul tabel. i aici este necesar| confirmarea pentru executarea interog|rii.
Majoritatea bazelor de date ajung s| fie organizate, ca urmare a procesului de normalizare, sub forma a mai multor tabele. Relaiile ntre aceste tabele sunt stabilite pe baza cheilor primare i str|ine folosind comanda Relationships din Tools n fereastra bazei de date. Dup| crearea tabelelor i a relaiilor ntre acestea se poate trece la crearea unor interog|ri care s| aib| ca surs| de date mai multe tabele. Prin ad|ugarea de mai multe tabele unei interog|ri se pot vizualiza informaiile acelor tabele ca i cnd ar fi stocate ntr-un singur tabel.
Crearea unei 7 ri cu doua 7 interoga tabele
0264-401667
NU COPIA !.
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 noua 7 , iar din fereastra -i Design View; New Query selectat din fereastra de dialog Show Table realizat -i clic dublu pe tabelele Customers s - i Orders, apoi nchidet -i fereastra; Access creeaza 7 automat o linie ntre cele doua 7 tabele (vezi figura urma 7 toare) pe baza relat -iei corespunza 7 toare din fereatra Relationships; aceasta 7 linie poarta 7 denumirea de asociere si reprezinta 7 o relat -ie ntre cele 7 tabele; doua
http://www.east.utcluj.ro/mb/mep/antal
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.
116
OrderDate pentru a vizualiza fiecare comanda 7 fa 7 cuta 7 de un anumit client, apoi lansat -i n -ie interogarea prin clic asupra lui n bara cu instrumente Query Design; execut
http://www.east.utcluj.ro/mb/mep/antal
Implicit, Access afis - eaza 7 rezultatele interoga 7 rii pe baza indexului tabelului cu cheia primara 7. 7 , de exemplu, dorit -i sa 7 sortat -i cresca 7 tor rezultatele pe baza lui Order Date : Daca trecet -i n mod proiectare (Design View); pozit -ionat -i cursorul pe rndul Sort al coloanei Order Date din grila QBE s -i apa 7 sat -i tasta F4 pentru a deschide lista derulanta 7; din lista 7 selectat -i Ascending; pentru afis - area cresca 7 toare a rezultatelor; lansat -i n execut -ie interogarea.
Relat -iile ntre doua 7 tabele sunt reguli cu privire la tipul lega 7 turilor stabilite ntre tabele si nu cu privire la modalitatea de vizualizare a datelor din tabele. Pentru a vizualiza date din mai multe tabele acestea trebuie sa 7 fie legate printr-un cmp comun (sau printr-un un grup de cmpuri 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 interoga 7 rii se pot crea noi asocieri sau se pot modifica cele existente. La fel cum exista 7 mai multe tipuri de relat -ii
Tipuri de asocieri
0264-401667
NU COPIA !.
117
Crearea unei asocieri ntre tabele defines - te o mult -ime de proprieta 7ti. Acestea sunt reguli folosite la afis - area nregistra 7 rilor s - i spun lui Access cum sa 7 interpreteze orice except -ie (sau o eventuala 7 eroare) ntre doua 7 tabele. De exemplu, cum sa 7 realizeze afis - area n cazul n care sunt nregistra 7 ri necorespunza 7 toare. Access poate lucra cu mai multe tipuri de asocieri, fiecare avnd un comportament specific. Modificarea tipului unei asocieri se realizeaza 7 prin modificarea proprieta 7tilor acesteia. Pentru aceasta realizat -i clic dublu pe linia care leaga 7 cele doua 7 tabele, pe ecran se va afis - a fereastra proprieta 7tilor asocierii (Join Properties).
Asocieri interne (inner joins) Asocierea implicita 7 n Access este cea interna 7 (inner join), denumita 7 uneori si asociere echivalenta 7 (equi-join). Ea spune lui Access sa 7 selecteze toate nregistra 7 rile celor doua 7 tabele care au aceeas - i valoare n cmpurile prin care se face asocierea. Daca 7 sunt ga 7 site nregistra 7 ri care nu au valori comune ale cmpurilor folosite la asociere acestea sunt excluse din mult -imea dinamica 7 nefiind afis - ate n foaia de date. Aceste nregistra 7 ri excluse pot fi ga 7 site selectnd din generatorul de interoga 7 ri tipul "Find Unmatched Query".
http://www.east.utcluj.ro/mb/mep/antal
exista 7s - i mai multe tipuri de asocieri, cteva dintre acestea sunt: ! asocieri interne (inner joins); ! asocieri externe (outer joins); ! autoasocieri (self-joins); ! asocieri de tip produs cartezian (cartesian joins).
Ea are doua 7 regiuni, prima are patru liste desfa 7s - urabile (Left Table Name, Right Table -iuni. Name, Left Column Name, Right Column Name), iar a doua trei butoane cu opt Butoanele cu opt -iuni controleaza 7 proprieta 7tile asocierii dupa 7 cum urmeaza 7: 7 rile care au n cmpurile de asociere valori egale; 1. Include nregistra 2. Include TOATE nregistra 7 rile din tabelul Customers s - i numai pe acelea din Orders care au n cmpul de asociere valori egale; 3. Include TOATE nregistra 7 rile din Orders s - i numai pe acelea din Customers care au n cmpul de asociere valori egale.
Prima opt -iune este cunoscuta 7 sub numele de asociere interna 7 (inner join), urma 7 toarele sunt cunoscute sub denumirea de asocieri externe (outer join). Asocierea extern| la dreapta Asocierile externe sunt folosite pentru afiarea tuturor nregistr|rilor unui tabel i numai a celor comune din cel|lalt. Cnd se creeaz| o asociere extern|, lina de asociere va avea la un
0264-401667
NU COPIA !.
118
i se realizeaz| afiarea rezultatelor f|r| activarea opiunilor de sortare se obin 832 de nregistr|ri, existnd dou| nregist|ri care nu au corespondent n tabelul Orders (una dintre acestea se observ| n figura care urmeaz|).
http://www.east.utcluj.ro/mb/mep/antal
cap|t o s|geat| care va marca tabelul din care sunt extrase numai nregistr|rile care au valori comune. De exemplu, dac| n interogarea care afieaz| comenzile unui client se face modificarea:
Asocierea extern| la stnga Aceast| asocierea corespunde opiunii 3 din fereastra de dialog Join Properties. Ea permite afiarea nregistr|rilor orfane. Acest tip de nregistr|ri sunt cele care nu permit activarea integrit|ii refereniale. n exemplul prezentat, din forma s|geii care leag| cele dou| tabele, se observ| c| integritatea referenial| este activat|, deci folosirea acestei asocieri nu va genera rezultate noi fa| de opiunea 1.
Autoasocieri (self-joins) Autoasocierile se realizeaza 7 ntre cmpurile aceluiai tabel. Din acest motiv tabelul va fi ad|ugat de dou| ori pe postul de surs| de date. Va exista un tabel original i o copie a lui. Asocierile se creeaz| ntre original i copie. De exemplu, dac| ntr-un tabel stocai cerinele personalului ntr-un cmp Cerinte i aprob|rile cerinelor de c|tre conducere n cmpul Aprobari, atunci se va realiza o asociere ntre aceste dou| cmpuri ale aceluiai tabel pentru a g|si care cerine au fost acceptate. Asocierea de tip produs cartezian Dac| se adaug| cele dou| tabele Customers i Orders ntr-o interogare, dar nu se specific| o
0264-401667
NU COPIA !.
119
- i aceasta 7 asociere este bine de evitat, voi prezenta n continuare un exemplu n care ea se Des poate folosi cu succes.
Fie tabelul Angajati din figura urma 7 toare. El are patru cmpuri, Nume, Prenume si Sectie 7 rii sunt de tipul Text, iar Salar este de tipul Number, Double. Se pune problema totaliza salariilor pe sect -ii (Sectie) s - i afis - area, n procente, a salarului totalizat pe fiecare sect -ie, raportat la totalul salariilor. Prima metoda 7 de rezolvare a problemei necesita 7 realizarea a doua 7 interoga 7 ri cu numele Query Suma pe Sectii s - i Query Suma Totala prezentate n figurile care urmeaza 7:
http://www.east.utcluj.ro/mb/mep/antal
asociere ntre tabele, Access va combina toate nregistr|rile lui Customers cu toate nregistr|rile lui Orders. Uneori aceast| operaie va dura secunde, alteori chiar minute. Combinarea fiec|rei nregistr|ri dintr-un tabel, cu fiecare nregistrare a celuilalt, va conduce la produsul cartezian al tabelelor.
0264-401667
NU COPIA !.
120
Pentru calculul procentelor din valoarea totala 7 a salariilor se creeaza 7 o noua 7 interogare cu numele Procente. Aceasta se prezinta 7 n figura urma 7 toare si care are cmpurile: Sectie; Suma pe sectii: Sum Of Salar; Suma totala: Sum Of Salar; Procent pe sectie: [Query Suma pe Sectii].[Sum of salar]/[Query Suma Totala].[Sum of salar]
http://www.east.utcluj.ro/mb/mep/antal
Pentru ca la afis - are valorile sa 7 fie formatate n procente, proprietatea Format a cmpului cu numele Procent pe sectie este setata 7 la #.##%
Aceasta 7 introgare este de tipul produs cartezian. Vet -i observa nsa 7 ca 7 valorile sunt afis - ate repede ntruct unul dintre tabele cont -ine numai o singura 7 ntregistrare (suma tutror salariilor). O alta 7 metoda 7 de rezolvare a problemei ar fi scrierea unei interoga 7 ri de forma:
0264-401667
NU COPIA !.
121
Aici cmpul, Procent pe sectie, este calculat folosind formula: [Sum of salar]/DSum("[Salar]","Angajati") Funct -ia DSum() permite calcularea sumei valorilor unui cmp dintr-un tabel. Mai sus [Salar] este cmpul al ca 7 rui valori vor fi nsumate, iar Angajati este tabelul care cont -ine cmpul n cauza 7 . Observat -i ca 7 argumentele funct -iei sunt siruri motiv pentru care ele trebuie scrie ntre apostroafe. Funct -ia mai are un argument, opt -ional, prin care se poate -ile sunt de specifica un criteriu pentru selectarea valorilor de nsumat. Criteriile de select forma "[Nume de cmp] = ' <valoare>' ".
Crearea unei asocieri 7 multicoloana
Dou| tabele pot avea mai multe asocieri. De exemplu, dac| dorim s| afl|m clienii care au adresa firmei i cea la care se face expedierea aceeai, se poate crea o interogare de forma:
http://www.east.utcluj.ro/mb/mep/antal
Interog|ri cu parametri
0264-401667
NU COPIA !.
122
Dac| expresia Like "*/*/1996" din figura de mai sus se nlocuiete cu cea prezentat| n fereastra Zoom urma 7 toarea 7 ( Like "*/*/" + [Introduceti anul]), se obine o interogare cu parametru. Parametrul este [Introduceti anul], iar atunci cnd interogarea se executa 7 , pe ecran se afis - eaza 7 textul Introduceti anul s - i se as - teapta 7 pna 7 cnd se introduce o valoare numerica 7 . Uneori pot sa 7 apara 7 probleme la formatul cmpurilor de tipul Data/Time. Observat -i ca 7 separatorul n 7 este caracterul "/". expresia de tipul data Pentru ca datele sa 7 fie formatate folosind acest caracter si nu cel din Regional Settings al lui Windows realizat -i clic pe numele cmpului OrderDate, apoi realizat -i clic pe butonul din dreapta si selectat -i Properties. n ferestra Field Properties setat -i valoarea proprieta 7tii Format la mm/dd/yyyy.
http://www.east.utcluj.ro/mb/mep/antal
Verificarea corectitudinii tipului valorii introduse pentru parametru se poate face, de c|tre Access, dac| pentru parametrul cu numele Introduceti anul este specificat tipul
0264-401667
NU COPIA !.
123
0264-401667
NU COPIA !.
Utilizarea acestor interog|ri impune o singur| restricie: nu se poate ordona tabelul rezultat dup| valorile coloanelor calculate. De exemplu, nu se poate crea o interogare care s| afiaze produsele dup| volumul vnz|rilor. Coloanele pot avea valori care duc la conflicte, dar se poate realiza ordonarea cresc|toare, descresc|toare sau lipsa ordon|rii pentru valorile numelor de rnduri din prima coloan|. Access are un generatorul Crosstab Query Wizard pentru crearea interog|rilor ncruciate, dar el poate lucra numai cu un singur tabel. Realizai interogarea ncruciat| din figura care urmeaz|. La nceput creai o interogare de selecie care s| conin| tabelele de mai jos, apoi folosii Crosstab din Query pentru ca linia Crosstab s|
Interog|rile ncruciate asigur| crearea unor totale permind n acelai timp i stabilirea exact| a modului n care informaiile sunt afiate pe ecran. Rezultatele sunt afiate sub forma unui tabel n care rndurile (prin Row Heading), coloanele (prin Coulmn Heading) i valorile (prin Value) plasate la intersecia acestora trebuie specificate explicit. Ele au urm|toarele avantaje: ! permit afiarea ntr-o form| compact| a unor cantit|i mari de date centralizate asem|n|tor cu Excel; ! datele sunt prezentate ntr-o form| mai potrivit| pentru crearea de grafice sau de diagrame cu ajutorul lui Access GraphWizard; ! se pot crea date centralizate n ordine cresc|toare pentru coloane identice, dar cu mai puine rnduri.
Funct -ia Str() transforma 7 numa 7 rul ntreg introdus de la tastatura 7 ntr-un sir de caractere, iar funct -ia Trim() elimina 7 spat -iile care intercaleaza 7s - irul.
Interog|ri ncruciate
http://www.east.utcluj.ro/mb/mep/antal
Implicit, Access consider| parametrii interog|rilor de tipul Text. n urm| modific|rii acestuia la Integer valorile pe care Access le va accepta vor fi numai de tipul ntreg. Pentru ca aceast| valoare ntreag| s| fie convertit| la un ir de caractere care s| poate fi ad|ugat la irul "*/*/" trebuie folosite urm|toarele funcii de conversie:
124
fie afiat|. Specificai n continuare cele trei componente (rnd, coloan| i valoare) ale interog|rii ncruciate. Rezultatele interog|rii sunt afiate ntr-un tabel de forma:
Cmpul Vinzari se calculeaz| prin formula: Vinzari: Sum([Order Details].[Quantity]* [Order Details].[UnitPrice])
Expr1, pe baza formulei de mai sus, va primi numele lunii, format| din trei caractere, n care s-a f|cut comanda, iar funcia Sum() va realiza suma valorilor cmpului corespunz|toare aceluiai produs ntr-o lun|. Dac| dorii ca valorile s| fie afiate ordonate, cresc|tor, dup| numele produsului, pentru coloana ProductName, selectai din Sort pe Ascending.
http://www.east.utcluj.ro/mb/mep/antal
La crearea unei interog|ri, propriet|ile ei pot fi setate din View, Properties. Acestea depind de tipul interoga 7 rii care se creeaza 7s - i de tabelul sau cmpul cu care se lucreeaza 7 . Cteva dintre proprieta 7tile mai importante sunt prezentate n tabelul care urmeaz|: Proprietate Descrierea Q u e r y S e l e c t C r o s s t a b U p d a t e D e l e t e M a k e T a b l e A p p e n d
Description
Propriet|ile interog|rilor
X X X X X X
0264-401667
NU COPIA !.
125
Output All Fields Top Values Unique Values Unique Records Run Permissions Source database Source Connect Str Record Locks
Afiarea tuturor cmpurilor din tabelul care este sursa de date n interogare Num|rul de valori "maxime" sau "minime" care vor fi ntoarse ntoarce numai valori unice n cmpurile mulimii dinamice
X X X X X X
X X X X X X X
ntoarce numai nregistr|ri unice n cmpurile mulimii dinamice Stabilete drepturile utilizatorului specificat
http://www.east.utcluj.ro/mb/mep/antal
X X X X X X X X X X X X
ODBC Time-out Filter Order By MaxRecords SubDatasheet name Link Child Fields Link Master Fields Subdatasheet Height
Blocarea nregistr|rilor cnd interogarea se execut| (de obicei pentru cele de aciune)
X X X X X X X X X X X X X X X X X X X X X X X
Num|rul maxim de nregistr|ri ntors de baza de date ODBC Numele subfoii de date
X X X
X X X
X X X
X X X X
Subdatasheet Expanded
X X X X
Tipul mulimii de nregistr|ri, specific| dac| tabelele pot fi editate Numele tabelului destinaie
X X
0264-401667
NU COPIA !.
126
X X
Find Duplicate Query Wizard acioneaz| asupra unui singur tabel, iar Find Unmatched Query Wizard compar| nregistr|rile unui table cu cele ale unui alt tabel. Aceste generatoare sunt afiate n lista generatoarelor disponibile atunci cnd se ncepe o nou| interogare.
0264-401667
NU COPIA !.
Generatorul permite crearea unor interog|ri pentru afiarea nregist|rilor va 7 duve i orfane ntre dou| tabele. O nregistrate este orfan| dac| n tabelul din partea de "muli" nu are corespondent n tabelul din partea de "unu". O nregistrare este v|duv| dac| n partea de "unu" a unei relaii "unu la muli" nu exist| nregistrarea corespondent| n cel|lat tabel. Access cere 7 tabele de comparat, cmpul de lega 7 tura 7 ntre ele si cmpurile tabelului numele celor doua "unu" care vor fi afis - ate. Daca 7 se creeaza 7 relat -ii ntre tabele si se ncearca 7 setarea integrita 7tii -iale, acest tip de interogare va raporta nregistra 7 rile care violeaza 7 intergritatea. referent
Generatorul permite crearea unei interog|ri care raporteaz| nregist|rile unui tabel care oprezint| dubluri pentru unul sau mai multe cmpuri ale tabelului. Access va cere care sunt cmpurile de verificat, apoi mai cere un grup de alte cmpuri care vor fi afiate de interogare. Pe baza rezultatelor, se pot determina viola 7 rile de chei datorit| duplic|rii valorilor. Atunci cnd avem un tabel "primit", pentru care trebuie s| cre|m o cheie, iar aceast| interogare afieaz| nregist|ri, avem siguri valori Null sau nregistr|ri duplicate.
Access are dou| generatoare pentru ntreinerea bazelor de date: ! Find Duplicate Query Wizard: afieaz| nregistr|rile duplicate, ntr-un singur tabel, pe baza unui cmp al tabelului; ! Find Unmatched Query Wizard: afieaz| toate nregistr|rile care nu au nregistr|ri corespondente ntr-un alt tabel.
http://www.east.utcluj.ro/mb/mep/antal
X X
127
selectarea lui Tables/Queries. Tabelul care urmeaza 7 descrie opt -inile implicite de proiectare a interoga 7 rilor prezentate n figura de mai sus. Opt -iune Descriere
Run Permissions
Restrict -ioneaza 7 vizualizarea rezultatelor interoga 7 rii ntr-un mediu multi-utilizator. Pentru Owner rezultate pot fi va 7 zute 7 rii numai de creatorul interoga
Validata 7 , opt -iunea genereaza interoga 7 ri care respecta 7 sintaxa ANSI-92 SQL
0264-401667
NU COPIA !.
Foloses - te numele comune de cmpuri pentru crearea automata 7 de asocieri ntre doua 7 tabele care nu au relat -ii. Tipul cmpurilor 7 fie identic trebuie sa
http://www.east.utcluj.ro/mb/mep/antal
Exista 7 mai multe opt -iuni de proiectare implicite care pot fi specificate la proiectarea unei interoga 7 ri. Acestea se vizualizeaza 7 prin selectarea din Tools a lui Options, apoi prin
128
conceptele de baz| legate de aspectul vizual al formularelor (Form cum se creeaz| un formular cu aplicaia AutoForm;
Layout Types);
Wizard);
de formular (Form View) i de vizualizare nainte de tip|rire (Print Preview) ale formularelor;
! ! ! ! ! ! !
cum se utilizeaz| vizualizarea n mod proiectare a formularelor; cum se deschide un formular existent n mod proiectare; cum se afieaz| lista propriet|ilor (Property List); cum se afieaz| lista cmpurilor (Field List); cum se afieaz| cutia cu instrumente (Toolbox);
cum se afieaz| codul din spatele formularului (Code Behind the Form); cum se selecteaz| i manipuleaz| controalele (Control) i etichetele cum se modific| dimensiunea unei seciuni (Section); cum se modific| l|imea (width) unui formular;
! ! !
(Calculated);
folosite n formulare;
0264-401667
(Label);
http://www.east.utcluj.ro/mb/mep/antal
Obiectivele cursului 7
NU COPIA !.
129
Formulare (Forms)
Formularele furnizeaz| o metod| prietenoas| de vizualizare a datelor, acestea pot fi afiate folosind diferite tipuri de caractere i culori, n afara acestora mai pot conine i imagini sau desene; Formularele se folosesc pentru afiarea i tip|rirea datelor; Formularele se folosesc pentru ad|ugarea, modificarea i tergerea ntegistr|rilor din baza de date.
n faza de proiectare a formularelor, o varietate de tehnici cum sunt texte adiionale, m|rimi i stilul de caractere, culori, imagini scanate, desene, grafice, butoane de comand| care pot fi folosite pentru a deschide noi formulare sau a nchide formulare deschise sau pentru a lansa interog|ri sau pentru a derula alte operaii, sunt folosite pentru a da o nou| imagine procesului de manipulare a datelor. Formularele sunt folosite ntr-o multitudine de scopuri: afiarea datelor; introducerea datelor n baza de date; editarea (modificarea i tergerea) datelor; tip|rirea datelor la imprimant|; formarea unui sistem de meniuri pentru utilizatorul bazei de date.
Toate datele unui formular au ca surs| unul sau mai multe tabele din baza de date. Structura tabelelor nu este afectat| de proiectul formularului, dar datele din tabel pot fi modificate prin aciuni lansate n cadrul formularului.
0264-401667
Tabelele furnizeaz| o modalitate convenabil| pentru stocarea datelor, iar interog|rile permit extragerea unor date care satisfac nevoi particulare.Vizualiz|rile n mod foaie de date (Datasheet View) a tabelelor i interog|rilor furnizeaz| modalit|i pentru afiarea i introducerea datelor. Formularele dau utilizatorului mai mult| putere n controlul datelor din baz|, furniznd n acelai tip i o interfa| vizual| mai atractiv|.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
130
Exist| o varietate de moduri de prezentare ale aspectului unui formular. Generatorul de formulare ofer| patru tipuri de aspecte. Fiecare poate fi modificat, ntre anumite limite ns|, pentru a satisface ct mai bine un aspect particular.
Coloan| (Columnar)
http://www.east.utcluj.ro/mb/mep/antal
Vizualizat n modul proiectare, formularul pune la dispozit -ia programatorului mai multe sect -iuni pe suprafat -a ca 7 rora pot fi plasate obiecte de control, denumite, pe scurt, controale. Sect -iunile cele mai folosite sunt: antetul formularului (form header): se afis - eaza 7 la nceputul ferestrei; sect -iunea detaliu (detail section): cont -ine controale pentru manipularea valorilor stocate n sursa de date (tabel sau interogare) - este o sect -iune obligatorie; sfrs - itul formularului (form footer): este zona din subsolul formularului.
Aliniat (Justified)
0264-401667
NU COPIA !.
131
Dup| ce formularul a fost creat, este deschis automat n modul de vizualizare al datelor (Form View) i este gata pentru introducerea sau modificarea datelor din tabel. Dac| n baza de date Northwind.mdb vei selecta tabelul Categories, vei obine formularul urm|tor:
Dac| dorii s| nchidei formularul, Access-ul va lansa un dialog pentru confirmarea salv|rii lui n baza de date.
butonul Forms; ap|sai butonul New i cutia de dialog New Form va fi afiat|: selectai Form Wizard; selectai un tabel sau o interogare care va fi sursa de date pentru formularul care urmeaz| s| fie creat - eu am selectat tabelul Employees
Este posibil| crearea unui formular cu ajutorul Generatorului de Formulare (Form Wizard). Metoda este direct| i destul de simplu de utilizat. Proiectul formularului obinut se va putea modifica ulterior.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
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 deschidei tabelul sau interogarea n orice mod de vizualizare; clic pe AutoForms ( ) din meniul Insert.
132
din baza de date Northwind.mdb; clic pe butonul OK pentru afiarea paginii urm|toare din Generator;
clic pe cmpul care dorii s| apar| pe formular, apoi clic pe s|geata la dreapta (>) pentru ca s| fie ad|ugat n seciune cmpurilor selectate (Selected Fields); repetai procedura de mai sus pentru fiecare cmp care dorii s| apar| pe formular; Dac| este cazul, putei folosi s|geata n jos din seciune Tables/Queries a cutiei de dialog pentru a selecta o surs| de dat| diferit| care va conine alte cmpuri; eu am selectat cmpurile conform figurii urm|toare:
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
133
selectai opiunea dorit| apoi clic pe butonul Next; urm|toarea pagin| va afia o list| cu stilurile predefinite de formulare:
http://www.east.utcluj.ro/mb/mep/antal
selectai una dintre opiuni, apoi clic pe Next; urm|toarea pagin| permite specificarea numelui formularului care va fi creat i opiunile finale pentru utilizarea formularului;
0264-401667
NU COPIA !.
134
clic pe butonul Finish pentru crearea formularului; dac| ai p|strat opiunea "Open the form to view or enter information", atunci formularul va fi afiat pe ecran astfel:
http://www.east.utcluj.ro/mb/mep/antal
Modul de vizualizare proiectare (Design View) sau, mai pe scurt, modul proiectare permite ad|ugarea, modificarea i tergerea obiectelor de pe suprafaa formularului. Formularul creat anterior este prezentat n modul proiectare n figura al|turat|. pentru vizualizarea formularului n mod proiectare (Design View), clic pe meniul View ( ) n timp ce
0264-401667
NU COPIA !.
135
pentru a trece n modul formular, din meniul View, selectai Form View ( ).
Vizulalizare nainte de tip|rire (Print Preview) permite afiarea pe ecran a formei n care se va tip|ri la imprimant| coninutul unui formular.
Vizualizarea nainte de tiparire (Print Preview)
http://www.east.utcluj.ro/mb/mep/antal
Modul de vizualizare formular sau, mai pe scurt, modul formular este cel pentru care s-a creat formularul. n acest mod se pot introduce sau modifica datele din tabelele i interog|rile care sunt sursele de date ale formularului.
Este posibil s| nu folosim Generatorul pentru crearea ntregului formular, ci s| construim numai un schelet de baz|. Exist| cazuri cnd formularul pe care l dorim difer| foarte mult de tipurile pe care Generatorul le poate crea, n acest caz vei construi formularul de la "zero". n fereastra bazei de date, clic pe butonul Forms; Pentru a crea un clic pe butonul New, acesta va duce la afiarea ferestrei New formular fara Form; Generator
0264-401667
NU COPIA !.
136
n exemplul care urmeaz| voi folosi tabelul Employees din baza de date Northwind.mdb
din list| selectai vizualizarea n mod proiectare (Design View), apoi clic pe s|geata n jos i selectai tabelul sau interogarea care va fi sursa de date pentru formular; clic pe butonul OK i proiectul formularului va fi vizualizat pe ecran.
http://www.east.utcluj.ro/mb/mep/antal
deschidei o baz| de date astfel nct s| fie afiat| fereastra bazei de date (Database Window); clic pe butonul Form; deschidei formularul pe care dorii s|-l vizualizai; clic pe meniul View, de aici selectai Design View.
n exemplul care urmeaz| am folosit formularul Orders din baza de date Nortwind.mdb. n
0264-401667
NU COPIA !.
137
http://www.east.utcluj.ro/mb/mep/antal
Fereastra modului proiectare conine un num|r de elemente vizuale cu care trebuie s| fii familiarizai. Afiarea sau ascunderea liniarului (Rulers)
0264-401667
NU COPIA !.
138
La deschiderea unui formular, obiectul selectat este chiar formularul, lista propriet|ilor lui se prezint| sub forma:
Lista cmpurilor pentru formularul Orders, care are ca surs| de date interogarea cu numele Orders Qry, se prezint| sub forma:
Afiarea cutiei cu instrumente (Toolbox) Bara cu instrumente grupeaz| obiectele standard, numite i controale (controls) care pot fi aezate pe suprafaa unui formular. pentru afiarea barei cu instrumente clic pe Toolbox din meniul View sau din bara de instrumente Form Design, clic pe ;
0264-401667
NU COPIA !.
Afiarea listei cmpurilor (Field List) Sursa de date a formularului este fie un tabel, fie o interogare. Ar fi incomod dac| utilizatorul ar trebui s| memoreze numele cmpurilor de date ale sursei. Afiarea listei de cmpuri ale sursei de date rezolv| aceast| problem|. Dac| dorii ca unul din cmpurile listei s| apar| pe suprafaa formularului este suficient s|-l tragei din list| pe suprafaa formularului. pentru afiarea listei cmpurilor, clic din meniul View pe Field List sau din bara de instrumente Form Design, clic pe .
Afiarea listei de propriet|i (Properties) a unui obiect de pe suprafaa formularului Fiecare obiect de pe suprafaa formularului are un set de caracteristici denumite propriet|i. Acestea sunt afiate de Access ntr-o fereastr| special| sub forma unei liste. Unele propriet|i pot fi modificate de utilizator arbitrar, altele pot lua numai valori particulare care se pot selecta din liste speciale. pentru afiarea listei de propriet|i clic pe Properties din meniul View sau din bara de instrumente Form Design, clic pe .
http://www.east.utcluj.ro/mb/mep/antal
dac| liniarul nu este afiat, din meniul View, clic pe comanda Ruler. Dac| liniarul este afiat, un clic pe aceeai comand| va duce la ascunderea lui. Un articol de meniu care are dou| st|ri distincte i stabile, ntre care comut| la selectare, se numete articol bistabil.
139
Afiarea codului din spatele formularului Obiectele bazei de date i cele ale unui formular pot fi manipulate prin intermediul limbajului de programare Visual Basic for Applications (VBA). Instruciunile corespunz|toare obiectelor unui formular pot fi vizualizate astfel: clic pe Code din meniul View sau
http://www.east.utcluj.ro/mb/mep/antal
.
Dup| ce ai creat un formular cu Generatorul, putei muta, ad|uga sau terge unele cmpuri. Principiul de lucru este acelai cu cel uzitat n toate aplicaiile Microsoft: selecteaz|, apoi manipuleaz|.
0264-401667
NU COPIA !.
140
Editarea controalelor
Poziionarea i redimensionarea unui control este mai uoar| dac| se folosete grila (Grid).
Selectarea unui control cu mouse-ul
selectai Format din meniu; selectai articolul de meniu Snap to Grid. Dac| aceast| opiune este activat| sub forma toate controalele care se vor crea vor fi fixate n punctele grilei.
avnd selectate un grup de controale, plasai cursorul pe latura controlului. Forma cursorului se va schimba ntr-o mn| deschis|; tragei controlul n noua poziie, apoi eliberai butonul mouse-ului.
avnd selectat un control sau un grup de controale, plasai cursorul peste dreptunghiul din stnga sus (move handle) al unui control. Cursorul i va schimba forma ntr-o mn| care
0264-401667
NU COPIA !.
Clic undeva pe suprafaa controlului. Dac| ai f|cut clic pe o etichet|, vei observa opt puncte de form| dreptunghiular| n colurile cutiei etichet| (Label box) i la mijloacele laturilor cutiei care permite modificarea dimensiunilor cutiei (sizing handles). n colul din stnga sus se observ| un punct mai mare (move handle), el apare att la etichet| ct i la cutia text. Dac| facei clic pe suprafaa cutiei text vei observa cele opt dreptunghiuri n aceleai poziii caracteristice, de data aceasta pe chenarul cutiei de text i unul singur n colul stnga sus al cutiei etichet|. Acest punct mai mare n colurile din stnga sus permite deplasarea individual| sau n grup a celor dou| cutii.
Controalele se folosesc pentru introducerea si afis - area datelor, de asemenea, se mai folosesc pentru afis - area informat -iilor statice. Fromularele si rapoartele lucreaza 7 cu aceles - i controale. n cele ce urmeaza 7 vor fi discutate controalele pentru formulare. Controalele sunt n realitate ferestre, asemenea tuturor celorlate elemente ale unei aplicat -ii Windows. Le fel ca si orice alta 7 ferestra 7 , controlul, poate primi date de la utilizator numai daca 7 este activ (are focalizarea). De exemplu, pentru ca utilizatorul sa 7 poata 7 introduce date ntr-o Cutie Text, aceasta trebuie sa 7 fi fost selectata 7 n prealabil de utilizator sau printr-o secvent -a 7 de program. Unele controale pot lua valori specificate n timpul proiecta 7 rii de ca 7 tre utilizator sau n timpul execut -iei aplicat -iei prin anumite secvent -e de program. Valoarea controlului este cea afis - ata 7 de acesta, de exemplu, o Cutie Text este valoarea afiata 7 n interiorul cutiei. Toate controalele au 7ti pe care aplicat -ia le poate citi si modifica. proprieta
Rolul controalelor
http://www.east.utcluj.ro/mb/mep/antal
Controalele pe care Access-ul le pune pe suprafaa unui formular, n urma folosirii Generatorului, se numesc controale legate. Aceasta nseamn| c| ele sunt legate de cmpurile tabelelor sau interog|rilor care au fost selectate drept surs| de date. Un control legat este compus dintr-o etichet| (Label) i o cutie text (Text box). Eticheta este titlul cmpului afiat pe suprafaa formularului i se g|sete stocat| n proprietatea titlu (Caption) din lista de propriet|i ale etichetei. Cutia text va stoca datele dintr-un tabel.
141
7 : Dac|, atunci cnd facei clic pe un control, meninei ap|sat butonul din stnga, Nota cursorul va lua forma minii deschise i controlul va putea fi mutat imediat.
selectai un control, poziionai cursorul pe unul dintre punctele de redimensionare (sizing handles). Forma cursorului se va modifica ntr-o linie cu s|gei la ambele capete indicnd sensurile n care se poate efectua tragerea; clic pe butonul stng al mouse-ului i tragei de punct, redimesionnd obiectul la o dimensiune mai mare sau mai mic|.
selectai controlul sau controalele; selectai Duplicate din meniul Edit. O copie a controalelor va ap|rea imediat dedesubtul controalelor originale.
7 : Dac| repoziionai controlul duplicat i selectai din nou Duplicate, Access-ul va crea Nota un al treilea control care va fi poziionat aa nct cele trei controale s| fie egal distanate.
clic ntr-un punct n afara grupului i tragei cursorul peste controalele de selectat. Pe m|sur| ce mutai cursorul el va desena un dreptunghi n jurul grupului selectat. Toate controalele care sunt cuprinse n interiorul dreptunghiului sau sunt intersectate de laturile lui, vor fi selectate.
inei ap|sat| tasta Shift pe m|sur| ce selectai fiecare control. Dac| din eroare ai selectat un control nedorit selectai-l din nou, efectul va fi deselectarea lui.
0264-401667
NU COPIA !.
selectai controlul; selectai Cut sau Copy din meniul Edit pentru a plasa controlul n Clipboard; selectai Paste din Edit. Controlul va fi plasat n colul din stnga sus al seciunii de detalii a formularului; mutai controlul n poziia dorit|;
Nota 7 : Dac| ai selectat o etichet| i ap|sai Delete, se va terge numai eticheta. Dac| ai selectat o cutie text, la ap|sarea lui Delete se va terge att cutia ct i eticheta corespunz|toare ei.
http://www.east.utcluj.ro/mb/mep/antal
142
selectai alinierea (Align) din meniul Format, apoi selectai opiunea de aliniere dorit| din submeniul: .
selectai Save din meniul File; introducei numele formularului; ap|sai Enter, apoi clic pe OK.
Dac| modificai poziia controalelor sau ad|ugai noi controale formularului este posibil s| dorii modificarea dimensiunilor unei seciuni de formular. poziionai cursorul peste marginea de jos a seciunii. Forma cursorului se va modifica la o linie vertical| cu dou| s|gei la capete suprapus| peste o linie oriozontal| mai groas|; tragei marginea seciunii pn| cnd ajunge la dimensiunea dorit|.
poziionai cursorul peste colul din dreapta jos a seciunii. Cursorul va lua forma unui plus cu s|gei la fiecare extremitate; tragei colul seciunii i formularului pn| la dimensiunea dorit|.
Controlul legat afieaz| date dintr-un tabel sau interogare. Se folosesc pentru afiarea, modificarea i ad|ugarea datelor din tabele. Cel mai frecvent folosit control legat este Cutia Text (Text box). Controalele legate motenesc propriet|i ale tabelului de care sunt legate. Propriet|ile controlului pot fi modificate n formular f|r| afectarea
Tipuri de controale
poziionai cursorul peste marginea din dreapta a oric|rei seciuni din formular. Cursorul va lua forma unei linii orizontale cu dou| s|gei la capete suprapus| peste o linie mai groas| vertical|; tragei marginea seciunii pn| ce ajungei la dimensiunea dorit|.
0264-401667
NU COPIA !.
selectai controalele care dorii s| fie spaiate; selectai spaiere orizontal| (Horizontal Spacing) sau spaiere vertical| (Vertical Spacing) din meniul Format; selectai m|rete (Increase), micoreaz| (Decrease) sau f|-le egale (Make Equal) din submeniul: .
http://www.east.utcluj.ro/mb/mep/antal
143
http://www.east.utcluj.ro/mb/mep/antal
Controlul nelegat este f|r| surs| de date. El poate afia informaii de tipul text, linie, dreptunghi sau imagine. De asemenea, poate accepta date care nu sunt ns| introduse direct ntr-un tabel.
Generatoarele de Controale permit crearea simpl| ale urm|toarelor tipuri de controale: Cutie List| (List Box); Cutie Combinat| (Combo Box); Grup de Opiuni (Option Group); Buton de Comad| (Command Button).
Etichet| (Label)
Pictograma se folosete la crearea unui text care nu se modific|. Majoritatea controalelor au ataate automat, la creare, o etichet|. Sunt utile la afiarea unui text undeva pe suprafaa formularului.
0264-401667
NU COPIA !.
144
Controlul d| posibilitatea seleciei unei singure opiuni dintr-un grup. Selecia unei opiuni din grup le exclude automat pe celelalte. Controlul permite, selectarea sau deselectarea unei opiuni. Att text, ct i desene pot fi folosite pentru a specifica semnificaia lui. Acest control permite, fie selectarea, fie deselectarea unei opiuni. Un punct negru este afiat dac| opiunea este selectat|.
Acest control permite, fie selectarea, fie neselectarea unei opiuni. Semnul "bifat" U este afiat n caz de selecie. Butoanele de Selecie nu sunt mutual exclusive n selecie, adic| se poate s| fie simultan selectate mai multe. Controlul va afia o list| de opiuni disponibile. Putei vedea opiunile efectund clic pe s|geat| n jos din dreapta cutiei. Alternativ, putei introduce, la fel ca n Cutia Text, o opiune care nu apare n list|, Access-ul modificnd elementul de list| afiat la cel mai apropiat de textul introdus. Dac| nu ai activat proprietatea Limit To List la crearea Cutiei Combinate, noua valoare introdus| va fi salvat| n tabel.
http://www.east.utcluj.ro/mb/mep/antal
Este cel mai utilizat control pe formulare. Se folosete pentru afiarea coninutului unui cmp i permite introducrea de la tastatur| de date noi n cmp.
Permite afiarea unor variante de opiuni sub forma unei liste prin care se poate defila. Numai valorile din list| pot fi selectate. Se folosete pentru lansarea unei aciuni. Aciunea este efectuat| pentru c| butonul este legat de o serie de comenzi denumite "Macro"uri sau Subprograme. Permite inserarea unei imagini n formular.
Imagine (Image)
0264-401667
NU COPIA !.
145
Se folosete cnd dorii s| afiai un obiect OLE sau o imagine ataat| unei nregistr|ri. Permite ad|ugarea sau editarea imaginii sau obiectului, nregistrare cu nregistrare. Controlul definete: aciuni la ap|sarea tastelor Page Up/Page Down; definete linia de sus a paginii noi la tip|rirea formularului. Permite definirea unui control organizat pe pagini de forma:
Control Tab
Subformular/Subraport (Subform/Subreport)
Pentru afiarea unei relaii unu-la-muli se insereaz| un Subformular n formular. De obicei, unu este n formularul principal, iar muli n subformular. Permite ad|ugarea de linii cu scopul de a face formularul mai atractiv i mai bine organizat.
Linie (Line)
0264-401667
Dreptunghi (Rectangle)
NU COPIA !.
Permite ad|ugarea unor dreptunghiuri cu scopul de a face formularul mai atractiv i mai bine organizat.
http://www.east.utcluj.ro/mb/mep/antal
Se folosete cnd dorii s| afiai un obiect OLE sau o imagine ca parte a unui proiect de formular. Obiectul va r|mne acelai, el nu se va modifica la deplasarea pe o alt| nregistrare.
146
Alte Controale
http://www.east.utcluj.ro/mb/mep/antal
Yes/No
Determin| cnd anume se afieaz| controlul Specific| afiarea barelor pentru deplasare
Yes/No
Permite creterea cutiei dac| mai multe linii de text sunt introduse
0264-401667
NU COPIA !.
147
Can Shrink
Yes/No
Left Top
Poziia colului stng a controlului n sistemul de unit|i curent Poziia colului de sus a controlului n sistemul de unit|i curent
http://www.east.utcluj.ro/mb/mep/antal
Permite micorarea cutiei dac| num|rul de linii este mai mic dect dimensiunea iniial| a Cutiei Specific| poziia controlului pe axa orizontal| Specific| poziia controlului pe axa vertical|
L|imea controlului n sistemul de unit|i curent n|limea controlului n sistemul de unit|i curent
Transparent , Normal
Back Color
Determin| dac| fondul controlului este transparent sau opac (normal) Specific| culoarea pentru interiorul controlului sau a seciunii Determin| modul de afiare a seciunii sau controlului Determin| afiarea transparent| sau opaca a marginilor unui control
Hairline, 1 pt - 6 pt
Specific| culoarea textului din control sau pe cea folsit| la tip|rire Numele tipul de caractere folosit pentru afiarea valorilor controlului
Font Name
Font Size
M|rimea caractelelor foloste pentru afiarea valorilor controlului L|imea liniei folosit| de Windows pentru afiarea i tip|rirea caracterelor
Font Weight
Extra Light, Light, Normal, Medium, Semi-Bold, Bold, Extra Bold, Heavy
0264-401667
Border Color
NU COPIA !.
148
Font Italic Font Underline Text Align Reading Order Keyboard Language
Yes/No Yes/No
http://www.east.utcluj.ro/mb/mep/antal
Caractere subliniate n control Seteaz| alinierea pentru textul din control Determin| ordinea de citire a caracterelor pe baza limbii Determin| limbajul de la tasatatur| pentru introducerea de date n control Barele pentru defilare pot fi aezate n stnga sau drepta controlului n funcie de limb| Forma numerelor pentru limbile arab| i hindi Marginea stng| a controlului n inchi Marginea dreapt| a controlului n inchi Marginea de sus a controlului n inch
Yes/No
Specific| dac| un control este sau nu hiperleg|tur| (pentru Yes textul este ablastru i subliniat i la clic duce la conectarea la Internet)
n figura ce urmeaz| se prezint| un formular care conine mai multe controale Etichet|. Proprietatea Caption conine textul pe care controlul l afieaz| pe ecran. ncercai s| creai formularul aa nct s| fie, n mod formular, vizualizat ntocmai ca i n figur|. La sfritul capitolului sunt prezentate toate propriet|ile specifice unui formular, o parte trebuie dintre ele modificate pentru ca aspectul formularului nou s| fie acelai cu cel din exemplu. Propriet|ile formularului vor fi vizibile dac| n modul proiectare se face clic n afara seciunilor
0264-401667
NU COPIA !.
Bottom Margin
149
formularului, apoi clic pe butonul din dreapta i din list| selectai Properties.
Navigarea ntr-un formular este aproape identica 7 cu cea dintr-o foaie de date. n mod formular, cel mai simplu mod de pozit -ionare n vederea modifica 7 rii unor date este clicul pe - ate numai attea cmpuri cte ncap pe ecran, mai multe cmpul dorit. ntruct pot fi afis tehhnici de navigare pot fi folosit pentru deplasarea n cadrul formularului sau ntre nregistra 7 ri, cteva dintre acestea sunt prezentate n tabelul urma 7 tor. Daca 7 formularul se ntinde pe mai multe pagini, se va afis - a o bara 7 de defilare pe verticala 7 (vertical scroolbar).
http://www.east.utcluj.ro/mb/mep/antal
Tab,
Shift+Tab,
Primul cmp al nregistra 7 rii curente Ultimul cmp al nregistra 7 rii curente
Efect
0264-401667
NU COPIA !.
150
Tehnica de editare Deplasarea punctului de inserare ntrun cmp Inserarea unei valori ntr-un cmp Selectarea ntregului cmp nlocuirea unei valori existente cu una noua 7
nlocuirea valorii curente, cu cea 7 , introdusa 7 ntr-un cmp precedenta nlocuirea valorii curente cu cea implicita 7 Inserarea datei curente n cmp Inserarea orei curente n cmp
Inserarea unei ntreruperi de linie n cmpurile de tipul Text sau Memo Inserarea unei nregistra 7 ri noi
Ctrl+Enter
Ctrl++ (plus)
Ctrl+- (minus)
NU COPIA !.
Proprietate
Caption
Proprieta 7tile formularului afecteaza 7 modul de afis - are a ntregului formular. Cele mai importante proprieta 7ti sunt prezentate n tabelul urma 7 tor:
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
7 sau a lui 6
151
Default View
http://www.east.utcluj.ro/mb/mep/antal
7 O nregistrare pe pagina
Maxim nregistra 7 ri pe pagina 7 (Implicit)
PivotTable
- eaza 7 valorile cmpului Afis orizontal sau vertical, apoi 7 suma pe coloana 7 calculeaza sau rnd
Analiza grafica 7 a datelor
PivotChart
Allow Pivot Table View Allow Pivot Chart View Scroll Bars
Horizontal Only
Se afis - eaza 7 numai cea orizontala 7 Se afis - eaza 7 numai cea orizontala 7
Vertical Only
Both
Record Selectors
Navigation Buttons
0264-401667
NU COPIA !.
Nu se afis - eaza 7
152
Dividing Lines
Auto Resize
Formularul se deschide - area completa 7a pentru afis nregistra 7 rii (Yes.No) Centreaza 7 formularul la deschidere (Yes/No)
http://www.east.utcluj.ro/mb/mep/antal
Determina 7 afis - area de linii ntre sect -iunile vizibile ale formularului
Fara 7 margine sau elemente de margine (bare de defilare sau navigare) Margine subt -ire, nu se poate redimensiona
Thin
Sizable Dialog
Control Box
Min Enabled
Max Enabled
Both Enabled
Close Button
7 afis - area Determina butonului Close n colt -ul dreapta-sus n meniul de control (Yes/No)
0264-401667
NU COPIA !.
None
153
Width
Afis - eaza 7 la 7timea formularului; se poate introduce sau Access o calculeaza 7 pe ma 7 sura 7 ce se creeza 7 formularul
Picture
Picture Type
http://www.east.utcluj.ro/mb/mep/antal
Imaginea este inclusa 7 n formular si devine parte a bazei de date Imaginea este doar legata 7. Access stocheaza 7 locat -ia 7 la imaginii si o ncarca fiecare deschidere a formularului
Linked
Zoom
7 dimensiunile Actualizeaza imaginii ca sa 7 ncapa 7 n formular proport -ional; poate rezulta o imagine care nu ocupta 7 ntreaga lungime sau la 7time din formular
Stretch
0264-401667
NU COPIA !.
154
Picture Alignemet
http://www.east.utcluj.ro/mb/mep/antal
Top Left
Imaginea se afis - eaza 7 n colt -ul stnga-sus a formularului, raportului sau a controlului de tip imagine Imaginea se afis - eaza 7 n colt -ul dreapta-sus a formularului, raportului sau a controlului de tip imagine
Top Right
Center
7 n Imaginea este centrata formular, raport sau n controlul de tip imagine (implicit)
Imaginea se afis - eaza 7 n -ul stnga-jos a colt formularului, raportului sau a controlului de tip imagine Imaginea se afis - eaza 7 n colt -ul dreapta-jos a formularului, raportului sau a controlului de tip imagine Imaginea formularului este 7 orizontal, n raport centrata cu la 7timea si vertical, n 7 lt -imea raport cu na formularului
Bottom Left
Bottom Right
Form Center
Picture Tiling
Se foloses - te pentru afis - area 7 turata 7 a unor imagini mici ala (Yes/No) Numa 7 rul de puncte pe inch la afis - area grilei pe X Numa 7 rul de puncte pe inch la afis - area grilei pe Y
Grid X
Grid Y
0264-401667
NU COPIA !.
155
http://www.east.utcluj.ro/mb/mep/antal
Determina 7 starea salvata 7a tuturor foilor de date dintr-un table sau interogare
Yes - Starea salvata 7a subfoilor de date este 7 expandara No - Starea salvata 7a subfoilor de date este nchisa 7
Orientation
Right to Left
Afis - area si funct -ionarea se face de la dreapta la stnga Afis - area si funct -ionarea se face de la stnga la dreapta
Let to Right
Movable
Record Source
Filter
Se foloses - te pentru a - area unei specifica afis submult -imi de nregistra 7 ri cnd se aplica 7 un filtru formularului Permite specificarea unui cmp pentru ordonarea datelor afis - are Permite ca utilizatorul sa 7 poata 7 afis - a date filtrate (Yes/No)
Order By
Allow Filters
0264-401667
NU COPIA !.
Determina 7 locul n care se afla 7 datele afis - ate de formular sau unde vor fi stocate noile date. Poate fi un formular sau o interogare
156
Allow Edits
Data Entry
http://www.east.utcluj.ro/mb/mep/antal
Permite sau opres - te editarea datelor facnd formularul read-only pentru nregistra 7 rile deja salvate (Yes/No)
Numai nregistra 7 rile noi sunt - ate/Toate nregistra 7 rile afis sunt afis - ate
Recordset Type
Numai cmpurile tabelului implicit pot fi ediate Cmpurile tuturor tabelel pot fi editate Nu se poate edita nici un cmp
Dynaset (Inconsistent)
Snapshot
No Locks
All Records
Toate nregistra 7 rile formularului sunt blocate n timpul folosirii lui Blocheaza 7 numai nregistrarea n curs de editare
Edited Record
0264-401667
NU COPIA !.
Record Locks
157
Modal
Cycle
Determina 7 efectul lui Tab n ultimul cmp al nregistra 7 rii All Records
http://www.east.utcluj.ro/mb/mep/antal
Se foloses - te atunci cnd formularul trebuie nchis nainte de a face operat -ii cu alte formulare; inactiveaza 7 celelalte ferestre; pentru valoarea Yes, Modal inactiveaza 7 meniurile si barele cu instrumente 7 de genernd o fereastra dialog (Yes/No)
Tab permite trecerea la urma 7 toarea ntegistrare Tab face revenirea pe primul cmp al nregistra 7 rii curente Tab face deplasarea de pe ultimul cmp al nregistra 7 rii pe primul cmp al paginii curente
Current Record
Current Page
Menu Bar
Shortcut Menu
Help File
0264-401667
Toolbar
NU COPIA !.
- te pentru Se foloses specificarea unei bare cu instrumente. Se poate crea o 7 cu instrumente prin bara selectarea opt -iunii Customize din comanda Toolbar a meniului View.
158
Help Context Id
http://www.east.utcluj.ro/mb/mep/antal
All Views
0264-401667
NU COPIA !.
159
Obiectivele cursului 8
cum se creeaz| un control de tipul cutie combinat| (Combo Box) folosind cum se utilizeaz| Constructorul de Expresii (Expression Builder) pentru
! ! ! ! ! ! ! ! !
cum se seteaz| valoarea implicit| (Default Value) a unui control; cum se seteaz| regula de validare (Validation Rule) i textul de validare cum se definete o masc| de intrare (Input Mask); conceptele de Macro-uri (Macros) i Evenimente (Events); cum se folosete un buton de comand| (Command Button) ntr-un cum se adaug| un buton de comand| la un formular.
formular;
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
160
Crearea controalelor este mult simplificat| prin utilizarea cutiei cu instrumente. Pentru a ilustra principiul vom crea un tip de control relativ complex, numit cutie combinat|. Acest tip de control permite, fie s| se introduc| o valoare de la tastatur|, fie s| se efectueze clic pe o s|geat| n jos, care va duce la desf|urarea unei liste de valori predefinite din care se poate selecta valoarea dorit|. Denumirea de cutie combinat| se datorete faptului c| acest control unific| comportamentul a dou| controale distincte: controlul cutie de text (Text Box) i controlul cutie de list| (List Box).
n exemplul care urmeaz|, se va folosi baza de date Northwind n care se va crea un formular nou pentru ilustrarea procedurii de creare a controalelor.
Crearea unui formular nou
deschidei baza de date Northwind; clic pe butonul Forms; clic pe butonul New; asigurai-v| c| din list| este selectat| vizualizarea n mod
http://www.east.utcluj.ro/mb/mep/antal
Crearea unei cutii combinate (Combo Box) folosind cutia cu instrumente (Toolbox)
Dac| cutia cu instrumente (Toolbox) nu este afiat| automat, efectuai clic pictograma
clic pe pictograma cutiei combinate (Combo Box) cutia cu instrumente; poziionai cursorul n zona de centru a formularului;
0264-401667
din
NU COPIA !.
161
clic pe butonul Next pentru a continua. Opiunea selectat| mai sus (I want the combo box to look up the values in a table or query.) va permite nc|rcarea listei de valori predefinite ale cutiei dintr-un tabel sau o interogare; urm|toarea fereastr| de dialog afiat| permite definirea sursei pentru datele pe care cutia le va afia;
http://www.east.utcluj.ro/mb/mep/antal
ap|sai butonul stng al mouse-ului i inndu-l ap|sat deplasai cursorul spre stnga jos. Vei defini astfel un dreptunghi care reprezint| dimensiunea controlului pe suprafaa formularului; eliberai butonul stng al mouse-ului i urm|toarea fereastr| de dialog va fi afiat|:
pentru acest exemplu, asigurai-v| c| tabelul Categories este selectat nainte de ap|sarea butonului Next; fereastra de dialog care va fi afiat| permite selectarea unui cmp care va fi sursa
0264-401667
NU COPIA !.
162
pentru acest exemplu selectai CategoryName, apoi clic pe s|geata la dreapta pentru ad|ugarea acestui cmp n lista Selected Fields; clic pe Next pentru continuare; Urm|toarea fereastr| de dialog care va fi afiat| permite controlul l|imii (width) cutiei combinate.
http://www.east.utcluj.ro/mb/mep/antal
n acest caz, cutia trebuie s| fie suficient de lat| ca s| asigure afiarea complet| a tuturor valorilor din list|. Dac| aceast| condiie nu este ndeplinit|, poziionai cursorul pe marginea din dreapta a coloanei CategoryName i tragei marginea spre dreapta pn| ce vei obine l|imea dorit|;
0264-401667
NU COPIA !.
163
Categoriei;
clic pe butonul Finish pentru p|r|sirea Generatorului cu generarea controlului cutie combinat|. Formularul complet va ar|ta vizualizat n mod proiectare, astfel:
http://www.east.utcluj.ro/mb/mep/antal
clic pe butonul Next pentru a continua; urm|toarea fereastr| de dialog permite ca Access-ul s| stocheze valoarea selectat| din cutia combinat| pentru ca ulterior s| fie refolosit|. Pentru exemplul nostru clic pe Next; ultima fereastr| de dialog permite definirea etichetei asociate cutiei combinate;
0264-401667
NU COPIA !.
164
Pentru a vizualiza formularul aa cum l vede un utilizator, clic pe pictograma View bara de instrumente principal| i selectai Form View .
din
Pentru a folosi nou creata cutie combinat| clic pe s|geata n jos, iar lista valorilor predefinite va fi afiat| sub forma:
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
165
http://www.east.utcluj.ro/mb/mep/antal
Un formular are mai multe seciuni, att formularul, seciunile, ct i controalele care sunt poziionate n diferite seciuni au propriet|i individuale. Unele propriet|i sunt predefinite, altele apar pe m|sur| ce noi controale sunt ad|ugate unor seciuni. Indiferent de felul acestora, propriet|ile pot fi modificate de cel care dezvolt| formularul. n continuare voi prezenta o parte din propriet|ile unui formular, pentru a nv|a mai multe despre acestea folosii sistemul de ajutor interactiv (on-line help). Deschidei orice formular, apoi vizualizai formularul n mod proiectare. Pentru exemplul care urmeaz|, din baza de date Northwind, voi folosi formularul Employees.
0264-401667
NU COPIA !.
La proiectarea tabelelor am precizat c| este de evitat crearea unor cmpuri care stocheaz| date derivate sau calculate din alte date. De obicei, metoda eficient| este calcularea valorii dorite pe baza unor expresii aritmetice. Access-ul are o component| numit| Constructor de Expresii (Expression Builder) care asigur| scrierea corect| a expresiilor pe care nu le tii introduce corect, de exemplu din motive sintactice. Constructorul de Expresii poate fi folosit att n cazul formularelor, ct i n cazul interog|rilor i rapoartelor. Exemplul care urmeaz| folosete tabelul Order Details din baza de date Northwind. Din cmpurile Unit Price, Quantity i Discount se va calcula un cmp nou, numit Total = [Unit Price] * [Quantity] * [Discount]. Folosind Generatorul de Formulare (Form Wizard) se va crea un formular nou pe baza tabelului Order Details care va conine urm|toarele cmpuri: ProductID, Unit Price, Quantity i Discount.
http://www.east.utcluj.ro/mb/mep/antal
plasai cursorul de mouse oriunde n zona gri din afara unui formular sau deasupra liniarului (Ruler), dac| acesta este vizualizat; clic dublu pe butonul stng al mouse-ului sau clic pe butonul din dreapta o singur| dat|, apoi selectai Properties din list|; modificai proprietatea dorit| f|cnd clic n regiunea din dreapta, pe linia propriet|ii de modificat, unde vei introduce noua valoare dorit|.
Dup| ap|sarea lui Next, la forma formularului se va selecta Tabular, iar numele sub care se salveaz| va fi FOrder Details. Dup| ap|sarea lui Finish, formularul va fi afiat pe ecran astfel:
0264-401667
NU COPIA !.
167
Se trece la vizualizarea n mod proiectare (View Design View), cnd formularul se va afia astfel:
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
crete automat i n seciunea detaliilor (Detail) apare un nou control care are scris n el
Din bara cu instrumente (Toolbox) selectai controlul Text Box apoi poziionai cursorul de mouse undeva n dreapta formularului, n afara spaiului lui, pe o linie cu colul din dreapta sus al controlului Discount i ap|sai butonul stng al mouse-ului. L|imea formularului va
0264-401667
168
http://www.east.utcluj.ro/mb/mep/antal
Unbound. El are asociat| i o etichet|, aceasta nefiind necesar| va fi tears| (n figura anterioar|, eticheta este pus| peste controlul Quantity; este suficient s| ne poziion|m cu mouse-ul pe ea, clic pe butonul stng apoi ap|sai tasta Delete pentru tergerea ei). Afi|m lista propriet|ilor noului control i n locul lui Text10, scriem Total. Prin aceasta proprietatea Name primete valoarea Total. Ap|s|m tasta Tab, apoi facem clic pe butonul din dreapta cmpului gol pentru lansarea Constructorului de Expresii.
din prima list| selectai obiectul care conine controalele sau cmpurile care vor participa n expresie. Pentru exemplul actual, Access-ul selecteaz| automat formularul curent - FOrder Details -
0264-401667
NU COPIA !.
169
clic pe operatorul *. Procednd conform celor descrise construii expresia: [UnitPrice] * [Quantity] * [Discount]; clic pe butonul OK. Coninutul propriet|ii Control Source (Sursa Controlului) va deveni =[UnitPrice] * [Quantity] * [Discount]. Aceasta nseamn| c| valoarea acestui control nu se va lua dintr-un tabel sau interogare ci se va calcula pe baza expresie anterioare. Pentru ca formularul s| afieze o etichet| deasupra coloanei controlului Total, din seciunea Form Header, copiai controlul Detail i modificai proprietatea Caption a noului control etichet| la Total. Apoi aliniai-l pe vertical| la controlul cutie de text Total i pe orizontal| la controalele etichet| din seciunea Form Header. Vizualizat n mod formular, formularul FOrder Details va deveni:
http://www.east.utcluj.ro/mb/mep/antal
vizualizat n mod proiectare; din cea de a doua list| selectai UnitPrice, iar din cea de a treia Value; clic pe butonul Paste, iar expresia va fi afiat| astfel:
0264-401667
NU COPIA !.
170
http://www.east.utcluj.ro/mb/mep/antal
deschidei baza de date Northwind; clic pe butonul Form; clic pe butonul New; selectai Generatorul de Formulare (Form Wizard); selectai tabelul Products ca surs| de date pentru formular dup| cum se vede mai jos:
clic pe butonul Next pentru a continua; n continuare folosii forma implicit| - Columnar - de pe pagina urm|toare a Generatorului;
0264-401667
NU COPIA !.
171
comutai vizualizarea n mod proiectare (Design View) prin clic pe pictograma View (de pe Toolbar). Formularul va fi afiat dup| cum urmeaz|:
http://www.east.utcluj.ro/mb/mep/antal
clic pe butonul Next; selectai stilul Stone de pe aceast| pagin|, apoi clic pe Next; n pagina actual| dai numele de Formular cu Subformular formularului, apoi clic pe Finish.
prima oar| vei crea un spaiu pe formular n care s| fie pus subformularul; mutai cursorul de mouse n colul din drepta jos a ferestrei formularului i tragei de margine pentru a face fereastra mai mare; mutai cursorul de mouse pe marginea de sus a barei Form Footer i tragei bara n jos pentru a face spaiu suficient pentru subformular. Ecranul va avea o form| asem|n|toare cu cea din figura care urmeaz|:
0264-401667
NU COPIA !.
172
0264-401667
NU COPIA !.
acum suntem gata pentru inserarea subformularului. Dac| cutia cu instrumente nu este deja afiat|, clic pe pictograma Toolbox pentru afiare; clic pe pictograma Subform/Subreport din cutia cu instrumente; folosii tehnica tragerii pentru a crea un dreptunghi pe suprafaa formularului pe locul unde dorii s| fie poziionat subformularul; n momentul n care eliberai butonul mouse-ului, Generatorul de Subformulare i va
http://www.east.utcluj.ro/mb/mep/antal
173
n cazul exemplului nostru acceptai opiunea implicit|, apoi clic pe Next; n final, trebuie s| dai un nume subformularului, acceptai numele implicit de Orders Subform i clic pe butonul Next pentru a trece la urm|toarea pagin| a Generatorului; formularul va fi vizualizat n mod proiectare dup| cum urmeaz|:
http://www.east.utcluj.ro/mb/mep/antal
afia prima pagin|; selectai opiunea Forms; folosii s|geata n jos pentru a selecta din list| formularul care va fi folosit ca subformular. Pentru exemplul nostru vei selecta un formular existent Orders Subform; clic pe butonul Next pentru a continua, urm|toarea pagin| va fi afiat| dup| cum urmeaz|:
0264-401667
NU COPIA !.
174
La proiectarea formularelor, acestea trebuie s| permit| introducerea ct mai simpl| a datelor, de asemenea este tot sarcina noastr| s| facem ct mai grea introducerea unor date incorecte. Exist| o limit| a controlului care poate fi exercitat asupra datelor culese, dar exist| multe posibilit|i pentru verificarea corectitudinii datelor introduse. De exemplu, dac| dorii s| citii un num|r, putei face imposibil| introducerea unor caractere str|ine. Cnd cmpul corespunz|tor din tabel este o dat|, putei asigura neacceptarea unor date invalide, de exemplu 31/11/00 (noiembrie are 30 de zile). Propriet|ile controalelor care permit aceste verific|ri sunt:
Implementarea regulilor de integritate specifice bazei de date sau controlul datelor stocate n baz|
0264-401667
NU COPIA !.
- area ntr-o singura 7 fereastra 7 a cont -inutului tabelelor Subformularele sunt folosite pentru afis aflate n relat -ie 1 M. ntre tabele Products s - i Order Details exista 7 o relat -ie 1 M prin intermediul cmpului ProductID. Tabelul n care se afla 7 cheia primara 7 va fi sursa de date 7 cheia stra 7 ina 7 va fi sursa de date pentru subformular. pentru formular, iar tabelul n care se afla Cnd se navigheaza 7 printre nregistra 7 rile formularului, nregistra 7 rile afis - ate n subformular se 7 continuu fiind afis - ate numai acelea care corespund valorilor curente din cmpul de modifica lega 7 tura 7 . Mai sus, pentru prima nregistrare din formular ProducID ia valoarea 1, n subformular vor fi afis - ate numai acele nregistra 7 ri care au n ProducID s - i ele egale cu 1.
http://www.east.utcluj.ro/mb/mep/antal
175
Semnificaie
Validation Rule
O expresie care limiteaz| domeniul de valori care poate fi introdus. De exemplu, n cazul unui Salar poate fi >0 and < 1000000. Orice valoare n afara acestui domeniu nu va fi acceptat|. Un mesaj care va fi afiat dac| regula de validare este nc|lcat|.
Validation Text
Aceste propriet|i pot fi setate i la momentul proiect|rii tabelului. De asemenea, este posibil ca regulile de validare s| fie diferite dect cele din controalele formularului.
Setarea lui Default Value
vizualizai lista propriet|ilor (Property Sheet) controlului; selectai de sus butonul Data; clic pe Validation Rule - Regula de Validare; tastai o expresie sau clic pe butonul Constructorului de Expresii (Expression Builder). vizualizai lista propriet|ilor (Property Sheet) controlului; selectai de sus butonul Data; clic pe Validation Text - Text de Validare i introducei mesajul dorit.
vizualizai lista propriet|ilor (Property Sheet) controlului; selectai de sus butonul Data; clic pe Default Value - Valoare Implicit|; tastai o expresie sau clic pe butonul Constructorului de Expresii (Expression Builder).
http://www.east.utcluj.ro/mb/mep/antal
Aceast| valoare este automat inserat| n fiecare nregistrare nou|. Utilizatorul poate introduce pe locul acesteia o alt| valoare dac| este cazul.
Nota 7 : Generatorul M|tilor de Intrare se poate folosi numai cu controale de tipul dat| sau text.
Ordinea Tab-urilor specific| modul n care ne putem deplasa ntre controalele unui formular. Ea specific| plasarea pe urm|torul control cnd de exemplu, un cmp este plin sau am ap|sat una din tastele Tab sau Enter. La crearea unui formular, Access-ul stocheaz| ordinea Tab-urilor n ordinea ad|ug|rii controalelor pe formular. Dac| dorii s| modificai aceast| ordine, n special pentru a permite utilizatorului s| se plimbe ntr-o ordine ct mai natural| ntre controale, Access-ul ofer| o astfel de facilitate.
vizualizai lista propriet|ilor (Property Sheet) controlului; selectai de sus butonul Data; clic pe Input Mask - Masca de Intrare; tastai o Masca de Intrare sau clic pe butonul Generatorului M|tilor de Intrare (Input Mask Wizard).
0264-401667
NU COPIA !.
clic pe butonul Auto Order pentru a defini ordinea de la stnga la drepta sau de sus n jos. Dac| aceste variante nu sunt suficiente, folosind tehnica tragerii, se poate prinde un nume de cmp i trage pe poziia dorit| n list|.
Butoanele de comand| sunt folosite pentru iniierea unui grup de aciuni. Grupul de aciuni poate fi de dou| feluri: macro sau procedur| de eveniment (Event Procedure).
Ce este un macro?
Procedura de eveniment este un subprogram de tip subrutin| scris n limbajul de programare Visual Basic, care realizeaz| o operaie particular|, de exemplu g|sirea nregistr|rii urm|toare.
0264-401667
NU COPIA !.
Macro-ul este o secvent -a de aciuni grupate mpreuna 7 prin nregistare (recorded) ntr-o secven| particular|, pentru a fi lansate n execuie la orice moment ulterior nregistr|rii.
http://www.east.utcluj.ro/mb/mep/antal
deschidei formularul n mod proiectare; selectai Tab Order din meniul View; vei vedea o fereastr| de dialog care va conine numele controalelor de pe formular n ordinea Tab;
177
n exemplul care urmeaz| vom ad|uga un buton de comand| unui formular din baza de date Northwind: deschidei baza de date Northwind, clic pe butonul Forms, apoi selectai i deschidei formularul Categories. Formularul este prezentat mai jos.
comutai n mod proiectare (Design View) prin clic pe pictograma View din bara de instrumente standard i selectai Design View; dac| cutia cu instrumente nu este afiat|, afiai cutia cu instrumete Toolbox prin clic pe pictograma Toolbox; clic pe pictograma Command Button din cutia cu instrumente Toolbox; folosii tehnica de tragere cunoscut| deja pentru a desena un dreptunghi mic sub eticheta Description a formularului; cnd eliberai butonul mouse-ului, vei vedea prima fereastr| din Generatorul Butoanelor de Comand| (Command Button Wizard); exist| un num|r de categorii (Categories), fiecare categorie avnd un num|r disponibil de aciuni (Actions). Fiecare aciune are definit| cte o pictogram| care poate fi folosit| pentru butonul nou creat; pentru cazul exemplului nostru selectai categoria Form Operations - Operaii cu Formulare; din categoria Form Operations, selectai aciunea Close Form - nchide Formular. Pagina din Generator este afiat| n figura care urmeaz|;
http://www.east.utcluj.ro/mb/mep/antal
Pentru a exemplifica utilizarea butoanelor de comand|, din baza de date Northwind, deschidei formularul Customer Phone List. Pentru a vedea detaliile clienilor care ncep cu litera T, clic pe butonul de comand| T, pentru a vedea toate numerele de telefon, clic pe butonul de comad| All.
0264-401667
NU COPIA !.
178
clic pe butonul Next pentru a continua; urm|toarea pagin| a Generatorului va fi afiat|. Ea permite ad|ugarea unui text sau a unei pictograme pe butonul de comand|;
http://www.east.utcluj.ro/mb/mep/antal
acceptai opiunea implicit| i facei clic pe Next; ultima pagin| a formularului va fi afiat|. Aceasta permite definirea numelui butonului de comand|. n cazul nostru acest nume va fi CIesire;
0264-401667
NU COPIA !.
179
clic pe butonul Finish pentru ca Generatorul s| creeze butonul de comand|; formularul, coninnd proasp|tul buton de comand| va fi vizualizat n mod proiectare. pentru a vedea cum arat| formularul n mod formular (Form View), clic pe View din meniu, apoi selectai Form View;
http://www.east.utcluj.ro/mb/mep/antal
clic pe buton i formularul va fi nchis. Se va cere confirmarea salv|rii modific|rilor aduse formularului. Selectarea lui Yes va duce la ad|ugarea permanent| a butonului de comand| n formular.
Dac| un formular se ntinde pe o suprafa| mai mare dect n|limea ecranului, se poate utiliza ntreruperea de pagin| pentru a realiza afiarea coninutului formularului pe pagini. Utilizatorul va ap|sa tastele Page Up sau Page Down pentru a se deplasa pe pagina urm|toare
0264-401667
NU COPIA !.
180
cnd aceasta este vizualizat| n mod formular. Pentru a folosi ntreruperile de pagin| trebuie s| setai proprietatea DefaultView a formularului la valoarea Single Form.
Ada 7 ugarea unei ntreruperi de 7 pagina
clic pe instrumentul Page Break din cutia cu instrumente (Toolbox); clic n formular pe poziia n care dorii s| punei ntreruperea de pagin|, atenie s| nu t|iai prin ntrerupere un control; un rnd de 6 puncte va fi afiat pe marginea din stnga pentru a indica ntreruperea de pagin|.
Exemplul urm|tor are ca suport modelul relaional obt -inut ca urmare a normaliz|rii prezentate n cursul 3.
Tabele i relaii
Nume tabel TContacte
Numele tabelelor i cmpurilor care vor fi create se prezint| n continuare: Nume cmp Tip/Proprieta 7 i
IDContact
Data Type AutoNumber PrimaryKey Data Type: Text Field Size: 100
TContacte1
Data Type: Number Field Size: Long Integer Data Type: Number Field Size: Long Integer
TTipContact
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
181
Formulare
Primul formular care va fi creat va avea ca surs| de date tabelul TTipContact i se va salva sub numele de FTTipContact.
Etapele de parcurs sunt: din fereastra bazei de date selectai butonul Forms, apoi clic pe New; n ferestra New Form facei seleciile din figura al|turat|; noul formular va fi afiat, iar n continuare introducei datele conform figurii care urmeaz|: nchidei formularul al|turat, iar
0264-401667
NU COPIA !.
Observai c| opiunea 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 din TTipContact.
http://www.east.utcluj.ro/mb/mep/antal
182
n continuare vom crea pe baza tabelului TContacte un formular nou cu numele FTContacte. Figura ala 7 turata 7 prezint| seleciile care se fac pentru aceasta.
n pagina urm|toare, ambele cmpuri - are n vor fi selecate pentru afis formular. n varianta finala 7 , cmpul Nume Contact va fi afiat n formular, iar cmpul IDContact va 7 cut invizibil prin setarea fi fa proprieta 7tii Visible la No. n ultima pagin| a generatorului, acolo unde se cere numele formularului, specificai numele FTContacte. Noul formular va fi afiat pe ecran gata pentru introducerea datelor. Comutai pe vizualizarea n mod proiectare i facei loc pe suprafaa formularului pentru a insera un control de tipul Subform care va avea ca surs| de date tabelul cu numele TContacte1. Access va crea un subformular care va avea ca surs| de date interogarea de mai sus. Atunci cnd Access va cere numele sub care s| salveze interogarea acceptai numele implicit de TContacte1 subform. Realizai oriunde pe suprafaa subformularului clic dublu, Access va deschide automat, n mod proiectare, subformularul salvat. Vei avea trei controale Text Box pe suprafaa acestuia cu numele: IDContact, IDInfoContact i Info Contact. Selectai controlul Text Box cu numele IDInfoContact, apoi facei clic pe butonul din drepta. Din meniul Change To selectai Combo Box. Observai c| Text Box s-a transformat ntr-un control Combo Box. Vizualizai lista propriet|ilor controlului IDInfoContact. Acesta poate stoca o valoare numeric| n tabelul TContacte1 care are ntotdeauna un corespondent n tabelul TTipContact. Pentru noi ar fi mai simplu ca pe
http://www.east.utcluj.ro/mb/mep/antal
cnd vei fi ntrebat dac| dorii s| salvai modific|rile n noul formular (Do you want to save changes to the design of form 'Form1') selectai butonul Yes, apoi n noua fereastr|, la Form Name introducei FTTipContact i facei clic pe pe OK. Observat -i ca 7 n colt -ul din stnga sus este afis - at implicit numele sursei de date. Modificarea proprieta 7tii Caption a formularului permite afis - area unui alt text n locul celui implicit.
0264-401667
NU COPIA !.
183
Valoare TTipContact
Sursa de date pentru valorile pe care controlul Combo Box le va afia n list| Num|rul de coloane care vor fi afiate n control L|imea celor dou| coloane. L|imea pentru prima coloan| este 0, adic| ea nu se vede.
Column Widths
Introducei numele de contact Vasile Aioanei i informaiile de contact conform figurii care urmeaz|. Observat -i ca 7 , n figura 7 ,controlul IDContact nu este vizibil n subformular ntruct
0";3"
http://www.east.utcluj.ro/mb/mep/antal
lng| valorile numerice corespunz|toare tipului de contact s| se afieze i numele acestora. Controlul Combo Box va afia lista tuturor tipurilor de contacte i va introduce n controlul IDInfoContact valoarea numeric| corespunz|toare unui anumit tip de contact selectat din lista afiat| n Combo Box. Tabelul care urmeaz| prezint| lista propriet|ilor i semnificaia lor necesare pentru a face cele descrise mai sus. Semnificaie
7 clic pe numele cmpului pentru a selecta coloana, apoi clic pe el a fost ascuns (se realizeaza butonul din dreapta, din lista 7 selectat -i Hide Columns). Totul ar fi n ordine dac| nu va fi necesar s| folosim cndva un tip de contact care nu este introdus n tabelul TTipContact. Rezolvarea acestei situaii se face ad|ugnd n seciunea Form Footer a formularului un buton de comand| care dac| este ap|sat va deschide primul formular (FTTipContact) creat pentru a permite introducerea unui nou tip de contact. i n acest caz putem fi asistai de un generator, este suficient s| facem clic pe pictograma Command Button din Toolbox i s| poziion|m mouse-ul undeva sub bara pe care scrie Form Footer i care marcheaz| nceputul acestei zone. Generatorul va scrie automat codul corespunz|tor deschiderii unui formular dac| la categorii (Categories) selectai operaii cu formulare (From Operations), iar la aciuni (Actions) Open Form (deschide un formular).
La ap|sarea butonului Next vei selecta dintr-o list| numele formularului care va fi descris, adic| pe FTTipContact, apoi folosii Next pn| cnd ajungei la pagina din figura care
0264-401667
NU COPIA !.
184
urmeaz|.
Aici putei stabili dac| butonul va avea o imagine sau va conine un text ce specific| aciunea lui. Pentru exemplul nostru am ales varianta cu text, iar textul afiat de buton este: &Adauga tip contact. La ap|sarea lui Next va fi afiat| ultima pagin| a generatorului, aici vom introduce textul CAdauga pentru numele Command Button-ului, apoi vom ap|sa Finish.
http://www.east.utcluj.ro/mb/mep/antal
Ca exerciiu, vom mai ad|uga un buton de comand| care corespunde aciunii de nchidere a formularului curent (Close Form). n final formularul, dup| un pic de cosmetic|, va ar|ta ca s - i n figura anterioara 7.
Cunoatei deja c| un formular poate avea n spatele lui linii de program. Observai c| n cazul cnd introducei tipuri noi de contacte prin butonul Adauga tip contact, acestea nu vor
0264-401667
NU COPIA !.
185
nchidei fereastra de cod cu liniile de mai sus i acceptat -i salvarea lor. Acestea spun lui Access s| remprosp|teze informaiile afiate n controlul IDInfoContact a subformularului [TContacte1 subform] din formularul FTContacte n momentul cnd acesta este nchis. nchidei fereastra de modul apoi, formularul i r|spundei cu Yes, cnd se cere salvarea modific|rilor pe care le-ai f|cut.
http://www.east.utcluj.ro/mb/mep/antal
fi afiate imediat n lista tipurilor de contacte din formularul FTContacte dect dac| l nchidei i l redeschidei. Pentru evitarea acestei proceduri trebuie scrise cteva linii de program n formularul FTipContacte. Deschidei formularul n mod proiectare, afiai lista propriet|ilor formularului i pentru proprietarea On Close selectai din list| [EventProcedure], apoi clic pe butonul din dreapta i introducei liniile de program:
0264-401667
NU COPIA !.
186
Obiectivele cursului 9
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
cum se deschid i se vizualizeaz| rapoarte existente; cum se navigheaz| ntr-un raport; cum se tip|resc rapoarte; cum se vizualizeaz| ntreaga pagin| de raport;
cum se creeaz| un raport organizat pe coloane folosind AutoReport; cum se creeaz| rapoarte folosind Generatorul de Rapoarte (Report cum se adaug| nivelele de grupare (Grouping Levels) ntr-un raport; cum se specific| forma (layout) raportului; cum se specific| stilul raportului;
Wizard);
cum se folosete Generatorul de Etichete (Label Wizard); cum se folosete 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|;
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
187
Cel mai simplu mod de creare al unui raport este folosirea Generatoarelor din Access. Exist| mai multe variante de rapoarte. Metoda cea mai direct| de creare este AutoReport care genereaz| un raport din cmpurile unui tabel sau a unei interog|ri la simpla ap|sare a unui buton. Dintre variantele mai complexe sunt rapoartele de forma unei coloane (Single Column), rapoarte cu grupuri i totale (Groups/Totals) i rapoartele de form| tabelar| (Tabular Reports).
Gruparea permite identificarea i organizarea datelor pe grupe logice i calcularea de totale locale sau globale pe baza unor valori comune. Sunt permise cel mult 10 nivele de grupare. De asemenea, este posibil| includerea unor subrapoarte ca parte a unui raport.
nainte de a ncepe s| creai rapoarte singuri, ar fi util s| explorai rapoartele din baza de date Northwind. Le putei vizualiza n mod previzualizare i proiectare pentru a v| forma o idee
0264-401667
NU COPIA !.
Un raport are mai multe sect -iuni. Acestea se elaboreaza 7 , n faza de proiectare a raportului, prin pozit -ionarea pe suprafat -a sect -iunii de controale. Unele sect -iuni ale rapoartelor sunt opt -ionale, altele obligatorii. Cteva dintre tipurile de sect -iuni mai folosite sunt: antetul raportului (report header): apare o singura 7 data 7 , la nceputul raportului. Cont -ine, de obicei, elemente constante, valori de cmpuri care se vor afis -a numai pe prima pagina 7 a raportului. sfrs - itul raportului (report footer): apare o singura 7 data 7 , la sfrs - itul raportului. -ine elemente constante, funct -ii aplicate asupra tuturor cmpurilor sau valori de Va cont cmpuri care sunt concluzii trase pe marginea datelor din raport. sect -iunea detaliu (detail): apare pentru fiecare nregistrare din sursa de date (tabel sau interogare). Va cont -ine detaliile raportului si este cel mai des formata 7 din cmpuri si funct -ii. sect -iunea de grupuri (group header & footer): cnd mai multe nregistra 7 ri au aceeas - i valoare ntr-un cmp se poate realiza gruparea lor pe baza cont -inutului 7 ri consecutive. Din acest cmpului. Gruparea se poate realiza numai pentru nregistra motiv nregistra 7 rile trebuie sa 7 fie sortate pe baza valorilor cmpurilor folosite la 7 n Access). Fiecare grup grupare (sortarea si gruparea din rapoarte nu pot fi separata are o sect -iunile de antet (header) s - i sfrs - it (footer). Antetul este folosit folosit pentru - area valorilor pentru care se face gruparea, iar sfrs - itul este folosit pentru afis - area afis unor concluzii specifice respectivului grup de nregistra 7 ri. sect -iunea pagina 7 (page): fiecare pagina 7 scoasa 7 la imprimanta 7 are un antet si un sfrs - it. De exemplu, n sfrs - itul de pagina se poate afis - a numa 7 rul pagini de raport.
Exist| o multitudine de cazuri pentru folosirea rapoartelor, cteva mai comune ar fi: totale periodice ale vnz|rilor, liste de stocuri, liste de restanieri la plat|, facturi.
http://www.east.utcluj.ro/mb/mep/antal
Dup| cum am discutat n primele cursuri, proiectarea unei baze de date ncepe cu ce anume dorim de la aceasta, de exemplu, cum s| fie afiate rezultatele. Informaiile pot fi afiate pe ecran sau pot fi tip|rite la imprimant|. Pe ecran se vor afia de obicei foile de date i formularele, coninutul acestora fiind r|spunsul la o interogare sau o comand|. Formularele pot fi i ele tip|rite, dar pentru majoritatea cazurilor, tip|rirea rapoartelor asigur| metoda optim| de prezentare a informaiilor. Aceasta este adev|rat mai ales n cazul informaiilor care se prezint| sub forma mai multor nregistr|ri i n special pentru cazul cnd se doresc totale calculate pe baza datelor din nregistr|ri particulare.
188
deschidei baza de date Northwind i clic pe butonul Reports, dup| cum se vede n figura care urmeaz|:
clic dublu pe raporul care dorii s| fie vizualizat, pentru exemplul nostru am selectat raportul Catalog;
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
folosii barele de defilare (scroll bars) din dreapta i partea de jos a ferestrei pentru a v| poziiona pe diferite poriuni ale paginii.
nainte de prima tip|rire a raportului este posibil s| dorii modificarea marginilor paginii sau a orient|rii acesteia. Orientarea portret (Portrait) este cea normal|, dup| cum i numele sugereaz|, un format A4 apare cu latura mai lung| pe vertical|. Varianta alternativ| de orientare peisaj (Landscape) are latura mai lung| pe orizontal|. Odat| ce orientarea paginii a fost fixat|, aceasta va fi salvat| n raport. Dup| aceast| setare raportul poate fi tip|rit la imprimant| sau poate fi nchis i tip|rit ulterior, f|r| ca setarea s| se piard|.
NU COPIA !.
0264-401667
clic pe meniul File i selectai Page Setup. selectai butonul Margins; fixai marginile dorite modificnd valorile numerice din Top (sus), Bottom (jos), Left (stnga) i Right (dreapta) i apoi clic pe butonul OK.
folosii butoanele de navigare (navigation buttons) din colul stnga-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 stnga pentru a trece la pagina anterioar|; clic pe bara vertical| urmat| de s|geata la stnga pentru salt la prima pagin|.
poziionai cursorul de mouse oriunde pe suprafaa raportului. Acesta va lua forma unei lupe; clic pe butonul stng al mouse-ului. Afiarea raportului se va modifica aa nct toat| pagina s| ncap| n ferestra de vizualizare a raportului; clic din nou pe butonul stng pentru reafiarea raportului n forma iniial| cnd numai o poriune este vizualizat| din raport. Poziia cursorului de mouse determin| zona din pagin| care va fi vizualizat|.
http://www.east.utcluj.ro/mb/mep/antal
clic pe meniul File i selectai Page Setup; selectai butonul Columns; modificai opiunile Number of Colums (num|rul coloanelor), Row Spacing (spaierea dintre rnduri) etc. apoi clic pe OK. Pentru activarea tip|ririi de rapoarte sau etichete pe coloane trebuie ca valoarea setat| n Number of Colums s| fie mai mare dect 1.
deschidei baza de date Northwind i efectuai clic pe butonul Reports; clic pe butonul New;
http://www.east.utcluj.ro/mb/mep/antal
clic pe meniul File i selectai Page Setup; selectai butonul Page; fixai opiunile dorite
selectai tabelul sau interogarea care va fi sursa de obiecte i de date. Pentru exemplul prezentat am selectat tabelul Orders; selectai AutoReport: Columnar; clic pe butonul OK i raportul formatat pe coloane va fi generat i afiat pe ecran.
0264-401667
NU COPIA !.
191
deschidei baza de date Northwind i efectuai clic pe butonul Reports; clic pe butonul New. selectai tabelul sau interogarea care va fi sursa de obiecte i de date. Pentru exemplul prezentat am selectat tabelul Orders; selectai AutoReport: Tabular;
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
192
deschidei baza de date Northwind; clic pe butonul Reports din fereastra bazei de date; clic pe butonul New i se va afia fereastra de dialog New Report;
http://www.east.utcluj.ro/mb/mep/antal
selectai 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 afiat|;
0264-401667
NU COPIA !.
193
clic pe cmpul care dorii s| fie inclus n raport, apoi clic pe s|geata la dreapta pentru ad|ugarea cmpului n seciunea Selected Fields a ferestrei de dialog; repetai procedura de mai sus pentru toate cmpurile care dorii s| apar| n raport, n figura de mai sus am inclus cmpurile, CompanyName, ContactName, Address i City. clic pe butonul Next pentru a continua; nivelele de grupare vor fi discutate mai trziu n cadrul acestui
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
0264-401667
194
capitol, pentru moment facei clic pe Next pentru a trece de la pagina afiat| mai sus la cea de selectare a cmpurilor de sortare;
Sortarea nregistrarilor unui raport
pagina care urmeaz| permite selectarea criteriilor de sortarea cresc|toare sau descresc|toare a nregistr|rilor din rapoarte; pentru exemplul prezentat, am selectat sortarea cresc|toare,
prima oar| pe baza cmpului CompanyName i apoi pe baza cmpului ContactName; urm|toarea pagin| a Generatorului permite specificarea formei de afiare a raportului;
Determinarea -are a formei de afis raportului
0264-401667
putei selecta dintre formele de afiare: coloan| (Columnar), tabel (Tabular) i aliniat (Justified);
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
195
pagina care urmeaz| permite selecia unui stil de afiarea a cmpurilor din raport, pentru exemplul prezentat selectai Compact;
dup| ce ai selectat stilul, clic pe butonul Next pentru a continua; urm|toarea pagin| este i ultima ea permind denumirea raportului;
http://www.east.utcluj.ro/mb/mep/antal
se poate seta i orientarea paginii la portret (Portrait) sau peisaj (Landscape); la 7 imea cmpurilor se poate ajusta automat nct raportul s| ncap| pe pagin|; dup| ce ai selectat opiunile dorite clic pe Next pentru a trece la pagina urm|toare a Generatorului;
introducei la numele raportului RClieni; implicit este selectat| opiunea previzualizare raport (Preview the report); clic pe butonul Finish pentru a genera i previzualiza raportul.
0264-401667
NU COPIA !.
196
Deseori bazele de date conin liste cu adresele firmelor i indivizilor care particip| n diferite tranzacii. Unul dintre rapoartele care pot fi create pe baza acestor date specifice sunt etichetele cu adrese.
0264-401667
NU COPIA !.
deschidei baza de date Northwind; din fereastra bazei de date selectai butonul Reports; clic pe butonul New i se va afia fereastra de dialog New Report; selectai tabelul sau interograrea care va fi sursa de obiecte pentru raport;
http://www.east.utcluj.ro/mb/mep/antal
197
selectai Label Wizard; clic pe butonul OK pentru a continua; urm|toarea pagin| permite definirea dimensiunilor etichetelor i a hrtiei: de tip pagin| (Sheet feed) sau cu tractor (Continuous). Se pot modifica unit|ile de m|sur| folosite la afiarea dimensiunilor etichetei i din Customize se pot defini noi dimensiuni;
dup| ce ai selectat opiunile dorite clic pe butonul Next pentru a continua; pagina care urmeaz| permite definirea tipurilor de caractere:
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
198
aceast| pagin| permite sortarea etichetelor pe baza a unui cmp sau a mai multora;
clic pe un cmp din Available fields, apoi pe s|geata la dreapta pentru ad|ugarea cmpului n etichet|; repetai procedura de cte ori este nevoie; clic pe Next pentru a continua;
http://www.east.utcluj.ro/mb/mep/antal
selectai cmpurile pe baza c|rora se face sortarea, apoi clic pe Next pentru a continua; ultima pagin| din Generatror va fi afiat|, ea permite definirea numelui de raport;
0264-401667
NU COPIA !.
199
Uneori este de dorit ca rapoartele s| conin| reprezent|ri grafice ale unor mulimi de date stocate n baza de date. Access-ul pune la dispoziia utilizatorului generatoare de grafice care pot fi inserate n rapoarte sau formulare.
Crearea unui raport cu grafic
dechidei baza de date Northwind i din fereastra bazei de date selectai butonul Reports; clic pe butonul New i ferestra de dialog New Report va fi afiat|; selectai tabelul sau interogarea care va fi sursa de date a obiectelor care vor fi reprezentate grafic. n exemplul urm|tor am selectat Sales by Year;
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
ap|sai butonul Next pentru a trece la urm|toarea pagin| a Generatorului; aici se afieaz| toate tipurile de grafice pe care le poate crea Generatorul, de unde utilizatorul trebuie s| selecteze unul dintre tipuri;
http://www.east.utcluj.ro/mb/mep/antal
pe baza procedurii cunoscute deja, ad|ugai toate cmpurile din lista Available Fields: n Fields for Chart. Pentru c| este vorba de toate cmpurile acest efect se poate obine i printr-o singur| ap|sare a butonului ;
clic pe butonul tipului de grafic pe care dorii s|-l realizai, apoi clic pe butonul Next; n pagina care urmeaz|, trebuie s| decidei asupra modului de aranjare a datelor n grafic;
0264-401667
NU COPIA !.
201
putei folosi tehnica de tragere (drag and drop) cu butoanele din dreapta pentru modificarea cmpurilor din grafic; putei efectua clic dublu pe un buton al graficului pentru a modifica modul de nsumare sau grupare a datelor; de exemplu, dac| facei clic pe butonul SumOfSubtotal din stnga sus, pe ecran se va afia o fereastr| de dialog de forma:
http://www.east.utcluj.ro/mb/mep/antal
dup| ce ai fixat modul de prezentare a datelor, clic pe butonul Next; ultima pagin| va fi afiat|, aici dai nume raportului, pentru exemplul nostru acesta va fi Vnzari pe luni;
0264-401667
NU COPIA !.
202
ntruct interogarea, Sales by Year, care este sursa de date a graficului are doi parametri de tipul dat|, la afiarea raportului cu grafic valorile celor doi parametri sunt cerui prin dou| ferestre de dialog. Pentru prima dat| introducei valoarea astfel:
Dup| ap|sarea butonului OK, pe ecran se va afia un raport cu grafic de forma (menionez c| rezultatele prezentate n continuare sunt generate folosind baza de date Northwind.mdb care vine cu Access 97 - n versiunile mai noi de Access, perioada pentru care se face reprezentarea, va trebui schimbat|):
0264-401667
NU COPIA !.
putei, de asemenea, s| decidei asupra afi|rii sau neafi|rii legendei graficului; clic pe butonul Finish pentru ca Generatorul s| creeze raportul;
http://www.east.utcluj.ro/mb/mep/antal
203
Cea mai simpl| metod| de grupare a informaiilor n rapoarte este folosirea Generatorului de
http://www.east.utcluj.ro/mb/mep/antal
Rapoarte. Pentru prezentarea unor detalii este util ca nregistr|rile unui raport s| fie grupate pe baza valorilor stocate n unele cmpuri ale raportului. Pot fi definite cel mult 10 nivele de grupare ntr-un raport, dac| dorii este posibil ca datele s| i fie sortate n cadrul grupului.
0264-401667
NU COPIA !.
204
Grupul permite tratarea unitar| a nregistr|rilor fiind posibil| efectuarea de operaii de nsumare, mediere sau num|rare a elementelor unui grup. n Access, la nivelul rapoartelor, gruparea si sortarea nu pot fi despa 7 rt -ite. Sortarea ne permite sa 7 vizualiza 7 m nregistra 7 rile ntr-o ordine diferita 7 de cea de introducere a datelor. Des - i datele afis - ate de raport ar putea fi sortate folosind o interogare, este mai avantajoasa 7 sortarea directa 7 din raport. Daca 7 , dintr-un oarecare motiv, interogarea ar trebui modificata 7 , raportul va 7 afis - eze datele n ordinea corecta 7 . Ala 7 turi de sortare, numai n rapoarte, apare continua sa posibilitatea grupa 7 rii nregistra 7 rilor pe baza valorilor comune din cmpuri. Gruparea permite crearea a unei perechi antet (header), sfrs - it (footer) de grup.
nainte de crearea unor grupuri trebuie definita 7 ordinea de sortare, pentru cel put -in un cmp al raportului, folosind fereastra de dialog Sorting and Grouping. Ea se afis - eaza 7 , n modul proiectare a raportului, selectnd din meniul View pe Sorting and Grouping.
- ata 7; afis clic pe sa 7 geata n jos din dreapta, o lista 7 de valori posibile va fi afis - ata 7; selectat -i Yes din lista 7 , sect -iunea de antet (header section) va fi afis - ata 7 n raport.
7 permita 7 sorytarea s -i Pentru crearea unui antet de grup care sa gruparea pe baza lui Nume Contact: afis - at -i fereastra de dialog Sorting and Grouping; clic pe Nume Contact din coloana Field/Expression; clic pe proprietatea Group Header din partea de jos a ferestrei; sa 7 geata n jos va fi
0264-401667
NU COPIA !.
afis - ati fereastra de dialog Sorting and Grouping; clic n primul rnd al coloanei cu numele Field/Expresssion, sa 7 geata n jos va fi afis - ata 7; clic pe sa 7 geata 7 pentru afis - area listei de cmpuri din sursa de -i date a raportului (n fereastra de mai sus au fost selectatate cmpurile Nume Contact s IDInfoContact). Aceste nume exista 7 , deci pot fi selecate, numai daca 7 fac parte din sursa de date a raportului n lipsa unei surse de date, lista pentru select -ia cmpurilor de sortare s -i 7; grupare va fi vida selectat -i din lista 7 cmpul dorit; pentru cmpul selectat, din coloana Sort Order, aleget -i Ascending, pentru sortarea cresca 7 toare sau Descending pentru sortarea descresca 7 toare.
http://www.east.utcluj.ro/mb/mep/antal
205
7 toarele proprieta 7ti: n fereastra Group Properties sunt vizibile urma Group Header: valoarea Yes creeaza 7 antetul grupului, iar valoarea No sterge antetul; Group Footer: valoarea Yes creeaza 7 sfrs - itul grupului, iar valoarea No s - terge sfrs - itul; Group On: specifica 7 modul de grupare a valorilor. Opt -iunile afis - ate depind de tipul de data 7 a cmpului folosit pentru grupare. La gruparea pe baza unei expresii sunt afis - ate toate opt -iunile, altfel: - pentru tipuri de date Text: ! Each Value: gruparea se face pentru aceeas - i valoare n cmp sau n expresie; ! Prefix Character: gruparea se face pentru primele n caractere ale cmpului. - pentru tipuri de date Date/Time: ! Each Value: gruparea se face pentru aceeas - i valoare n cmp sau expresie; ! Year: gruparea se face pentru datele aceluias - i an calendaristic; ! Qtr: gruparea se face pentru pa 7 trimile aceluias - i an calendaristic; ! Month: gruparea se face pentru datele aceleias - i luni; ! Week: gruparea se face pentru datele din aceeas - i sa 7 pta 7 mna 7; ! 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 cmp sau expresie; ! Interval: gruparea se face pentru valorile din intervalul specificat; ! Group Interval: defines - te un interval valid pentru valorile cmpului sau expresiei folosite la grupare; ! Keep Together: aceasta 7 opt -iune face ca sect -iune de antet sa 7 nu fie afis - ata 7 la sfrs - itul de pagina 7 respectiv sect -iunea de sfrs - it sa 7 nu fie afis - ata 7 la nceputul unei pagini noi; ! Whole Group: tipa 7 res - te atetul si sfrs - itul de grup pe o singura 7 pagina 7; ! With First Detail: opres - te tipa 7 rirea cont -inutului
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
206
antetului de grup daca 7 sect -iunea detaliilor nu are nregistra 7 ri; - No: nu se face grupare.
Operat -ii elementare cu -iuni sect
7 ra 7a Access permite modificarea ordinii de sortare si grupare fa modifica controalele individuale corespunza 7 toare din atetele si - iturile asociate unei pagini. Pentru aceasta: sfrs clic pe bara de select -ie a a cmpului sau a expresiei care dorit -i sa 7 fie muata 7 n fereastra Sorting and Grouping; clic din nou pe bara 7s -i tinnd apa 7 sat butonul stng traget -i rndul pe noua pozit -ie; eliberat -i butonul stng.
deschidei baza de date Northwind i din fereastra bazei de date selectai butonul Reports; clic pe butonul Next pentru afiarea ferestrei de dialog New Report; selectai un tabel sau o interogare din list|; clic pe opiunea Design View; clic pe butonul OK;
0264-401667
NU COPIA !.
Access permite ada 7 ugarea de ntreruperi de pagina 7 pe baza ntreruperilor din grupuri, de asemenea, se pot insera ntreruperi n cadrul sect -iunilor, cu except -ia celor de pagina 7 . De 7 dorit -i ca fiecare grup nou sa 7 nceapa 7 pe o pagina 7 noua 7 se va folosi proprietatea exemplu, daca Force New Page. Aceasta poate lua urma 7 toarele valori: ! None: nu se fort -eaza 7 trecerea la pagina 7 noua 7 (implicit); ! Before Section: sect -iunea curenta 7 se va tipa 7 ri la nceputul unei noi pagini pentru fiecare grup nou; ! After Section: sect -iunea urma 7 toare se va tipa 7 ri la nceputul unei noi pagini pentru fiecare grup nou; ! Before & After: combina 7 efectele celor doua 7 valori anterioare.
Ascunderea unei sect -iuni are rolul pa 7 stra 7 rii grupa 7 rii datelor fa 7 ra 7 afis - area informat -iilor legate de grupul n sine si se realizeaza 7 astfel: clic pe suprafat -a sect -iunii de ascuns; vizualizat -i proprieta 7tile sect -iunii; clic pe proprietatea Visible; 7 geata n jos, din lista afis - ata 7 selecat -i pe No. clic pe sa
- tergerea unei sect -iuni de antet sau a unui sfrs - it de pagina 7 sau de raport, fa 7 ra 7 afectarea S sorta 7 rii, se poate face din View, Page Header/Footer respectiv din View, Report Header/Footer.
http://www.east.utcluj.ro/mb/mep/antal
207
Comutai pe vizualizarea n mod proiectare. Afiai cutia cu instrumente (Toolbox) din meniul View.
Cutia cu instrumente
Cutia cu instrumente este identic| cu cea de la formulare. Toate tipurile de controale pot fi create cu ajutorul cutiei cu instrumente.
dac| lista cmpurilor nu este afiat| selectai Field List din meniul View; selectai cmpul sau cmpurile n unul din urm|toarele feluri:
0264-401667
NU COPIA !.
Sunt trei tipuri de controale care pot fi puse pe suprafaa unui formular: 1. Controale legate (Bound Controls): se folosesc pentru afiarea datelor din cmpurile tabelelor 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 mai eficient ca prima oar| s| creai controalele legate; 2. Controale nelegate (Unbound Controls): se folosesc pentru afiarea unor informaii cum sunt texte, linii, dreptunghiuri i imagini. Un control nelegat nu este derivat dintr-un tabel; 3. Controale calculate (Calculated Controls): rezultatul acestora vine din evaluarea unei expresii.
Crearea de controale
http://www.east.utcluj.ro/mb/mep/antal
208
un cmp un grup de cmpuri adiacente grup de cmpuri neadiacente toate cmpurile din list|
Clic pe cmp.
inei ap|sat| tasta Ctrl n timp ce facei clic pe fiecare cmp dorit.
Clic pe bara cu titlul listei de cmpuri.
Crearea unei cutii cu text folosind cutia cu instrumente Crearea unei etichete
tragei cmpul sau cmpurile pe suprafaa raportului acolo unde dorii s| fie plasate. Dac| ai selectat mai multe cmpuri, ordinea lor este semnificativ|; clic pe pictograma Text Box din Toolbox. Cnd cursorul a ajuns pe suprafaa raportului forma lui se va modifica ntr-un semn + urmat de un dreptunghi care conine textul ab*; clic pe raport acolo unde dorii s| plasai cutia. clic pe pictograma Label din Toolbox; clic pe suprafaa raportului, acolo unde dorii s| plasai eticheta; introducei textul etichetei.
O alternativ| la crearea etichetelor este inerea ap|sat| a butonului stng i desenarea unui dreptunghi, de orice dimensiune, n care se va putea tasta textul dorit.
Crearea unui control legat folosind cutia cu instrumente
selectai Field List din meniul View pentru afiarea listei cmpurilor; clic pe instrumentul dorit din Toolbox; selectai un cmp din list| i tragei-l pe suprafaa raportului.
http://www.east.utcluj.ro/mb/mep/antal
Clic pe primul cmp, cu tasta Shift ap|sat|, clic pe ultimul cmp din grup.
NU COPIA !.
poziionai cursorul peste cutia cu text i selectai-o; introducei o expresie, cursorul va lua forma I, apoi ap|sai Enter.
La crearea unui raport, Access presupune anumite valori pentru unele propriet|i pentru fiecare din controalele i pentru seciunile raportului i raportul n sine. Controalele legate motenesc propriet|ile din tabele sau din interog|rile la care sunt legate. Propriet|ile pot fi setate folosind lista propriet|ilor (Property Sheet). Aceasta se poate afia din View, selectnd Properties.
0264-401667
209
Pentru a vedea mai multe propriet|i, folosii bara de defilare, prin selectarea butoanelor de sus (Format, Data, Event, Other, All) putei vedea numai o parte sau toate propriet|ile obiectului selectat. Cteva din propriet|ile specifice rapoartelor sunt: HideDuplicate RunningSum
Se folosete pentru ascunderea datelor dintr-un control dac| acesta are aceeai valoare cu cea din nregistrarea anterioar|.
CanGrow, CanShrink
Specific| dac| textul, seciunea unui raport sau subraport i poate modifica dimensiunile pentru a se acomoda la datele pe care le afieaz|. Nu se poate folosi pentru nceputuri (headers) i sfrituri (footers) de pagini.
Vom continua aplicaia creat| n cursul 8 prin ad|ugarea a dou| rapoarte: primul va afia numerele de telefoane n format "carte de telefon", iar al doilea adresele de web i pot| electronic| din baza de date. n acest scop trebuie s| cre|m dou| interog|ri care vor fi sursele de date pentru cele dou| rapoarte.
Aplicaia 1 cu rapoarte
Interog|ri
Creai interogarea din figura care urmeaz| i salvai-o sub numele de QMobilTelefon:
0264-401667
NU COPIA !.
Specific| efectuarea unui sume n cutia cu text. Se poate seta la valoarea Over Group, cnd suma se va face pe grupuri.
http://www.east.utcluj.ro/mb/mep/antal
210
Observai c| ea va conine numai nregistr|ri care au ca denumire tipurile de contacte: "telefon" sau "mobil". Dup| ce ai salvat interogarea, lansai-o n execuie pentru a verifica dac| informaiile afiate de aceasta sunt corecte. Copiai obiectul QMobilTelefon sub numele de QAdreseElectronice i modificai interogarea din urm| aa nct vizualizat| n mod proiectare s| fie de forma:
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
211
NU COPIA !.
Rapoarte
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
212
Creai cel de al doilea raport avnd ca surs| de date interogarea QMobilTelefon aa nct n mod proiectare s| cont -ina 7 sect -iunile si controalele din figura urma 7 toare.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
213
Raportul face sortarea nregistr|rilor pe baza celor scrise n fereastra Sorting and Grouping. Se observ| c| nregistr|rile vor fi grupate pe baza cmpului primului caracter (Prefix Characters) din cmpul Nume Contact, ceea ce nseamn| c| Access-ul ncepe un grup nou de cte ori primul caracter din numele contactelor de schimb|. Cnd aceasta se petrece va afia valorile din seciunea de sfrit a grupului (Group Footer) i valorile corespunz|toare seciunii de nceput a urm|torului grup (Group Header). Pentru ca Access-ul s| sorteze numele de contact n cadrul grupului trebuie ca Nume Contact s| fie ad|ugat din nou n fereastra Sorting and Grouping. La fiecare nceput de grup nou, n seciunea NumeContact Header, Access-ul va afia o copie mare a primei litere din numele de contact corespunz|tor grupului actual. Lista propriet|ilor pentru controlul din prima seciune Nume Contact Header este cea din figura al|turat|. Proprietatea nume (Name) are valoarea PimaLitera, iar cea surs| controlului (Control Source) =Left([Nume Contact], 1). Left() este o funcie care extrage un caracter din primul argument, n cazul de fa| valoarea din cmpul 7. [Nume Contact]. Previzualizarea raportului este prezentat| care urmeaza
http://www.east.utcluj.ro/mb/mep/antal
Observat -i ca 7 n fereastra Sorting and Grouping numele cmpului Nume Contact apare de doua 7 ori. Pentru fiecare caz se va afis - a antetul cmpului (proprietatea Group Header va lua valoarea Yes), dar, pentru prima aparit -ie proprieta 7tile vor fi setate dupa 7 cum se observa 7 n figura de mai sus.
0264-401667
NU COPIA !.
214
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Introducere n Microsoft Access: Rapoarte - cursul 9
Se observ| c| raportul se ntinde pe mai multe pagini. Dac| dorii s| folosii modul de afiare
0264-401667
215
0264-401667
NU COPIA !.
n cazul n care dorii ca nregistr|rile unui grup s| fie afiate mpreun| pe aceeai coloan|, nu ca n figura urm|toare, unde pentru litera M, acestea sunt sparte pe dou| coloane, comutai pe vizualizarea n mod proiectare al raportului, iar n fereastra Sorting and Grouping, pentru primul cmp Nume Contact, modificai proprietatea cu numele Keep Together la Whole Group.
Num|rul de coloane (Number of Columns) este setat la 2; La fel cu detaliile (Same as Detail) determin| dac| fiecare coloan| va avea sau nu aceeai l|ime (width) cu cea a seciunii Detail din proiectul raportului; Width - l|imea coloanelor - este setat| la 3; Aezarea Coloanelor (Column Layout) determin| dac| coloanele merg de sus n jos i apoi la dreapta (Down) sau de la stnga la dreapta i apoi n jos (Across). Realizai aceste modific|ri i raportul va ar|ta ca n figura urm|toare. Dac| dorii ca cele scrise n seciunile header i footer s| fie afiate pe toat| suprafaa raportului (cum este i n cazul de fa|) trebuie s| setai l|imea suprafeei raportului la l|imea ntregului raport, apoi plasai controale n seciunile Detail numai cu l|imea pe care o vor avea coloanele. Nu uitai s| invalidai opiunea Same as Detail i s| realizai setarea l|imii controalelor aa nct fiecare coloan| s| ncap| n l|inea dat|.
http://www.east.utcluj.ro/mb/mep/antal
pe coloane pentru a face raportul mai compact (eliminnd risipa de hrtie) facei set|rile urm|toare, slectnd Coulmns din Page Setup:
216
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Introducere n Microsoft Access: Rapoarte - cursul 9
0264-401667
217
Creat -i urma 7 toarele tabele: Nume tabel Elevi Nume cmp IDElev
http://www.east.utcluj.ro/mb/mep/antal
Aplicat -ia care urmeaza 7 s - i propune sa 7 gestioneze elevii unei clase mpreuna 7 cu notele pe care le-au primit. Scopul aplicat -iei este de a nva 7ta sa 7 creat -i, repede, un formular cu subformular si de a prezenta noi operat -ii care se pot la nivelul rapoartelor. Generatoarele din figurile care 7 sunt specifice lui Access 2002 din Microsoft Office XP Professional. urmeaza
Aplicaia 2 cu rapoarte
Proprieta 7t -i Data type: AutoNumber Primary Key Data type: Text Data type: Text Data type: Text Data type: Number Field Size: Long Integer Data type: Number Field Size: Long Integer Data type: Date/Time Data type: Number Field Size: Long Integer Data type: AutoNumber Primary Key Data type: Text
Note
Materii
NU COPIA !.
-i doua 7 formulare, primul va fi folosit pentru introducerea materiilor de studiu (n tabelul Creat Materii), al doilea va fi folosit pentru intreoducerea elevilor s - i a notelor pe care aces - tia le-au primit la anumite materii. Ambele formulare vor fi create folosind generatoare de formulare.
Pentru crearea primului formular parcurget -i etapele:
0264-401667
218
Pe ecran va fi afis - at nou formular care va fi salvat n baza de date sub numele de Materii atunci cnd se va realiza nchiderea lui. nainte de a trece la realizarea celui de al doilea formular deschidet -i formularul Materii, salvat mai nainte si ntroducet -i cteva materii n el. Tabelul Note nu cont -ine, explicit, numele materiei pentru care s-a da nota ci doar un cod al ei. Pentru ca n locul acestui cod sa 7 fie afis - ata 7 denumirea materiei corespunza 7 toare din Materii, vom crea un Lookup. Urma 7 toarele etape trebuie parcurse:
Valoare
Semnificat -ie
Materii 1
Sursa de date pentru nregistra 7 rile care vor fi afis - ate de controlul Combo Box.
Bound Column
Coloana din sursa de date, la noi tabelul Materii, care va da valori controlului Combo Box atunci cnd se va selecta o valoare din lista afis - ata 7 de acesta Numa 7 rul de coloane din sursa de date
Column Count
Column Widths
0, 2
La 7timea folosita 7 pentru afis - area valorilor din coloanele. Pentru la 7timea 0 coloana nu se va afis - a.
0264-401667
NU COPIA !.
din Objects, selectat -i Tables; clic pe Design, apoi slectat -i cmpul IDMaterie; n lista proprieta 7tilor cmpului (Field Properties), clic pe Lookup; clic pe va valoarea proprieta 7tii Display Control, o sa 7 geata n jos va fi afis - ata 7 n dreapta; 7 geata din dreapta si selectat -i din lista Combo Box, n acest moment, se vor clic pe sa afis - a noi proprieta 7ti corspunza 7 toare afis -a 7 rii valorii acestui cmp prin intermediul unui control de tipul Combo Box; setat -i urma 7 toarele proprieta 7ti:
http://www.east.utcluj.ro/mb/mep/antal
din Object, selectat -i Forms; apoi, New, AutoForm:Tabular, iar sursa de date va fi tabelul Materii; clic pe butonul OK;
219
List Width
n figura urma 7 toare, observat -i ca 7 , dintre cele patru cmpuri tabelului elevi, au fos selectate cmpurile Nume, - i Adresa pentru a fi puse Prenume s n formular. ntre tabelul Elevi si tabelul Note este o relat -ie unu-la-mult -i prin -i intermediul cmpurilor IDElev s IDElevNota. Generatorul de formulare va tine cont de aceasta 7 relat -ie, iar daca 7 n aceasta 7 etapa 7 , din Tables/Querie se va selecta tabelul Note s - i vor fi trecute n Selected Fields s -i cmpurile Nota, Data si IDMaterie, ale lui Note, generatorul va crea automat un subformular cu aceste cmpuri.
din Objects, selectat -i Forms; clic pe New, din lista selectat -i Form Wizard, iar la "Choose table or query where the object's data comes from:" selectat -i tabelul Elevi (vezi figura ala 7 turata 7 ); clic pe OK;
http://www.east.utcluj.ro/mb/mep/antal
Salvat -i modifica 7 rile aduse tabelului. Acum vom trece la realizarea celui de al doilea formular.
n final, aceasta pagina 7 a generatorului, n care se vor selecta cmpurile de afis - at pe suprafat -a formularului trebuie sa 7 arate astfel:
0264-401667
NU COPIA !.
220
clic pe Finish.
Observat -i ca pentru cmpurile corespunza 7 toare tabelului Note s-a creat, automat, un subformular. Daca 7 dorit -i ca n subformular, n loc de IDMaterie, sa 7 fie afis - at textul Materie, trecet -i n modul proiectare s - i modificat -i denumirea etichetei (label) cmpului IDMaterie de la IDMaterie la Materie. Pentru ca acest formular sa 7 afis - eze media pe semestrul unu s - i pe semestrul doi a elevilor
http://www.east.utcluj.ro/mb/mep/antal
Datas11
Medias1
-i n modul proiectare si ada 7 ugat -i controalele din figura care urmeaza 7. trecet
Observat -i ca 7 primele doua 7 controale sunt de tipul Text Box "Unbound", acestea vor stoca doua 7 date avnd numele Datas11 s - i Datas12. Acestea reprezinta 7 limita inferioara 7s - i cea superioara 7 pentru definitrea semestrului 1. Urma 7 torul control, cu numele Medias1, este
0264-401667
Datas12
NU COPIA !.
221
Reluat -i etpatele de mai sus si pentru al doilea control. Linia Me.Medias1.Requery va face ca Medias1 sa 7 fie reactualizat dupa 7 terminarea modifica 7 rilor aduse valorilor celor doua 7 controale. Acest cod este ada 7 ugat formularului Elevi s - i, n final, va fi trebuie sa 7 fie de forma urma 7 toare.
Ultimul control este unul legat de cmpul IDElev a tabelului Elevi. El va fi invizibil, pentru aceasta proprietatea Visible, a lui, va fi setata 7 la valoarea No. Introducerea lui este necesara 7 pentru a selecta din Note numai notelor elevului curent. Acesta este identificat unui prin valoarea stocata 7 n cmpul IDElev a tabelului Elevi. Funct -iile au aceleas - i argumente, primul este numele tabelului, al doilea este numele cmpului, iar al treilea este condit -ia de respectat pentru ca valorile cmpului sa 7 fie nsumate respectiv numa 7 rate. Toate argumentele trebuie sa 7 fie siruri de caractere. Acesta este motivul pentru care textele sunt cuprinsa 7 ntre ghilimele.
0264-401667
NU COPIA !.
El foloses - te funct -iile DSum() s - i DCount() pentru a calcula media unui elev pentru un anumit semestru. Funct -ia DSum() realizeaza 7 suma tuturor notelor, iar funct -ia DCount() numa 7 ra 7 cte note sunt ntr-un semestru (de exemplu, forma generala 7 pentru DSum() este DSum("[nume cmp]","nume tabel","criteriu de select -ie"). Aceste calcule pot fi realizate doar daca 7 n controalele Datas11 si Datas12 sunt stocate date. 7 controale este init -ializarea (prin folosirea Cel mai simplu mod de a pune date n aceste doua proprieta 7tii Default Value) lor cu data curenta 7 folosind funct -ia Date(). n lipsa unei date funct -iile de mai sus nu vor putea lucra s - i n locul mediei va fi afis - at textul #Error. Introducerea datei curente n aceste controale rezolva 7 evitarea aparit -iei erorii, dar, n mod sigur, aceste valori nu delimiteaza 7 corect semestrul. Deci, utilizatorul va trebui sa 7 modifice 7 toarea problema 7 . Valoarea controlului aceste valori la cele corecte. n acest caz apare urma Medias1 se calculeaza 7 pe baza valorilor int -iale din controalele Datas11 s - i Datas12. Cum aceste valori, sigur, nu sunt bune si trebuie sa 7 le modifica 7 m ce se va petrece cu valoarea din controlul Medias1 ca urmare a modifica 7 rii valorilo celor doua 7 controle. Daca 7 testat -i 7 rii vet -i vedea ca 7 nu se petrece nimic, adica 7 valoarea lui Medias1 nu se efectul modifica modifica 7 , des - i valorile din Datas11 si Datas12 au fost schimbate. Pentru ca modifica 7 rile aduse valorilor stocate n acestor controale sa 7 duca 7 la recalcularea cont -intului Medias1 trebuie sa 7 definim doua 7 proceduri de tratare a evenimentelor de actualizare a controalelor - i Datas12. Un eveniment este rezultatul sau consecint -a unei act -iuni realizate de Datas11 s utilizator. Access ra 7 spunde la evenimente prin intermediul unor comportamente definite la nivelul unor proprieta 7ti de controale. De exemplu, evenimetul de actualizare a valorilor 7tii After Update. Urma 7 toarele stocate ntr-un control este tratat prin intermediul proprieta etape vor fi parcure pentru ambele controale: din lista proprieta 7tilor, clic pe proprietatea After Update, n dreapta apare o sa 7 geata 7 n jos; clic pe sa 7 geata n jos, din lista 7 selectat -i [Event Procedure]; clic pe butonul cu cele trei puncte din dreapta; -i linia: Me.Medias1.Requery. tastat
http://www.east.utcluj.ro/mb/mep/antal
=DSum("[Nota]","Note", "[IDElevNota] = " & [IDElev] & " AND [Data] >= #" & [Datas11] & "# AND [Data] <= #" & [Datas12] & "#")/DCount("[Nota]","Note", "[IDElevNota] = " & [IDElev] & " AND [Data] >= #" & [Datas11] & "# AND [Data] <= #" & [Datas12] & "#").
222
Ultimul argument, pe lnga 7 buca 7ti de texte cuprinse ntre ghilimele mai cont -ine simbolul & care este un operator pentru prelucrarea sirurilor. El face concatenarea (ala 7 turarea operanzilor, 7s - iruri face unul singur prin ala 7 turarea cont -inutului celor doua 7s - iruri; detalii cu privire din doua 7 sesc n cursul 10, care prezinta 7 elementele limbajului de programare la acest operator se ga VBA).
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
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 va ara 7 ta astfel:
0264-401667
223
unui elev.
plasat -i un control Unbound, de tipul Text Box, n dreapta controlului Nota; modificat -i urma 7 toarele proprieta 7ti:
Valoare
Semnificat -ie
=1
Numele cmpului sau expresia folosita 7 pentru calcularea valorii. n cazul nostru controlul primes - te valoarea expresiei constante 1.
Format
#)
- area valorii Formatul folosit pentru afis controlului. n cazul nostru se va afis - a valoarea numerica 7 urmata 7 de caracterul ")".
Pe baza elementelor de mai sus, folosit -i generatorul de rapoarte pentru a crea un raport ct mai apropiat de cel dorit. Trecet -i, apoi, n modul proiectare s - i modificat -i raportul pentru a-l aduce la forma din figura care urmeaza 7.
0264-401667
Raportul aplicat -iei, s - i propune pentru nceput, sa 7 afis - eze tot -i elevii clasei, cu toate notele lor, sortate s - i grupate pe baza numelui elevilor si a materiiilor. La nivelul materiilor, notele, vor fi 7 toare a datelor. Pe baza celor spuse se poate deduce ca 7 raportul va sortate n ordinea cresca avea urma 7 toarele sect -iuni: ! antet si sfrs - it de raport (Report Header s - i Report Footer); ! antet si sfrs - it de pagina 7 (Page Header s - i Page Footer); ! antet pentru grupare pe baza cmpului Nume (Nume Header); ! antet pentru grupare pe baza cmpului IDMaterie (IDMaterie Header); ! sect -iune pentru detalii (Detail).
http://www.east.utcluj.ro/mb/mep/antal
ntruct controlul Medias2 va trebuie sa 7 lucreze cu valorile din Datas21 s - i Datas22 modificat -i corespunza 7 tor expresia de calcul a acestuia. n figura care urmeaza 7 se prezinta 7 rezultatele afis - ate de controalele calculate, pe baze cel spuse pna 7 acum, n cazul concret a
NU COPIA !.
224
Running Sum
Over Group
http://www.east.utcluj.ro/mb/mep/antal
Daca 7 se realizeaza 7 afis - area unui total si modul de calcul al acestuia. n cazul nostru se va realiza o 7 valoarea afis - ata 7 nsumare la nivel de grup, adica de acest control va fi crescuta 7 cu 1 pentru fiecare nregistrare noua 7 din grup. Se realizeaza 7 astfel numerotarea fieca 7 rei note primite de un elev la o materie.
n figura care urmeaza 7 , se vede ca 7 fiecare nota 7 primita 7 de un elev, la o anumita 7 materie, va numerotata 7 . La trecerea la un nou grup, adica 7 la schimbarea materiei, numerorarea se reia cu valorea calculata 7 pentru control, la noi valoarea 1. Prin setarea proprieta 7tii Running Sum la valoarea Over Group, la valoarea curenta 7 a controlului, care la noi este ntotdeauna 1, se aduna 7 valorile anterioare.
Sa 7 presupunem, ca 7 n raportul urma 7 tor, dorim sa 7 calcula 7 m media aritmetica 7 pentru fiecare materie. Daca 7 elevul are mai multe note la o materie acestea trebuie nsumate, apoi suma trebuie mpa 7 rt -ita 7 la numa 7 rul de note. Urma 7 toarele etape trebuie parcurse:
0264-401667
NU COPIA !.
225
Pentru exemplul prezentat, controlul a fost introdus n antetul grupului IDMaterie -ia Sum() realizeaza 7 nsumarea valorilor acestui control, la nivel (IDMaterie Header). Funct de grup, iar funct -ia Count() va numa 7 ra nregistra 7 rile grupului.
Nota 7 : Daca 7 numele controlului este calculat, trebuie repetata 7 expresia de calcul a lui. De exemplu, daca 7 dorim sa 7 realiza 7 m totalul pentru un control numit PretcuTVA calculat cu formula [Pret]*[TVA], n loc de =Sum([Pretcu TVA]) se va scrie
0264-401667
NU COPIA !.
creat -i un nou control n antetul grupului (sau n sfts - itul lui); introducet -i expresia =Sum([Nota])/Count([Nota]) n proprietatea Control Source; Nota trebuie sa 7 fie un nume de cmp valid din sursa de date; modificat -i proprietatea Format la #.00.
http://www.east.utcluj.ro/mb/mep/antal
226
=Sum([Pret]*[TVA]).
Daca 7 dorim sa 7 calcula 7 m media generala 7 a unui elev, fa 7 cnd media aritmetica 7 a mediilor la 7 toarele etape trebuie urmate n nivel de materii, strategia de mai sus nu mai este de folos. Urma acest caz: copiat -i controlul care face media aritmetica 7 la nivel de materii, n aceeas - i sect -iune, si dat -i numele de SumaMedii acestui nou control; apoi, setat -i proprietatea Running Sum la valoarea Over Group; creat -i un nou control de tipul Text Box cu numele ContorMaterii, tot n sect -iunea IDMaterie Header cu proprietatea Running Sum setata 7 la valoarea Over Group;
Media generala 7 a unui elev va fi calculata 7 fa 7 cndu-se suma tuturor notelor lui, care apoi se va 7 rt -i la numa 7 rul de note a elevului. mpa
http://www.east.utcluj.ro/mb/mep/antal
n continuare, ne propunem sa 7 calcula 7 m media generala 7 a unui elev. Pentru aceasta, din fereastra Sorting and Grouping, vom selecta pe Nume. Aici, vom seta proprietatea Group Footer pe Yes. Efectul va fi aparit -ia sect -iunii de sfrs - it (Nume Footer) pentru grupul Nume n formular. Vom copia n aceasta 7 sect -iune controlul care realizeaza 7 media aritmetica 7 pentru fiecare materie.
0264-401667
NU COPIA !.
227
http://www.east.utcluj.ro/mb/mep/antal
n sect -iunea Nume Footer, realizat -i o copia a controlului care realizeaza 7 calculul mediei aritmetice, apoi modificat -i proprietatea Control Source la =[SumaMedii]/[ContorMaterii].
0264-401667
NU COPIA !.
228
cum s-a n|scut limbajul de programare BASIC i ce este VBA; ce este programarea orientat| pe 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 instruciunile limbajului VBA; ce este o colecie VBA.
http://www.east.utcluj.ro/mb/mep/antal
Obiectivele cursului 10
0264-401667
NU COPIA !.
229
Macro comenzile ofer| soluii rapide i simple, dar cu limit|ri multiple. Limbajul VBA ofer| facilit|i i control mai eficace asupra aciunilor pe care le derul|m cu datele din baz|.
n programarea procedural| tradiional|, controlul evoluiei programului este determinat chiar de el nsui. Execuia ncepe cu prima instruciune i urmeaz| o linie secvenial| sau cu salturi, funcie de instruciunile programului. n programarea orientat| pe evenimente, aciunile utilizatorului sau ale sistemului pe care se execut| programul genereaz| evenimente. Pentru a cunoate care poriune de cod este executat|, trebuie s| tim ce eveniment a ap|rut, iar dac| sunt mai multe, ordinea lor de apariie. Putem spune c| poriunea de cod executat| depinde de aciunile utilizatorului, aceasta fiind esena interfeelor grafice cu utilizatorul i a program|rii orientate pe evenimente. Pentru c| nu se poate ti ce va face utilizatorul, codul trebuie s| fac| anumite presupuneri cu privire la starea mediului n care funcioneaz|. Din acest motiv codul fie testeaz| dac| presupunerile f|cute sunt corecte, fie le aranjeaz| ntr-o ordine n care acestea s| fie ntotdeauna corecte.
0264-401667
Visual Basic pentru Aplicaii - VBA - a fost transformat de firma Microsoft n limbajul de programare al ntregii familii de produse Microsoft Office (Access, Excel, Word, PowerPoint). Nucleul limbajului, componentele sale i mediul sunt aceleai pentru toate aceste aplicaii, oferind n plus, fa| de macro comenzi urm|toarele facilit|i: 1. apelarea funciilor API; 2. tratarea erorilor; 3. manipularea datelor din baz| sub controlul unor instruciuni folosind metode de acces la date specifice sau generale; 4. manipularea structurii bazei de date prin program.
http://www.east.utcluj.ro/mb/mep/antal
BASIC sau Beginner's All-purpose Symbolic Instruction Code este un limbaj simplu, creat de John G. Kemeny i Thomas E. Kurtz de la Dartmouth College n 1963. Dei din numele limbajului se pare c| a fost scris pentru a permite programarea ct mai simpl| pentru studeni i ncep|tori, iniial a fost proiectat ca un sistem experimental cu time sharing (time sharing: facilitate a unui sistem de operare care permite mai multor utilizatori s| execute mai multe programe concurent, pe un singur procesor sau, n paralel, pe mai multe procesoare. De obicei fiecare utilizator are propriul lui terminal pentru operaii de intrare/ieire. time sharing este multitasking pentru utilizatori multipli. multitasking: o tehnic| folosit| ntr-un sistem de operare pentru partajarea unui singur procesor ntre mai multe programe independente. Programele n multitasking pot fi ale unui singur utilizator sau ale mai multor utilizatori, prin aceasta se face distincia de procesarea paralel| - paralell processing, unde un singur utilizator execut| mai multe programe pe mai multe procesoare). Cu timpul a devenit cauza principal| a "reducerii i deform|rii mentale" a programatorilor ncep|tori. Cazul este oarecum similar cu cel al limbajului Pascal, cnd un limbaj proiectat exclusiv cu scop educaional, a fost luat prea n serios. Un novice poate scrie n BASIC programe scurte, de 2040 linii, foarte simplu; scrierea unor programe mai lungi este: (a) chinuitoare i (b) duce la formarea unor deprinderi care nu pot fi utilizate n cadrul unor limbaje de programare de nivel nalt mai puternice.
NU COPIA !.
230
Tip obiect
Raport
Formular
Sub Form_numeeveniment() instruciuni End Sub Sub Report_numeeveniment() instruciuni End Sub Sub NumeControl_numeeveniment() instruciuni End Sub
Control
Procedurile de evenimente sunt apelate automat cnd apare evenimentul corespunz|tor acestora. Access-ul permite crearea de proceduri definite de utilizator, care trebuie apelate explicit, prin cod, pentru ca s| fie executate. Acestea nu sunt legate de evenimentele generate de utilizator, ci mai degrab| de anumite grupuri de linii de program care se repet| n mai multe locuri. Pentru eliminarea duplic|rii acestor linii se folosesc proceduri de tipul funcie (Function) sau subrutin| (Sub). Procedurile utilizator pot fi create oriunde n formulare, rapoarte sau module (Modules). Modulul este un obiect Access care stocheaz| numai proceduri definite de utilizator. Procedurile din module pot fi referite din orice alte obiecte Access, n timp, permind scrierea unor biblioteci de proceduri utile pentru rezolvarea unor sarcini care se repet| des. deschidei baza de date Northwind; clic pe butonul Modules din fereastra bazei de date;
0264-401667
NU COPIA !.
Cuvintele Sub i End Sub marcheaz| nceputul i sfritul procedurii. Cuvintele care urmeaz| pe aceeai linie cu Sub sunt numele procedurii de eveniment, iar instruciuni reprezint| codul scris de programator prin care se trateaz| evenimentul ap|rut.
http://www.east.utcluj.ro/mb/mep/antal
Cnd Access-ul recunoate apariia unui eveniment de formular, raport sau control, apeleaz| automat procedura de eveniment denumit| dup| numele obiectului i al evenimentului care a ap|rut. De exemplu, dac| este vorba de un formular (Form) i de evenimentul clic (Click) pe suprafaa acestuia, numele procedurii de tratare a evenimentului va fi Form_Click. Dac| n locul formularului am fi avut un raport (Report), pentru acelai eveniment, numele procedurii ar fi Report_Click. n cazul unui control, numele acestuia se combin| cu caracterul underscore (_) i cu numele evenimentului pentru a forma numele procedurii de eveniment. De exemplu, dac| avem un buton cu numele Binchide, procedura de eveniment care trateaz| evenimentul Click pe buton se va numi Binchide_Click. Numele obiectelor sunt stocate n proprietatea Name, dac| intenionai s| modificai acest nume, trebuie s| o facei nainte de scrierea primei proceduri de eveniment. Dac| modificai numele obiectului dup| ce ai scris cel puin o procedur| de eveniment, trebuie s| modificai i numele procedurilor scrise pn| atunci. Din cele discutate observai c| Access-ul folosete aceeai strategie pentru construirea numelor procedurilor de evenimente:
231
acceptai set|rile implicite i tastai DatadeAzi n cutia de texte Name, apoi clic pe OK.
deschidei baza de date; clic pe butonul Modules; selectai din list| numele modului care dorii s|-l editai; clic pe Design.
n Access procedurile pot fi de tipul Sub sau Function. Procedura Sub nu ntoarce valoare fiind asem|n|toare unei instruciuni. Procedurile de eveniment sunt ntotdeauna de tipul Sub. Procedura Function ntoarce o valoare. Atunci cnd se calculeaz| valori de expresii tipul procedurii va fi Function.
0264-401667
NU COPIA !.
Access-ul va crea corpul unei funcii cu numele DatadeAzi. Dac| n loc de tipul de subprogram Function selectai opiunea Sub, Access-ul va crea un subprogram de tipul subrutin|.
http://www.east.utcluj.ro/mb/mep/antal
clic pe butonul New pentru a crea un modul nou; din meniul Insert selectai Procedure..., fereastra de dialog Insert Procedure va fi afiat| dup| cum urmeaz|:
232
Numele procedurii este numeprocedur|, instruciunile instruciuni grupate sub acest nume se numesc corpul procedurii. parametri sunt o list| de nume de parametri separate prin virgule. Fiecare parametru respect| sintaxa declaraiei de variabil| i este echivalentul unei variabile n corpul procedurii. Sintaxa pentru fiecare parametru este: [ByVal] numevariabil| [()] [As tip]
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 i End Sub
Instruciunile din corpul lui Sub sunt executate secvenial, dac| se dorete p|r|sirea procedurii Sub nainte de execuia ultimei instruciuni se poate folosi instruciunea opional| End Sub. Aceasta are ca efect revenirea din procedur|. n corpul procedurii, num|rul de End Sub-uri nu este limitat.
Function numeprocedur|(parametri) [As tip] [instruciuni] [Exit Function] [instruciuni] End Function
0264-401667
NU COPIA !.
va fi apelat| prin Numara 5 (observai c| nu se pun paranteze n jurul argumentelor). Execuia procedurii i rezultatele ei se pot afia n fereastra imediat|. Se apas| Ctrl+G, apoi n ferestr| se scrie Numara 5 dup| care se apas| Enter.
tip poate fi oricare dintre tipurile fundamentale de date (Integer, Long, Single, Double, Currency, String, Variant sau Obiect). Dac| tipul nu este specificat explicit, parametrul va avea tipul Variant care poate stoca orice tip de date. Parantezele drepte specific| faptul c| elementele cuprinse ntre ele sunt opionale. Parantezele rotunde opionale dup| numevariabil| indic| un argument de tipul tablou.
http://www.east.utcluj.ro/mb/mep/antal
233
Dac| dorim s| scriem o funcie ArieCerc pentru calculul ariei unui cerc de raz| R, codul corespunz|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 ^ 2 End Function
Instruciunile din corpul lui Function sunt executate secvenial, dac| se dorete p|r|sirea procedurii Function nainte de execuia ultimei instruciuni se poate folosi instruciunea opional| End Function. Aceasta are ca efect revenirea din procedur|. n corpul procedurii, num|rul de End Function-uri nu este limitat.
Orice program prelucreaz| o mulime de valori iniiale pentru a produce valorile de ieire. De obicei, trecerea de la valorile iniiale la cele de ieire se face prin unele temporare, care n procesul de calcul i modific| valoarea. Aceste valori temporare vor fi stocate n variabile. Numele de variabil| sugereaz| c| valorile stocate n acestea se modific| pe timpul execuiei aplicaiei. VBA folosete variabilele pentru stocarea valorilor. Variabilele sunt asemenea cmpurilor din tabele au un nume, un tip, dar pot stoca numai o singur| valoare.
Variabile
Declararea variabilelor
Exist| mai multe metode pentru declararea variabilelor n VBA. Sintaxa declaraiei de variabil| este:
0264-401667
NU COPIA !.
Procedurile unui formular sau raport sunt private, adic| pot fi folosite numai n expresii ale codului coninut de formularul sau raportul n cauz|. Procedurile unui modul sunt publice, pot fi apelate din orice poriune a aplicaiei, mai puin n cazul n care au fost f|cute private prin folosirea lui Private naintea de Sub sau Function. Pentru c| procedurile formularelor i rapoartelor sunt private este posibil s| se scrie proceduri cu acelai nume n formulare sau rapoarte distincte. Numele procedurilor publice trebuie s| fie unice ntr-o aplicaie. Este posibil ca o procedur| dintr-un formular sau raport s| aib| acelai nume cu una dintr-un modul. n acest caz Access-ul va decide asupra procedurii apelate c|utnd astfel: formularul curent, raportul curent, modulele aplicaiei. O procedur| privat| poate fi apelat| numai de proceduri ale modulului din care face parte.
http://www.east.utcluj.ro/mb/mep/antal
Semnificaia elementelor sintactice ale procedurii Function sunt aceleai cu cele ale procedurii Sub, cu urm|toarele excepii: 1. procedurile Function, asemenea variabilelor, au tipuri de date care determin| tipul valorii ntoarse; 2. valoarea se ntoarce atribuind numelui procedurii Function o valoare n corpul funciei. Valoarea ntoars| de procedura Function prin numele ei se poate folosi n expresii; 3. argumentele procedurii Function se scriu ntotdeauna ntre paranteze rotunde.
234
Liniile 1 i 2 prezint| declaraii pe care NU trebuie s| practicai! n linia 1 tipul a fost omis i este, conform celor spuse, Variant. n linia 2, x i y sunt de tipul Variant, iar j de tipul Double, faptul c| cele trei nume sunt scrise pe aceeai linie nu nseamn| c| toate au tipul ultimei variabile. Liniile 3 i 4 sunt cazul normal, pentru care trebuie s| v| formai un automatism de scriere. Depanarea programelor este mult mai uoar| dac| fiecare variabil| are asociat un tip particular de dat|, n plus, resursele pentru gestionarea variabilelor sunt folosite mult mai eficient de VBA rezultnd o cretere n vitez| a execuiei codului i o sc|dere a spaiului de RAM folosit pentru stocarea variabilelor.
NU COPIA !.
Locul declaraiei
Scop
Dim n procedur|
Local
Public n modul
Scopul unei variabile nu se poate schimba n timpul execuiei aplicaiei, dar este posibil ca o variabil| cu acelai nume s| apar| n scopuri diferite. Pe lng| scop, variabilele au i durat| de existen|. Valorile din variabilele globale sau de module sunt p|strate ct timp baza de date este deschis| (mai puin n cazul cnd codul este reiniializat). Variabilele locale, exist| numai ct timp procedura n care s-au declarat se
Cnd o variabil| este declarat| ntr-o procedur|, numai codul din acea procedur| poate citi sau modifica valoarea variabilei. Se spune c| scopul este local procedurii. Uneori este de dorit ca o variabil| s| poat| fi folosit| din mai multe proceduri ale aceluiai modul sau chiar din module diferite. Funcie de locul n care este declarat| o variabil| poate avea scopurile:
0264-401667
1 2 3 4
http://www.east.utcluj.ro/mb/mep/antal
numevariabil| trebuie s| nceap| cu o liter| i nu poate conine spaii sau punctul zecimal. Programatorul nu trebuie s| declare explicit o variabil| n VBA (iat| dintre "strategiile" care nu "merg" n limbajele adev|rate - declaraia implicit|, de care "beneficiaz| din plin" BASICul i FORTRAN-ul ). Dac| folosii un nume care nu este nume de variabil| deja declarat|, VBA creeaz| automat o variabil| cu acel nume de tipul Variant. Acest tip poate stoca orice valoare: num|r, text, dat|, ir. Atunci cnd o astfel de variabil| este atribuit| unei variabile de alt tip, VBA se ocup| de toate conversiile necesare. n cazul cnd cunoatem ce fel de valori se vor stoca ntr-o variabil| este bine s| i se specifice tipul particular. VBA va putea gestiona mai eficient datele stocate n variabil|. Variabilele declarate cu Dim exist| att timp ct se execut| procedura n care au fost declarate. La terminarea execuiei procedurii, valorile acestor variabile dispar. n plus, valorile acestor variabile sunt locale procedurii din care fac parte, adic| nu se pot accesa din alte proceduri. Datorit| acestor caracteristici acelai nume de variabile poate s| apar| n proceduri disticte far| s| apar| conflicte.
235
Tipul Variant
Valoarea Empty
Valoarea Null
Variabila Variant poate conine valoarea special| Null. Aceasta se folosete n baza de date pentru a marca datele lips| sau necunoscute. Cmpurile i controalele care nu au fost iniializate au valoarea implicit| Null. Dac| dorii s| fii siguri c| un control sau un cmp are date trebuie s| verificai dac| nu conin valoarea Null. Pentru aceasta folosii funcia IsNull(). Null are cteva propriet|i interesante: 1. expresiile care conin Null dau valoarea Null. Din acest motiv se zice c| Null se propag| prin expresie, dac| orice parte a ei este Null, toat| expresia va fi Null; 2. majoritatea funciilor care primesc un argument Null ntorc valoarea Null; 3. valoarea Null poate fi atribuit| unei variabile Variant.
Tipul specific| pe lng| ce fel de valori poate lua o variabil| i domeniul n care pot varia acestea, operatorii care pot avea ca operanzi aceste variabile i spaiul de RAM ce se folosete pentru stocarea ei.
Tipuri numerice
0264-401667
NU COPIA !.
Variabilele Variant au valoarea Empty din momentul n care s-au declarat i pn| cnd le-am atribuit o valoare. Aceasta este o valoare special| care ne permite s| verific|m dac| pn| n acel moment am atribuit o valoare variabilei respective i se poate testa prin funcia IsEmpty(). Folosirea unui Variant cu valoarea Empty ntr-o expresie este echivalent| cu valoarea numeric| 0. Dup| ce variabila Variant a primit o valoare, valoarea Empty dispare. Fiind o valoare, dar una special|, nu se poate atribui direct, dar este posibil s| atribuim valoarea Empty dintr-o variabil| Variant unei alte variabile Variant care i-a pierdut-o deja.
La fel cum o cutie cu text poate stoca texte, numere sau date, la fel variabilele de tipul Variant pot stoca date de tipul numeric, ir, dat|/or|, valori Null. n general VBA face toate conversiile necesare cnd se fac manipul|ri ale datelor de acest tip, totui sunt cteva cazuri de evitat: 1. operaii aritmetice se pot efectua numai dac| tipul Variant stocheaz| o valoare numeric|; se poate determina dac| valoarea stocat| ntr-un tip Variant este numeric| prin funcia IsNumeric() 2. operaii cu date se pot efectua numai dac| tipul Variant stocheaz| o dat|; datele pot fi adunate, sc|zute, sau se poate extrage anul, luna, ziua unei date, pentru ca aceste operaii s| fie corecte se poate folosi funcia IsDate() pentru a determina dac| valoarea este de tip dat|.
Dup| cum ai v|zut deja, cnd se declar| o variabil| se poate specifica un tip de dat| corespunz|tor ei. Tipul determin| valorile pe care variabila le poate stoca. Dac| tipul nu este specificat, implicit, VBA asociaz| variabilei tipul Variant.
Tipuri de date
http://www.east.utcluj.ro/mb/mep/antal
execut|. Cnd procedura se termin|, valorile variabilelor locale sunt desc|rcate din RAM iar spaiul alocat acestora este refolosit, dac| este cazul, pentru stocarea altor variabile. La urm|torul apel al procedurii, toate variabilele locale sunt reiniializate. Dac| dorii ca VBA s| p|streze valoarea unei variabile locale trebuie s| o declarai Static. De exemplu, n loc de Dim pi As Double vom scrie Static pi As Double. O astfel de variabil| poate s| apar| numai n interiorul unei proceduri i se folosete, de obicei, pentru acumularea unor valori care altfel s-ar pierde ntre apelurile procedurii.
236
Valoare iniial|
http://www.east.utcluj.ro/mb/mep/antal
0 False 0 0 0
-2,147,483,648 la 2,147,483,647
Double
8 octei
3.402823E38 la -1.401298E-45 pentru valori negative; 1.401298E-45 la 3.402823E38 pentru valori pozitive -1.79769313486232E308 la -4.94065645841247E-324 pentru valori negative; 4.94065645841247E-324 la 1.79769313486232E308 pentru valori pozitive -922,337,203,685,477.5808 la 922,337,203,685,477.5807
Currency Decimal
8 octei
0 0
14 octei
+/-79,228,162,514,264,337,593,543,950,335 f|r| punct zecimal; +/-7.9228162514264337593543950335 cu 28 de zecimale; cel mai mic num|r nenul este +/-0.0000000000000000000000000001
Tipul ir
irul se poate atribui unei variabile de tipul ir i poate fi manipulat prin funcii specifice irurilor de caractere.
sir="Salut bade!" sir=Right$(5)
Implicit, o variabil| de tipul ir are lungimea variabil|, adic| lungimea ei poate crete dac| se adaug| noi date n variabil|. Este posibil| declararea de variabile ir cu lungime fix| prin folosirea sintaxei: String *lungime. De exemplu, o variabil| cu numele linie de 80 de caractere se declar| astfel: Dim linie As String*80. Dac| un ir mai scurt se atribuie unuia mai lung, caracterele lips| se completeaz| automat cu spaii. Dac| un ir mai lung se atribuie unuia mai scurt caracterele n plus se trunchiaz|. Pentru c| irurile cu lungime fix| se completeaz| automat n unele operaii cu spaii, exist| un set de funcii utile pentru eliminarea acestora: LTrim(), RTrim(), Trim(). Access-ul compar| irurile n mod diferit funcie de instruciunea Option Compare specificat| n seciunea declaraiilor de modul.
0264-401667
NU COPIA !.
237
Variabilele de tipul dat| se stocheaz| pe 8 octei sub form| de numere reale i au domeniul ntre 1 ianuarie 100 i 31 decembrie 9999 i ora de la 0:00:00 la 23:59:59. Constantele de tipul dat| trebuie cuprinse ntre caractere # nainte de a fi atribuite variabilelor de tipul dat| sub forma #12/21/1999#. Aceste variabile se afieaz| conform set|rilor formatului short date recunoscute de calculator. Orele vor fi i ele afiate conform set|rilor formatului de timp recunoscut de calculator (12 ore sau 24 de ore). Datele pot fi adunate sau sc|zute folosind funciile DateAdd() i DateDiff(). Ziua, luna i anul pot fi extrase folosind funciile Day(), Month() i Year(). Funcia Now() ntoarce data i ora curent|. Operaii de formatare pot fi f|cute asupra datelor folosind funcia Format(). Funciile DateSerial() i TimeSerial() se pot folosi pentru crearea unor date i ore din valori numerice ntregi.
Tipul dat|/or|
Tipul Object
Tipul de dat| obiect se stocheaz| pe 4 octei i are ca valoare adresa unui obiect. Folosind instruciunea Set, o variabil| declarat| de tipul Object va putea stoca adresa oric|rui obiect.
Tabloul ne permite s| referim un grup de variabile de acelai tip cu un singur nume realiznd diferenierea lor printr-un num|r numit indice. Tablourile au limite superioare i inferioare pentru indice, iar elementele de tablou sunt alocate continuu ntre acele limite. VBA aloc| spaiu pentru fiecare indice, din acest motiv nu este bine s| declarai un tablou mai mare dect este cazul s| fie. Toate elementele tabloului au acelai tip, numit i de baz|, mai puin cnd acest tip este Variant, caz n care elementele pot avea tipuri de date diferite. Tipul de baz| poate s| fie oricare dintre tipurile prezentate. Exist| trei metode de creare a tablourilor cu dimensiune fix|: 1. tablou public care are Public n declaraia ei; 2. tablou de modul care folosete Dim la nivelul seciunii Declarations a modului din care face parte; 3. tablou de procedur| sau local, care folosete Private ntr-o procedur| pentru declararea tabloului.
Tabloul
0264-401667
NU COPIA !.
Dac| procedura are specificate tipuri pentru parametri, n apelul procedurii argumentele trebuie s| fie valori sau variabile de acel tip. Un parametru se poate declara folosind ByVal pentru a specifica c| argumentul se transfer| prin valoare i nu prin referin|. Cnd un argument este transferat prin valoare, o copie a acestuia se transfer| procedurii. Dac| procedura modific| valoarea, modificarea va afecta numai copia valorii i nu valoarea original| a variabilei. Dac| argumentul este transferat prin referin|, valoarea acestuia se poate modifica prin instruciunile din procedur|. Dac| nu dorim ca o procedur| s| modifice valorile argumentelor folosii ByVal la declararea acestora.
http://www.east.utcluj.ro/mb/mep/antal
Cele trei posibilit|i pentru specificarea ordinii relative n comparaii sunt Option Compare Database, Option Compare Binary i Option Compare Text. Access-ul insereaz| automat la nceputul fiec|rui modul Option Compare Database prin care comparaiile de iruri n modul se fac pe baza modalit|ii de sortare a Access-ului. Celelate dou| opiuni fac ca sortarea s| fie dependent| sau nu de scrierea cu litere mici i majuscule.
238
Declararea tablourilor
'tablou cu numele A de 1 dimensiune 'cu 11 elemente de tipul Integer, 'indicele poate lua valorile 0,1,2, '..., 10. 'tablou cu numele X de 1 dimensiune 'cu 23 elemente de tipul Double, 'indicele ia valori n domeniul 0, '22. 'tablou public cu numele Y de 1 'dimensiune cu 15 elemente de tipul 'Byte, indicele ia valori n 'domeniul 0, 15.
Cazul cel mai comun este tabloul cu dou| dimensiuni care uneori este numit i matrice. Un tablou cu 2 dimensiuni, cu 10 elemente pe dimensiune, la care i mai spunem i matrice de 10x10 se declar| astfel:
Observai c| prima valoare a indicelui este 0, aceast| valoare implicit| se poate schimba folosind instruciunea Option Base n seciune de declaraii (Declarations) modulului. De exemplu, pentru ca toi indicii tablourilor unui modul s| plece de la 1 scriem Option Base 1. Un alt mod de specificare a limitei inferioare a indicelui este folosirea lui To:
http://www.east.utcluj.ro/mb/mep/antal
Cea mai simpl| form| de declarare a unui tablou este numele acestuia urmat de limita superioar| a indicelui, care trebuie s| fie o valoare ntreg| de tipul Long.
sau
VBA permite lucrul i cu tablouri cu mai mult de dou| dimensiuni, ns| n practic| folosirea lor este mai rar|. O declaraie de tablou cu 3 dimensiuni este: Dim Tablou3D(5, 1 To 7, 3 To 6) As Double
Uneori nu se cunoate num|rul de elemente ale unei dimensiuni de tablou. n acest caz este de dorit s| avem posibilitatea specific|rii n mod dinamic a num|rului de elemente pe dimensiune. Un tablou dinamic poate fi redimensionat oricnd spre deosebire de cel static care are are num|rul de elemente fixate. Etapele lucrului cu un tablou dinamic sunt: 1. declaraia: un tablou dinamic se declar| astfel: Dim Adina() As Double. 2. alocarea de spaiu: se face prin folosirea lui ReDim Adina(Nr_de_elemente),
0264-401667
NU COPIA !.
239
unde Nr_de_elemente este o valoare numeric| ntreag| care specific| noul num|r de elemente al tabloului. Instruciunea ReDim poate s| apar| numai ntr-o procedur| pentru c|, spre deosebire de Dim i Static, are un efect cu o aciune asupra execuiei aplicaiei. Poate modifica spaiul alocat pentru stocarea elementelor de tablou i domeniul de variaie al indicelui, dar nu poate modifica num|rul de dimensiuni al tabloului de la cel definit n primul ReDim. Dim Matrice() As Integer ... Function Test() ... ReDim Matrice(20,30)
Deseori n programe avem valori numerice care nu se modific|. Pentru creterea lizibilit|ii programelor este posibil| nlocuirea acestor valori constante printr-un nume simbolic. Sintaxa pentru definirea constantelor simbolice este:
Constante simbolice
n general, sunt folosite pentru valori numerice speciale sau pentru date i ore reprezentative pentru aplicaie. numeconstant| respect| regulile de scriere a unui nume de variabil|, iar expresie este format| din constante numerice sau ir interconectate prin operatori. Scopul constantelor simbolice este acelai cu cel al variabilelor.
Constante intrinseci
Constantele simbolice sunt create de programator. Constantele intrinseci sunt definite de cei care au scris VBA i le putei vizualiza folosind Navigatorul de Obiecte (Object Browser). Numele acestora trebuie s| fie unic i sunt disponibile n toate modulele aplicaiei.
Valorile stocate n variabile rezult| n urma unor expresii. Expresiile sunt formate din secvene de operatori i operanzi. Urm|toarele grupe de operatori sunt predefinii n VBA: # aritmetici; # de comparaie # de concatenare
Operatori
0264-401667
Dac| nu vei folosi Preserve, valorile curente stocate n tablou, vor fi distruse n urma execuiei lui ReDim. VBA va reseta valorile tablourilor la Empty pentru Variant, la 0 pentru tipurile numerice i la irul de lungime zero, adic| "", pentru tablouri de iruri dinamice, iar la valorile zero ANSI pentru tablourile cu iruri cu lungime fix| respectiv la valoarea Nothing pentru tablourile de obiecte. Dac| tabloul are mai multe dimensiuni, prin folosirea lui Preserve se va putea modifica numai num|rul de elemente al ultimei dimensiuni ale tabloului.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
240
logici
http://www.east.utcluj.ro/mb/mep/antal
Operatori aritmetici
Simbol + * Exemplu a+b a-b a*b a/b a\b a^b a Mod b
Remarc|
a i b de orice tip numeric. a i b de orice tip numeric. a i b de orice tip numeric. a i b de orice tip numeric. nainte de mp|rire a i b sunt rotunjite la valori ntregi, rezultatul este tot un ntreg. a poate fi orice num|r, b numai unul ntreg. a i b se rotunjesc la ntregi dup| care se calculeaz| restul mp|ririi lui a la b.
Operatori de comparaie
Semnificaie mai mic
Remarc|
Expresia din exemplu ia valoarea True dac| a < b, altfel False. Expresia din exemplu ia valoarea True dac| a <= b, altfel False.
<= >
>= =
Expresia din exemplu ia valoarea True dac| a >= b, altfel False. Expresia din exemplu ia valoarea True dac| a = b, altfel False. Expresia din exemplu ia valoarea True dac| a <> b, altfel False.
diferit
<>
Dac| n exemplele de mai sus, una dintre variabilele a sau b ia valoarea Null, expresia de comparaie ia i ea valorea Null. Variabilele comparate trebuie s| fie de tip numeric.
Operatori de concatenare
Se folosesc n cazul irurilor i au ca efect al|turarea a dou| iruri. Valoarea ntoars| este un nou ir care conine irurile operanzi al|turai.
0264-401667
NU COPIA !.
241
Simbol & +
Remarc|
Dac| ambele variabile sunt de tipul ir, operatorul de adunare are efect de concatenare.
Operatori logici
Semnificaie
George Boole a inventat un sistem matematic bazat valorile de adev|r, adev|rat (True), fals (False) i funciile I (AND), SAU (OR) i NU (NOT). Funciile boolene sunt prezentate prin tabele de adev|r unde 0 reprezint| fals i 1 adev|rat. Simbol And Exemplu Remarc|
Expresiile asupra c|rora acioneaz| operatorul sunt valori de adev|r, n acest caz se execut| I logic. a i b sunt numere, operatorul I va lucra la nivel de bii. Expresiile asupra c|rora acioneaz| operatorul sunt valori de adev|r, n acest caz se execut| SAU logic. a i b sunt numere, operatorul SAU va lucra la nivel de bii. NU logic.
a And b
Or
a > b Or b> c
a Or b Not (a >b)
Not
Not a
NU pe bii.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
And
True True
False
And 1 0
1 1 0
True
False
False Null
False Null
False False
Null
Tabela de adev|r pentru Or logic a i b sunt valori de adev|r True sau False Or True False True Null
True
True
True
False Null
True True
False Null
False Null
0264-401667
242
Not(a)
False True Null
Controlul execuiei programului se face prin instruciuni. Cea mai elementar| instruciune este cea de atribuire, urmeaz| apoi cele de decizie i cele de ciclare.
Operatorii logici pot lucra cu valori de adev|r sau cu descompunerea binar| a valorilor numerice ale operanzilor. n acest caz operatori logici se numesc operatori pe bii i acioneaz| asupra a dou| poziii identice de bii din dou| expresii numerice modificnd bitul corespunz|tor acelei poziii conform tabelelor prezentate mai sus.
Instruciunea Let
Realizeaz| atribuirea valorii unei expresii unei variabile sau propriet|i. [Let] numevariabil| = expresie
Let este un cuvnt opional, de obicei fiind omis, numevariabil| este obligatoriu i este numele unei variabile sau a unei propriet|i de obiect, iar expresie este cea care produce valoarea care va fi atribuit|. Iat| cteva exemple de atribuiri: Dim a As Integer Dim danu As Boolean Dim s As String a=10 danu=True s="vin alegerile ... trec alegerile"
http://www.east.utcluj.ro/mb/mep/antal
Valoarea lui expresie poate fi atribuit| variabilei numai dac| este de tip compatibil cu cel al variabilei. Variabilelor de tipul Variant li se poate atribui orice valoare.
Aceste instruciuni permit testarea unor condiii i n funcie de rezultatul testului s| execute anumite poriuni de cod. Instruciunile de decizie n VBA sunt:
# # #
If...Then Se folosete pentru execuia condiional| a unei instruciuni sau a unui grup de instruciuni. Se
0264-401667
NU COPIA !.
243
If condiie1 Then [instruciuni_1] [ElseIf condiie2 Then [instruciuni_2]] ... [Else [instruciuni_n]] End If
Select...Case Aceast| instruciune este o alternativ| pentru scrierea de If Then Else -uri lungi asigurnd o citire mai uoar| a codului. Select Case expresietest [Case listaexpresie1 [instruciuni_1]] [Case listaexpresie2 [instruciuni_2]] ... [Case Else [instruciuni_n]] End Select
0264-401667
NU COPIA !.
Prima oar| se testeaz| condiie1. Dac| este False, se testeaz| condiie2 i aa mai departe pn| la g|sirea unei condiii True. Cnd s-a g|sit o astfel de condiie se execut| grupul de instruciuni instruciuni_x, apoi se sare la codul imediat urm|tor lui End If. Opional se poate un Else la care se va trece numai dac| nu s-a g|sit nici o condiie True.
If...Then...Else Se folosete pentru execuia condiiont| a unui grup de instruciuni dintre mai multe grupuri.
condiie este de obicei o comparaie, dar poate fi orice expresie care se evalueaz| la o valoare numeric|. Dac| valoarea numeric| este 0, VBA i atribuie valoarea de adev|r False, dac| este nenul|, valoarea de adev|r atribuit| de VBA este True. Dac| condiie este True se execut| instruciune sau instruciuni, n caz contrar instruciunile sunt s|rite. Observai c| prima form| de scriere permite execuia condiionat| a unei singure instruciuni, iar cea de a doua a unui grup de instruciuni.
http://www.east.utcluj.ro/mb/mep/antal
244
Instruciuni de ciclare
Instruciunile de ciclare permit executarea repetat| a unei instruciuni sau grup de instruciuni uneori denumite i corpul ciclului, atta timp ct o condiie r|mne adev|rat|. VBA suport| urm|toarele instruciuni de ciclare:
Ciclul Do...Loop Repet| un grup de instruciuni ct timp o condiie este True sau devine True. Urm|toarele forme de cicluri Do...Loop sunt valide: Do [{While |Until} condiie] [instruciuni] [Exit Do] [instruciuni] Loop sau Do [instruciuni] [Exit Do] [instruciuni] Loop [{While |Until} condiie]
# # # #
Nota 7 : Select Case evalueaz| pe expresietest o singur| dat| la nceput, cu If Then ElseIf se pot evalua expresii diferite pentru fiecare ElseIf.
http://www.east.utcluj.ro/mb/mep/antal
Aici, este o singur| expresie de test expresietest care se evalueaz| o dat| la intrarea n instruciune. VBA compar| valoarea acestei expresii cu valoarile din fiecare Case. Dac| se g|sete o egalitate va executa instruciunile asociate Case-ului respectiv. Listele de expresii listaexpresie conin una sau mai multe valori. Dac| exist| mai mult de o valoare n list|, trebuie separate prin virgule. Fiecare grup de instruciuni instruciuni_x conine nici una, una sau mai multe instruciuni. Dac| mai multe valori din liste distincte sunt egale cu valoarea de test, grupul de instruciuni corespunz|tor primei liste va fi executat. Grupul de instruciuni opionale corespunz|toare lui Case Else va fi executat dac| nu s-a g|sit n nici una din liste o valoare egal| cu cea a celei de test.
condiie este o expresie numeric| sau ir opional care este True sau False. Dac| condiie ia valoarea Null este echivalent| cu False. Cuvintele ntre acolade reprezint| alternative, adic| unul dintre ele poate s| fie scris. Pentru While instruciuni se execut| atta timp ct condiie este True, pentru Until instruciuni se execut| ct timp condiie nu este True. Exit Do produce ieirea din ciclul Do...Loop nainte de realizarea condiiei de p|r|sire a ciclului. Controlul este dat instruciunii imediat urm|toare ciclului, prima linie dup| Loop sau Loop [{While |Until} condiie]. Al doilea tip de ciclu se execut| cel puin o dat| pentru c| condiie, prin care se face testarea termin|ri, se atinge numai dup| execuia instruciunilor.
0264-401667
NU COPIA !.
245
For contor = nceput To sfrit [Step pas] [instruciuni] [Exit For] [instruciuni] Next [contor]
Ciclul For Each...Next Repet| un grup de instruciuni pentru fiecare element de tablou sau colecie.
contor este o variabil| de tip numeric, nceput este valoarea iniial| a lui contor, iar sfrit este valoarea final|, pas este o valoare opional| fiind cantitatea cu care se modific| contor la fiecare reluare a ciclului. Dac| pas nu este specificat| se consider| implicit 1. Dac| exist|, pas poate fi pozitiv sau negativ. instruciuni se execut| ct timp ct contor<=sfrit pentru valori pozitive ale lui pas sau ct timp contor>=sfrit pentru valori negative ale lui pas. Exit For produce saltul la instruciunea imediat urm|toare liniei Next [contor] de terminare a corpului ciclului For...Next. Un caz clasic de utilizare al ciclurilor For...Next este cnd un ciclu este n interiorul altuia, de exemplu:
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
element este o variabil| folosit| pentru parcurgerea iterativ| a elementelor din grup. Pentru colecii, element poate fi numai de tip Variant, variabil| obiect generic sau variabil| obiect specific. grup este numele unei colecii de obiecte sau tablou. For Each...Next se ncepe numai dac| n grup este cel puin un element. Dac| exist| mai multe elemente, instruciuni sunt repetate pentru fiecare element pn| la parcurgerea tuturor elementelor, cnd ciclul se termin| s|rindu-se la instruciunea imediat urm|toare lui. i aici Exit For produce ieirea forat| din ciclu cu saltul la instruciunea imediat urm|toare ciclului, adic| la prima instruciune dup| Next [element]. Ciclul While...Wend Execut| instruciuni ct tip condiie este True.
For Each element In grup [instruciuni] [Exit For] [instruciuni] Next [element]
0264-401667
246
condiie este o expresie numeric| sau ir care se evalueaz| la True sau False. instruciuni reprezint| una sau mai multe instruciuni care vor fi executate ct timp condiie este True. Controlul revine la condiie dup| o execuie a corpului ciclului format din instruciuni cnd se verific| dac| condiie este nc| True. Dac| da, procesul se repet|, altfel se execut| instruciunea urm|toare lui Wend.
S| presupunem c| dorim s| lucr|m cu datele unei facturi ntr-un modul VBA. ntr-un model simplificat, urm|toarele date ar fi de manipulat pentru fiecare facut|: ID - un num|r care identific| unic o factur|, ContClient - num|rul de cont al clientului, Valoare - valoarea de pl|tit, DFactura - data emiterii facturii, DAmanare - data pn| la care plata poate fi amnat|; DPlata - data pl|ii facurii, Expirata - n cazul n care factura expir|. Toate aceste date pot fi stocate n variabile simple astfel: Dim Dim Dim Dim Dim Dim Dim ID As Long ContClient As String Valoare As Currency DFactura As Date DAmanare As Date DPlata As Date Expirata As Boolean
O metod| de rezolvare a problemei este crearea unui tip de dat| definit| de utilizator care stocheaz| toate informaiile de manipulat prin: Type Factura ID As Long ContClient As String Valoare As Currency DFactura As Date DAmanare As Date DPlata As Date Expirata As Boolean End Type
Pe baza acestui tip de dat| definit de utilizator se pot declara variabile noi, dup| cum urmeaz|: Dim TestFactura As Factura
0264-401667
NU COPIA !.
Aceast| abordare are cteva probleme: ! dac| se lucreaz| cu mai multe facturi simultan, trebuie create cte un set de variabile pentru fiecare factura, acesta fiind un dezavantaj clar; ! nu exist| un mecanism intern pentru verificarea i manipularea datelor stocate n aceste variabile.
http://www.east.utcluj.ro/mb/mep/antal
247
Dac| dorim s| lucr|m cu mai multe facturi, tot ce trebuie s| facem, este s| declar|m mai multe variabile de tipul Factura. Este mult mai simplu s| lucr|m cu mai multe facturi, ns| ad|ugarea datelor se face, nc|, elementar.
n tehnica program|rii obiectuale clasa reprezinta 7 un ablon. O variabil| de tipul clas| (uneori numita 7s - i instant -iere) este un obiect care se creeaz| pe baza ablonului, el avnd caracteristicile descrise de acesta. Aceste caracteristici sunt determinate de proprieta 7tile i de membrii clasei. Obiectul este o entitate care poate fi programat, manipulat sau controlat. n Access, formularele, controalele etc. sunt obiecte. O proprietate este o caracteristc| a unui obiect, n Access, majoritatea propriet|ilor pot fi citite i scrise. O metod| reprezint| o aciune care poate fi efectuat| de obiect.
Tradit -ional, la specificarea numelui unei clase, acesta este prefixat cu un "C". Daca 7 clasa CFactura este deja definita 7 , un obiect pe baza clasei se creeaza 7 prin linia:
Des - i linia de mai sus creeaza 7 obiectul, adica 7 aloca 7 memorie pentru el, obiectul nu este instant -iat dect dupa 7 ce se refera 7 n cod.
Cnd se atribuie o valoare unei proprieta 7ti din obiect, valoarea este stocata 7 ntr-o variabila 7 interna 7 care este accesibila 7 numai respectivului obiect. Un utilizator al obiectului poate manipula doar proprieta 7tile expuse, astfel datele specifice obiectului sunt protejate contra manipula 7 rilor directe si, eventual, gres - ite.
0264-401667
NU COPIA !.
din fereastra bazei de date selectai Modules; clic pe butonul New; din Insert selectai Class Module; -i proprietatea Name pentru a modifica numele clasei de la Class1 la folosit CFactura;
Pentru a elimina aceast| problem| se poate defini un obiect "Factura" care are urm|toarele caracteristici: ! ID, ContClient, Valoare etc. devin propriet|i ale obiectului; ! cnd se creeaz| un obiect nou, anumite propriet|i primesc automat valori; ! cnd se atribuie o valoare unei propriet|i se poate scrie o secven| de cod VBA pentru validarea valorii; ! obiectului i se pot pot implementa metode (de exemplu, pentru a verifica dac| o factur| este expirat|).
http://www.east.utcluj.ro/mb/mep/antal
TestFactura.ID = 1234 TestFactura.ContClient = "AK72 - 12344" TestFactura.Valoare = 777.12345 TestFactura.DFactura = Date TestFactura.DAmanare = Date + 30 TestFactura.Expirata = False
248
Pentru exemplul nostru se vor declara variabile din figura urma 7 toare:
http://www.east.utcluj.ro/mb/mep/antal
Prima sarcina 7 , dupa 7 crearea unui modul clasa 7 , este specificarea acestor variabile interne clasei care se mai numesc si membri data 7 . De obieci, se declara 7 cte o variabila 7 interna 7 pentru fiecare data de stocat n obiect respectnd regulile: ! fiecare variabila 7 se declara 7 folosind cuvntul cheie Private pentru a face variabilele disponibile numai n interiorul acelui modul; ! tradit -ional, numele membrilor data 7 se prefixeaza 7 cu m_ pentru a indica ca 7 este vorba despre un membru al unei clase.
Cel de al doilea pas consta 7 n definirea proprieta 7tilor clasei. La fel ca si n cazul membrilor data, ideea sta 7 n crearea unei proprieta 7ti pentru fiecare articol de informat -ie stocat|. Acest pas are dou| etape pentru fiecare proprietate: ! stabilirea mecanismului pentru ntoarcerea valorii curente a propriet|ii i ! un mecanism, opional, pentru modificarea valorii propriet|ii.
Aceste "mecanisme" se implementeaz| printr-un grup special de funcii VBA folosind cuvintele cheie Property Get i Property Set.
Modul de lucru cu Property Get Property Get se folosete pentru ntoarcerea valorii curente a unei propriet|i. Formatul general pentru aceast| proprietate este:
0264-401667
NU COPIA !.
249
Folosirea lui Public face ca aceast| procedur|, sau proprietate, s| fie vizibil| pentru procese externe. numeproprietate este numele propriet|ii, tipdedat| este tipul de dat| al propriet|ii, iar m_membrudat| este variabila membru dat| care stocheaz| valoarea curent| a propriet|ii. Dac| dorim, se pot ad|uga instruciuni n plus procedurii, dei n cazul lui Property Get este destul de rar. Pentru exemplul nostru, propriet|ile Property Get folosite sunt: Private Private Private Private Private Private Private m_ID As Long m_ContClient As String m_Valoare As Currency m_DFactura As Date m_DAmanare As Date m_DPlata As Date m_Expirata As Boolean
' Intoarce valoarea curenta a valorii proprietatii CFactura.ID Public Property Get ID() As Long ID = m_ID End Property ' Intoarce valoarea curenta a proprietatii CFactura.ContClient Public Property Get ContClient() As String ContClient = m_ContClient End Property ' Intoarce valoarea curanta a proprietatiui CFactura.Valoare Public Property Get Valoare() As Currency Valoare = m_Valoare End Property ' Intoarce valoarea curenta a proprietatii CFactura.DFactura Public Property Get DataFactura() As Date DataFactura = m_DFactura End Property ' Intoarce valoarea curenta a proprietatii CFactura.DPlata Public Property Get DataPlata() As Date DataPlata = m_DPlata End Property
http://www.east.utcluj.ro/mb/mep/antal
Public Property Get numeproprietate( ) As tipdedat| [instruciuni] numeproprietate = m_membrudat| End Property
0264-401667
NU COPIA !.
250
Modul de lucru cu Property Let Cu excepia cazului n care dorii ca proprietatea s| poat| fi, doar citit|, trebuie definit| o procedur| care permite atribuirea unei noi valori propriet|ii. n acest scop se va folosi o procedur| Property Let care are forma general|:
' Modifica valoarea proprietatii CFactura.ContClient Public Property Let ContClient(ContClient As String) m_ContClient = ContClient End Property ' Modifica valoarea proprietatii CFactura.Valoare Public 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 = Cantitate End Property ' Modifica valoarea proprietatii CFactura.DFactura Public Property Let DataFactura(DF As Date) If DF < Date Then DF = Date MsgBox "Nu se poate introduce o factura in trecut!" & _ Chr(13) _
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 instruciuni n plus. Acestea testeaz|, de obicei, noua valoare nainte de a modifica membrul dat|.
Public Property Let numeproprietate(ValoareNou| As tipdedat|) [instruciuni] m_membrudat| = ValoareNou| End Property
http://www.east.utcluj.ro/mb/mep/antal
' Intoarce valoarea curenta a proprietatii CFactura.Expirata Public Property Get EsteExpirata() As Boolean EsteExpirata = m_Expirata End Property
0264-401667
NU COPIA !.
251
Observai c| nu exist| proceduri Property Let pentru propriet|ile ID i EsteExpirata, astfel ele devin propriet|i care pot fi doar citite (read-only). Crearea metodelor clasei Orice obiect are i un grup de metode care acioneaz| asupra obiectului. n acest scop, n cadrul clasei, trebuie s| definim proceduri Sub sau Function de tipul Public pentru ca s| fie vizibile extern. n cazul exemplului prezentat, se poate scrie o procedur| Sub care s| actualizeze valoarea lui m_Expirata dup| cum data curent| este mai mare sau mai mic| dect data amn|rii de plat| sub forma:
Propriet|ile Property Let ContClient, Property Let ID permit modificarea membrilor dat| m_ContClient, m_ID f|r| a realiza verificarea noilor valori. Proprietatea Property Let DataFactura permite modificarea datei facturii numai dac| aceasta este mai mare dect data curent|. n caz contrar se afieaz| un mesaj prin care utilizatorul este avertizat c| nu se poate factura "n trecut" i data factur|rii devine data curent|, iar data pn| la care se face amnarea de plat| este cu 30 de zile n plus fa| de cea de emitere a facturii.
' Modifica valoarea proproetatii CFactura.DPlata Public Property Let DataPlata(DP As Date) m_DPlata = m_DPlata m_Expirata = False End Property
http://www.east.utcluj.ro/mb/mep/antal
& "Data de azi va fi folosita in locul celei introduse." End If m_DFactura = DF m_DAmanare = m_DFactura + 30 End Property
NU COPIA !.
Definirea evenimentelor clasei Clasele definite de utilizator suport| lucrul cu dou| evenimente: Initialize i Terminate.
Evenimentul Initialize Acesta apare atunci cnd se realizeaz| la instanierea obiectului de tipul clas|, adic| atunci cnd: ! se declar| o variabil| obiect de tipul clasei prin folosirea lui New; evenimentul apare la prima folosire a variabilei n cod, de exemplu: Dim test As New CFactura test.ID = 1234 'evenimentul Initialize apare aici
' Defineste metoda CFactura.Actualizare Public Sub Actualizare() If m_DAmanare < Date And m_DPlata = 0 Then m_Expirata = True End If End Sub
0264-401667
252
Pentru a folosi acest eveniment se adaug| clasei o procedur| Private care folosete urm|torul format: Private Sub Class_Initialize( ) [codul de iniializare se pune aici] End Sub
n cazul nostru, procedura care urmeaz|, iniializeaz| 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|.
Private Sub Class_Terminate( ) [codul pentru terminare se pune aici] End Sub
Utilizarea clasei
Codul care urmeaz| se va crea ntr-un modul i permite verificarea funcion|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
0264-401667
NU COPIA !.
Evenimentul Terminate Acest eveniment apare atunci cnd toate referinele la obiectul de tipul clas| sunt setate la Nothing. Se folosete atunci cnd eliberarea clasa a alocat dinamic memorie i aceasta trebuie eliberat|. Pentru a folosi acest eveniment se scrie, n clasa, o procedur| Private de forma:
' 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 + 30 End Sub
http://www.east.utcluj.ro/mb/mep/antal
! se declar| o variabil| obiect de tipul clasei f|r| cuvntul cheie New, la scrierea lui Set prin care variabila este egal| cu noua instaniere a clasei Dim test1 As CFactura Set test1 = New CFactura 'evenimentul Initialize
253
ntruct coleciile sunt obiecte, ele se creeaz| asemenea obiectelor. Prima oar| se declar| o variabil| obiect care se va folosi ca referin| la colecie, apoi, se folosete Set pentru a crea o referin| de la variabila obiect colecie. Codul, principial, este de forma:
Obiectul colecie are o structur| foarte simpl| avnd o singur| proprietate i trei metode prezentate n tabelul urm|tor: Nume Tip Descriere
Count
Add
Remove Item
Se folosete pentru referirea unui articol din colecie; este metoda implicit|
0264-401667
NU COPIA !.
Cloeciile VBA furnizeaz| o metod| pentru tratarea unor obiecte definite de utilizator sub forma unui grup. De exemplu, dac| avem mai multe obiecte de tipul CFactura i se dorete realizarea unei aciuni este mai simplu dac| aceste obiecte pot fi tratate, grupat, dect, individual. O colecie este, la rndul ei, un obiect cu propriile lui propriet|i i metode. Obiectul colecie are urm|toarele caracteristici: ! este un obiect cu propriet|i i metode; ! obiecte de tipuri diferite pot fi ad|ugate coleciei; ! are dimensiunea variabil|, dup| cum se adaug| sau se terg obiecte; ! articolele coleciei nu pot fi sortate; ! articolele din colecie se pot selecta pe baza unui index care ncepe cu valoarea numeric| 1.
Colecii VBA
http://www.east.utcluj.ro/mb/mep/antal
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.Valoare End Sub
254
Metoda Add se folosete pentru ad|ugarea unui articol n colecie, ea are forma general|:
De exemplu, pentru ad|ugarea obiectelor test1, test2, test3 de tipul CFactura coleciei testi se va folosi codul: Dim Dim Dim Dim testi test1 test2 test3 As As As As New New New New Collection CFactura CFactura 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 Set Set Set test1 test2 test3 testi = = = = Nothing Nothing Nothing Nothing
Dei folosirea lui Cheie este opional|, utilizarea unor nume pentru identificarea unui articol de colecie este de preferat n locul unui num|r ntreg. Num|rul de index nu este foarte sigur ntruct valoarea lui se poat schimba dac| se terg sau se adaug| articole. Argumentele opionale nainte i Dup| se pot folosi pentru a specifica poziia obiectelor n colecie.
Cel mai eficient mod de parcurgere a coleciei este folosirea instruciunii For Each.
Dim test As CFactura 'variabila obiect de tipul CFactura For Each test In testi Debug.Print test.ContClient Next test
0264-401667
NU COPIA !.
Obiectele coleciei pot fi referite printr-un num|r sau valoarea cheii. Cnd articolele se refer| printr-un num|r ntreg, numit i index, valoarea indexului, pentru primul obiect din colecie, este 1. Metoda mai simpl| de referire este prin numele cheii. Codul care urmeaz| exemplific| cele descrise.
http://www.east.utcluj.ro/mb/mep/antal
255
Obiecte specifice ale unei colecii por fi terse folosind indexul sau valoarea cheii dup| cum urmeaz|: testi.Remove 2 testi.Remove "trei"
O metod| pentru tegerea tuturor obiectelor din cloecie este parcurgerea ei i apelarea metodei Remove pentru fiecare articol. Exist| ns| i o metod| mai rapid| n care se reatribuie obiectul colecie unei noi colecii: Set testi = New Collection
Coleciile sunt obiecte, din acest motiv spaiul folosit pentru stocarea variabilei colecie trebuie i el eliberat prin codul: Set testi = Nothing
Pentru testarea secvenelor 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
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
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
256
testi.Remove "trei"
Option Explicit
' Intoarce proprietatea CInvoices.Contor Public Property Get Contor() As Long Contor = m_Facturi.Count End Property
Codul care urmeaz| implementeaz| o clasa pentru manipularea unei colecii. Pentru aceasta se va crea o clas| nou| care va avea proprietatea Name seat| la CFacturi i urm|torul cod:
http://www.east.utcluj.ro/mb/mep/antal
Debug.Print "----" For Each test In testi Debug.Print test.ContClient Next test
' Functia este versiunea romana pentru metoda Add Public Function Adauga(CClient As String, ValFact As _ Currency) As CFactura Dim facturaNoua As New CFactura With facturaNoua .ContClient = CClient .Valoare = ValFact m_Facturi.Add Item:=facturaNoua, Key:=CStr(.ID) End With Set Adauga = facturaNoua End Function
Public Property Get Facturi() As Collection Set Facturi = m_Facturi End Property
0264-401667
NU COPIA !.
257
' Versiunea romana pentru metoda Remove Public Sub Sterge(Index As Variant) m_Facturi.Remove Index End Sub Pentru testarea clasei se va folosi procedura: Public Sub TestCFacturi2() 2 Dim testi As New CFacturi 3 Dim test As CFactura
1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
For i = 1 To testi.Contor Debug.Print testi.Articol(i).ContClient Next i For Each test In testi.Facturi Debug.Print test.ContClient Next test
testi.Adauga CClient:="ab-1234", ValFact:=777.77 testi.Adauga CClient:="bc-5555", ValFact:=333.33 testi.Adauga CClient:="ab-3334", ValFact:=555.55 Debug.Print testi.Contor
http://www.east.utcluj.ro/mb/mep/antal
' Versiunea romana pentru metoda Item Public Function Articol(Index As Variant) As CFactura Set Articol = m_Facturi.Item(Index) End Function
End Sub
Liniile 10 - 12 prezint| modul de parcurgere a coleciei testi folosind ciclul For. Liniile 14 - 16 prezint| modul de parcurgere a coleciei testi prin folosirea ciclului For Each. Pentru ca aceast| metod| de parcurgere s| poat| fi folosit| a fost nevoie de proprietatea Facturi care s| ntoarc| colecia curent| de facuri stocat| n membrul dat| m_Facturi.
Modul de lucru cu Property Set Pentru a atribui o colecie propriet|ii Facturi trebuie folosit| o procedur| Property Set. Acest tip de procedur| se folosete pentru atribuirea unui obiect la o proprietate i are urm|torul format: Public Property Set numeproprietate(ObiectNou As tipdedat|) [instruciuni] Set m_membrudat| = ObiectNou End Property
0264-401667
NU COPIA !.
258
Property Set este o varianta 7 de Property Let care permite crearea unor proprieta 7ti obiect. Proprieta 7tile obiect sunt proprieta 7ti care sunt poantori la obiecte si nu sunt valori scalare obies - nuite. Creat -i un nou modul clasa 7 cu numele CClient. Option Compare Database Option Explicit Private Private Private Private m_ContClient As String m_NumeClient As String m_AdresaClient As String m_FacturiClient As CFacturi
Public Property Let ContClient(cont As String) m_ContClient = cont End Property Public Property Get ContClient() As String ContClient = m_ContClient End Property
Public Property Get FacturiClient() As CFacturi Set FacturiClient = m_FacturiClient End Property
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
numeproprietate este numele propriet|ii, ObiectNou esteobiectul pe care dorim s|-l atribuim, tipdedat| este tipul de dat| al obiectului, iar m_membrudat| este variabil| membru dat| obiect.
259
Set m_FacturiClient = ObiecteFacturi End Property Pentru testarea clasei creat -i procedura urma 7 toare: Public Sub TestCClient() 2 Dim tc As CClient 3 Dim fa As CFacturi
1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 24
Set tc = New CClient With tc .ContClient = "12-3456" .AdresClient = "Fericirii 13" .NumeClient = "Ionel Vasile" Set .FacturiClient = New CFacturi End With
Debug.Print "----" With tc.FacturiClient .Adauga tc.ContClient, "100.00" .Adauga tc.ContClient, "200.108" For i = 1 To .Contor Debug.Print .Articol(i).ContClient,E .Articol(i).Valoare Next i End With Debug.Print "----"
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
n majoritatea cazurilor, cnd se modeleaza 7 o problema 7 cu ajutorul obiectelor, se vor ga 7 si relat -ii ntre obiecte. Deseori, aceste relat -ii sunt reprezentate grafic, sub forma unei diagrame 7 denumirea de modelul de obiecte al aplicat -iei. n principal, relat -iile dintre obiecte ce poarta sunt de natura 7 ierarhica 7 . Pentru reprezentarea realt -iilor ntre obiecte se folosesc poantori. Se vor declara poantori la obiecte copil n sect -iunea declarat -iilor modulului clasa 7 pa 7 rinte. Mai sus, pentru a modela relat -ia ntre factura 7s - i client s-a declarat o variabila 7 m_FacturiClient n sect -iunea declarat -iilor din clasa CClient. Ea primes - te, valoare n linia 10 a secvent -ei pentru testarea clasei, cu ajutorul proprieta 7tii Set. Pentru a putea accesa membrii obiectului CFacturi s-a definit proprietatea Get FacturiClient la nivelul obiectului CClient. Fa 7 ra 7 ea, liniile 14-20, din codul de testare ar fi fost imposibil de scris.
Set fa = tc.FacturiClient For i = 1 To fa.Contor Debug.Print fa.Articol(i).ContClient,E fa.Articol(i).Valoare Next i End Sub
0264-401667
260
Atent -ie
E.
0264-401667
NU COPIA !.
Definit -ia de mai sus este stocata 7 n modulul cu numele Module3, iar rezultatul funct -iei este afis - at n fereastra imediata 7 (Immediate window). Vizualizarea acestei ferestre se face selectnd din View, Immediate Window. Deseori, aceasta 7 fereastra 7 este folosita 7 pentru testarea unui 7 situatie ar fi calculul valorii unei expresii sau a subprogram din interiorul unui modul. O alta unei variabile. Pentru aceasta se va folosi caracterul ? urmat de numele variabilei, expresiei sau funct -iei dupa 7 care se apasa 7 tasta Enter. Rezultaul se va afis - a, n fereastra imediata 7 , pe linia urma 7 toare expresiei de calculat.
Exista 7 multe asema 7 na 7 ri ntre funct -ia din "matematica 7" s - i cea din VBA. Prin definit -ie, avnd doua 7 mult -imi D, C s - i G o parte a produsului cartezian D x C, astfel nct , cu proprietatea , se numes - te funct -ie (aplicat -ie sau transformare) definita 7 pe D cu valori C tripletul . D se numes - te domeniul de definit -ie, C codomeniul funct -iei, iar G graficul lui f. Deseori, n locul notat -iei se prefera 7 sau y = f(x). x se numes - te variabila 7 independenta 7 sau argument, iar y variabila 7 depedenta 7 . Elementul unic , care corespunde lui se numes - te imaginea lui x prin f sau valoarea funct -ie n x. , pentru care D=[0,4] si C=[1,3], n limbajul VBA, acesta 7 funct -ie se
http://www.east.utcluj.ro/mb/mep/antal
n toate secvent -ele de program care urmeaza 7 simbolul este folosit pentru a marca o linie 7 lungimii prea mari, nu a putut fi scrisa 7 complet pe un singur rnd. Pe hrtie, linia care, datorita prea lunga este continuata 7 pe linia imediat urma 7 toare, dar n program, continuarea trebuie
261
daca 7 a este mai mic dect b minimul este a, daca 7 a este mai mare dect b minimul este b, observnd ca 7 o solut -ie o exclude pe cealata 7 se poate spune:
daca 7 a este mai mic dect b atunci minimul este a, altfel minimul este b,
Rat -ionamentul de mai sus, se va programa n VBA, folosind instruct -iunea If astfel: Daca 7 a < b Atunci minim = a Altfel minim =b Terminare If
0264-401667
If se foloses - te atunci cnd pe parcursul rezolva 7 rii problemei, n secvent -a 7 de pas - i de urmat, trebuie luata 7 o decizie. n "vocabularul uman" corespondentul lui If este daca 7 . Sa 7 presupunem ca 7 dorim sa 7 scriem o funct -ie care ga 7 ses - te minimul dintre doua 7 valori reale. Funct -ia se va primi 7 va calcula minimul dintre doua 7 valori si va avea ca parametri pe a numele de min2, pentru ca si b.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
262
Pe baza codului de mai sus, se va scrie o funct -ie care sa 7 calculeze minimul.
Public Function min3(a As Double, b As Double, c As Double) As E Double min3 = min2(min2(a, b), c) End Function
Daca 7 , pe baza funct -iei care ga 7 ses - te minimul dintre doua 7 valori dorim sa 7 scriem o funct -ie, cu numele min3, care ga 7 ses - te minumul dintre trei valori, acesta va fi:
-i ca 7 valoarea lui min3 se determina 7 prin apelarea de doua 7 ori a lui min2. Prima oara 7 Observat se ga 7 ses - te minimul dintre a s - i b, apoi ntre minimul dintre a, b s - i c.
Pe baza exemplelor prezentate, scriet -i funct -iile max2 s - i max3 pentru calcularea maximului dintre doua 7 respectiv trei numere. Scriet -i apoi o procedura 7 Sub, cu numele minmax3, pentru 7 pe funct -iile de mai sus. calculul valorilor minime si maxime bazata
http://www.east.utcluj.ro/mb/mep/antal
Public Function min2(a As Double, b As Double) As Double If a < b Then min2 = a Else min2 = b End If End Function
Procedura Sub va avea trei argumente de intrare, pe a, b s -i c s - i doua 7 de ies - ire, pe vmin s -i vmax. Observat -i, n fereastra imediata 7 , ca 7 des - i pe ultimele doua 7 pozit -ii stau parametrii de
0264-401667
NU COPIA !.
263
n acest caz, subprogramul cu numele minmax3v1 va putea fi apelat din fereastra imediata 7 prin linia minmax3v1 1,2,3.
continuare. Observai c| funcia g(x) are un parametru care este folosit pentru a monitoriza evaluarea corect| a valorilor ei. n caz de eroare acest parametru va lua valoarea True, caz n care rezultatul ntors de funcie 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
ba , atunci valoarea punctului al i-elea va n 1 calcula folosind formula x = a + ( i 1)h . Cele dou| proceduri sunt implementate n
0264-401667
NU COPIA !.
Se cere s| se scrie o procedur| de tipul funcie pentru calculul valorilor lui g(x) i una de tipul subrutin| pentru afiarea valorilor ei ntr-un interval dat, [a,b], n n puncte echidistante. ntruct punctele sunt echidistante, se poate determina dinstana ntre dou| puncte consecutive considerndu-se conoscute a, b i n. Aceast| distant| se numete pas de parcurgere a
Public Sub minmax3v1(a As Double, b As Double, c As Double, E Optional vmin As Double, Optional vmax As Double) vmin = min3(a, b, c) vmax = max3(a, b, c) Debug.Print "Minimul dintre "; a; b; c; " este "; vmin Debug.Print "Maximul dintre "; a; b; c; " este "; vmax End Sub
http://www.east.utcluj.ro/mb/mep/antal
ies - ire, care se calculeaza 7 n procedura 7 , ei trebuie specificat -i conform sintaxei de scriere a apelului lui minmax3. Pentru a sca 7 pa de aceasta 7 scriere ei pot fi declarat -i ca parametrii opt -ionali dupa 7 cum urmeaza 7:
264
n continuare se por prezenta cteva dintre posibilit|ile de implementare a operaiilor cu numere complexe, n VBA, folosind tehnicile de progrmare deja discutate. n prima variant|, programarea procedurarl| este folosit| pentru implementarea adum|rii a dou| numere complexe. Creai un modul cu urm|toarele proceduri: Sub complex_aduna(re1 As Double, im1 As Double, re2 As E Double, im2 As Double, sumare As Double, sumaim As Double) sumare = re1 + re2
0264-401667
NU COPIA !.
For i = 1 To n x = a + (i - 1) * h aux = g(x, eroare) If eroare Then Debug.Print "Evaluarea functiei a generat eroare E pentru x = "; x Else Debug.Print i; ")"; x; aux End If Next i End Sub
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
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
http://www.east.utcluj.ro/mb/mep/antal
'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 If End Function
265
sumaim = im1 + im2 End Sub Sub test() Dim re As Double, re1 As Double, re2 As Double Dim im As Double, im1 As Double, im2 As Double re1 im1 re2 im2 = = = = 1 2 3 4
complex_aduna re1, im1, re2, im2, re, im Debug.Print re; "+i*"; im End Sub
Sub test1() Dim c As complex, c1 As complex, c2 As complex c1.re = 1 c1.im = 2 c2.re = 3 c2.im = 4 c = complex_aduna(c1, c2) Debug.Print c.re; "+i*"; c.im End Sub
0264-401667
NU COPIA !.
Function complex_aduna(c1 As complex, c2 As complex) As E complex complex_aduna.re = c1.re + c2.re complex_aduna.im = c1.im + c2.im End Function
Procedura pentru adunarea a dou| numere complexe are ase parametri, primii patru sunt de intrare, iar ultimii doi sunt de ieire. n aceasata variant| de implementare nu exist| nici un control asupra valorilor de intrare, care, pna la urm|, pot fi orice valori numerice i nu neap|rat p|rile reale i imaginare are unor numere complexe. O variant| mbun|t|it| ar fi folosirea unui tip de dat| pentru reprezentarea numerelor complexe. Creai un nou modu care s| fie de forma:
http://www.east.utcluj.ro/mb/mep/antal
266
Public Property Let imaginar(img As Double) im = img End Property Public Property Let real(rea As Double) re = rea End Property
Public Property Get imaginar() As Double imaginar = im End Property Public Property Get real() As Double real = re End Property
http://www.east.utcluj.ro/mb/mep/antal
im. Este clar c| ele reprezint| o pereche i nu este corect| folosirea lor independent|. S-a creat un nou concept, cel de num|r complex. El apare i la nivelul funciei ce realizeaz| adunarea celor dou| numere complexe prin faptul ca se pot declara parametri i rezultare de tipul n cauz|. Aceast| abordare este nc| un pas nainte, dar nc| problema nu este rezolvat| total. Operaia de adunare a numerelor complexe este specific| acestora, ar fi normal ca acestea s| poat| aciona numai asupr| numerelor complexe. n varianta prezentat|, funcia complex_aduna() ar putea fi folosit| ncorect de cineva care nu tie ca ea poate lucra corect numai cu tipul de dat| complex. Soluia este, ca att datele, ct i procedurile care manipuleaz| datele s| fie folosite pentru definirea unui nou tip de date. n acest scop se va defini un modul de tipul clasa cu numele CComplex, dup| cum urmeaz|:
Public Sub aduna(a As CComplex, b As CComplex) im = a.imaginar + b.imaginar re = a.real + b.real End Sub Pentru testarea clasei se va folosi modulul:
Public Sub test2() Dim x As New CComplex, y As New CComplex, z As New E CComplex x.imaginar = 1 x.real = 2
0264-401667
NU COPIA !.
267
Observai c|, aici, ncepnd cu operaia de atribuire a valorilor complexe, pn| la cea de afiare totul se face sub controlul strict al funciilor specifice clasei CComplex orice posibilitate de eroare n utilizarea unor date sau funcii incorecte fiind exclus|.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
268
Obiectivele cursului 11
! ! ! ! ! ! ! ! !
cum se acceseaz| obiectele i ierarhiile de obiecte n Access; care sunt obiectele Access; care sunt propriet|ile folosite mai des; ce sunt coleciile implicite; ce sunt evenimentele i tipurile lor;
care este rolul obiectelor Container i Document; cum se depaneaz| i se depisteaz| erorile din proceduri.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
269
POO a nceput cu SIMULA-67 n jurul anului 1970. Exemple populare de limbaje orientate pe obiecte sunt Smalltalk creat la Palo Alto Research Center (PARC) a lui Xerox i C++-ul.
O baz| de date Access este format| din obiectele pe care le vedei n fereastra bazei de date (Database Window): tabele, interog|ri, formulare, rapoarte, macro-uri, i module. Aceste obiecte pot fi manipulate din limbajul VBA prin codul coninut de procedurile aplicaiei. Unele dintre aceste obiecte pot fi create cu ajutorul generatoarelor prezentate deja, ns| controlul pe care l ofer| aceast| metod| de creare este prea puin flexibil fa| de ceea ce ne permite limbajul VBA. n Access unele obiecte conin alte obiecte, de exemplu, un fomular conine controale. Aceste leg|turi dintre obiecte determin| o ierarhie de obiecte. Obiectele sunt organizate n colecii, care reprezint| o mulime de obiecte de acelai tip. De exemplu, exist| o colecie cu numele Forms care cuprinde toate formularele deschise ale bazei de date; fiecare formular are o colecie numit| Controls care conine toate controalele de pe suprafaa lui. Un obiect cu numele NumeObiect al unei colecii cu numele NumeColecie poate fi referit prin trei metode din VBA:
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
n Programarea Orientat| pe Obiecte (POO) conceptul de baz| este obiectul (sau Tipul Abstract de Dat|, TAD, - un tip de dat| a c|rui form| intern| este ascuns| n spatele unei funcii de acces. Obiectele de acest tip sunt create i inspectate numai prin apeluri la funciile de acces. Aceasta permite ca implementarea tipului s| fie modificat| f|r| alte modific|ri de module n afara celui n care TAD este definit). El este o structur| de dat| ncapsulat| mpreun| cu rutinele, numite "metode", care opereaz| asupra datelor. Operaii asupra datelor pot fi efectuate numai prin intermediul acestor metode, care sunt comune tuturor obiectelor ce s-au n|scut prin instanierea aceleiai clase particulare. Denumirea de clas| este folosit| n POO pentru un prototip de obiect, fiind echivalentul noiunii de tip derivat din limbajele procedurale. O clas| este determinat| de o mulime de obiecte cu o structur| i un comportament comun. Structura clasei este determinat| de variabilele care reprezint| starea unui obiect din acea clas|, iar comportamentul ei este dat de metodele asociate clasei. Clasele se pot afla ntr-o relaie ierarhic|. O clas| poate fi specializarea (o "subclas|") alteia (care este "superclasa"), poate fi compus| din alte clase sau se poate folosi n alte clase. Fiecare clas| are o poziie n ierarhia de clase. Metodele sau codul unei clase pot fi transferate n josul ierarhiei unei subclase sau pot fi motenite de la o superclas|. Subclasa este o clas| care este derivat| dintr-o superclas| prin motenire. Subclasa conine toate tr|s|turile superclasei, dar poate ad|uga noi tr|s|turi sau poate s| le redefineasc| pe unele din cele motenite. Apelurile de proceduri sunt descrise n POO n termenii transferurilor de mesaje. Un mesaj specific| o metod| i opional poate include i alte argumente. Cnd un mesaj este transmis unui obiect, metoda este c|utat| n clasa obiectului pentru a g|si care este operaia de efectuat cu obiectul. Dac| metoda nu este definit| n clasa obiectului, este c|utat| n superclasele lui pn| cnd se ajunge la o superclas| care nu mai este derivat|. Apelurile de procedur| ntotdeauna ntorc un obiect rezultat, care poate fi o eroare, la fel este i aici, cnd nu s-a g|sit o superclas| care s| defineasc| metoda specificat|.
270
Semnificaie
M NumeColecie("NumeObiect") e t o d a 2
http://www.east.utcluj.ro/mb/mep/antal
Numele obiectului este explicit scris ca un membru al coleciei. Parantezele drepte sunt necesare dac| numele obiectului conine spaii. Numele obiectului este explicit scris ca un membru al coleciei sau se poate folosi o variabil| de tipul String pentru a stoca numele acesteia. index specific| poziia obiectului din colecie.
M NumeColecie(index) e t o d a 3
Forms(1)
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:
0264-401667
NU COPIA !.
Fiecare form| sintactic| are avantajele ei. Atunci cnd referim un singur obiect, de exemplu al unui formular sau raport, Metoda 1, cu folosirea semnului de exclamare !, este cea mai simpl|. Dac| dorim s| facem anumite aciuni cu un grup de obiecte, ale c|ror nume este cunoscut, vom folosi Metoda 2. Metoda 3 se folosete, n general, cnd dorim s| parcurgem ntreaga colecie pentru a realiza o aciune cu toate obiectele acesteia. Toate obiectele au propriet|i, metode asociate i dac| este cazul, proceduri de evenimente. Fiecare obiect are o mulime de caracteristici denumite propriet|i. Acestea pot controla, de exemplu, modul de afiare al obiectului i poziia lui pe ecran.
271
Forms![Clienti].Caption="Salutare!"
O variabil| de tipul obiect se declar| dup| aceeai sintax| cu a variabielor obinuite prin folosirea lui Dim, ReDim, Static, Private sau Public.
Atribuirea unei valori pentru cazul variabilelor obiect se face folosind instruciunea Set dup| sintaxa:
Nu toate obiectele lui Access pot fi reprezentate prin variabile. Tabelul care urmeaz| descrie obiectele Access utilizate mai des, specificnd dac| pot s| participe sau nu ntr-o declaraie de variabil|. Nume obiect Descriere Poate fi un tip obiect?
Application
Da
Control
Da
Debug Form
Fereastr| pentru afiarea imediat| a rezultatelor unei proceduri. Formular sau subformular deschis.
Nu Da
0264-401667
NU COPIA !.
Dup| ce variabila a fost declarat| i i-a fost atribuit| o valoare se poate folosi asemenea oric|rei varabile.
Dac| baza de date este mare, specificarea unor obiecte individuale n liniile procedurilor duce la programe greu de ntreinut. n plus, uneori se poate s| dorim executarea acelorai operaii cu obiecte diferite. n VBA exist| variabila obiect c|reia se poate asocia un tip de obiect.
Sub ModificaCaption() Dim i As Integer For i=0 To Forms.Count-1 Forms(i).Caption = "Formular nr. " + str(i) Next End Sub
http://www.east.utcluj.ro/mb/mep/antal
Fiecare colecie are o proprietate Count care conine num|rul actualizat de obiecte ale coleciei. Primul membru are index-ul 0 iar ultimul Count-1. Aceast| proprietate permite parcurgerea unei colecii de obiecte.De exemplu, dac| dorim s| set|m titlurile tuturor formularelor deschise la "Formular nr. x", unde x este num|rul ordine al formularului din colecie se poate scrie procedura Sub:
272
Nu Nu Da Nu Nu Nu
Nume obiect
Descriere
Container
Obiect care conine informaii despre alte obiecte definite de Microsoft Access sau motorul Jet. Colecie de obiecte Container. Baza de date deschis|.
Da
Containers Database
Nu
Da
Databases DoCmd
Colecie a bazelor de date deschise. Obiect care definete aciuni care pot fi utilizate ntr-o macro procedur|.
Nu Nu
0264-401667
NU COPIA !.
Pe lng| obiectele definite de aplicaia Microsoft Access, motorul bazelor de date Microsoft Jet, definete obiecte pentru operaiile de gestionare a datelor din aplicaie. Aceste obiecte poart| denumirea de obiecte pentru accesul la date (Data Access Objects sau DAO) i pot fi folosite n procedurile VBA pentru a aciona asupra tabelelor sau datelor din tabele, interog|rilor, relaiilor etc. din bazele de date. Tabelul care urmeaz| descrie obiectele de acces la date utilizate mai des, specificnd dac| pot s| participe sau nu ntr-o declaraie de variabil|.
http://www.east.utcluj.ro/mb/mep/antal
273
Informaii ale motorului Jet al bazelor de date Microsoft despre alte obiecte din baza de date. Colecie de obiecte Document.
Da Nu Da Nu Da Nu Da Nu Da Nu Da Nu Da Nu Da
Cmp al unui tabel, interogare, mulime de nregistr|ri, index sau relaie. Colecie de obiecte Field ale unui tabel, interogare, mulime de nregistr|ri etc. Parametru de interogare.
Mulime de nregistr|ri definite printr-un tabel sau interogare. Colecie de obiecte RecordSet. Tabel salvat n baza de date.
Cont de utilizator n grupul de lucru curent al motorului Jet al bazelor de date. Colecie de obiecte User.
Workspaces
Cele dou| ierarhii prezentate pn| acum nu conin obiecte ci ceea ce n capitolul introductiv numeam clase, adic| prototipuri sau abloane de obiecte. Clasa este similar| cu tipul de dat| i descrie caracteristicile unui obiect. Dac| scriem Dim x As Integer, Integer este tipul de dat|, iar variabila de acel tip este x, dac| scriem Dim spl As Workspace, clasa este Workspace, iar variabila de acel tip este obiectul spl.
Dac| o variabil| este declarat| de tipul Control, dar nu este specificat un tip de obiect control concret este posibil s| dorim determinarea tipului de control care este stocat n variabil|. n acest scop se va folosi o instruciune If...Then...Else cu sintaxa: {If|Else} TypeOf Variabil|Control Is TipControl Then
Variabil|Control este numele unei variabile de tipul Control, iar argumetul TipControl poate fi unul dintre cuvintele rezervate: BoundObjectFrame, CheckBox, ComboBox,
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
Nu
NU COPIA !.
274
Un exemplu de procedur| care afieaz| n fereastra imediat| tipul unui control este:
http://www.east.utcluj.ro/mb/mep/antal
CommandButton, Graph, Line, ListBox, UnboundObjectFrame, OptionButton, OptionGroup, Rectangle, Subform, Subreport, TextBox, ToggleButton, Label, PageBreak.
NU COPIA !.
Uneori dorim s| realiz|m modificarea atributelor unor obiecte din cauza unor condiii concrete ale aplicaiei. De exemplu, dorim s| realiz|m ascunderea unui control de tipul text pentru c| din lipsa unor date afiate nu este cazul s| fie afiat pe suprafaa formularului
Sub DeterminaTipControl(VarControl As Control) If TypeOf VarControl Is CommandButton Then Debug.Print "Controlul este de tipul " &E TypeName(MyControl) ElseIf TypeOf VarControl Is CheckBox Then Debug.Print "Controlul este de tipul " &E TypeName(VarControl) ElseIf TypeOf VarControl Is TextBox Then Debug.Print "Controlul este de tipul " &E TypeName(VarControl) End If End Sub
0264-401667
275
deschis.
Propriet|ile obiectului Screen se folosesc la referirea bazei de date, formularului, raportului, controlului, care la momentul curent este activ, dup| cum urmeaz|: Proprietate Screen.ActiveDatasheet Screen.ActiveForm Screen.ActiveReport La cine se refer|
Baza de date activ| curent|. Formularul curent activ. Raportul curent activ.
Screen.ActiveControl
n documentaia tehnic| original|, obiectul curent de interfa| cu utilizatorul care este activ se zice c| are focus-ul (focus = focalizare n limba englez|).
Fiecare formular sau raport are o proprietate numit| Me (Eu) care reprezint| formularul sau raportul nsui n codul care se execut|. Pentru a exploata aceast| proprietate pentru formulare trebuie s|: creai o procedur| public| care are un parametru de tipul Form i n care setai o proprietate a formularului; apelai procedura cu argumentul Me pentru a modifica parametrul respectiv al formularului curent. S| presupunem c| scriem o procedur| Sub pentru colorarea automata 7 a sect -iunii de detalii a formularelor cnd acestea deschise:
http://www.east.utcluj.ro/mb/mep/antal
= RGB(255,255,0)
End Sub
Apelnd aceast| procedur| cu proprietatea Me n evenimentul Open (Deschidere) a formularului efectul va fi de modificare a culorii fondului formularului la verde (operat -ia nu se observa 7 daca 7 n locul culorii de fond formularul foloses - te o imagine): Sub Form_Open()
ColoreazaFormular Me
End Sub
0264-401667
NU COPIA !.
276
Colecii implicite
Gruparea obiectelor n colecii, a plecat n Access, de la ideea c| obiectele pot conine alte obiecte. Aceste leg|turi sunt cele care creeaz| ierarhia de obiecte. De exemplu, o baz| de date conine obiecte tipul formular, obiectul formular conine la rndul lui obiecte de tipul control (cutie de text, seciune de detalii etc.). Obiectele de acelai tip coninute de alte obiecte sunt grupate n colecii. Coleciile pot fi privite asemenea unui tablou declarat automat de Access la ale c|rui elemente ne referim prin denumirea de element de colecie. Din moment ce o colecie este un obiect, aceasta are propriet|ile i metodele ei proprii. Multe obiecte au o colecie implicit| de obiecte care grupeaz| cele mai probabile obiecte ce vor fi folosite. De exemplu, Forms are o colecie implicit| de controale, iar Databases are o colecie implicit| TableDefs. Nu exist| o colecie de obiecte controale, ne referim la un astfel de obiect ca la un membru al coleciei implicite a formularului sau raportului. De exemplu, Forms![Clienti]![IDClient] se refer| la controlul IDClient al formularului Clienti din colecia implicit| de controale a formularului. Cnd lucrai cu DAO coleciile implicite se pot folosi pentru o scriere mai scurt| a obiectului de identificat, dei folosind aceast| scriere relaia dintre obiecte devine mai criptic|, de exemplu, o referire la tabelul TClienti se poate scrie astfel:
http://www.east.utcluj.ro/mb/mep/antal
cel reprezentat de propriet|ile ActiveForm sau ActiveReport ale obiectului Screen. Totui, propriet|ile ActiveForm i ActiveReport reprezint| formularul sau raportul activ, iar proprietatea Me reprezint| formularul sau raportul al c|rui cod este n curs de execuie (atunci cnd folosii evenimentul Timer este posibil ca o procedur| a unui formular deschis s| fie activat| la momente de timp definite de programator, n timp ce pe ecran mai exist| un alt formular deschis i activ, adic| care comunic| cu utilizatorul) .
Obiect
Colecie implicit|
Documents
TableDefs
Workspaces Controls
Index
Fields
Parametres
Fields Controls
n primul caz, elementele coleciilor sunt scrise explicit, n al doilea cunoscndu-se coleciile implicite se trec numai index-urile corespunz|toare. Tabelul care urmeaz| prezint| cteva dintre obiectele Access i DAO mpreun| cu coleciile implicite:
0264-401667
NU COPIA !.
277
Public Sub PropTabel(NumeTabel As String) Dim db As Database Dim tbd As TableDef Dim i As Integer
For i = 0 To tbd.Properties.Count - 1
End Sub
n fereastra afiat| introducei numele procedurii de mai sus mpreun| cu numele unui tabel din baza de date, de exemplu Orders sub forma PropTabel "Orders":
0264-401667
dai numele PropTabel procedurii Sub, acceptai toate celelalte set|ri implicite i clic pe OK;
Obiectele Forms, Reports i DAO conin o colecie de obiecte proprietate (Property). De exemplu, procedura care urmeaz| parcurge ntr-un ciclu toate propriet|ile unui tabel din baza de date, afind n fereastra imediat| numele propriet|ii i valoarea ei, dac| exist|. deschidei baza de date Northwind; din fereastra bazei de date clic pe butonul Modules; clic pe butonul New pentru a crea un modul nou;
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
278
Pentru crearea unei proceduri Sub care s| afieze propriet|ile unui formular creai procedura: Public Sub PropFormular(NumeFormular As String) Dim db As Database Dim frm As Form
Dim i As Integer
For i = 0 To frm.Properties.Count - 1
End Sub
Pentru exemplificarea parcurgerii unei colecii de obiecte prezint n continuare aceeai procedur| scris| folosind For Each...Next: Public Sub PropFormular(NumeFormular As String) Dim prp As Property
0264-401667
la ap|sarea tastei Enter procedura va fi lansat| n execuie, iar rezultatle se vor afia sub linia PropTabel "Orders".
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
279
For Each prp In Forms(NumeFormular).Properties Debug.Print prp.Name; prp.Value Next End Sub
Obiect Container
Definit de
Se refer| la
Databases Forms
Formularele salvate n baza de date curent|. Modulele salvate n baza de date curent|.
Modules
Tables
0264-401667
Informaiile legate de baza de date curent| i toate obiectele ei sunt stocate de Access n obiectele Container i Document. Acestea pot fi folosite pentru enumerarea obiectelor stocate n baza de date, modificarea proprietarului (ownership), obiectelor sau a drepturilor de acces ale utilizatorilor (user permission) la obiectele din baza de date. Fiecare baz| de date conine o colecie Containers format| din obiecte Container. Unele dintre aceste obiecte sunt definite de Access, altele de motorul Jet al bazelor de date Access:
Observai c| se folosete colecia Forms care conine numai formularele deschise ale bazei de date. Din acest motiv, argumentul procedurii PropFromular trebuie s| fie un nume de formular care este deschis. Pentru ca s| putei deschide formularul Customer Orders din meniul Window selectai Northwind: Database. Clic pe butonul Forms din fereastra bazei de date, apoi clic dublu pe numele formularului Customer Orders i formularul va fi deschis. Folosind meniul Windows revenii pe fereastra Debug Window, apoi lansai n execuie procedura scriind PropFormular "Customer Orders". Fereastra Debug Window permite afiarea imediat| a valorilor unor variabile din procedurile aplicaiei. Figura care urmeaz| prezint| cele patru ferestre care au fost parcurse folosind meniul Windows pentru a deschide un formular. Este posibil s| avei deschise mai multe formulare la un moment dat, n acelai timp putei avea mai multe module deschise ntre care putei comuta folosind meniul Windows. Meniul va conine numele tuturor obiectelor Access din fereastra bazei de date care sunt deschise, indiferent de modul lor de vizualizare (foaie de date, proiectare, formular etc.).
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
280
Nota 7 : Dei folosesc acelai nume, obiectul Container pentru obiectele Forms i colecia Forms sunt obiecte distincte. n primul caz g|sim numai informaii legate de formularele salvate f|r| a conine obiectele n sine. Colecia Forms conine obiectele de tipul Form deschise. De exemplu, nu se poate folosi obiectul Documents pentru a modifica titlul unui formular, pentru aceasta trebuie s| ne referim direct la obiect prin colecia Forms. Procedura care urmeaz| afieaz| toate obiectele i propriet|ile acestora din colecia Containers ale bazei de date curente: Public Sub AfisarePropContainere() Dim db As Database Dim ctr As Container Dim prp As Property
0264-401667
Informaiile individuale ale unui obiect salvat sunt coninute n obiectul Container care are o colecie Documents. Fiecare obiect Document din colecia Documents stocheaz| informaii despre un obiect individual. De exemplu, obiectul Container pentru obiectele Forms are o colecie Documents care include cte un obiect Document pentru fiecare obiect salvat n baza de date.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
281
Set db = CurrentDb()
Procedura care urmeaz| afieaz| toate formularele salvate n baza de date curent|: Public Sub AfisareToateFormdinBazadeDate() Dim db As Database Dim con As Container Dim doc As Document
Next prp
Set db = CurrentDb()
Debug.Print doc.Name
End Sub
Evenimente
tii deja c| Access-ul folosete modelul orientat pe evenimente pentru interaciunea cu utilizatorul. n acest scop, obiectele Access r|spund la urm|toarele tipuri de evenimente:
ap|sarea de c|tre utilizator a unei taste;
primirea sau pierderea focaliz|rii (focus); deschiderea, nchiderea sau redimensionarea formularelor; formatarea sau tip|rirea rapoartelor;
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
282
formular, n ferestra propriet|ilor (din dreapta) observai propriet|ile de eveniment specifice acestui obiect. Comportamentul unui obiect se poate defini prin procedurile de evenimente pentru cazul apariiei unui eveniment la care obiectul ar putea reaciona (r|spunde). n cazul apariiei unui eveniment care este afiat n lista propriet|ilor obiectului r|spunsul este determinat astfel:
http://www.east.utcluj.ro/mb/mep/antal
Access-ul r|spunde automat la evenimentele care apar n cazul unor obiecte cu comportament specific i predefinit. De exemplu, n cazul unei cutii de text, se verific| automat dac| modific|rile aduse datelor sunt corecte, adic| conform regulilor de validare. Am vorbit deja despre proceduri de evenimente, n figura care urmeaz| se prezint| un obiect
NU COPIA !.
dac| numele specificat n list| corespunde unui nume de macro, Access-ul execut| macro-ul respectiv;
dac| numele propriet|ii de eveniment este [Event Procedure], Access-ul execut| procedura de eveniment corespunz|toare. deschidei baza de date Northwind;
clic oriunde n afara suprafeei formularului, apoi clic pe butonul drept al mouse-ului i selectai Properties pentru afiarea listei propriet|ilor obiectului formular;
clic pe butonul Event pentru afiarea numai a propriet|ilor de eveniment specifice obiectului curent;
dac| numele propriet|ii eveniment nu este specificat, Access-ul r|spunde prin lansarea procedurilor specifice obiectului (verific|ri ale corectitudinii de scriere sau de ncadrare ntr-un domeniu de valori);
0264-401667
283
clic pe cmpul din dreapta lui On Open, apoi clic pe s|geata n jos i selectai [Event Procedure];
n dreapta lui On Open apare textul [Event Procedure], pentru nceperea edit|rii procedurii de eveniment corespunz|toare evenimentului On Open, care apare la deschiderea formularului, clic pe butonul din dreapta cu trei puncte.
http://www.east.utcluj.ro/mb/mep/antal
Numele procedurii de eveniment este dat conform conveniei deja cunoscute, utilizatorul va introduce codul dorit ntre liniile Private Sub Form_Open ... i End Sub. Este posibil ca Access-ul s| apeleze o funcie definit| de utilizator ca r|spuns la apariia unui eveniment, n acest caz n locul textului [Event Procedure] se va introduce semnul = urmat de numele procedurii funcie.
Tipuri de evenimente
Atunci cnd utilizatorul deruleaz| o operaie cu un obiect, Access-ul lanseaz| o secven| de evenimente. De exemplu, cnd se deschide un formular evenimentele care apar sunt: Open, Load
0264-401667
NU COPIA !.
284
http://www.east.utcluj.ro/mb/mep/antal
i Activate. Se observ| c| o singur| operaie, cum ar fi deschiderea unui formular, se traduce ntr-o secven| de evenimente, n timpul c|rora programatorul poate lua anumite decizii. De exemplu, la apariia evenimentului Open se poate nchide o alt| fereastr| deschis|, iar nainte ca formularul s| devin| activ, se poate afia o bar| de instrumente specific| lui. O parte din evenimente pot fi anulate, de exemplu, se poate anula deschiderea unui formular dac| anumite condiii nu sunt ndeplinite. Tipurile de evenimente tratate de Access sunt:
Apare cnd
Obiectul primete sau pierde focalizarea sau devine activ respectiv inactiv. Se fac modific|ri ale datelor sau nregistr|rilor.
de date
AfteDelConfirm, AfterInsert, AfterUpdate, BeforeDelConfirm, BeforeInsert, BeforeUpdate, Change, Current, Delete, NotInList, Update Clic, DblClick, MouseDown, MouseMove, MouseUp KeyDown, KeyPressed, KeyUp
de mouse de tastatur|
Apare o aciune cu mouse-ul. Utilizatorul apas| taste sau folosete funcia SendKeys pentru transmiterea unei aciuni. Un raport este tip|rit sau este formatat n vederea tip|ririi.
de tip|rire de ceas
de eroare
Error
Dac| deschidei un formular care conine un control activ, adic| un control care poate primi focalizarea, urm|toarele evenimente sunt declanate n formular: Open - Load - Resize -Activate - Current. Dac| nu exist| un control activ, Access-ul declaneaz| i evenimentul GotFocus ntre evenimentele Activate i Current.
Dac| se nchide un formular care are un control activ, secvena de evenimente declanate de Access este: Unload - Deactivate - Close. Dac| nu sunt controale active n formular, Access-ul declaneaz| i
0264-401667
NU COPIA !.
Timer
285
Evenimente de date
Evenimente de date apar cnd se modific| datele sau nregistr|rile din baza de date. Cnd se modific| textul dintr-un control de tipul Text Box sau Combo Box apare evenimentul Change. El apare la fiecare modificare a coninutului controlului i nainte de trecerea pe un alt control sau nregistrare. De exemplu, ntr-un Text Box pentru fiecare introducere sau tergere a unui caracter apare secvena de evenimente: KeyDown KeyPressed - Change -KeyUp. Evenimentul Change nu apare dac| valoarea se modific| ntr-un control calculat.
Cnd se actualizeaz| datele ntr-un control prin deplasarea pe un alt control al formularului se declaneaz| evenimentele BeforeUpdate nainte de remprosp|tarea controlului i AfterUpdate dup| remprosp|tarea controlului. De exemplu, dac| se remprosp|teaz| datele dintr-un Text Box (TB1) prin inserarea unui caracter, apoi se face clic pe un Text Box (TB2), Access-ul declaneaz| secvena de evenimente: KeyDown - KeyPressed Change -KeyUp - BeforeUpdate - AfterUpdate - Exit(TB1) - LostFocus(TB1) - Enter(TB2) -GotFocus(TB2). n cazul cnd actualizarea controlului se face prin deplasarea pe o alt| nregistrare sau prin
0264-401667
NU COPIA !.
Dac| se comut| ntre dou| formulare deschise care conin controale active, Access-ul declaneaz| evenimentele Deactivate i Activate ale primului formular (F1), de pe care se comut| i ale celui de al doilea (F2), pe care se comut| astfel: Deactivate(F1) - Activate(F2). Dac| nu exist| controale active pe formulare, ordinea declan|rii evenimentelor este: LostFocus(F1) - Deactivate(F1) - GotFocus(F2) - Activate(F2).
La ieirea dintr-un control, de exemplu prin selectarea unui altui control, urm|toarea secvena de evenimente este declanat|: Exit LostFocus
http://www.east.utcluj.ro/mb/mep/antal
Cnd se deschide un formular care conine unul sau mai multe controale active secvena de evenimente declanate este: Enter GotFocus i apar ntre evenimentele Activate i Current ale formularului. Evenimentele apar cnd controlul primete focalizarea prima oar|. Dac| se comut| pe un alt formular i se revine pe acelai control al formularului, Access-ul declaneaz| numai evenimentul GotFocus pentru control.
286
La selectarea unei nregistr|ri pentru tergere prin ap|sarea tastei Del Access-ul declaneaz| evenimentul Delete. Dac| evenimentul nu este anulat, se declaneaz| i evenimentele BeforeDelConfirm i AfterDelConfirm. Secvenele declanate sunt n ordinea: Delete - Current - BeforeDelConfirm se afieaz| fereastra de dialog:
Dac| acum ne deplas|m, folosind mouse-ul, de pe un cmp TB1 pe unul TB2, secvena evenimentelor declanate 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). Avnd focalizarea pe TB2, cnd se trece la salvarea nregistr|rii cu Save Record din meniul File, secvena evenimentelor declanate este: BeforeUpdate(TB2) - AfterUpdate(TB2) - AfterUpdate(F) - AfterInsert(F).
La introducerea de date ntr-o nregistrare nou|, Access-ul declaneaz| evenimentul BeforeInsert cnd se introduc date prima oar| n nregistrare i apoi evenimentul AfterInsert cnd nregistrarea se salveaz|. S| presupunem c| se introduc date ntr-o nregistrare nou| a formularului F, ncepnd cu cmpul TB1. La introducerea primului caracter n TB1 secvena de evenimente declanate este: KeyDown(TB1) - KeyPressed(TB1) - BeforeInsert(F) - Change(TB1) KeyUp(TB1).
http://www.east.utcluj.ro/mb/mep/antal
selectarea lui Save Record din meniul File, apar evenimentele BeforeUpdate i AfterUpdate att pentru control ct i pentru formular. De exemplu, dac| se adaug| un caracter ntr-un Text Box i apoi selectai Save Record, secvena de evenimente care apare este: KeyDown KeyPressed - Change -KeyUp - BeforeUpdate(TB) - AfterUpdate(TB)- BeforeUpdate(F) - AfterUpdate(F).
apoi se declaneaz| evenimentul AfterDelConfirm dac| n fereastra de mai sus s-a ap|sat butonul Yes.
Dac| confirmarea tergerii este deranjant|, este posibil| evitarea afi|rii acesteia. O procedur| de eveniment BeforeDelConfirm are dou| argumente, Cancel i Response: Private Sub Form_BeforeDelConfirm(Cancel As Integer, ResponseE As Integer) . . .
0264-401667
NU COPIA !.
287
Evenimente implicite
Obiect
Eveniment implicit
Update Click
Graph Label
List Box
BeforeUpdate
0264-401667
Unele tipuri de obiecte sunt folosite mai des pentru anumite aciuni c|rora le corespunde un eveniment specific. De exemplu, un obiect buton va fi cel mai des ap|sat, aciunea de ap|sare va declana evenimentul Click. Pentru a simplifica scrierea procedurilor de evenimente s-au definit evenimente implicite. Cnd creai un control, dac| acesta este selectat i ap|sai butonul din dreapta al mouse-ului, vei vedea un buton Build Event, dac| din lista afiat| selectai Code Builder, Access-ul va crea automat procedura de eveniment corespunz|toare evenimentului implicit al controlului. Tabelul care urmeaz| prezint| lista evenimentelor implicite ale obiectelor Access:
Exist| proceduri de eveniment cu parametri care prin valori atribuite n corpul lor pot modifica secvena de prelucrare a evenimentelor care urmeaz| dup| procedura n cauz|. Cele mai frecvente cazuri sunt cnd dorim s| anul|m un eveniment asociat unei proceduri de eveniment. Urm|toarele evenimente fac parte din categoria celor care pot fi anulate: BeforeDelConfirm, BeforeInsert, BeforeUpdate, DblClick, Delete, Error, Exit, Format, Open, Print, Unload.
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 pn| la confirmarea tergerii. Dac| evenimentul BeforeDelConfirm este anulat, datele sunt ref|cute din aceast| zon| temporar|. Pentru evitarea afi|rii ferestrei de confirmare a tergerii se poate seta parametrul Response la valoarea acDataErrContinue.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
288
Option Button Option Group Rectangle Report Section Subform Text Box
Click
Toggle Button
n scrierea unei aplicaii Access pot s| intervin| trei tipuri de erori: erori de compilare: apar ca urmare a scrierii incorecte a unor instruciuni din proceduri. Limbajul VBA detecteaz| aceste erori n timpul compil|rii de exemplu, prin folosirea opiunii Compile All Modules din meniul Debug (acest meniu este afiat cnd vizualiz|m n mod proiectare orice modul al aplicaiei Access). O alt| metod| care asigur| detectarea imediat| a erorilor de sintax| este selectarea din Tools, Options, Module a opiunii Auto Syntax Check. Aceast| opiune controleaz| momentul n care VBA va raporta erorile de sintax|. Cnd opiunea este validat|, VBA-ul va afia mesajul de eroare ntr-o fereastr| de dialog imediat cum se p|r|sete linia care conine eroarea de sintaxa n timpul fazei de creare a procedurii;
erori logice: sunt erori care apar datorit| scrierii unor secvene de intruciuni corecte sintactic i care pot fi executate de VBA, dar care logic sunt invalide motiv pentru care produc rezultate incorecte. Aceste tip de erori pot fi scoase numai prin analiza atent| a rezultatelor mpreun| cu codul care le produce.
Instrumentele pentru depanare au rolul de a uura analiza funcion|rii codului VBA i depistarea erorilor pe timpul execuiei aplicaiilor Access. Depanarea programelor este mult uurat| dac| se respect| urm|toarele reguli:
aplicaia va fi divizat| n proceduri de tipul Sub i Function cu rol clar, fiecare avnd nume corespunz|toare aciunii pe care o realizeaz| i comentarii care descriu modul de operare a procedurii mpreun| cu rolul fiec|rui parametru. n VBA, o linie comentariu ncepe prin caracterul ' (apostrof) sau cu textul REM urmat de un spaiu i textul comentariului, iat| cteva exemple:
0264-401667
NU COPIA !.
erori n timpul execuiei aplicaiei: apar din cauz| c| Access-ul nu poate executa o anumit| instruciune, un exemplu clasic este cel al mp|ririi cu zero. VBA nu poate executa operaia de mp|rire dac| mp|ritorul unei expresii ia valoarea 0;
http://www.east.utcluj.ro/mb/mep/antal
BeforeUpdate
289
http://www.east.utcluj.ro/mb/mep/antal
* *
folosii instruciunea Option Explicit n seciunea declaraiilor pentru fiecare modul. Ea foreaz| folosirea declaraiilor explicite pentru varibilele modulului n care apare. Una din sursele de erori comune este scrierea greit| a numelor de variabile. Dac| se folosete Option Explicit un mesaj de eroare va fi dat la scrierea unui astfel de nume de variabile;
folosirea punctelor de ntrerupere (Breakponit) care suspend| temporar execuia codului; folosii fereastra pentru depanare (Debug Window) n vederea examin|rii valorilor unor variabile i expresii cnd codul este suspendat din funcionare. Atunci cnd lucrai cu module, bara cu intrumente ia forma din figura anterioar|. Dac| suspectai c| problema de depanat apare la o anumit| instruciune din cod este posibil| suspendarea execuiei codului la atingerea unei instruciuni. VBA permite folosirea punctelor de ntrerupere sau a instruciunii Stop n acest scop. La folosirea unui punct de ntrerupere trebuie s| poziionai cursorul pe o instruciune executabil|, apoi clic pe pictograma (Toggle Breakpoint) i instruciunea va fi marcat| ca n figura urm|toare.
0264-401667
NU COPIA !.
290
Scoaterea unui punct de ntrerupere se face prin poziionarea pe instruciunea marcat|, apoi clic pe aceeai pictogram|. Cazurile de mai sus au fost ntreruperi executate voit de programator, dar VBA va suspenda execuia codului i n cazul n care apare o eroare la execuia unei instruciuni, acestea se numesc erori n execuie. Not|: Utilizatorul poate ntrerupe de la tastatur| execuia unui cod prin combinaia de taste Ctrl+Break, de exemplu pentru o poriune 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 selecta pictograma Reset, ca urmare toate variabilele numerice i pierd valoarea actual| i vor fi resetate la valoarea 0, variabilele de tipul Variant primesc valoarea Empty, irurile cu lungime variabil| valoarea "" iar cele cu lungime fix| sunt iniializate cu valoarea ASCII 0.
Execuia pas cu pas este procesul de execuie a unei singure instruciuni din cod, sub controlul utilizatorului, pentru vizualizarea modific|rilor aduse de aceasta variabilelor sau obiectelor din baza de date. Pentru execuia pas cu pas a codului se va folosi pictograma (Step Into), VBA va executa instruciunea curent| i avanseaz| automat la urm|toarea dup| care suspend| execuia codului. Este posibil ca uneori s| fim siguri de funcionarea corect| a unei proceduri i s| dorim evitarea execut|rii ei pas cu pas, n acest caz folosim pictograma (Step Over). Acest mod de execuie este identic cu cel al lui Step Into cu excepia c| n cazul n care instruciunea de executat este o procedur|, nu se intr| n ea i se execut| pas cu pas toate instruciunile ei, ci procedura se execut| "dintr-o bucat|" ca o singur| instruciune dup| care se trece la urm|toarea instruciune din cod.
http://www.east.utcluj.ro/mb/mep/antal
Cnd se creeaz| i testeaz| procedurile VBA este posibil s| dorii vizualizarea valorilor unor expresii, variabile, propriet|i sau cmpuri. Pentru acest scop a fost creat| fereastra pentru depanare (Debug Window). Deschiderea ei se face prin clic pe pictograma , iar pe lng| vizualizarea valorilor de obiecte descrise anterior se pot testa i procedurile de tipul Sub sau Function apelndu-le direct din aceasta. Pentru a vizualiza valorile unui obiect trebuie s| ne poziion|m pe numele acestuia, de exemplu prin folosirea mouse-ului, apoi clic pe pictograma (Quick Watch). n fereastra care urmeaz| s-a folosit aceast| procedur| pentru dou| obiecte, un nume de variabil| (pi) i un nume de parametru (R). De asemenea, linia de program ArieCerc = pi * R ^ 2 a fost marcat| cu un punct de ntrerupere. Procedura ArieCerc va fi lansat| n execuie din fereastra de depanare prin linia ?ArieCerc(5) dup| care se apas| tasta Enter. Caracterul ? este o form| prescurtat| pentru instruciunea Debug.Print folosit| pentru afiarea valorii unei variabile n ferestra imediat| (Immediate Window - partea de jos a ferestrei de depanare). n codul VBA, Debug.Print se poate folosi pentru afiarea unor valori n fereastra imediat|. Fereastra de depanare nu se deschide automat la ntlnirea unei instruciuni Debug.Print n cod, aceasta trebuie deschis| de
0264-401667
NU COPIA !.
291
Dac| suspendai execuia unei proceduri MouseDown, prin folosirea unui punct de ntrerupere, putei elibera butonul mouse-ului sau s| folosii mouse-ul pentru anumite aciuni. Dar, cnd vei continua execuia procedurii, aplicaia va presupune c| butonul mouse-ului este nc| ap|sat. Evenimentul MouseUp va apare numai cnd butonul mouse-ului este ap|sat i eliberat din nou. Cnd ap|sai din nou butonul mouse-ului dup| continuarea execuie programului, evenimentul MouseDown este ntrerupt din nou din cauza punctului de ntrerupere, astfel, conform acestui scenariu evenimentul MouseUp nu apare. Soluia este scoaterea punctului de ntrerupere. Problema este similar| la KeyDown i KeyUp.
Suspendarea execuiei n timpul evenimentelor GotFocus sau LostFocus poate conduce la apariia unor mesaje inconsistente, evitarea situaiei f|cndu-se prin folosirea lui Debug.Print pe locul punctului de ntrerupere.
0264-401667
NU COPIA !.
Unele evenimente care in de sistemul de operare Microsoft Windows pot pune probleme la depanarea unor proceduri de eveniment VBA pe care le declaneaz|. Uneori este necesar s| modificai valorile pe care le iau anumite variabile legate de evenimente pentru ca depanarea s| se poate realiza.
http://www.east.utcluj.ro/mb/mep/antal
Valoarea funciei va fi afiat| numai dac| programul ntrerupt este continuat n execuie pn| la cap|t prin selectatrea pictogramei (Go/Continue).
292
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
293
Obiectivele cursului 12
Dupa 7 parcurgerea acestui curs vet -i cunoas - te:
! ! ! !
cum se trateaz| erorile n VBA;
instruciunea Resume Next revenirea din codul de tratare a erorilor; instruciunile de baza ale limbajului SQL:
- predicatele ALL, DISTINCTROW i DISTINCT; - instruciunile de actualizare: UPDATE, DELETE, INSERT INTO i SELECT INTO; - definiia datelor prin instruciunile: CREATE TABLE, CREATE
- operatorul de reuniune;
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
294
Private Sub Form_Error(DataErr As Integer, Response As Integer) Dim MesEr As String, NL As String NL = Chr$(13) & Chr$(10)
MesEr = "Conform integritatii referentiale," & NL MesEr = MesEr & "Pentru IDInfContact din TContacte1"
0264-401667
Cnd o eroare apare n timpul lucrului cu un formular sau raport Acceess-ul declaneaz| evenimentul Error pentru care se poate scrie o procedura de eveniment prin setarea propriet|ii On Error la [EventProcedure] i apoi realiznd clic pe butonul . Un exemplu de lucru ar putea fi ad|ugarea codului urm|tor formularului TContacte1 subform creat n cursul 8. Controlul Combo Box nu permite introducerea de valori n afara celor enumerate n list|. Dac| utilizatorul totui ncearc| o astfel de operaie, codul care urmeaz| l avertizeaz|, n limba romn|, asupra incorectitudinii aciunii.
Se folosete instruciunea On Error pentru prinderea ei i o poriune de program specific| pentru tratarea ei.
http://www.east.utcluj.ro/mb/mep/antal
Erorile apar cnd programatorul furat de rutina operaiilor pe care le implementeaz| uit| s| trateze cazuri particulare ale manevrelor de executat. Atunci cnd se anticipeaz| posibilitatea apariiei unei erori, n loc ca Access-ul s| fie l|sat s| afieze un mesaj de eroare, prin folosirea unui secvene de cod speciale pentru prinderea erorii (error trapping), acesta este obligat s| execute o secven| de cod special| n vederea trat|rii situaiei deosebite ap|rute. Tratarea erorii const|, fie n corectarea automat| a ei, fie prin atenionarea utilizatorului asupra unei secvene de aciuni pe care trebuie s| le deruleze pentru evitarea acesteia. n continuare se prezint| metode de tratatre a erorilor n cursul execuiei aplicaiei. Erorile datorate scrierii incorecte ale unor instruciuni se g|sesc n faza de compilare a modulului n cauz|, cele de execuie se rezolv| conform tabelului:
Cum se trateaz|
NU COPIA !.
295
MesEr = MesEr & " trebuie sa existe o inregistrare" & NL MesEr = MesEr & "in TTipContacte." MsgBox MesEr, vbCritical, "Violare a integritatiiE referentiale" Response = acDataErrContinue End Select
End Sub
Este posibil| sugerarea unor aciuni pe care utilizatorul trebuie s| le fac| pentru evitarea erorii, de exemplu se poate ad|uga codul DoCmd.OpenForm "FTTipContact" ce va deschide formularul n care trebuie introduse noile tipuri de contacte. Pentru aceasta procedura se va scrie sub forma: Private Sub Form_Error(DataErr As Integer, Response AsE Integer) Dim MesEr As String, NL As String NL = Chr$(13) & Chr$(10)
0264-401667
NU COPIA !.
nainte de scrierea celorlate linii de cod pentru a afla valoarea numeric| n cauz|. Pe ecran, n ferestra imediat|, vor fi afiate valoarea numeric| a erorii i prin folosirea funciei Error() un text corespunz|tor erorii ap|rute, dac| n modul formular se ncearc| introducerea unei valori incorecte. Apoi, aceste linii vor fi transformate n comentarii i codul poate fi introdus n continuare.
Apariia unei erori n TContacte1 subform face ca Access-ul s| execute procedura Form_Error de mai sus transfernd codul erorii procedurii prin parametrul DataErr. Num|rul 2237 este valoarea care indic| ncercarea de a introduce un element care nu este n list|. Instruciunea Select Case folosete aceast| valoare pentru a prinde eroarea i a genera o aciune sau un mesaj corespounz|tor. Parametrul Response va lua n final valoarea acDataErrContinue pentru a fora Access-ul s| continue execuia f|r| afiarea unui mesaj de eroare standard. ntrebarea care se pune este de unde s| cunoatem valoarea numeric| corespunz|toare tuturor erorilor care pot s| apar|? n exemplul de mai sus am scris liniile:
http://www.east.utcluj.ro/mb/mep/antal
296
Select Case DataErr Case 2237 MesEr = "Conform integritatii referentiale," & NL MesEr = MesEr & "Pentru IDInfContact dinE TContacte1" " & NL MesEr = MesEr & "trebuie sa existe o inregistrareE MesEr = MesEr & "TTipContacte."
Case Else
Response = acDataErrDisplay
Procedura SendKeys transmite ferestrei curente una sau mai multe taste ca i cnd acestea ar fi tastate prin ap|sare de la tasatatur|. n cazul de mai sus s-a folosit tasta Esc, care va anula modific|rile f|cute n controlul (sau cmpul) curent.
Instruciunea On Error
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
Aceast| form| este cea mai puternic| modalitate de tratare a erorilor pentru c| permite controlul cel mai flexibil asupra celor ce vor fi de f|cut n cazul apariiei erorilor. Pentru forma On Error GoTo eticheta 7 VBA va s|ri la o poriune de cod specific|, marcat| prin etichet|. Poriunea de cod care urmeaz| exemplific| cea mai comun| variant| de tratare a erorilor: Sub ProceduraGenericadeTratareaErorilor()
Erorile n timpul execuiei codului VBA pot fi tratate prin folosirea instruciunii On Error i ad|ugarea codului corespunz|tor trat|rii erorii. Instruciunea On Error va fi codul VBA care se va executa, n caz de eroare, ea specificnd modul n care va fi tratat| eroarea ap|rut|. Este posibil ca mai multe instruciuni On Error s| apar| ntr-o singur| procedur|, dar numai cea mai recent| este activ|. On Error are mai multe variante care vor fi discutate n continuare.
0264-401667
297
On Error GoTo CodGenericPentruTratareaErorilor 'Orice cod care poate genera o eroare n timpul execut -iei lui
End Sub
CodGenericPentruTratareaErorilor:
Cnd o eroare apare, controlul este dat etichetei specificate n linia On Error GoTo CodGenericPentruTratareaErorilor. Eticheta trebuie s| apar| scris| n cadrul aceleiai proceduri cu instruciunea On Error GoTo CodGenericPentruTratareaErorilor. Prin convenie, codul pentru tratarea erorii se scrie la sfritul procedurii. Dac| vei ncerca s| creai un buton de comand| care s| nchid| un formular, codul pe care Generatorul l scrie pentru procedura de tratare a evenimentului On Click este: Private Sub Command13_Click()
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
DoCmd.Close
Err_Command13_Click:
MsgBox Err.Description
Resume Exit_Command13_Click
End Sub
0264-401667
298
< codul de tratare a erorii definit prin instruciunea On Error GoTo CodGenericPentruTratareaErorilor nu mai are efect. Aceasta nseamn| c| n cazul apariiei unei erori n poriunea de cod care trateaz| prima eroare, noua eroare este tratat| ca i cum nu exist| un cod pentru tratarea acesteia; < se poate folosi instruciunea Resume (care va fi descris| n paragraful urm|tor) pentru a reda controlul procedurii principale i pentru a relua modalitatea de tratare normal| a erorilor; < nu se poate executa o instruciune End Sub sau End Function pentru p|r|sirea codului de tratarea a erorii. Trebuie folosit| explicit una dintre instruciunile Exit Sub sau Exit Function pentru p|r|sirea procedurii. O tehnologie software comun| spune c| o procedur| ar trebui s| aib| un singur punct de intrare i unul singur de ieire, deci o idee ar fi utilizarea lui Resume etichet| pentru a reda controlul codului principal, ntr-un punct de p|r|sire comun mai multor poriuni al acestuia.
Instruciunea On Error Resume Next
Crearea unui cod de tratare a erorilor prin On Error GoTo CodGenericPentruTratareaErorilor necesit| uneori un num|r mare de linii de cod. Dac| se dorete ignorarea erorilor, din motivul de mai sus sau pentru c| ntr-o poriune de cod a unei proceduri poate s| apar| numai un singur fel de eroare pe care dorim s| o ignor|m se poate folosi instruciunea On Error Resume Next care spune VBA-ului c| se dorete reluarea codului cu instruciunea imediat urm|toare celei n care a ap|rut eroarea f|r| nici o alt| intervenie n desf|urarea evenimentelor din cod. Un exemplu clasic este cel al instruciunii Kill care terge un fiier dac| acesta exist| pe disc i dac| nu este utilizat de altcineva n momentul n care se dorete tergerea lui. Sub StergeFisier(ByVal numefisier As Strig)
http://www.east.utcluj.ro/mb/mep/antal
Trebuie s| folosii o instruciune Exit Sub sau Exit Function pentru a p|stra execuia normal| a liniilor din program. Dac| o eroare a ap|rut controlul este dat poriunii de cod care trateaz| eroarea aceast| fiind o starea special| a procedurii n care:
Kill numefisier
End Sub
Dac| de exemplu, fiierul de ters nu exist|, instruciunea Kill genereaz| o eroare n timpul execuiei procedurii StergeFisier. Datorit| instruciunii On Error Resume Next, eroarea ap|rut| este ignorat| i controlul este dat instruciunii urm|toare, pentru acest caz instruciunea End Sub. Instruciunea On Error GoTo 0
0264-401667
NU COPIA !.
299
Pentru revenirea n poriunea principal| a procedurii din codul de tratare a erorii se folosete instruciunea Resume. Aceasta are formele:
Resume eticheta 7: se folosete cnd dorii s| revenii la o linie de program oarecare marcat| cu eticheta 7.
Obiectul Err
VBA are un obiect pentru determinarea erorii ap|rute n timpul execuiei codului. Cteva dintre propriet|ile obiectului se prezint| n tabelul care urmeaz|.
Proprietatea
Resume Next: se folosete n interiorul codului de tratare al erorii atunci cnd se dorete ignorarea ei sau cnd ca urmare a imposibilit|ii corect|rii ei se dorete continuarea cu linia urm|toare instruciunii care a generat eroarea;
Resume: red| controlul instruciunii care a generat eroarea. Se folosete atunci cnd codul de tratare a erorii a rezolvat motivul apariiei ei i se dorete continuarea din locul n care a ap|rut problema;
http://www.east.utcluj.ro/mb/mep/antal
La folosirea uneia dintre instruciunile On Error Resume Next, On Error GoTo CodGenericPentruTratareaErorilor, efectul lor va r|mne pn| la p|r|sirea procedurii sau pn| la declararea unei noi poriuni de cod pentru tratarea erorilor. Exist| posibilitatea anul|rii codului de tratare a erorilor prin instruciunea On Error GoTo 0.
Descriere
NU COPIA !.
Err.Number Err.Source
Stocheaz| o valoarea numeric| care identific| eroarea. Aceasta este proprietatea implicit| a obiectului Err.
Atunci cnd o procedur| apeleaz| o alta, VBA folosete o strategie ierarhic| de tratare a erorilor. Dac| procedura apelat| genereaz| o eroare care nu este tratat| n corpul ei, procedur| apelant| (din care s-a realizat apelul) va recepiona eroarea. VBA-ul va reaciona ca i cum linia de apel a procedurii a generat eroarea, ca efect, VBA-ul va c|uta napoi, pe baza adreselor de revenire de pe stiv|, pn| cnd va prinde un cod pentru tratarea erorilor. Dac| ajunge la nivelul procedurii care pornete grupul de apeluri f|r| a prinde un cod de tratare a erorii va afia un mesaj de eroare propriu i va opri execuia codului.
Err.Description
0264-401667
300
Access SQL
Limbajul SQL (Structured Query Language) este cel mai popular limbaj neprocedural pentru accesul la datele stocate n SGBDR-uri pe toate tipurile de calculatoare (calculatoare personale, profesionale i sisteme mari). El asigur| o interfa| ntre utilizator i un SGBDR, fiind dezvoltat de IBM n 1970 pentru System R (un SGBD dezvoltat ntr-un proiect de cercetare la IBM San Jose Research, azi IBM Almaden Research Center, n care s-a introdus limbajul SQL i s-a ar|tat c| SGBDR-urile au performae bune de prelucrare a tranzaciilor). Access-ul sprijin| lucrul cu SQL f|r| a suporta ns| ANSI SQL n totalitate. Primul standard SQL ap|rut n 1986, descria elementele de baz| ale limbajului pentru definirea i manipularea tabelelor. Revizia din 1989 ad|uga limbajului extensii pentru integritatea referenial| i constrngerile de integritate generalizat|. O alt| revizie n 1992 furniza facilitatea de manipulare a schemei bazei de date i de administrare a datelor mpreun| cu mbun|t|iri substaniale pentru definirea i manipularea datelor.
deschidei baza de date Northwind; clic pe butonul Queries; clic pe butonul Design; din list| selectai interogarea cu numele Quarterly Orders;
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 direct afiate. n schimb, interog|rile pot fi vizualizate i editate n format SQL. Pentru afiarea rezultatelor trebuie s| comutai pe vizualizare n mod foaie de date a interog|rii. Orice interogare poate fi vizualizat| n mod SQL. n acest caz vei vedea instruciunile SQL corespunz|toare specificaiilor folosite n fereastra Access QBE, n modul de proiectare, cnd s-a creat interogarea.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
301
Semnificaie
Literele majuscule indic| cuvinte cheie i cuvinte rezervate, care trebuie introduse ntocmai.
Cuvintele scrise cu caractere nclinate reprezint| variabile specificate de utilizator. Parantezele unghiulare conin elemente de sintax| care trebuie scrise. Cuvintele din interiorul acestor paranteze descriu elementele f|r| a specifica sintaxa lor.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
{}
Acoladele includ una sau mai multe opiuni, separate de cte un caracter bar| (|), dac| sunt mai multe nu se introduce paranteza sau caracterul |.
()
Parantezele rotunde indic| repetarea unui articol, o dat| sau de mai multe ori. Cnd apare o virgul| mpreun| cu o parantez| rotund|, se introduce virgula ntre articole.
n general, o comand| este format| dintr-un verb care indic| aciunea i un num|r de clauze,
[]
Parantezele dreptunghiulare conin informaii opionale, separate de cte o bar| vertical| (|). Dac| sunt mai multe se alege una sau nici una dintre ele. Nu se introduc parantezele sau caracterul bar|. De menionat c| Microsoft Access necesit| n multe cazuri introducerea de nume ntre paranteze. Atunci cnd parantezele sunt necesare, facnd parte din sintaxa variabilei pe care trebuie s-o d|m, parantezele sunt nclinate, ca n [Tabelul Meu].[Cmpul Meu].
0264-401667
302
care particularizeaz| efectul verbului. Forma general| a unei comenzi SQL este:
<VERB> este un cuvnt cheie care specific| operaia de executat <clauza> difer| de la comand| la comand| i poate fi fi o construcie a utilizatorului sau un cuvnt cheie a limbajului.
SELECT este inima limbajului SQL. Se folosete pentru a selecta sau a extrage linii i coloane din tabelele bazei de date. Sintaxa instruciunii SELECT conine cinci clauze majore dup| cum urmeaz|: SELECT < list| de cmpuri > FROM < list| de tabele >
Instruciunea SELECT
[GROUP BY < specificarea modului de grupare >] [HAVING < specificarea grupului selectat >] [ORDER BY < specificarea ordon|rii >] Clauza SELECT
Se folosete pentru specificarea coloanelor care s| fie incluse n mulimea de nregistr|ri rezultat|. Numele coloanelor se specific| analog cu cele din grila Access QBE. SELECT {* | expresie1 [AS alias1] [, expresie2 [AS alias2] [,...]]]}
http://www.east.utcluj.ro/mb/mep/antal
<VERB> [<clauza1>][<clauza2>]
expresie poate fi un simplu nume de coloan|, o expresie de nume de coloane sau de funcii SQL de agregare. Similar cu QBD, * i aici indic| toate cmpurile unui tabel. Definiia sintactic| pentru expresie este: [{+ | - | * | / | \ | MOD |&} { funcie | (expresie) | constant| | nume-coloan| }]...
funcie: o funcie de agregare SQL, cum ar fi AVG, COUNT, MAX, MIN, STDEV, STDEVP, SUM, VAR, VARP sau orice alt| funcie construit| n Microsoft Access sau definit| de utilizator folosind VBA. (expresie): o expresie cu unul sau mai muli termeni.
constant|: o constant| alfabetic| sau numeric|. Constanta alfabetic| trebuie inclus| ntre ghilimele simple sau duble. Pentru a introduce un apostrof n constanta alfabetic|, e necesar s|
0264-401667
NU COPIA !.
303
se introduc| apostroful de dou| ori n irul literal. Dac| expresia e numeric|, trebuie folosit| o constant| numeric|. O constant| de tip dat|/timp va fi inclus| ntre dou| semne pound (#).
+| -| * | / | \ | MOD: operatori ce definesc calcule. Dac| apar e necesar ca toate subexpresiile din interiorul unei expresii s| poat| fi evaluate ca date de tip numeric. &: operator folosit pentru concatenarea constantelor alfabetice.
Exemple:
SELECT *
Clauza FROM
Definete tabelele i/sau interog|rile prev|zute care reprezint| surse de date pentru interogarea noastr|. FROM {{nume-tabel [[AS] alias] | nume-interogare [[AS] alias]} | < tabele asociate >},... La fel ca la clauza SELECT, unde se putea folosi un nume alternativ (alias) pentru coloan| i FROM-ul permite folosirea de nume alternative. Alias-ul, uneori numit i nume de corelare, se scrie imediat dup| numele tabelului precedat de cuvntul cheie AS. Numele alternative se folosesc pentru scrierea mai scurt| a unor nume, sunt ns| obligatorii cnd se specific| asocieri (self joins) sau subinterog|ri corelate.
Exemple:
http://www.east.utcluj.ro/mb/mep/antal
nume-coloan|: numele unei coloane dintr-un tabel sau dintr-o interogare. Se poate folosi numele unei coloane sau interog|ri care s-a specificat n articolul FROM din declaraie. Dac| expresia este una numeric|, trebuie folosit| o coloana ce conine date numerice. Dac| acelai nume-coloana apare n dou| sau mai multe dintre tabelele sau interog|rile incluse n interogare, acesta trebuie modificat cu numele interog|rii, numele tabelului, sau cu unul corespunz|tor, ca de exemplu [tabelA].[coloana1].
SELECT *
FROM TComenzi;
0264-401667
NU COPIA !.
304
Clauza WHERE
Exemple:
SELECT ComandaID, ComandaData, ComandaPret FORM TComenzi WHERE ComandaPret > 100000; SELECT ComandaID, ComandaData, ComandaPret FORM TComenzi
expresie are acelai format cu expresiile Access QBE. Pot fi referite coloane, funcii definite de utilizator i operatori n fiecare expresie
WHERE ComandaPret > 100000 AND ComandaData > #5/11/1999# AND NumeClient Like "V*"; Clauza ORDER BY
Este posibil| i sortarea pe baza valorilor unor expresii. Sortarea pe baza coloanelor indexate este mult mai rapid| dect pe baza unor expresii oarecare.
Exemple:
SELECT *
FORM TClienti
0264-401667
NU COPIA !.
Clauza opional| se folosete pentru sortarea rndurilor ntoarse de o interogare cu una sau mai multe coloane. Cuvintele cheie ASC sau DESC specific| sortarea cresc|toare sau descresc|toare. Sortarea cresc|toare este implicit|. Clauza corespunde liniei Sort din Access QBE, iar precedena sort|rii este de la stnga la dreapta.
http://www.east.utcluj.ro/mb/mep/antal
Clauza restricioneaz| (filtreaz|) rndurile ntoarse de o interogare. Ea corespunde liniilor Criteria sau Or din Access QBE. Coloanele referite n WHERE nu trebuie s| fie incluse n lista coloanelor specificate n clauza SELECT. Efectul este identic dac| n QBE se invalideaz| cutia Show din QBE.
305
Dac| baza de date a fost normalizat| este necesar| crearea unor interog|ri care au ca surs| de date mai multe tabele. Cnd se acceseaz| mai multe tabele, n SQL, la fel ca n Access QBE, tabelele trebuie s| fie asociate (join) pe baza unor coloane pentru a produce rezultate care au semnificaie. Dac| tabelele nu sunt asociate, rezultatul interog|rii va fi produsul cartezian al tabelelor care sunt sursele de date.
Folosind SQL-89, asocierea a dou| tabele, tabel1 i tabel2, pe baza coloanelor, coloana1 i coloana2 se face astfel: SELECT list|-coloane FROM tabel1, tabel2
Exist| dou| metode de asociere a tabelelor n Access SQL: prin folosirea clauzei FROM i prin clauza WHERE. Asocierea cu WHERE a fost parte a SQL-ului ncepnd cu SQL-89; asocierea prin FROM este o clauz| ad|ugat| standardului ANSI SQL-92.
n SQL-92, sintaxa pentru asocierea celor dou| tabele este: SELECT list|-coloane
http://www.east.utcluj.ro/mb/mep/antal
Asocierea tabelelor
NU COPIA !.
Exemple:
De exemplu, dac| am dori s| select|m cmpurile ComandaID, ComandaData, Nume i Prenume cu toate comenzile care au fost f|cute nainte de 28 iulie 2000, folosind SQL-89 scriem: SELECT ComandaID, ComandaData, Nume, Prenume AS Clienti FROM TComenzi, TClienti WHERE TClienti.ClientID = TComenzi.ComandaID AND ComandaData <= #07/28/2000#
0264-401667
306
FROM TComenzi INNER JOIN TClienti ON TClienti.ClientID = TComenzi.ComandaID WHERE ComandaData <= #07/28/2000#
La fel n cazul lui Access QBE, instruciunea SELECT poate asocia mai multe tabele. O sintax| simplificat|, unde apare numai JOIN, f|r| INNER JOIN, LEFT OUTER JOIN sau RIGHT OUTER JOIN, a clauzei FROM pentru asocierea mai multor tabele este: FROM (... (tabel1 JOIN tabel2 ON condiiaA) JOIN tabel3 ON condiiaB) JOIN ...) Ordinea JOIN-urilor imbricate (cuprinse unele n altele) definete ordinea de execuie a asocierilor. Asociere non-equi
Este de preferat folosirea sintaxei lui SQL-92 pentru c| mulimile de ntregistr|ri nu se pot actualiza.
Asocierile discutate se numesc n literatura de specialitate equi joins, adic| se bazeaz| pe egalitatea unui cmp cu altul. Asocieri non-equi sunt cele n care se apar operatorii >, <, >=, <=, <> sau Between.
http://www.east.utcluj.ro/mb/mep/antal
Lista coloanelor din clauza SELECT poate fi precedat| cu unul dintre predicatele de cuantificare mutual exclusive: ALL, DISTINCTROW (specific Acces SQL-ului) sau DISTINCT. Ele controleaz| modul n care sunt tratate valorile i nregistr|rile duplicate. Sintaxa clauzei SELECT cu folosirea acestor predicate este: SELECT [{ALL | DISTINCT | DISTINCTROW}] list|-coloane
Dac| nu se scrie niciunul dintre predicate se presupune implicit ALL. ALL ntoarce toate rndurile care respec| criteriul impus. Nu se fac prelucr|ri speciale pentru asigurarea unicit|ii rndurilor. n Access QBE aceasta se realizeaz| prin setarea propriet|ilor UniqueValues i UniqueRecords a interog|rii la valoarea No. Folosirea lui DISTINCT produce eliminarea rndurilor duplicate n mulimea de nregistr|ri rezultat| pe baza coloanelor coninute n clauza SELECT. Cnd se folosete DISTINCT mulimea de nregistr|ri ale interog|rii nu se poate actualiza, iar performanele interog|rii scad. Setarea propriet|ii UniqueValues la Yes
0264-401667
NU COPIA !.
307
Interog|rile de agregare sunt utile pentru sumarea datelor, calcule statistice, depistarea datelor greite. Acest tip de interog|ri produc mulimi de nregistr|ri (recordset) care pot fi numai citite. Cteva din metodele de construire n Access SQL a interog|rilor de agregare sunt: interog|ri de agregare simple cu instruciunea SELECT f|r| clauza GROUP BY; interog|ri cu GROUP BY folosind instrunciunea SELECT mpreun| cu clauza GROUP BY. Aceste interog|ri au n comun folosirea a cel puin una dintre funciile de agregare prezentate n tabelul care urmeaz| n clauza SELECT.
Agregarea datelor
Efect
http://www.east.utcluj.ro/mb/mep/antal
n Acces QBE este echivalentul acestui predicat. La folosirea lui DISTINCTROW, se elimin| ntregistr|rile duplicate n mulimea rezultat| pe baza tuturor coloanelor din tabele surs|. Nu are efect dac| interogarea are un singur tabel surs| sau dac| nu ntoarce cel puin cte o coloan| din fiecare tabel. Predicatul DISTINCTROW este echivalent cu proprietatea UniqueRecords. Pentru majoritatea tipurilor de interogare pentru care se poate aplica DISTINCTROW (interog|ri cu mai multe tabele i unde cel puin un tabel este inclus n clauza FROM f|r| o coloan| corespondent| n clauza SELECT - adic| un tabel este inclus f|r| a avea coloane de ieire) produce acelai rezultat cu predicatul DISTINCT, cu o singur| diferen|, mulimea de nregistr|ri se poate actualiza.
Valoarea medie.
Count([coloana])
Sum([coloana])
Min([coloana]) Max([coloana])
Cea mai mic| valoare din coloan|. Cea mai mare valoare din coloan|. Valoarea coloanei din primul rnd al mulimii de nregistr|ri rezultate.
First([coloana])
Last([coloana])
StDev([coloana])
StDevP([coloana])
Count(*)
0264-401667
NU COPIA !.
308
Var([coloana]) VarP([coloana])
nu nu
Este posibil| folosirea unor expresii din combinaii de funcii de agregare i matematice, iat| cteva exemple: Pentru a nsuma (cu Sum()) valorile absolute (cu funcia Abs()) ale cmpului Cheltuieli 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 BY
Exemplu:
Se poate folosi instruciunea SELECT f|r| clauza GROUP BY pentru a calcula nsum|ri statistice pe rnduri care ndeplinesc condiia clauzei WHERE. Aceasta este util| pentru totale la nivel de tabel sau la nivelul unei submulimi de tabel. Acest tip de interogare de agregare se creeaz| prin includerea numai de funcii de agregare n clauza SELECT a instruciunii SELECT.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
Clauza GROUP BY se folosete pentru a defini grupuri de rnduri pentru care se dorete calculul funciei de agregare. Iat| modul n care clauza GROPU BY se intercaleaz| n sintaza instruciunii SELECT: SELECT lista-coloane FROM lista-tabele
[WHERE clauza-where]
[ORDER BY clauza-orderby]
0264-401667
309
GROUP BY expresie1 [, expresie2 [,...]] Expresiile din clauza GROUP BY pot referi coloane de tabele, cmpuri calculate sau constante. Termenii expresiei nu pot fi funcii de agregare. Cmpurile din GROUP BY definesc grupurile ntoarse de interogare. La folosirea clauzei GROUP BY, toate cmpurile din clauza SELECT trebuie s| fie argumente ale unei funcii de agregare sau s| fie prezente n clauza GROUP BY.
Exemplu:
NumardeComenzi
24 14 1
12
S| presupunem c| dorii s| calculai cantitatea medie comandat| din fiecare articol de un individ, exculzndu-i pe cei care au comandat mai puin de 3 articole. Pentru c| se dorete excluderea rndurilor care nu respect| criteriul impus nainte de a se face gruparea lor vom folosi clauza WHERE astfel: SELECT DenumireArticol, Avg(Cantitate) AS CantitateMedieComandata
0264-401667
NU COPIA !.
Interog|rile de agregare pot conine una din clauzele WHERE sau HAVING sau pe ambele. Orice criterii din WHERE sunt aplicate nainte de gruparea rndurilor. Din acest motiv clauza WHERE se poate folosi pentru excluderea rndurilor care nu dorii s| fie grupate. Orice criterii din HAVING sunt aplicate dup| grupare. Astfel, se pot filtra rnduri pe baza statisticilor de sumare calculate pe grupuri. Sintaxa pentru clauza HAVING este:
http://www.east.utcluj.ro/mb/mep/antal
310
Dac| dorii s| realizai aceleai calcule cu eliminarea articolelor din muimea de nregistrare dac|, n medie, mai puin de 3 articole au fost vndute pe o comand|, criteriul trebuie aplicat dup| ce s-au evaluat valorile medii pentru fiecare grup. Pentru aceasta se va folosi clauza HAVING dup| cum urmeaz|: SELECT DenumireArticol, Avg(Cantitate) AS CantitateMedieComandata GROUP BY DenumireArticol HAVING Avg(Cantitate) > 3;
Este simplu s| reinei cnd se aplic| cele dou| clauze dac| privii poziia lor n instruciunea SELECT. WHERE se scrie naintea lui GROUP BY, adic| caluza WHERE se aplic| nainte de grupare, iar HAVING se scrie dup| GROUP BY corespunznd aplic|rii clauzei HAVING dup| aplicarea criteriilor de grupare.
n Access este obligatorie utilizarea SQL-ului pentru crearea unei interog|ri de reuniune; nu exist| un echivalent n Access QBE pentru crearea acestui tip de interogare. UNION este un operator i nu o instruciune sau clauz| producnd o mulime de nregistr|ri care pot fi numai citite. Sintaxa lui este:
http://www.east.utcluj.ro/mb/mep/antal
GROUP BY DenumireArticol;
UNION[ALL]
instruciune-select2 [UNION[ALL]
instruciune-select3] [...]
Access-ul pune n coresponden| coloanele din fiecare SELECT pe baza poziiilor din SELECT i nu pe baza numelor de coloane. Implicit, Access-ul elimin| nregistr|rile duplicate. Se poate fora includerea dublurilor prin folosirea opiunii ALL.
Exemplu:
Dac| dorim s| cre|m o interogare care reunete toate adresele i numele elevilor i
instruciune-select1
0264-401667
NU COPIA !.
311
SELECT Nume & ": " Prenume AS Nume, Adresa, Oras, Cod
FROM TProfesori
Se poate folosi clauza ORDER BY pentru sortarea nregistr|rilor din mulimea de nregistr|ri rezultat|. Dac| unele nume de coloane difer|, se va folosi numele din ultimul SELECT pentru a specifica ordinea din mulimea de nregistrare rezultat|.
Compatibilitatea interog|rilor
Interog|rile sunt compatibile pentru a fi reunite dac| au acelai num|r de coloane. Access-ul folosete urm|toarele reguli pentru a le combina: pentru coloane cu nume diferite, se folosete numele coloanei din prima interogare; pentru coloane cu tipuri de date diferite Access-ul va converti datele coloanelor la un singur tip de dat| care este compatibil cu toate tipurile de date ale coloanelor.
http://www.east.utcluj.ro/mb/mep/antal
SELECT Nume & ": " Prenume AS Nume, Adresa, Oras, Cod
Subinterog|ri
Este posibil ca o parte a unei instruciuni SELECT s| fie o alt| instruciune SELECT. Tipic, subinterog|rile se folosesc n clauza WHERE pentru a filtra rezultatele afiate de interogare pe baza valorilor unei alte interog|ri (subinterogarea). Urm|toarele forme sintactice sunt definite pentru subinterog|ri: expresie [NOT] IN (instruciune-select): se folosete pentru a verifica dac| valoarea unei coloane face parte dintr-o list| de valori.
Exemplu:
S| presupunem c| dorim selectarea num|rului de identificare (ProdusID), a numelui (Descriere) i a preului(Pret) pentru toate produsele care care s-au vndut n cantitate (Cantitate) mai mic| de 7 pentru ca s| renun|m a le mai comercializa.
0264-401667
NU COPIA !.
312
SELECT ProdusID, DescriereProdus, Pret FROM TProduse (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|; comparaie [{ANY | SOME | ALL}] (instruciune-select): permite compararea unei valori cu valorile din rndurile unei subinterog|ri.
Este adev|rat| dac| comparaie este adev|rat| pentru toate rndurile din subinterogare.
Exemplu:
Dac| dorim s| cunoatem care sunt automobilele mai scumpe dect SKODA: SELECT DescriereProdus, Pret FROM TProduse WHERE Pret >
Este adev|rat| dac| comparaia este adev|rat| pentru unul sau mai multe rnduri din subinterogare.
http://www.east.utcluj.ro/mb/mep/antal
WHERE ProdusID IN
Descriere
[NOT] EXIST (instruciune-select): permite compararea unor valori pentru a verifica existena lor n una sau mai multe rnduri ale unei subinterog|ri. Dac| subinterogarea are cel puin un rnd, comparaie este adev|rat| (True), altfel este fals| (False).
Exemplu:
Dac| dorim s| g|sim automobilele care nu au fost cump|rate de nici un client, folosind NOT EXIST scriem: SELECT ProudID, DescriereProdus, Pret FROM TProduse WHERE NOT EXIST (SELECT * FROM TProduseDetalii WHERE ProdusID = TProduse.ProdusID);
0264-401667
NU COPIA !.
313
SQL cu parametri
Dac| dorii s| afi|m comenzile din tabelul Orders ntre dou| date Data1 i Data2 scriem: PARAMETERS Data1 DateTime, Data2 DateTime; FROM Orders
SELECT Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShippedDate WHERE (((Orders.ShippedDate) Between [Data1] And [Data2])); Fiecare parametru trebuie s| aib| un tip de dat| din lista tipurilor SQL prezentate n tabelul care urmeaz|:
Exemplu:
Tip SQL
Number, FiledSize=Byte
CURRENCY, MONEY
Currency
Date/Time
DOUBLE, FLOAT, FLOAT8, NUMBER TEXT, ALPHANUMERIC, CHAR, CHARACTER, STRING LONGTEXT, MEMO, NOTE
Memo
0264-401667
NU COPIA !.
COUNTER, AUTOINCREMENT
http://www.east.utcluj.ro/mb/mep/antal
La fel ca n Access QBE i n SQL se pot specifica parametrii care vor fi rezolvai n timpul execuiei aplicaiei. Sintaxa pentru declaraia parametrilor este:
314
Append
Make-table
Toate fac parte i din ANSI SQL, cu excepia ultimei, mai precis SELECT INTO este folosit| cu totul altfel pentru mutarea unui singur rnd de date ntr-o list| de variabile. Instruciunea UPDATE
Se folosete pentru modificarea valorilor din una sau mai multe coloane ale unui tabel. Sintaxa este: UPDATE tabel-interogare
Exemplu:
Pentru a crete preul produselor care nu sunt automobile din tabelul TProduseDetalii cu 1.05 scriem: UPDATE TProduseDetalii
Standardul ANSI permite utilizarea subinterog|rilor n clauza SET, n timp ce Access SQL-ul nu le suport|, dar suport| asocieri, aceasta fiind o deviere de la standard, pentru a asigura o oarecare echivalen| n funcionare.
0264-401667
NU COPIA !.
Dac| se folosete o interogare ca aceasta trebuie s| fie permis| actualizarea (updateable) datelor. Expresia din clauza SET poate fi o constant| sau rezultatul unor calcule.
http://www.east.utcluj.ro/mb/mep/antal
n plus, pe lng| interogarea datelor, SQL-ul permite i modificarea acestora. SQL-ul se poate folosi pentru actualizarea, tergerea sau copierea nregistr|rilor. Instruciunile SQL care au o coresponden| n Access QBE se prezint| n tabelul care urmeaz|:
315
Instruciunea DELETE Se folosete pentru tergerea rndurilor dintr-un tabel. Sintaxa ei este: DELETE [tabel.*] FROM clauza-form [WHERE criteriu];
se pot folosi datele unui tabel pentru a decide care rnduri s| fie terse dintr-un tabel asociat. Aceasta se realizeaz| folosind o asociere n clauza FROM sau prin folosirea unei subinterog|ri n clauza WHERE. Relaia dintre tabele poate fi 11 sau 1M; se pot terge rnduri cu o singur| interogare DELETE dac| tabelele sunt n relaia de 11;
Exemplu:
Pentru a terge toi clienii din TClienti care nu au f|cut o comand| n ultimii 3 ani scriem: DELETE
FROM TClienti
(SELECT ClientID FROM TClienti WHERE DataComenzii > DateAdd('yyyy',-3,Date())); Instruciunea INSERT INTO
se pot terge rnduri din tabelele asociate printr-o relaie 1M cu o serie de interog|ri DELETE.
Folosirea lui tabel.* este opional| pentru interog|ri ce se refer| la un singur tabel. Este posibil| tergerea rndurilor din tabel asociate respectnd regulile:
http://www.east.utcluj.ro/mb/mep/antal
Permite copierea de rnduri dintr-un tabel sau interogare ntr-un alt tabel sau se mai poate folosi pentru ad|ugarea unui singur rnd de date unui tabel. Sintaxa este: INSERT INTO tabel-destinaie instruciune-select;
Exemplu:
Cea mai simpl| form| este copierea ntregului coninut al unui tabel (TClienti) n altul (TClientiNou) scriem: INSERT INTO TClientiNoi SELECT * FROM TClienti;
0264-401667
NU COPIA !.
316
Dac| dorii inserarea unui rnd de valori unui tabel se folosete sintaxa: INSERT INTO tabel-interogare [(coloana1 [, coloana2 [, ...]])] VALUES (valoare1 [, valoare2 [, ...]]);
Exemplu:
Este specific| Access SQL-ului i permite crearea unui tabel nou din rndurile unui alt tabel sau interogare. Sintaxa este: SELECT coloana1 [, coloana2 [, ...]] INTO tabel-nou FROM lista-tabele
[WHERE clauza-where]
Dac| referinele coloanelor sunt omise trebuie incluse valori pentru fiecare coloan| n ordinea de apariie din definiia tabelului. Dac| referinele coloanelor sunt scrise, se pot omite coloane i se poate modifica ordinea de apariie a valorilor.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
Exemplu:
SELECT ComandaID, DataComada, ClientID INTO TComenziVasile FROM TComanzi WHERE ClientID = 7;
Att INSERT INTO ct i SELECT INTO pot include orice instruciune SELECT care produce o mulime de ntregistr|ri folosind clauza GROUP BY, asocieri, subinterog|ri sau operatorul UNION.
0264-401667
317
Instruciune DDL
Creeaz| schema unui tabel nou. Modific| schema unui tabel existent. Creeaz| un index nou.
(coloana1 tip1 [(dimensiunea1)] [CONSTRAINT constrngere1-coloana] [, (coloana2 tip2 [(dimensiunea2)] [CONSTRAINT constrngere2-coloana]
Tipul de dat| al coloanelor este specificat conform tabelului prezentat n paragraful SQL cu parametri. Parametrul opional dimensiunea permite specificarea lungimii unei coloane text. Dac| dimensiunea este nespecificat|, valoarea dimensiunii atribuite implicit este de 255. Prin folosirea lui CREATE TABLE se pot crea dou| tipuri de constrngeri, indexuri simple i multi-coloan|, prin folosirea clauzei CONSTRAINS.
Exemplu:
Pentru a crea un tabel TProduseNoi folosind schema tabelului TProduse scriem: CREATE TABLE TProduseNoi
0264-401667
[, ...]]
http://www.east.utcluj.ro/mb/mep/antal
Exist| trei metode pentru crearea i manipularea schemei bazelor de date prin programe Access: ActiveX Data Objects (ADOX), interog|ri Data Definition Language (DDL) i mai vechea Data Access Objects (DAO). n paragraful care urmeaz| se vor prezenta, ntr-o versiune concentrat|, interog|rile DDL. La fel ca i n cazul interog|rilor de reuniune, se lucreaz| interog|ri DDL ce folosesc SQL. Nu exist| un corespondent n Access QBE. De asemenea, se pot executa interog|ri DDL prin definirea i executarea unei definiii de interogare folosind VBA. Tabelul care urmeaz| prezint| 4 instruciuni DDL suportate de SQL:
Efect
NU COPIA !.
318
Clauza CONSTRAINT
CONSTRAINT nume
| UNIQUE
| FOREIGN KEY (coloana1 [, coloana2 [, ...]]) REFERENCES tabel-str|in [(coloan|-str|in|1 [, coloan|-str|in|2 [, ...]])]}
Exemple:
Pentru a crea folosind instruciunea CREATE TABLE tabelul TProduseNoi avnd un index unic cmpul DescriereProdus scrie: CREATE TABLE TProduseNoi
http://www.east.utcluj.ro/mb/mep/antal
n SQL-92, constrngerile se folosesc pentru: restricionarea valorilor care pot fi ad|ugate unui tabel; crearea cheilor primare i str|ine; forarea valorilor unor coloane s| fie unice (UNIQUE) sau nenule (NOT NULL); crearea regulilor de validare (prin constrngerea CHECK). Pentru c| singura constrngere pe care Access-ul o suport| este cea legat| de definiia indexurilor, este convenabil s| ne gndim c| n Access clauza CONSTRAINT se folosete pentru a crea indexuri. Sintaxa pentru crearea unei chei simple este:
n continuare s| presupunem c| dorim crearea a dou| tabele TComenziNoi i TArticoleNoi ntre care s| existe o relaie 1M. TComenziNoi va avea cmpurile ComandaID - cheia primar|, DataComenzii i ClientID, iar TArticoleNoi va avea cmpurile DescriereArticol, ComandaID i AtricolID - ultimele dou| mpreun| vor forma cheia primar|, iar ComandaID va fi cheia str|in|. CREATE TABLE TComenziNoi
(ComandaID LONG CONSTRAINT CheiePrimara PRIMARY KEY, DataComenzii DATETIME, Client ID LONG); CREATE TABLE TArticoleNoi
0264-401667
NU COPIA !.
319
AtricolID LONG, DescriereAtricol TEXT (100), CONSTRAINT CheiePrimara PRIMARY KEY (ComandaID, AtricolID));
Al|turi de clauza CONSTRAINT din instruciunile CREATE TABLE i ALTER TABLE se poate folosi instruciunea CREATE INDEX (care nu face parte din ANSI SQL) pentru crearea unui index al unui tabel deja existent. Sinatxa comenzii este: CREATE [UNIQUE] INDEX index ON tabel (coloana1 [, coloana2 [, ...]])
Se folosete pentru modificarea schemei unui tabel existent. Ea permite ad|ugarea unei coloane noi sau a unei constrngeri respectiv tergerea unei coloane sau a unei constrngeri. Se poate opera numai asupra unui singur cmp sau index ntr-o singur| instruciune ALTER TABLE. Sintaxa pentru ad|ugarea unei coloane este: ALTER TABLE tabel ADD [COLUMN] tipdata [(dimensiune)]
Exemplu:
ALTERT TABLE TArticoleNoi ADD Cantitate SHORT; Sintaxa pentru ad|ugarea unei constrngeri este:
ALTER TABLE tabel ADD CONSTRAINT constrngere; Sintaxa pentru tergerea unei coloane este:
0264-401667
[CONSTRAINT costrngere_coloan|_unic|];
Cuvntul cheie UNIQUE face ca valorile indexului s| fie unice. PRIMARY permite crearea unui index cheie primar|. Toate indexurile cheie primar| sunt automat indexuri unice. IGNORE NULL oprete motorul Jet de la crearea unui index cu valori Null. DISALLOW NULL oprete utilizatorul s| introduc| o valoare Null n cmpul index.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
320
Nu se poate terge o coloan| index dect dup| ce s-a ters indexul. Sintaxa pentru tergerea unui index este: ALTER TABLE tabel DROP CONSTRAINT index;
Instruciunea DROP
Se folosete pentru tergerea tabelelor sau a indexurilor. Are dou| forme sintactice. Sintaxa pentru tergerea unui tabel din baza de date este: DROP TABLE tabel;
Nu se poate terge un index care particip| ntr-o relaie dect dup| tergerea tuturor relaiilor n care particip|.
Sintaxa pentru tergerea unui index este: DROP INDEX index ON tabel;
0264-401667
NU COPIA !.
Acest tip de interogare este transmis| neinterpretat| unui server de baze de date. Access-ul nu va verifica sintaxa, nu va interpreta i nici nu va traduce instruciunile acestei interog|ri SQL. Se creeaz| prin crearea unei interog|ri noi, apoi din Query, selectai SQL Specific i n final Pass-Through. O interogare normal| nu se poate converti n una Pass-Through.
http://www.east.utcluj.ro/mb/mep/antal
321
Obiectivele cursului 13
Dupa 7 parcurgerea acestui curs vet -i cunoas - te:
! ! !
! ! ! ! !
cum se utilizeaz| marcajele ntr-o mulime de nregistr|ri; cum se sorteaz| ntregistr|rile dintr-o mulime de nregistr|ri; cum se filtreaz| nregistr|rile dintr-o mulime de nregistr|ri; cum se editeaz| (adaug|, modific|, terg) datele dintr-o mulime de cum se creeaz| folosind VBA obiecte ale bazei de date.
nregistr|ri;
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
322
DBEngine(0)(0)
http://www.east.utcluj.ro/mb/mep/antal
Pn| acum am folosit interfaa Access-ului pentru afiarea, manipularea i modificarea datelor din baz|. Uneori, aplicaiile trebuie s| aib| controlul direct asupra datelor pentru a putea derula anumite sarcini speciale. Limbajul de programare VBA mpreun| cu obiectele pentru accesul la date (DAO), asigur| un limbaj de manipulare al datelor, sumar prezentat n cursul 11. Cnd creai o baz| de date n Access 2000 acesta va presupune c| dorii s| folosii numai obiectul ADO (care va fi prezentat n cursul 14) i va include referine numai c|tre aceast| bibliotec|. Pentru c| pn| la inclusiv Access 97 politica Microsoft-ului a fost orientat| c|tre popularizarea lui DAO, voi descrie lucrul cu aceast| bibliotec|, apoi voi descrie i modul de lucrul cu ADO. Dac| n Access 2000 dorii s| folosii biblioteca DAO, n timp ce editai codul VBA, selectai din Tools pe Reference i ad|ugai Microsoft DAO 3.6 Object Library n lista referinelor selectate. Din cursul 11, cunoatei c| obiectul DBEngine - adic| motorul Jet - este la nivelul cel mai de sus n ierarhia DAO. Toate referinele la orice obiecte DAO ncep prin referirea obiectului DBEngine. n cadrul unei aplicaii, motorul Jet conine o colecie de unul sau mai multe obiecte. Fiecare obiect Workspace conine o colecie de unul sau mai multe obiecte Database. Fiecare obiect Database conine o colecie de obiecte TableDefs, care la rndul lor conin colecii de obiecte Fields .a.m.d. Un obiect particular se poate stoca ntr-o variabil| i poate fi manipulat prin intermediul acesteia. Pentru a referi baza de date curent| n DAO, soluia este plecarea din DBEngine i coborrea prin colecia Workspaces pn| la colecia Databases, unde prin Databases(0) Access-ul va referi tocmai baza de date curent|. Conform celor spuse exist| dou| metode de scriere pentru aceasta:
n plus Access-ul are i o funcie CurrentDB() care ntoarce o referin| la baza de date curent|. Jet-ul i Access-ul sunt dou| produse separate. Jet-ul furnizeaz| serviciile de tip baz| de date de care are Access-ul nevoie, dar Access-ul are i el la rndul lui un grup de servicii propriu bazat pe Jet care se folosete la proiectarea aplicaiilor din interiorul Access-ului. Access-ul furnizeaz| CurrentDB() pentru referirea bazei de date curente, iar Jet-ul furnizeaz| DBEngine.Workspaces(0).Databases(0) n acelai scop. n momentul de fa| exist| o problem| subtil| legat| de cele dou| metode de acces. CurrentDB() i DBEngine(0)(0) nu reprezint| intern acelai obiect, dei ambele se refer| la aceeai baz| de date. La fiecare folosire a lui CurrentDB() Access-ul creeaz| intern un obiect nou care se refer| la baza de date curent|. Dup| ce VBA execut| linia cu aceast| referin| Access-ul nchide automat referina c|tre baza de date (excepie face obiectul Recordset) motiv pentru care, din acel moment n continuare, orice referire la coleciile bazei de date curente vor fi invalide. Pentru codul care urmeaz|, n procedura AsaNu() cnd se ajunge la doc.Name apare o eroare fatal|. Obiectul din baza de date care a fost referit nu mai exist|, iar doc devine o referin| invalid|. Dac| ns| se folosete DBEngine(0)(0) n locul lui CurrentDB() procedura va lucra corect.
0264-401667
NU COPIA !.
323
Sub AsaNu() Dim doc As Document Set doc = CurrentDb.Containers("Forms").Documents(0) Debug.Print doc.Name End Sub Sub AsaDa() Dim doc As Document Set db = CurrentDb()
Procedura AsaDa() lucreaz| de asemenea corect pentru c| se lucreaz| cu o variabil| de tipul baz| de date n locul unei simple referine. Cnd folosii numai Jet-ul pentru a accesa datele dintr-o baz| utilizai DBEngine(0)(0), dac| lucrai din Access, baza de date curent| poate fi referit| prin ambele metode. Baza de date referit| prin CurrentDb() este ntodeauna actualizat| la baza de date deschis| din Access. La utilizarea lui DBEngine(0)(0) trebuie apelat| metoda Refresh nainte de folosirea oric|ror obiecte din coleciile bazei de date. Pentru cei care lucreaz| n Access 2000, declaraiile de variabile din procedurile de mai sus se modific| astfel:
Debug.Print doc.Name
Dim db As Database
http://www.east.utcluj.ro/mb/mep/antal
Dim db As Database
DAO asigur| trei feluri de mulimi de nregistrare, descrise n tabelul urm|tor mpreun| cu caracteristicile fiec|reia. Tip mulime de nregistr|ri Descriere Avantaje Dezavantaje
Table
Se poate folosi numai pentru tabele locale Access, nu i n cazul tabelelor ataate.
0264-401667
NU COPIA !.
324
Dynaset
Snapshot
O copie instantanee a unei mulimi de nregistr|ri, valorile sunt o copie fix| a datelor i nu poantori la acestea.
Poate fi folosit| numai pentru parcurgere n avans asigurnd creterea vitezei unor operaii.
http://www.east.utcluj.ro/mb/mep/antal
Mulime de poantori (pointers) referind datele unui tabel sau interog|ri din baza de date.
Poate include date din mai multe tabele locale sau ataate; poate folosi SQL; n majoritatea cazurilor datele pot fi editate.
n unele cazuri mulimea de ntregistrare nu se poate edita; nu permite c|ut|ri rapide pe baza de index.
O mulime de nregistr|ri se creeaz| pn| la inclusiv Access 97 cu unul din grupurile de instruciuni: Dim rs As Recordset
Set rs=obiect.OpenRecordset(Tip, Optiuni, BlocareEditare) n Access 2000 declaraia variabilei va fi de forma: Dim rs As DAO.Recordset
n primul caz mulimea se creeaz| pe baza variabilei db care este tipul obiect baz| de date. Parametrul Sursa specific| de unde vor veni datele i poate fi: un nume de tabel, un nume de interogare, o instruciune SQL. Pentru cel de al doilea exemplu, obiect este sursa de date i poate fi orice obiect al bazei de date care este deschis i ntoarce nregistr|ri: tabel, interogare sau alt| mulime de nregistr|ri. Parametrul Tip specific| tipul mulimii de nregistr|ri i poate lua valorile pe baza constantelor predefinite din tabelul care urmeaz|:
0264-401667
NU COPIA !.
sau
Datele nu se pot edita; toate datele se citesc n mulime nainte de redarea controlului programului, deci nu vor reflecta modific|rile n regimul de lucru cu utilizatori multipli (multiuser); nu permite c|ut|ri rapide prin indexuri.
325
Descriere Deschiderea unei mulimi de nregistr|ri Table. Deschiderea unei mulimi de nregistr|ri Dynaset. Deschiderea unei mulimi de nregistr|ri Snapshot. Deschiderea unei mulimi de nregistr|ri care poate fi parcurs| numai n sensul avansului (forward-only).
Parametrul Optiuni controleaz| accesul n regimul de utilizatori multipli i comportamentul la actualizarea nregistr|rilor din mulime. Constantele predefinite se dau n tabelul care urmeaz|:
Constant| dbAppendOnly
dbSQLPassThrough dbSeeChanges
Face ca SQL-ul s| fie transferat direct server-ului pentru prelucrare (numai pentru tipul Snapshot). Jet-ul genereaz| o eroare dac| un alt utilizator modific| datele editate la momentul curent (numai pentru tipul Dynaset).
dbDenyWrite
dbDenyRead
dbForwardOnly
Mulimea nregistr|rilor se parcurge ntr-un singur sens, de la nceput la sfrit; se folosete cnd se face o singur| parcurgere a mulimii de nregistr|ri, caz n care datele nu se copiaz| ntr-o zon| temporar| de memorie, viteza de parcurgere fiind mult mai mare (numai pentru tipul Snapshot i nu se folosete n conjuncie cu dbOpenForwardOnly).
dbReadOnly
dbInconsistent
Permite actualiz|ri inconsistente (numai pentru tipul Dynaset cu folosirea lui dbInconsistent sau dbInconsistent).
Ceilali utilizatori nu pot vizualiza datele tabelului (numai pentru tipul Table).
0264-401667
Ceilali utilizatori nu pot modifica sau ad|uga nregistr|ri, toate nregistr|rile tabelului vor fi blocate mpreun| cu cele ale celorlalte tabele care formeaz| sursa de date ale tipului Dynaset.
Se pot ad|uga numai nregistr|ri noi (se aplic| numai tipului Dynaset).
http://www.east.utcluj.ro/mb/mep/antal
Descriere
NU COPIA !.
326
dbConsistent
Parametrul BlocareEditare controleaz| concurea utilizatorilor multipli pentru accesul la noua mulime de nregistr|ri. Urm|toarele constante sunt predefinite:
Constant| dbReadOnly
Descriere
nregistr|rile pot fi vizualizate de utilizatorul curent, alii le pot modifica (se folosete fie n Opiuni fie n BlocareEditare, dar nu simultan). Blocare pesimist|; o pagin| este blocat| la folosirea metodei Edit i va r|mne blocat| ct timp datele paginii sunt editate. Aceasta este opiunea implicit| pentru Jet.
dbPesimistic
dbOptimistic
Dim db As Database
0264-401667
NU COPIA !.
La crearea unei mulimi de nregistr|ri bazat| pe mai multe tabele, implicit, Access-ul permite modific|ri numai n partea "muli" a asocierii. Aceasta se cunoate sub numele de actualizare consistent|. Dac| dorii actualizarea de cmpuri situate de ambele p|ri ale asocierii trebuie s| folosii opiunea dbInconsistent. Aceasta poate duce la violarea relaiilor dintre tabelele aplicaiei. Dac| ai activat integritatea referenial| pentru relaie i ai validat cascadarea actualiz|rilor, dbInconsistent i dbConsistent produc comportament identic. n acest caz integritatea referenial| este mai puternic| i actualizarea se va face i pentru cmpurile din partea muli mpreun| dac| se face actualizarea celor din parte unu.
Blocare optimist|; o pagin| este blocat| numai la folosirea metodei Update fiind blocat| un timp foarte scurt corespunz|tor actualiz|rii datelor.
http://www.east.utcluj.ro/mb/mep/antal
Permite numai actualiz|ri consistente (numai pentru tipul Dynaset cu folosirea lui dbInconsistent sau dbInconsistent).
327
Set rsVanzari = db.OpenRecordset("QVanzari", dbOpenDynaset) 2. Mulime 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. Mulime de nregistr|ri creat| pe baza unui tabel care blocheaz| accesul altor utilizatori la sursa de date: Dim db As Database
Set db = CurrentDB()
Set rsClienti = db.OpenRecordset("TClienti", dbOpenTable,E dbDenyRead) 4. Mulime de nregistr|ri creat| pe baza unei definiii de interogare (QueryDef):
http://www.east.utcluj.ro/mb/mep/antal
Dim db As Database
Set db = CurrentDB()
pr.Value = Eval(pr.Name)
0264-401667
NU COPIA !.
328
5.
Set rsClienti = Forms![FClienti].RecordSetClone Proprietatea RecordsetClone a unui formular este o mulime de nregistr|ri de tip Dynaset care are ca surs| de date tabelul sau interogarea care este sursa de date a formularului.
Codul prezentat este necesar atunci cnd dorim s| cre|m o mulime de nregistr|ri pe baza unei interog|ri despre care nu tim nimic pn| n momentul execuiei aplicaiei cnd ar putea fi necesar| furnizarea unor parametri din definiia interog|rii. F|r| acest cod ar trebui s| cunoatem n avans num|rul i valorile acestor parametri. Prin folosirea DAO toi parametri necesari pot fi evaluai nainte de crearea muimii de nregistr|ri. Obiectul QueryDef are colecia Parameters, unde fiecare element al coleciei este un parametru al interog|rii. Access-ul nu tie evalua valorile parametrilor cnd se creeaz| o mulime de nregistr|ri pe baza unei definiii de interogare, dei parametrii sunt cunoscui, singura modalitate de rezolvare fiind codul prezentat deja. De exemplu, dac| avem o interogare care are ca parametru cmpul Forms!FTContacte![Nume Contact], containerul QueryDef va conine un singur obiect parametru pentru care numele va fi Forms!FTContacte![Nume Contact].
http://www.east.utcluj.ro/mb/mep/antal
Ciclul parcurge toi parametri obiectului QueryDef (dac| acesta nu are parametri, ciclul nu se execut|). Pentru fiecare parametru, codul evalueaz| proprietatea Name folosind funcia Eval() i atribuie valoarea ntoars| propriet|ii Value a parametrului. n acest fel toate valorile parametrilor se evalueaz| f|r| a trebui cunoscut n avans num|rul lor.
Dup| ce au fost create, mulimile de nregistr|ri au ntotdeauna o nregistrare curent|. Cnd referim cmpurile mulimii de nregistr|ri, valorile obinute sunt cele ale nregistr|rii curente (current record). Exist| cazuri cnd poziia curent| este imediat naintea primei nregistr|ri sau imediat dup| ultima nregistrare din mulimea de nregistr|ri. n anumite cazuri speciale este posibil ca poziia curent| s| fie nedefinit|. Navigarea printre nregistr|rile mulimii se face cu metodele prezentate n tabelul care urmeaz|:
Numele metodei
Efect
0264-401667
NU COPIA !.
329
MovePrevious Move
Metoda Move, permite deplasarea nainte sau napoi, cu un num|r de nregistr|ri, n raport cu nregistrarea curent| sau cu un marcaj. Dac| obiectul este de tipul Table, deplasarea se face pe baza valorilor indexului, care se poate modifica prin proprietatea Index. n lipsa unui index, ordinea nregistr|rilor este nedefinit|. Mulimile de nregistr|ri, prin propriet|ile AbsolutePosition i PercentPosition, permit citirea sau scrierea poziiei curente pe baza datelor din mulimea de nregistr|ri. Metodele MoveFirst, MoveLast, MoveNext, MovePrevius au o aciune evident|, pentru cazul lui Move ns| treaba devine ambigu|. Dac| rs este o mulime de nregistrare, atunci rs.Move nrrnduri [, nceput] specific| deplasarea peste nrrnduri (>0 deplasarea se face nainte, <0 deplasarea se face napoi), iar parametrul opional poate conine un marcaj salvat. Dac| marcajul nu este scris, Access-ul ncepe deplasarea de la nregistrarea curent|, altfel deplasarea este relativ| la marcaj. G|sirea num|rului de nregistr|ri din mulime
Proprietatea RecordCount permite aflarea num|rului de nregistr|ri dintr-o mulime. Ea stocheaz| num|rul de nregistr|ri accesate pn| la momentul curent din mulimea 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 muli utilizatori problema se complic|. Dac| datele sunt partajate ntre mai muli utilizatori i dac| mai muli utilizatori au deschis mulimi de nregistr|ri pe baza aceleiai surse de date, tergerile nu vor fi v|zute imediat ntre maini. n acest caz urm|torii pai vor fi urmai pentru aflarea num|rului de nregistr|ri: se folosete metoda Requery a obiectului mulime de nregistrare; se folosete metoda MoveLast pentru a ne deplasa la sfritul mulimii; se citete valoarea stocat| n RecordCount. Testarea limitelor mulimii de nregistr|ri
http://www.east.utcluj.ro/mb/mep/antal
Orice mulime de nregistrare are propriet|ile BOF i EOF pentru a indica dac| nregistrarea curent| este la sfritul (EOF) sau nceputul (BOF) mulimii:
< la folosirea lui MovePrevious dac| prima nregistrare este curent|, BOF devine True i nu va mai exista rnd curent;
< dac| se folosete din nou MovePrevious, BOF r|mne True dar apare o eroare n execuie;
< la folosirea lui MoveNext, dac| ultima nregistrare este curent|, EOF devine True i nu va mai exista nregistrare curent|; < dac| se folosete MoveNext din nou, EOF r|mne adev|rat| dar se genereaz| o eroare n execuia ciclului.
Pentru ca s| tii la deschiderea unei mulimi de nregistr|ri, dac| aceasta are sau nu nregistr|ri, trebuie s| testai simultan propriet|ile BOF i EOF astfel (dac| BOF i EOF sunt
0264-401667
NU COPIA !.
330
Deseori, n instruciunile de ciclare dorim s| test|m terminarea relu|rii operaiei ciclate, iar dac| mulimea nu are nregistr|ri ciclul nici m|car s| nu fie nceput, codul folosit pentru aceasta este: Do Until rs.EOF
Urm|toarele metode se pot folosi pentru localizarea unor nregistr|ri din mulimile de tipurile Dynaset sau Snapshot.
Numele metodei
G|sete prima nregistrare care satiface criteriul. G|sete ultima nregistrare care satisface criteriul.
FindPrevious criteriu
Metodele Find necesit| specificarea unui criteriu de selecie de forma unei ecuaii ce conine nume de cmpuri care iau valori specifice. De exemplu, dac| dorim s| g|sim prima apariie a numelui "Ioan" scriem: rs.FindFirst "[Nume Contact] = 'Ioan' " Instruciunea With
Permite executarea unei serii de instruciuni ale unui singur obiect f|r| a specifica n mod repetat numele obiectului. Sintaxa instruciunii este: With obiect
0264-401667
NU COPIA !.
FindNext criteriu
http://www.east.utcluj.ro/mb/mep/antal
Efect
End With Dac| dorim, de exemplu s| g|sim toate contactele cu [Nume Contact] = Ioan atunci trebuie realizat un ciclu care parcurge toate nregistr|rile mulimii verificnd criteriul dorit dup| cum urmeaz|: sircriteriu = "[Nume Contact] = 'Ioan' "
End With
Proprietatea NoMatch devine True de cte ori operaia Find nu reuete i poziia nregistr|rii curente devine nedefinit|. Dac| c|utarea are ca scop modificarea unor valori de cmpuri, folosirea unei interog|ri de aciune este mai eficient|. C|utarea n tabele
Metoda Seek se folosete pentru localizarea unei nregistr|ri dintr-o mulime indexat| de tipul Table care satiface un criteriu pentru indexul curent. Sintaxa ei este: rstabel.Seek operatorcomp. cheie1, cheie2 ...
Loop
With rs
http://www.east.utcluj.ro/mb/mep/antal
rstabel este o variabil| mulime de nregistr|ri care refer| tabelul n care se va c|uta. Primul parametru, operatorcom, este un ir de caractere ce specific| operatorul de comparaie i poate fi: "=", "<=", "<", ">=", ">". Argumentele cheie sunt una sau mai multe valori pe care VBA le compar| cu valorile indexului din tabel. Dac| indexul este format dintr-un singur cmp atunci se folosete pentru comparaie numai valoarea cheie1, dac| indexul este format din dou| cmpuri, atunci se folosesc pentru comparaie valorile cheie1 i cheie2, etc. Indexul curent trebuie stabilit explicit nainte de folosirea lui Seek. Dac| indexul localizeaz| un cmp cheie cu valoarea neunic|, Seek va g|si prima nregistrarea care satisface criteriul. Sub SeekIndex() Dim db As Database
0264-401667
NU COPIA !.
332
Dim rs As Recordset
Set db = CurrentDb()
rs.Close
End Sub
n Access, nregistr|rile unei mulimi de nregistr|ri sunt o submulime a nregistr|rilor unor tabele. Pentru c| num|rul actual de nregistr|ri se poate modifica oricnd, mai ales n regim de lucru cu mai muli utilizatori, nu exist| un num|r absolut care s| specifice poziia unei nregistr|ri particulare. Motorul Jet, are o proprietate Bookmark sau marcaj, care permite p|strarea i poziionarea rapid| pe nregistrarea curent| dintr-o mulime de nregistr|ri. Fiecare mulime de nregistr|ri are o singur| nregistrare curent|. Pentru a stoca poziia acesteia se poate stoca marcajul rndului respectiv care este un ntreg pe 4 bii unic, generat de sistem, pentru fiecare nregistrare. Valoarea numeric| a marcajului are o semnificaie numai pentru Access, ea nu se poate folosi n cadrul unor expresii aritmetice. Pentru a salva valoarea unui marcaj se atribuie unei variabile de tipul Variant valoarea propriet|ii Bookmark. Pentru a seta valoarea unui marcaj, se seteaz| valoarea propriet|ii Bookmark la valoarea variabilei. Num|rul marcajelor pentru o mulime de nregistr|ri este nelimitat. Acestea asigur| viteza de manevr| cea mai mare cu nregistr|rile mulimii. De exemplu, dac| dorii s| v| poziionai de pe nregistrarea curent| pe alta, apoi s| revenii, putei lucra prin dou| metode: stocai valoarea cheii primare - v| poziionai pe o alt| nregistrare, apoi folosii una dintre metodele Seek sau FindFirst pentru a reveni la nregistrarea original| pe baza valorii cheii primare salvate; stocai valoarea marcajului - v| poziionai pe o alt| nregistrare, apoi folosii marcajul pentru a reveni la nregistrarea original|. Dac| de exemplu, dorim s| folosim marcajul nregistr|rii curente dintr-o mulime la care apoi s| revenim, codul va fi ceva de forma:
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
333
Dim bm As Variant
bm= rs.Bookmark
rs.Bookmark=bm
Dup| nchiderea mulimii de nregistr|ri prin folosirea metodei Close valoarea marcajului devine invalid|.
nregistr|rile unei mulimi de nregistr|ri apar n ordinea introducerii lor n baza de date. Dac| se dorete afiarea datelor ntr-o ordine specific| se pot folosi mai multe metode de sortare. Sortarea prin folosirea propriet|ii Index
Procedura care urmeaz| afieaz| cmpurile indexate, n ordinea specific|rii indexurilor pentru tabel. Indexurile tabelului cu numele stocat n variabila NumeTabel se obin prin parcurgerea colecie de indexuri a obiectului TableDef. Pentru fiecare index din colecie, este extras numele lui i numele cmpului indexat mpreun| cu valorile cmpului indexat corespunz|tor fiec|rei nregistr|ri din mulimea 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
0264-401667
NU COPIA !.
nregistr|rile unui tabel se pot extrage pe baza valorii oric|rui index, inclusiv pe baza cheii primare. Specificarea ordinii de sortare se face dnd propriet|ii Index a variabilei mulime de nregistr|ri (recordset), mai jos rs, numele unui index al tabelului, mai jos id. Imediat dup| setarea acestei propriet|i, nregistr|rile apar n noua ordine. Dup| modificarea indexului, Access-ul se pare c| face prima nregistrare ca nregistrare curent|, ns| acest comportament nu este documentat. Dac| proprietatea Index este setat| la un index inexistent se va genera o eroare care va putea fi tratat| conform procedurilor din cursul anterior.
http://www.east.utcluj.ro/mb/mep/antal
334
Set db = CurrentDb()
rs.Index = id.Name
Next fl
Loop Next id
End Sub
Pentru a testa procedura de mai sus, folosind baza de date ex1.mdb, care conine tabelul cu numele TContacte, scriem AfisareCampuriIndexate "TContacte" n fereastra imediat|. Sortarea prin folosirea clauzei SQL ORDER BY
Cnd datele unei mulimi de nregistr|ri vin din mai multe tabele problema ordinii nregistr|rilor este mai complicat|. O variant| pentru sortare este folosirea SQL-ului. De exemplu, pentru sortarea ascendent| a nregist|rilor unui tabel TContacte folosind codul: Dim db As Database
0264-401667
NU COPIA !.
rs.Close
http://www.east.utcluj.ro/mb/mep/antal
335
Dim rs As Recordset
n acest caz, mulimea de nregistr|ri poate fi creat| numai folosind un obiect baz| de date i un ir SQL, iar mulimea de nregistr|ri rezultat| este implicit de tip Dynaset (eventual de tip Snapshot dac| se cere explicit aceasta). Sortare folosind proprietatea Sort
Metoda se poate aplica pentru tipurile de mulime de nregistr|ri Dynaset i Snapshot prin setarea propriet|ii Sort folosind un criteriu asem|n|tor cu cel al clauzei ORDER BY. Se va specifica cmpul pe baza c|ruia se face sortarea, opional tipul cresc|tor sau descresc|tor al sort|rii. Cteva exemple de setare a propriet|ii Sort sunt: rs.Sort = "[Nume Contact]" rs.Sort = "[Nume Contact] ASC"
noua ordine de sortare are efect numai la crearea unei noi mulimi de nregistr|ri, bazat| pe cea veche, un cod care ilustreaz| aceast| modalitate de lucru fiind: Dim db As Database
Dim rs As Recordset
http://www.east.utcluj.ro/mb/mep/antal
Set db = CurrentDb()
Set rs = db.OpenRecordset("TContacte")
proprietatea nu se aplic| unei mulimi de nregistrare de tipul Table, n acest caz se folosete proprietatea Index.
0264-401667
NU COPIA !.
336
Este posibil| i filtrarea nregistr|rilor care vor face parte din mulimea de nregistr|ri, n continuare fiind prezentate dou| metode cu avantajele i dezavantajele lor.
Se poate crea o mulime de nregistr|ri prin folosirea instruciunii SQL cu clauza WHERE astfel: Sub Filtrare()
Set db = CurrentDb()
Set rs = db.OpenRecordset( _
Next fl
Loop
rs.Close
End Sub
Metoda se poate folosi numai cnd cre|m mulimea de nregistr|ri utiliznd un obiect al bazei de date, spre deosebire de celelalte variante de OpenRecordset unde se pot folosi tabele, interog|ri sau alte mulimi de nregistr|ri. Filtrarea prin proprietatea Filter
Mulimile de nregistr|ri cu tipurile Dynaset i Snapshot pot fi filtrate utiliznd proprietatea Filter. Aceasta este un ir de caractere, identic cu cel folosit n clauza WHERE. Filtrarea va avea efect la urm|toarea creare a unei mulimi de ntergistr|ri.
0264-401667
rs.MoveNext
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
337
Sub Filtrare1() Dim db As Database Dim rs As Recordset, rsFil As Recordset Dim fl As Field
Set db = CurrentDb()
Next fl
rsFil.MoveNext Loop
rs.Close
rsFil.Close
Datele unei mulimi de nregistr|ri se pot modifica sau nu n funcie de permisiuni. La deschiderea mulimii de nregistr|ri este posibil ca datele s| nu se poat| modifica ci numai vizualiza. ncercarea de a modifica aceste date duce la o eroare de execuie a aplicaiei care se poate trata prin cod. Mulimile de nregistr|ri de tipul Table i Dynaset pot fi ntotdeauna editate cu excepia cazului n care altcineva a blocat tabelul (prin folosirea opiunilor de blocare prezentate). La Dynaset n plus, regulile de asociere pot opri editarea anumitor cmpuri. Cele de tipul Snapshot nu se pot modifica prin definiie. Modificarea unei nregistr|ri existente 1. 2.
Modificarea unei nregistr|ri existente decurge n patru pai: Poziionai-v| pe nregistrare (cu Move sau Find);
0264-401667
NU COPIA !.
End Sub
http://www.east.utcluj.ro/mb/mep/antal
338
3. 4.
Set db = CurrentDb()
With rs
.FindFirst "[Nume Contact] = 'Grisa Marius'" If .NoMatch Then vbCritical MsgBox "Nu exista persoana de contact !",E
Else
.Edit
End If
End With
http://www.east.utcluj.ro/mb/mep/antal
rs.Close
End Sub
Ad|ugarea unei nregistr|ri ntr-o mulime de tipul Dynaset sau Table se face n trei pai:
1. Folosii metoda AddNew pentru ad|ugarea noii nregistr|ri. Toate cmpurile vor lua valorile implicite; 2. Atribuii valorile dorite cmpurilor; 3. Folosii metoda Update pentru a salva noua nregistrare.
0264-401667
NU COPIA !.
339
Dim rs As Recordset
Set db = CurrentDb()
With rs .AddNew
La folosirea metodei AddNew nregistrarea curent| nu se modific| dup| ad|ugarea noii nregistr|ri. Dac| dorii ca noua nregistrare s| devin| cea curent| folosii metoda Move avnd ca parametru marcajul ntors de proprietatea LastModified a mulimii de nregistr|ri. Pentru mulimea de nregistr|ri de tipul Dynaset, Access plaseaz| ntotdeauna noua nregistrare la sfritul mulimii i la cap|tul tabelului care este sursa de date. n cazul mulimii de nregistr|ri de tipul Table, dac| este definit un index, Access plaseaz| nregistrarea n poziia corespunz|toare valorii indexului.
http://www.east.utcluj.ro/mb/mep/antal
Dup| tergerea unei nregistr|ri aceasta continu| s| r|mn| nregistrarea curent|, este necesar| folosirea lui MoveNext pentru a trece la urm|torul rnd.
O modalitate de tergere a tuturor nregistr|rilor dintr-un tabel este codul care urmeaz|, dei n practic| metoda cea mai bun| este folosirea unei interog|ri pentru tergere: Sub StergeRandurileUnuiTabel(NumeTabel As String) Dim db As Database
0264-401667
NU COPIA !.
340
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset(NumeTabel)
.MoveFirst Do
.Delete .MoveNext
Modificarea unui grup de nregistr|ri se poate realiza folosind instruciunile de ciclare prezentate, dar cea mai eficient| metod| r|mn interogarile de actualizare sau tegere. Dac| dorim s| modific|m toate numerele de telefoane care ncep cu cifra 1 la cifra 2 se poate folosi codul: Sub Modifica()
http://www.east.utcluj.ro/mb/mep/antal
Dim db As Database
Set db = CurrentDb()
0264-401667
NU COPIA !.
341
End Sub O alt| variant| de scriere a codului se mai sus este: Sub Modifica1()
Dim db As Database
Set db = CurrentDb()
Set qdef = db.CreateQueryDef() 'Crearea interogarii qdef.Name = "Interogare de actualizare (update)" sirSQL = "UPDATE TContacte1 SET TContacte1.[Info Contact] = " sirSQL = sirSQL + """7"" & Right([Info Contact],Len([InfoE ontact]-1))"
End Sub
Dac| metoda Append primete orice ir nevid (diferit de "" sau f|r| a fi scris), obiectul rezultat este automat ad|ugat coleciei QueryDefs, altfel obiectul rezultat este temporar.
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
342
Termenul de prelucrarea a tranzaciilor (transaction) se refer| n bazele de date la gruparea modific|rilor aduse datelor n secvene speciale care sunt tratate asemenea unei singure operaii. Un astfel de grup reuete dac| fiecare operaie a grupului reuete i atunci spunem c| tranzacia (commit) a reuit. Dac| oricare dintre operaiile de modificare ale grupului nu reuete, toate modific|rile aduse datelor se refac (roll back) la valorile avute naintea nceperii tranzaciei i spunem c| tranzacia nu a reuit. Access-ul lucreaz| cu trei metode pentru prelucrarea tranzaciilor BeginTrans - pentru nceperea unei noi tranzacii, CommitTrans - pentru salvarea tuturor modific|rilor f|cute datelor de la cea mai recent| BeginTrans i Rollback - pentru anularea tuturor modific|rilor f|cute datelor de la cel mai recent BeginTrans. Cele trei metode sunt ale obiectului Workspace, iar codul care urmeaz| este un ablon pentru folosirea acestora n derularea tranzaciilor: On Error GoTo Tratare_Eroare
Dim ws As WorkSpace
StareTr = False
Set ws = DBEngine.Workspaces(0) . . .
http://www.east.utcluj.ro/mb/mep/antal
Definiiile de interogare temporare se folosesc n cazul unor iruri SQL pentru obiectele care nu dorim s| devin| permanente, de exemplu, pentru c| ele la fiecare repetare se modific| puin. Dac| o definiie de interogare exist|, nu se poate crea o alta cu acelai nume dect dac| prima este tears| - cea de a dou| procedur| exemplific| acest mod de lucru.
StareTr=True
ws.CommitTrans StareTr=False . . .
Tratare_Eroare:
End If
ws.BeginTrans
0264-401667
NU COPIA !.
343
1. Folosii una din metodele Create... pentru a crea obiectul (CreateTable, CreateField, CreateIndex, CreateQueryDef, CreateRelation, ...);
3. Folosii metoda Append pentru ad|ugarea obiectului la colecia din care face parte pentru a-l face permanent parte a bazei de date. Cnd obiectul conine la rndul lui noi obiecte, de exemplu tabelul conine cmpuri, trebuie creat obiectul primar, se creeaz| subobiectele care fac parte din acesta i se adaug| la colecia corespunz|toare, iar n final obiectul primar se adaug| i el coleciei corespunz|toare lui. Crearea unui tabel
2. Definii caracteristicile noului obiect prin setarea propriet|ilor lui. Unele propriet|i, de exemplu numele, sunt obligatoriu de setat la crearea obiectului, altele pot fi setate mai trziu. Majoritatea metodelor Create... au argumente opionale care permit specificarea propriet|ilor obligatorii ale noului obiect;
http://www.east.utcluj.ro/mb/mep/antal
n cazul formularelor legate Access-ul are propria lui metod| de tratare a tranzaciilor, din acest motiv nu se pot folosi tranzacii n proceduri de evenimente pentru a grupa modific|rile aduse datelor prin intermediul formularului.
NU COPIA !.
1 Sub CreeazaTabelTel() 2 3 4 5 6 7 8 9 10
Dim db As Database Dim tdf As TableDef Dim fl1 As Field Dim fl2 As Field Dim fl3 As Field
Set db = CurrentDb()
S| presupunem c| dorim s| cre|m un tabel nou numit TAdrese care are cmpurile AdreseID, Tip adresa, Adresa folosii codul:
0264-401667
344
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Set fl1 = tdf.CreateField("AdreseID", dbLong) Set fl2 = tdf.CreateField("Tip adresa", dbText, 30) Set fl3 = tdf.CreateField("Adresa", dbText, 100)
.Append fl2
Application.RefreshDatabaseWindow
28 End Sub
Fiecare obiect DAO poate fi creat prin program prin metoda Create... asociat| din tabelul care urmeaz|:
Obiect
Metod|
Tip de dat|
Descriere
Tabel (Table)
CreateTableDef
String
0264-401667
NU COPIA !.
Pn| la atingerea liniei 14 tabelul i cele trei cmpuri exist| numai n memorie. Pentru ca aceste obiecte s| devin| permanente trebuie folosit| metoda Append care le va ad|uga unor colecii f|cndu-le permanente. Pentru cmpuri, ad|ugarea se face n liniile 16-20, iar pentru tabel, n liniile 22-25. n linia 24 se folosete metoda Refresh prin care se actualizeaz| coninutul coleciei, noul tabel devenind numai n acest mod disponibil i pentru ali utilizatori care lucreaz| cu aceeai baz| de date (regim multiuser). Dei tabelul este disponibil pentru utilizare, Access-ul nu remprosp|teaz| coninutul fereastrei bazei de date dect dac| ne poziion|m pe o alt| colecie i apoi revenim pe cea a tabelelor. Pentru a rezolva aceast| problem| se folosete metoda RefreshDatabaseWindow a obiectului aplicaie.
http://www.east.utcluj.ro/mb/mep/antal
345
Atribute
Integer
Surs|
http://www.east.utcluj.ro/mb/mep/antal
Set|ri pentru tabele ataate, de sistem i ascunse. Sursa de date a unui tabel ataat. Calea c|tre tabelul care este sursa de date a tabelului ataat. Numele noului cmp. Tipul de dat| al noului cmp. M|rimea cmpului dac| este de tipul text. Numele noului index. Numele noii interog|ri. Un ir QL valid care definete noua interogare. Numele noii relaii.
String String
Conexiun e
Cmp (Feld)
CreateFiled
Nume Tip
String
Integer Integer
M|rime
Index
CreateIndex
Nume
String String
Interogare (Query)
CreateQueryDef
Nume
TextSQL
String
CreateRelation
Nume Tabel
String
Tabel asociat
String
Numele cheii str|ine din tabelul asociat. Setarea tipului de relaie, forarea intergrit|ii relaionale. Numele noului spaiu de lucru.
Atribute
Integer
CreateWorkspace
Nume
String
Utilizator
String
Numele unui utilizator existent. Acesta va deveni proprietarul noului spaiu de lucru.
0264-401667
NU COPIA !.
String
346
Parol| Tip
String Long
Parola pentru noul spaiu de lucru. Valoare care indic| sursa datelor (Jet sau ODBCDirect). Numele fiierului care va conine baza de date.
CreateDatabase
Nume
http://www.east.utcluj.ro/mb/mep/antal
String
Indirecte
String
Opiuni
Integer
Grup (Group)
CreateGroup
Nume PID
String String
Utilizator (User)
CreateUser
Nume PID
String String
Parol|
String
Este posibil ca ntr-o aplicaie s| fie necesar| crearea unui index prin program. Etapele necesare pentru aceasta sunt:
1. Folosii metoda CreateIndex a obiectului TableDef pentru a crea obiectul index, iar proprietatea Name va fi setat| la acest obiect; 2. Atribuii valori propriet|ilor noului index. Ct timp indexul nu a fost ad|ugat unui obiect index toate propriet|ile lui pot fi setate dup| cum dorim. n general vor fi setate propriet|ile Name, Primary, Unique i Required. Dac| obiectul index a fost ad|ugat unei colecii, propriet|ile lui nu mai pot fi modificate fiind necesar| tergerea lui i crearea
0264-401667
NU COPIA !.
347
unui obiect index nou n cazul n care am uitat s|-i set|m una dintre propriet|i;
4. Folosii metoda Append a obiectului TableDef pentru ad|ugarea index-ului n colecia Indexes.
1 Function CreareCheiePrimara(NumeTabel As String, NumeCheieP E 2 As String, ParamArray VectorParametri() As Variant) As E 3 Boolean 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Dim id As Index
Dim db As Database
Set db = CurrentDb()
http://www.east.utcluj.ro/mb/mep/antal
3. Paii 1 i 2 se reiau pentru toate cmpurile care vor fi parte a indexului, iar fiecare cmp index va fi ad|ugat coleciei Fields;
End If
Set id = tdf.CreateIndex(NumeCheieP)
id.Primary = True
varCP = GasesteCheiaPrimara(tdf)
0264-401667
NU COPIA !.
348
30 31 32 33 34 CreareaCheieP_Iesire: 35 36
Exit Function
38 MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E 39 ")" 40 41
42 End Function
37 CreareaCheieP_Eroare:
Dim id As Index
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
9 10 11 12
End If
Next id
GasesteCheiaPrimara = Null
13 End Function
0264-401667
349
8 9 10 11
12 AdaugaCamp_Iesire: 13 14
Exit Function
16 17
18 End Function
Sub TestCreareCP()
15 AdaugaCamp_Eroare:
O procedur| de tip funcie sau subprogram poate avea ultimul parametru precedat de cuvntul opional ParamArray i urmat de paranteze rotunde (). n acest fel parametrul se definete ca un tablou cu elemente de tipul Variant. Aceasta este metoda disponibil| n VBA pentru a transfera unei funcii un num|r variabil de argumente.
Funcia GasesteCheiaPrimara() are ca parametru de intrare o definiie de tablou i are rolul de a g|si numele cheii primare dac| aceasta exist|. Rezultatul ntors este numele cheii primare sau Null n cazul cnd aceasta nu exist|. Funcia AdaugaCamp() adaug| un obiect cmp unui obiect index. Rezultatul ntors este True n caz de reuit| sau False altfel.
Crearea unei relaii Pentru crearea unei relaii se va folosi metoda CreateRealtion a obiectului baz| de date
0264-401667
NU COPIA !.
Funcia CreareCheiePrimara() creeaz| cheia primar| cu numele NumeCheieP a unui tabel numit NumeTabel. n liniile 17-20 se caut| dac| tabelul are cheie primar|, iar dac| aceasta exist| este tears| i n linia 22 se creeaz| un nou index. Linia 24 seteaz| noul index drept cheie primar| mpreun| cu propriet|ile: IgnoreNulls = False, Required=True, Unique=True. n liniile 26-28 nou createle cmpuri care formeaz| indexul se adaug| coleciei Fields. n final, prin linia 30 se adaug| noul index coleciei Index a definiiei de tabel TableDef.
http://www.east.utcluj.ro/mb/mep/antal
350
urmnd paii: 1. 2. 3. Deschidei baza de date n care se va crea relaia; Folosii metoda CreateRelation pentru crearea obiectului relaie;
4. Creai un obiect cmp pentru fiecare cmp de cheie primar| a tabelului primar. Pentru fiecare obiect cmp se seteaz| proprietatea ForeignName ce corespunde numelui corespunz|tor din tabelul ataat; 5. Folosii metoda Append pentru ad|ugarea noi relaii n colecia Relations a bazei de date. Tabelul care urmeaz| prezint| constantele predefinite care pot fi date propriet|ii Attributes a obiectului relaie:
Constant| dbRelationUnique
dbRelationRight
Relaia este 1 1.
Integritatea referenial| nu este activat|. Relaia dintre tabele este definit| ntr-o baz| de date extern|. Relaia este de tip asociere la stnga extern|, aceasta include toate nregistr|rile din primul tabel (cel din stnga), inclusiv cele care nu au un corespondent n cel de al doilea tabel. Relaia este de tip asociere la dreapta extern|, aceasta include toate nregistr|rile din cel de al doilea tabel (cel din dreapta), inclusiv cele care nu au un corespondent n primul tabel. Actualiz|rile vor fi cascadate.
http://www.east.utcluj.ro/mb/mep/antal
Descriere
dbRelationUpdateCascade
dbRelationDeleteCascade
Proprietatea este setat| f|cnd suma constantelor prezentate. Majoritatea programatorilor folosesc operatorul pe bii Or pentru "adunarea" constantelor n scopul evidenierii faptului c| nu este vorba de o simpl| expresie aritmetic|. Dac| proprietatea Attributes nu este setat| de c|tre programator, Access-ul creeaz| o relaie de tipul 1 M intern| (particip| numai nregistr|rile care au valori identice n cmpurile asociate) cu integritatea referenial| activat|. Funcia care urmeaz| creeaz| o relaie 1 M cu asociere la stnga extern| ntre tabelele TContacte i TAdrese avnd tergerea cascadat|. Function CreeazaRelatie() As Boolean Dim db As Database
0264-401667
NU COPIA !.
351
Set db = CurrentDb()
db.Relations.Append rel
CreazaRelatie = True
CreazaRelatie_Eroare:
NU COPIA !.
")"
CreazaRelatie = False
Resume CreazaRelatie_Iesire
End Function
Pe lng| posibilitatea definirii de noi tabele, exist| posibilitatea ata|rii unor tabele din baze de date externe. La ataarea unui tabel extern, informaia de conectare este stocat| n baza de date Access, iar conectarea are loc automat la deschiderea bazei de date. Datele ns| vor r|mne stocate n baza de date extern|. Dup| ataare, aceste tabele pot fi folosite asemenea tabelelor interne ale Access-ului ns| nu se pot crea obiecte Recordset de tipul Table pe baza lor. Proprietatea Connect a obiectului TableDef permite controlul tabelelor ataate mpreun| cu proprietatea SourceTableName i metoda RefreshLink. Fiecare obiect TableDef are o proprietate Connect care este un ir ce identific| tipul i locul tabelului ataat. Numele tabelului este stocat separat n proprietatea SourceTableName. Dac|
0264-401667
MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E
http://www.east.utcluj.ro/mb/mep/antal
352
tabelul face parte din baza de date Access proprietatea lui Connect are valoarea "".
1. Folosii metoda CreateTableDef a obiectului baz| de date (Database) pentru a crea un nou obiect TabelDef pentru tabelul ataat. Dai tabelului un nou nume prin care va fi identificat n baza de date local|; 2. Setai propriet|ile SourceTableName i Connect ale obiectului TableDef pentru a specifica tabelul extern i baza de date care va fi ataat|;
n funcie de tipul tabelului extern care va fi ataat este posibil ca unele informaii adiionale s| fie necesare n proprietatea Connect (parol|, nume de utilizator, driver ISAM sau ODBC). Un cod tipic pentru ataarea unui tabel este de forma: Dim db As Database
3. date.
NumeTabel="TAT_Clienti"
End With
db.TableDefs.Append tdf
Function CreareTabelAtasat(NumeTabel As String, Cale As E String, NumeTabelExtern As String) As Boolean Dim db As Database Dim tdf As TableDef
.SourceTableName = "Customers"
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
353
Set db = CurrentDb()
With tdf
CreareTabelAtasat_Iesire:
CreareTabelAtasat_Eroare: ")"
MsgBox "Eroare: " & Err.Description & " (" & Err.Number &E vIntoarsedeFunctie = False
http://www.east.utcluj.ro/mb/mep/antal
End Function
Reataarea tabelelor
De multe ori, din motive independente de voina noastr|, poziia tabelelor externe se poate modifica pe discul folosit pentru stocarea lor. Aplicaia Access va genera o eroare n execuie dac| unul dintre tabelele externe au fost mutate ntr-un alt director sau disc. Este util| scrierea unei funcii s| verifice dac| tabelele ataate au fost mutate, iar dac| au fost, s| fac| reataarea lor pe baza noii poziii ocupate de acestea pe disc. Funcia VerificaAtasareaTabelului() verific| ataarea tabelului NumeTable, iar dac| acesta nu mai este ataat, ncearc| s|-l ataeze folosind calea din parametrul CaleNoua parcurgnd paii: 1. Se activeaz| tratarea erorilor n execuie (On Error Resume Next); 2. 3. Se ncearc| accesarea propriet|ii Name din lista de cmpuri ale tabelului dorit; Dac| ncercarea este nereuit| se apeleaz| funcia ReatasareTabel()care va
Resume CreareTabelAtasat_Iesire
0264-401667
NU COPIA !.
354
ncerca reataarea tabelului. n cazul n care ncercarea este nereuit| se afieaz| un mesaj de eroare i se revine cu valoarea False;
VerificaAtasareaTabelului = True
strName = db.TableDefs(NumeTabel).Fields(0).Name
If Not ReatasareTabel(NumeTabel, CaleNoua) Then MsgBox "Nu am reusit reatasarea tabelului :'" & E NumeTabel & "'" VerificaAtasareaTabelului = False
End If End If
http://www.east.utcluj.ro/mb/mep/antal
4. Dac| ncercarea de accesare a reuit nseamn| c| tabelul este ataat corect i se revine cu valoarea True din funcie.
End Function
Function ReatasareTabel(NumeTabel As String, CaleNoua As E String) As Integer Dim db As Database Dim tdf As TableDef
ReatasareTabel = True
Set db = CurrentDb()
On Error GoTo 0
0264-401667
NU COPIA !.
355
End Function
End If
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
356
Obiectivele cursului 14
Dupa 7 parcurgerea acestui curs vet -i cunoas - te:
! ! ! ! ! ! !
care este noul model de date pentru manipularea bazelor de date Access; ce este obiectul Connection; cum se manipuleaz| coleciile n Access 2000;
cum se lucreaz| cu mulimile de nregistr|ri n Access 2000; cum se efectueaz| operaiile comune cu mulimile de nregistr|ri (creare, ce este schema bazei de date i cum se lucreaz| cu ea n Access 2000
indexuri i relaii).
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
357
Editorul Access pentru module de program a fost nlocuit cu cel folosit n limbajul de programare Visual Basic 6, iar modific|rile f|cute ntr-o prezentare sumar| sunt:
ntregul cod VBA din modulele globale, formulare i rapoarte se poate proteja printr-o singur| parol|. VBA nu mai este protejat prin sistemul de securitate la nivel de utilizator; editorul VBA folosete modelul de obiect programabil i suport| tehnologia COM pentru aplicaii add-ins (o procedur| Visual Basic mpreun| cu obiectele pe care le manipuleaz| ce poate fi stocat| sau tears| din baza de date sub controlul unui program gestionar de add-ins-uri) care cresc productivitatea scrierii, analizei i format|rii codului VBA.
editorul VBA din Access 2000 este acelai cu editoarele VBA ale altor aplicaii Microsoft Office (Excel i Word) i cu cel al firmelor tere care permit programarea aplicaiei lor din VBA;
controalele care afieaz| text permit folosirea unui chenar definit de utilizator n jurul textului permind mutarea textului n interiorul controlului; se pot aplica reguli de formatare condiionat| datelor din cutiile cu text i combinate;
Accesul la date a suferit o modificare important|, motorul bazei de date vine cu o opiune nou|, un nou model pentru accesul la date i un nou format al bazei de date, toate aceste mbun|t|iri sunt prezentate pe scurt n cele ce urmeaz|:
dei motorul Jet r|mne motorul implicit, Access-ul permite lucrul cu Microsoft Data Engine (MSDE), o versiune cu num|r de conect|ri limitate ale lui SQL Server 7;
este posibil| crearea de fiiere Access Data Projects (ADP) pe lng| clasicele baze de date Access MDB. Un fiier 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 aplicaiile multilingve sunt mai uor de scris; Access-ul 2000 folosete noul model de date ActiveX Data Objects (ADO) ca model
0264-401667
NU COPIA !.
mulimea de nregistr|ri care formeaz| sursa de date a formularului se poate seta la o mulime de nregistr|ri DAO sau ADO.
http://www.east.utcluj.ro/mb/mep/antal
n evoluia produsului Access un salt mare s-a produs de la versiunea 2.0 la 95. Access 2000, la rndul 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.
358
preferenial pentru accesul la date dei codul DAO va continua s| existe i s| lucreze corect; motorul Jet permite blocare la nivel de nregistrare i nu la pagin| ca i pn| acum;
Microsoft-ul d| dou| noi modele de obiecte din familia ADO pentru lucrul cu schema bazei de date i ntreinerea acesteia: ADOX i JRO. ADOX permite investigarea i modificarea schemei bazei de date, iar JRO permite compactarea i repararea bazelor de date.
n aceast| versiune de Access Generatorul de pagini Web este nlocuit cu pagini pentru accesul la date. O pagin| pentru accesul la date este o pagin| Web care se poate folosi la vizualizarea i editatrea datelor dintr-o baz| de date Access, MSDE sau SQL Server 7 prin intermediul lui Internet Explorer 5. Cteva dintre informaiile legate de aceste pagini sunt: paginile pentru accesul la date se folosesc de capacitatea lui IE5 de legare la datele unui client; pagina pentru accesul la date face parte dint-o pagin| HTML care folosete eXtensible Markup Language (XML); paginile pentru accesul la date pot fi folosite dintr-o baza de date MDB, proiect ADP sau IE5; Access-ul are un Generator pentru proiectarea paginilor pentru accesul la date; se poate ataa cod scris n limbajele VBscript sau JavaScript paginilor;
pagina pentru accesul la date poate fi scris| de la zero sau se poate baza pe coninutul unei alte pagini de Web ; se pot include componente de Web Office n pagini; paginile active pentru accesul la date pot fi folosite pentru navigare i editarea nregistr|rilor unei baze de date i pentru realizarea de rapoarte datorit| facilit|ilor n grupare.
http://www.east.utcluj.ro/mb/mep/antal
Jet-ul are o serie de facilit|i care permit determinarea mainii i a numelui tuturor utilizatorilor care acceseaz| baza de date i permite inhibarea leg|rii de noi utilizatori la baza de date pentru a permite derularea unor operaii de ntreinere a bazei de date;
Versiunile anterioare de Access foloseau o bibliotec| numit| DAO pentru accesul la date din program. DAO i-a nceput existena ca interfa| cu motorul Jet odat| cu Access 1 i treptat a ajuns la o m|rime i complexitate impresionant| sub Access 97, sau cu alte cuvinte a devenit prea complicat. ncepnd cu Access 2000, DAO nu mai este modelul preferat pentru accesul la date, locul ei fiind luat de ADO. Exist| situaii cnd este de preferat folosirea lui DAO n Access 2000, cele mai importante sunt: folosirea unei mulimi de nregistr|ri a unui formular dintr-o baz| de date Access este o mulime de nregistr|ri DAO (formularele unui proiect Access folosesc mulimi de nregistr|ri ADO);
la conversia unei baze de date dintr-o versiune anterioar| de Access, mulimile de nregistr|ri vor fi implicit DAO (la crearea unei baze de date noi n Access 2000 se folosete implicit ADO).
0264-401667
NU COPIA !.
359
Dim rs As Recordset
La fel cu versiunile anterioare, Access-ul are propria lui ierarhie de obiecte prin care putem avea acces la informaii cu privire la paginile, formularele, rapoartele deschise sau la modulele aplicaiei. Figura care urmeaz| le prezint| parial pe acestea. Ierarhia obiectului aplicaie (Application) include toate obiectele (formularele, rapoartele, paginile
0264-401667
NU COPIA !.
nu se tie la ce fel de mulime de nregistr|ri se refer|. Pentru rezolvarea ambiguit|ii numele bibliotecii va preceda numele obiectului astfel vom scrie:
La crearea unei baze de date noi (fiierul are extensia MDB) sau a unui proiect (fiierul are extensia ADP) Access 2000 presupune c| vei lucra cu ADO i va seta referina din figura urm|toare c|tre biblioteca Microsoft ActiveX Data Objects 2.1. Referina se poate seta i manual din editorul de module Visual Basic al Access-ului selectnd din Tools pe References. Pentru aceasta n fereastra de dialog References, unde sunt afiate sub forma unei liste toate bibliotecile de obiecte instalate pe calculator, se activeaz| butonul de validare corespunz|tor numelui aplicaiei dorite. Dac| validai Microsoft ActiveX Data Objects 2.1 Library, aplicaia va folosi ADO, dac| validai Microsoft DAO 3.6 Object Library aplicaia va folosi DAO. Este posibil s| fie ambele biblioteci validate simultan, caz n care apar unele probleme de scriere ntruct exist| obiecte ale celor dou| biblioteci care au acelai nume. De exemplu, att DAO ct i ADO au obiectul Recordset, astfel o linie de program de forma:
http://www.east.utcluj.ro/mb/mep/antal
Specificarea referinelor
360
deschise i modulele de cod etc. ) cu care Access-ul poate lucra. n cele ce urmeaz|, din punctul de vedere al accesului la date, aceste obiecte vor avea un rol secundar fiind discutate n principal obiectele care in de ierarhia ADO. Acestea vor fi folosite pentru a interaciona cu motorul bazei de date indiferent dac| acesta este motorul Jet, SQL Server sau motorul MSDE. Figura care urmeaz| prezint| ca exemplu ierahia pentru obiectul Connection, apoi n ultima figur| se prezint| colecia Properties comun| obiectelor Connection, Command, Recordset i Filed.
ADO permite aplicaiilor client s| acceseze i s| manipuleze date prin orice furnizor de servicii OLE DB (OLE DB este o component| a unui SGBDR care implementeaz| accesul eficient prin reea local| sau internet la mai multe tipuri de surse de date: date stocate conform modelului relaional, fiiere de pot| electronic|, foi de calcul). ADO conine obiecte pentru conectarea la o surs| de date i manipularea acestora. n ADO obiectul Connection definete o sesiune de lucru pentru un utilizator al unei surse de date particulare. n DAO obiectul Workspace definete o sesiune de lucru a unui utilizator, iar obiectul Database definete
0264-401667
NU COPIA !.
DAO a devenit n timp o bibliotec| uria|, ADO folosete trei modele de obiecte distincte pentru a furniza aceeai funcionalitate cu DAO. Acestea sunt ADO (ADODB), Microsoft ADO Extensions for DDL and Security (ADOX) i Microsoft Jet and Replication Objects (JRO). Majoritatea aplicaiilor nu au nevoie de toate aceste modele pentru a funciona, divizarea pe criteriul funcionalit|ilor putndu-se justifica n acest fel. Aplicaia care acceseaz| datele se numete consumator de date (de exemplu, Access 2000 sau un program scris n Visual Basic 6.0), iar programul care asigur| accesul la date se numete, furnizor de baz| de dat| (de exemplu, Microsoft OLE DB Provider for SQL Server sau Microsoft Jet 4.0 OLE DB Provider).
http://www.east.utcluj.ro/mb/mep/antal
361
Replicarea cu JRO
variabilele respective nu vor conine obiectul n sine ci numai o referint| (un poantor) la obiect. n acest moment n aceste variabile nu sunt ns| stocate i adresele obiectelor, pentru aceasta trebuie s| scriem codul: Set con = CurrentProject.Connection Set rs = New ADODB.Recordset
0264-401667
NU COPIA !.
aceasta spune Access-ului s| rezerve spaiu n RAM pentru stocarea unei valori de tipul ntreg (Integer). n cazul unei variabile obiect (o variabil| care refer| un obiect pentru accesul la date sau un obiect de interfa| cu utilizatorul) Access-ul creeaz| numai un poantor, adic| aloc| spaiu suficient numai pentru stocarea unei adrese de obiect. Deci, n Access 2000 dac| scriem liniile:
Modelul JRO conine obiecte pentru crearea, modificarea i sincronizarea mai multor replici a unei baze de date. Se poate folosi numai pentru baze de date ale motorului Microsoft Jet. Replica este obiectul primar folosit pentru crearea de replici noi, pentru modificarea propriet|ilor unei replici i pentru sincronizarea replicilor.
ADOX conine obiectele pentru definiia datelor (Tables, Procedures i Views) i coleciile (Users i Groups) pentru securitate. Aici diferenele fa| de DAO sunt semnificative ntruct n DAO, obiectul Workspace coninea coleciile pentru securitate i cel Database cele pentru definiia datelor. Fiecare obiect Catalog este asociat unui singur obiect Connection, n timp ce n DAO obiectul Workspace putea conine mai multe obiecte Database. Obiectele ADO Tabel, Index i Column sau aproximativ echivalente cu obiectele DAO TableDef, IndexDef i Field, dar n ADO fiecare dintre aceste obiecte are o colecie standard Properties.
http://www.east.utcluj.ro/mb/mep/antal
sursa de date. Obiectul ADO Command este similar obiectului DAO QueryDef, ambele putnd fi folosite pentru executarea de instruciuni SQL asupra unei surse de date. Obiectul Recordset este folosit n ambele biblioteci pentru vizualizarea coninutului unui tabel sau a rezultatelor execuiei unei instruciuni SQL.
362
Unele obiecte au o metod| Close, aceasta trebuie apelat| nainte de dezalocarea spaiului pentru obiectul n cauz|, deci ordinea va fi: rs.Close
Obiectul Connection
con.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
Debug.Print con.ConnectionString
0264-401667
Este obiectul din vrful ierarhiei ADO, orice alt obiect se poate folosi numai dac| s-a specificat conexiunea care va fi folosit| pentru accesul la date. Obiectul corespunde unei singure conexiuni la un furnizor de date OLE DB. Obiectul Connection poate fi creat explicit sau se poate crea implicit cnd se lucreaz| cu un obiect derivat al lui, de exemplu obiectul Recordset, cnd este necesar| i specificarea informaiei de conectare. Dac| codul se scrie n Access se poate folosi obiectul CurrentProject pentru a obine o referin| la conexiunea bazei de date curente.
Set rs = Nothing
Set rs = Nothing
http://www.east.utcluj.ro/mb/mep/antal
Liniile de mai sus fac ca variabilele obiect s| se refere la cte un obiect actual. Dac| pe parcursul codului scris variabila obiect iese n afara scopului, Access-ul va elibera (obiectul este ters din RAM) i spaiul de RAM corespunz|tor obiectului poantat de variabila respectiv| n cazul n care aceast| variabil| este singura din cod n care se refer| obiectul. Dac| avei dubii asupra eliber|rii spaiului folosit la stocarea unui obiect aceasta se poate realiza i explicit prin:
NU COPIA !.
363
Set con = Nothing End Sub iar rezultatul afiat n fereastra imediat| este:
Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=C:\My Documents\db2000-test.mdb; Mode=Share Deny None;Extended Properties="";Locale Identifier=1033;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False Procedura Sub de mai sus folosete proprietatea CurrentProject.Path pentru a determina calea c|tre baza de date curent| sau fiierul proiect. R|spunsul afiat conine un num|r foarte mare de propriet|i ale conexiunii, dar singurele necesare pentru realizarea unei conexiuni sunt numele furnizorului OLE DB (Provider) i numele bazei de date care se va deschide (Data Source). Dac| dorii s| facei referire la baza de date curent| folosii codul: Public Sub BdCurenta()
Debug.Print con.ConnectionString
End Sub
Prezint n continuare cel mai simplu mod de parcurgere a unei colecii prin folosirea instruciunii For Each ... Next. Este necesar| crearea unei variabile care s| poat| referi tipul de obiect specific coleciei care va fi parcurs|. Baza de date folosit| se numete ADDBOOK.MDB, iar tabelul Members. Figura care urmeaz| conine i codul pentru procedura de tipul Sub cu numele ListareCampuri.
Codul parcurge iterativ fiecare element al coleciei i folosete un Set implicit pentru a poanta la variabila obiect corespunz|toare pentru fiecare obiect al coleciei. Cnd ajunge la linia Next fld, valoarea poantorului se va modifica la urm|torul element al coleciei.
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
364
rs.Close
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
365
Acelai 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
rs.Close
n general, termenul de cursor este asociat unei instruciuni SQL i reprezint| mulimea nregistr|rilor ntoarse de c|tre respectiva instruciune. n ADO, se folosete denumirea de cursor descrie comportamentul poantorului nregistr|rii curente dintr-o mulime de nregistr|ri. Un cursor este obiectul ce permite deplasarea printre nregistr|rile unei mulimi de nregistr|ri. ADO permite folosirea a patru tipuri de cursoare care sunt descrise n tabelul urm|tor:
Tipul cusorului
Descriere
Avantaje
Dezavantaje
Dynamic
Permite folosirea marcajelor numai dac| furnizorul le suport|. Nu poate lucra cu jet ole db n acest mod.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
366
Keyset
Static
Copie a unei mulimi de nregistr|ri aa cum era ea la momentul cre|rii ei. Copie a unei mulimi de nregistr|ri aa cum era ea la momentul cre|rii ei.
ntotdeuna suport| marcaje. Singurul tip de mulime de nregistrare este client-side cursor Mai rapid| dect cursorul static
http://www.east.utcluj.ro/mb/mep/antal
Mulime de poantori (bookmarks) care refer| datele unui tabel sau interogare din baza de date.
Afieaz| toate modific|rile f|cute de ali utilizatori. Suport| lucrul cu marcaje ntotdeauna.
Nu afieaz| noile nregistr|ri ad|ugate de ali utilizatori. mpiedic| accesul la nregistr|rile terse de ali utilizatori. Nu reflect| modific|rile aduse datelor n regimul de lucru cu mai muli utilizatori Permite navigarea n mulime numai n fa|.
Forward-only
rs.Open Sursa 7, Conexiune, TipCursor, TipBlocare, Opt -iuni Toi aceti parametri sunt opionali i pot fi specificai i naintea deschiderii mulimii de nregistr|ri, din acest motiv cele dou| poriuni de cod care urmeaz| sunt echivalente:
7 specific| locul din care vin datele i trebuie s| fie: Parametrul Sursa
numele unui tabel existent;
numele unei interog|ri existente sau a unei proceduri stocate care ntoarce nregistr|ri; o instruciune SQL care ntoarce nregistr|ri; numele unei variabile obiect Command existente;
0264-401667
NU COPIA !.
367
Deschide o mulime dinamic| de nregistr|ri. Deschide o mulime de nregistr|ri de chei. Deschide o mulime de nregistr|ri statice. Deschide o mulime de nregistr|ri pentru navigare n fa|.
adOpenStatic
adOpenForwardOnly
Parametrul TipBlocare specific| comportamentul n cazul edit|rii mulimii de nregistr|ri n cazul bloc|rii lor. Tabelul urm|tor prezint| constantele predefinite care pot fi folosite:
Mulimea de nregistr|ri nu poate fi editat|. Blocarea mulimii de nregistr|ri este pesimist|. Blocarea mulimii de nregistr|ri este optimist|. Pentru mulimile de nregistr|ri care vor folosi metoda UpdateBatch pentru actualizarea mai multor nregistr|ri ntr-o singur| operaie.
adLockPessimistic adLockOptimistic
adLockBatchOptimistic
http://www.east.utcluj.ro/mb/mep/antal
Parametrul TipCursor specific| tipul cursorului pe care ADO l folosete la navigarea printre nregistr|ri i trebuie s| fie una dintre constantele prezentate n tabelul care urmeaz|:
Descriere
Descriere
Not|: Implicit, mulimea de nregistr|ri ADO seteaz| valorile acestor parametri la adOpenForwardOnly i adLockReadOnly
Parametrul Opt -iuni spune lui ADO cum s| evalueze parametrul Sursa 7, el poate lua valorile prezentate n tabelul urm|tor:
Descriere
adCmdText
adCmdTable
Spune ADO-ului s| genereze o interogare SQL pentru citirea tuturor nregistr|rilor unui tabel sau interogare a c|rui nume este specificat n surs|.
0264-401667
NU COPIA !.
368
adCmdTableDirect
adCmdStoredProc adCmdUnknown
Spune furnizorului s| evalueze sursa ca un nume de procedur| stocat| sau ca interogare. Spune ADO-ului s| interogheze furnizorul pentru a determina dac| sursa este o procedur| stocat|, un nume de tabel sau o instruciune SQL. Spune ADO-ului c| parametrul surs| este numele unui fiier care conine o mulime de nregistr|ri persistent|.
Codul pentru deschiderea unei mulimi de nregistr|ri pe baza tabelului Members din baza de date ADDRBOOK.MDB este: Public Sub DeschideMultimedeInregistrariADO() Dim con As ADODB.Connection Dim rs As ADODB.Recordset Dim fld As ADODB.Field
adCmdFile
Next
rs.Close
End Sub
Numele (Name) i valoarea (Value) fiec|rui cmp din prima nregistrare a mulimii vor fi afiate n fereastra imediat| prin parcurgerea iterativ| a coleciei Fields.
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Spune furnizorului s| ntoarc| toate nregistr|rile unui tabel sau interogare a c|rui nume este specificat n surs|.
369
1.
rs.Open "NumeTabel", CurrentProject.Connection 2. Crearea unei mulimi de nregistr|ri pe baza unei interog|ri salvate n baza de date: Set rs = New ADODB.Recordset
rs.Open "[NumeInterogare]", CurrentProject.Connection 3. Crearea unei mulimi 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 mulimi de nregistr|ri pe baza unui tabel care permite c|utarea cu Seek: rs.CursorLocation=adUseServer rs.Open "NumeTable", CurrentProject.Connection, adOpenKeyset,E adLockOptimistic, adCmdTableDirect
http://www.east.utcluj.ro/mb/mep/antal
Marele avantaj al ADO este flexibilitatea, adic| exist| mai multe feluri de a scrie acelai cod. Exemplele care urmeaz| specific| mai multe moduri de creare ale unui obiect Recordset:
Cursorul client
Obiectul ADO Recordset are o proprietate CursorLocation care nu exista n DAO i care afecteaz| funcionarea i performanele mulimii de nregistr|ri. Noiunea de cursor semnific| nregistr|rile din cache (termenul de cache se folosete pentru o memorie care stocheaz| date recent accesate i care este proiecat| pentru a crete viteza de acces n cazul referirii acelorai date) sau de poantori la nregistr|ri furnizate de motorul bazei de date la deschiderea unei mulimi 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 aceeai main| cu clientul (adic| cu utilizatorul bazei de date), iar cel server se creeaz| pe aceeai main| cu server-ul, care poate fi chiar maina pe care lucreaz| utilizatorul sau poate fi o main| server oarecare. Dou| constante sunt definite pentru alegerea cursorului, adUseServer (implicit|) pentru cursorul server i adUseClient pentru cursorul client. Cnd se specific| cursorul client, ADO transfer| cererile serviciului Microsoft Cursor Service pentru OLE DB care este proiectat pentru creterea funcionalit|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 mulime de nregistr|ri cu parcurgere n avans (forward-only) f|r| posibilitatea de modificare (read-only).
0264-401667
NU COPIA !.
370
La fel ca i la DAO, ADO are metodele Move, MoveFirst, MoveLast, MoveNext i MovePrevious pentru deplasarea de la o nregistrare la alta. Codul care urmeaz| prezint| folosirea lui MoveNext pentru a parcurge toate ntegistr|rile obiectului Recordset.
Public Sub ParcurgeMultimedeInregistrariADO() Dim con As ADODB.Connection Dim rs As ADODB.Recordset Dim fld As ADODB.Field
http://www.east.utcluj.ro/mb/mep/antal
Apoi realizeaz| un cache local pentru date i le prezint| aplicaiei ca o mulime de nregistr|ri static|. n majoritatea cazurilor cursorul client din interiorul unei baze de date Access duce la realizarea de dou| cache-uri pentru date pe aceeai main|: odat| de motorul Jet, apoi de Serviciul Cursor. Totui, acest cursor extinde funcionalitatea obiectului, de exemplu se poate folosi metoda Sort sau se poate folosi o mulime de nregistr|ri deconectat| care va fi mai trziu 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 puin n cazul cnd funcionalitatea adus| de cursorul client este necesar|.
Next
Debug.Print rs.MoveNext
Loop
rs.Close
End Sub
Do Until rs.EOF
0264-401667
NU COPIA !.
371
C|utarea nregistr|rilor
Att DAO ct i ADO au dou| metode pentru localizarea unei nregistr|ri ntr-o mulime de nregistr|ri: Find i Seek. n ambele cazuri trebuie specificat un criteriu pentru localizarea nregistr|rii care se ndeplinete. Seek are, n general, performane mai bune ca Find pentru c| lucreaz| cu indexuri la c|utarea poziiei nregistr|rilor, dar este limitat la mulimile de nregistr|ri care au index. DAO are metodele FindFirst, FindLast, FindNext i FindPrevious pentru c|utare. ADO are o singur| metod| pe Find care cu ajutorul parametrilor permite specificarea sensului c|ut|rii i poziia din care ncepe c|utarea. Forma general| a lui Find este: Recordset.Find Criteriu, SariRanduri, SensCautare, Inceput Semnificaia parametrilor este:
SariRanduri: specific| un deplasament fa| de nregistrarea curent| din care va 2. ncepe c|utarea. Implicit c|utarea ncepe de la nregistrarea curent|; SensCautare: ia valoarea adSearchForward (implicit) pentru c|utarea n avans 3. sau adSearchBackward pentru c|utarea n urm|; Inceput: un marcaj opional pentru specificarea locului de nceput al c|ut|rii. 4. Implicit c|utarea ncepe cu nregistrarea curent|.
Public Sub CautaInregistrariADO()
0264-401667
NU COPIA !.
Dim rs As ADODB.Recordset
1. Criteriu: este un ir de caractere de forma unei clauze WHERE format| la fel ca n expresiile SQL, dar f|r| cuvntul WHERE, de exemplu, PersonID = 3. Poate conine numai un singur nume de cmp, un operator de comparaie i o valoare;
http://www.east.utcluj.ro/mb/mep/antal
372
Next Debug.Print rs.Find crt, 1 Loop rs.Close Set fld = Nothing Set rs = Nothing
Tabelul care urmeaz| prezint| echivalena ntre metodele de c|utare DAO i metoda Find ADO: Metoda DAO FindFirst
End Sub
adSearchForward (dac| nu suntem poziionai pe prima nregistrare se folosete MoveFirst nainte de Find).
FindLast
adSearchBackward (dac| nu suntem poziionai pe ultima nregistrare se folosete MoveLast nainte de Find). adSearchForward adSearchBackward
FindNext
1 1
FindPrevious
n cazul deschiderii unei mulimi de nregistr|ri cu opiunea adCmdTableDirect se poate folosi metoda Seek pentru localizarea mai rapid| a unei nregistr|ri folosind codul care urmeaz|. Localizarea unei date cu Seek se realizeaz| n dou| etape:
1. Setai proprietatea Index a mulimii. Aceasta spune Access-ului dup| care index se va realiza c|utarea. Dac| c|utarea se va face dup| cheia primar| trebuie s| cunoatei numele ei (dac| numele ei nu s-a modificat din program acesta este PrimaryKey);
2. Folosii metoda Seek pentru g|sirea valorii dorite prin utilizarea unei opiuni de c|utare i a uneia sau a mai multor valori de c|utare. Dac| index-ul este format din mai multe cmpuri se vor furniza toate valorile de cmpuri printr-un tablou care se poate construi folosind funcia Array.
0264-401667
NU COPIA !.
DAO i ADO folosesc o sintax| diferit| pentru localizarea nregistr|rilor cu valori Null. n DAO se scria un ir de forma: "LastName Is Null" sau "LastName Is Not Null". ADO nu recunoate operatorul Is se vor folosi n schimb operatorii = i <>, adic| scriem: "LastName = Null" sau "LastName <> Null".
http://www.east.utcluj.ro/mb/mep/antal
373
C|utarea cheii egal| cu valoarea specificat| sau dac| nu este o astfel de cheie, prima cheie dup| punctul unde egalitatea ar fi ap|rut. C|utarea primei chei dup| punctul n care egalitatea apare sau ar fi ap|rut.
adSeekAfter
adSeekBeforeEQ
C|utarea cheii egal| cu valoarea specificat| sau dac| nu este o astfel de cheie, prima cheie naintea punctului unde egalitatea ar fi ap|rut.
adSeekBefore
adSeekFirstEQ adSeekLastEQ
Caut| prima cheie egal| cu valoarea specificat|. Caut| ultima cheie egal| cu valoarea specificat|.
C|utarea primei chei naintea punctului n care apare egalitatea sau ar fi ap|rut.
http://www.east.utcluj.ro/mb/mep/antal
Seek lucreaz| numai cu mulimi de nregistr|ri care au proprietatea CursorLocation setat| la ceva diferit de adUserClient. Pentru c| setarea implicit| este adUseServer aceasta, de obicei, nu va fi o problem|. Opiunile de c|utare se specific| prin constantele predefinite din tabelul care urmeaz|:
Descriere
NU COPIA !.
rs.Seek 5, adSeekFirstEQ
0264-401667
374
Dac| Seek reuete s| localizeze nregistrarea, nregistrarea curent| devine cea care conine valoarea specificat|. Dac| operaia nu reuete, proprietatea EOF a mulimii de nregistrare ia valoarea True.
Dac| o mulime de nregistr|ri se poate actualiza prin specificarea tipului corespunz|tor DAO sau n ADO prin parametrii TipCursor i TipBlocare se pot modifica, ad|uga i terge nregistr|ri prin folosirea obiectului Recordset.
Modificarea din program a unei nregistr|ri se face parcurgnd etapele: 1. 2. 3. Poziionare pe nregistrarea dorit|; Realizarea modific|rilor;
http://www.east.utcluj.ro/mb/mep/antal
With rs
0264-401667
NU COPIA !.
375
n DAO era obligatorie folosirea metodei Edit nainte de modificarea unei mulimi de nregistr|ri, n ADO aceasta nici m|car nu mai exist|. ADO nu necesit| folosirea metodei Update pentru salvarea modific|rilor f|cute, aceasta se realizeaz| automat, mai puin dac| se apeleaz| metoda CancelUpdate. Dac| se modific| o nregistrare i ncercai s| nchidei mulimea de nregistr|ri ADO va genera o eroare n execuie dac| nu ai folosit metoda Update. Ad|ugarea unei nregistr|ri noi
Unei mulimi de nregistr|ri care se poate actualiza i care are securitatea aa nct s| ne permit| aceasta, i se adaug| o nregistrare parcurgnd etapele: 1. Folosii metoda AddNew pentru ad|ugarea unei nregistr|ri. Toate cmpurile vor primi valorile lor implicite; 2. Completai cmpurile cu valorile dorite; 3. Opional, folosii metoda Update pentru salvarea noii nregistr|ri. Dac| nu apelai metoda Update dar v| poziionai pe o alt| nregistrare ADO va salva nregistrarea automat. Dac| ncercai s| nchidei o mulime de nregistr|ri far| salvarea explicit| a nregistr|rii se va genera o eroare n execuie.
http://www.east.utcluj.ro/mb/mep/antal
With rs .AddNew
0264-401667
NU COPIA !.
376
rs.Close
End Sub
Pentru a terge o nregistrare dintr-o mulime de nregistr|ri se parcurg etapele: Poziionare pe nregistrarea dorit|; Apelarea metodei Delete.
Set rs = Nothing
Nu este nevoie de folosirea lui Update pentru tergerea nregistr|rii, odat| tears| nregistrarea dispare, mai puin n cazul n care face parte dintr-o tranzacie. n acest caz se poate reveni asupra tergerii. Dup| tergere nregistrarea care s-a ters r|mne cea curent|, de exemplu se poate folosi MoveNext pentru deplasarea pe nregistrarea urm|toare. Orice ncercare de a face ceva cu nregistrarea tears| va genera o eroare n execuie. Public Sub StergeToateInregistarileunuiTabelcuADO()
With rs
Dim rs As ADODB.Recordset
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
377
Codul prezentat terge toate nregistr|rile tabelului Members din baza de date ADDRBOOK.MDB dei metoda nu este cea mai bun| pentru rezolvarea acestei probleme. n practic| vei folosi pentru aceasta o interogare de tergere (Delete Query). Actualiz|ri n grup
End Sub
Dac| se folosete cursorul client avnd unul dintre tipurile: adOpenKeyset, adOpenStatic se poate folosi abilitatea ADO-ului de actualizare unui grup de nregistr|ri. Adic|, se pot edita nregistr|ri multiple din baza de date dup| care se pot transmite toate modific|rile furnizorului OLE DB pentru a fi stocate ntr-o singur| operaie. Codul care urmeaz| va modifica toate nregistr|rile avnd n cmpul Country stocat| "USA" n "Transilvania". Public Sub ModificareInBloccuADO() Dim con As ADODB.Connection Dim rs As ADODB.Recordset
http://www.east.utcluj.ro/mb/mep/antal
With rs
.CursorLocation = adUseClient
.Open "Household", con, adOpenKeyset, E adLockBatchOptimistic .Find crt Do While Not .EOF .Fields("Country") = "Transilvania"
0264-401667
NU COPIA !.
378
Dac| modific|rile nu pot fi salvate, de exemplu pentru c| un alt utilizator a ters o nregistrare, apare o eroare n execuie. ntr-un astfel de caz se poate folosi proprietatea Filter mpreun| cu constanta adFilterAffectedRecords pentru filtrarea interog|rilor afectate de ultimul Delete, UpdateBatch sau CancelBatch.
End Sub
Executarea interog|rilor
La fel ca i n DAO i n ADO interog|rile pot fi executate ns| cu o tehnic| i o funcionalitate m|rit|. Executarea unei interog|ri f|r| parametri stocate n baza de date O interogare f|r| parametri stocat| n baza de date este o instruciune SQL care a fost slavat| n baza de date i nu necesit| informaii suplimentare pentru a fi executat|. Codul care urmeaz| lucreaz| cu o astfel de interogare: Public Sub ExecutieInterogareStocataADO()
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
379
For Each fld In .Fields Debug.Print fld.Value & "' "; Next Debug.Print .MoveNext Loop .Close
Set rs = Nothing
End Sub
End With
Observai c| interogarea se folosete la fel ca i n DAO cu diferena c| aici numele interog|rii n Open se scrie ntre paranteze dreptunghiulare. Ea folosete interogarea Invoices din baza de date Northwind.mdb. Executarea unei interog|ri cu parametri stocate n baza de date O interogare cu parametri stocat| n baza de date este o instruciune SQL care a fost salvat| n baza de date i necesit| informaii suplimentare de natur| variabil| pentru a fi executat|. Codul care urmeaz| lucreaz| cu o astfel de interogare: Public Sub ExecutieInterogareStocatacuParametriADO()
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
380
Loop
Set rs = Nothing
.MoveNext
End Sub
O alt| form| de scriere al aceluiai cod, ns| prin folosirea parametrului Parameters din obiectul Command n locul metodei Execute este:
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
381
= #1/28/2000#
Next
Debug.Print
.MoveNext Loop
Set rs = Nothing
Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set pro = cat.Procedures("Sales by Year")
0264-401667
NU COPIA !.
O alt| metod|, n cazul n care trebuie s| cre|m o mulime de nregistr|ri pe baza unei interog|ri despre care nu tim prea multe este codul:
http://www.east.utcluj.ro/mb/mep/antal
382
With rs
Do Until .EOF
Set rs = com.Execute
Next
Debug.Print
.MoveNext Loop
Set rs = Nothing
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
End Sub
Pentru ca exemplul prezentat s| funcioneze, trebuie deschis formularul "Sales by Year Dialog" din baza de date Northwind.mdb. Dac| interogarea are ca parametri obiecte ale unui formular trebuie ca formularul s| fie deschis, cu valorile parametrilor completai, nainte de lansarea interog|rii din program. Observai modul ciudat de stocare a obiectului Command. Se folosete ADOX (despre care se va vorbi mai pe larg n paragraful urm|tor)
0264-401667
383
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
Obiectului DAO Database i corespunde n ADOX obiectul Catalog, iar pentru crearea unei baze de date se folosete metoda Create. n ADOX, ncriptarea i versiunea bazei de date se specific| prin intermediul propriet|ilor Encript Database i Engine Type. Linia care urmeaz| creaz| o baz| de date ncriptat| cu versiunea 1.1 a motorului Microsoft Jet prin specificarea propriet|ilor descrise mai sus n irul de conectare. cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=.\bdnoua2000.mdb" & _ "Jet OLEDB:Engine Type=2;" "Jet OLEDB:Encrypt Database=True;" & _
0264-401667
End Sub
Orice baz| de date conine un num|r de tabele, indexuri, constrngeri etc. Definiiile acestor obiecte, toate la un loc, poart| denumirea de schema bazei de date. Att DAO ct i ADO pun la dispoziia utilizatorului obiecte pentru crearea de noi obiecte n baza de date ct i pentru nc|rcarea informaiilor legate de obiectele deja existente n baz|. Pentru manipularea din program ale acestor obiecte trebuie setat| referina c|tre Microsoft ADO Extensions for DDL and Security sau ADOX.
http://www.east.utcluj.ro/mb/mep/antal
pentru a extrage proprietatea Command a obiectului Procedure (o interogare stocat|). n condiii normale s-ar fi creat un obiect Command i s-ar fi atribuit propriet|ii CommandText numele interog|rii stocate n baza de date. Aceast| metod| ns| funcioneaz| numai cu interog|ri f|r| parametri. Furnizorul Jet nu va popula corect colecia Parametres a obiectului Command dect dac| obiectul Command este nc|rcat prin ADOX.
NU COPIA !.
384
Tables:
cat.ActiveConnection = CurrentProject.Connection
If ((tbl.Type <> "VIEW") And (tbl.Type <> "SYSTEM E TABLE")) Then Debug.Print tbl.Name, tbl.Type
End Sub
n DAO colecia TableDefs stoca tabele (obiecte TableDef) bazei de date, n ADOX colecia Tables conine obiectele Table din baza de date. n ADO ns| colecia Tables poate conine i obiecte care nu sunt tabele obinuite cum ar fi interog|ri f|r| parametri (considerate vederi [View] n ADOX). Tabelul care urmeaz| prezint| lista tuturor valorilor pe care le poate lua proprietatea Type:
LINK
Tabelul este legat printr-o surs| de date ne-ODBC. Tabelul este legat printr-o surs| ODBC.
TABLE VIEW
Tabel normal.
Crearea tabelelor
Bazele de date Microsoft Jet pot conine tabele locale, acestea avnd definiia i datele stocate n cadrul bazei de date din care sunt referite i tabele legate care sunt stocate n baze de date externe bazei n care sunt folosite, dar prin intermediul unei leg|turi o copie a definiiei tabelului este stocat| n baza de date din care aceasta este referit|.
ACCESS TABLE
0264-401667
Next
http://www.east.utcluj.ro/mb/mep/antal
Descriere
NU COPIA !.
385
Strategia pentru crearea unui obiect al bazei de date este sintetic prezentat| n etapele urm|toare: 2. Creai noul obiect prin definirea unei variabile de tipul obiect respectiv pentru a v| putea referi la el; 3. Definii noul obiect prin setarea propriet|ilor lui; 4. Ad|ugai prin folosirea lui Append obiectul coleciei pentru a-l face permanent parte a bazei de date. Crearea unui tabel local
With tbl
End With
Application.RefreshDatabaseWindow
0264-401667
.Columns("IDClient").Properties("AutoIncrement") = E
http://www.east.utcluj.ro/mb/mep/antal
1.
NU COPIA !.
386
End Sub n ADOX nu este necesar| folosirea metodei Create pentru crearea unei coloane nainte de ad|ugarea ei la colecie. Metoda Append va fi folosit| att pentru crearea ct i pentru ad|ugarea coloanei. Denumirile tipurilor de date pentru coloane sunt diferite fa| de DAO i sunt prezentate comparativ n tabelul urm|tor:
adBoolean
dbCurrency dbDate
dbInteger dbLong
adSamllInt adInteger
dbLongBinary dbMemo
adLongVarBinary adLongVarWChar
dbSingle dbText
adSingle
http://www.east.utcluj.ro/mb/mep/antal
Exist| i alte atribute ale unui tabel sau ale unei coloane care nu pot fi setate la crearea tabelului sau coloanei n DAO numai prin folosirea propriet|ii Attributes, n ADO setarea lor se face cu aceeai proprietate, iar echivalena ntre propriet|ile DAO i ADO se dau n continuare sub form| tabelar|. n noul model de date unele propriet|i au r|mas n ADO iar altele sunt specifice furnizorului Microsoft Jet.
Valoare
Attributes Attributes
dbAttachExclusive dbAttachSavePWD
adVarWChar
Valoare
0264-401667
NU COPIA !.
387
Attributes Attributes
dbAttachedTable dbAttachedODBC
Type
"LINK"
http://www.east.utcluj.ro/mb/mep/antal
Type
"PASS-THROUGH"
Valoare
n exemplul prezentat proprietatea ParentCatalog a obiectului Catalog este setat| la cea a furnizorului nainte de setarea propriet|ii AutoIncrement la valoarea True din colecia Properties. Crearea unui tabel legat
Codul urm|tor leag| n baza de date Northwind.mdb tabelul cu numele Clienti din baza de date bdnoua2000.mdb. Pentru aceasta se va deschide baza de date Northwind.mdb, iar codul care urmeaz| va fi introdus i lansat n execuie din cadrul acestei baze de date. Public Sub LegareTablecuADO() Dim cat As New ADOX.Catalog
0264-401667
NU COPIA !.
Legarea cunoscut| i sub denumirea de ataare a unui tabel dintr-o baz| de date extern| permite citirea, actualizarea i ad|ugarea datelor i crearea de interog|ri pe baza tabelului legat ca i cnd acesta ar face parte din baza de date. Pentru crearea unui tabel legat trebuie specificat| sursa datelor externe i numele tabelului extern. n ADOX, propriet|i specifice furnizorului Microsoft Jet sunt folosite pentru crearea leg|turii. La referirea coleciei Properties a obiectului Table nainte de ad|ugarea lui la colecia Tables trebuie setat| proprietatea ParentCatalog. Setarea este obligatorie pentru ca ADOX s| tie de la care furnizor OLE DB va primi informaiile legate de proprietate. Proprietatea Jet OLEDB: Link Datasource va stoca numai numele i calea c|tre baza de date care conine tabelul extern. Alte opiuni de conectare sunt specificate n proprietatea Jet OLEDB: Link Provider String, de exemplu aici se va specifica dac| este cazul numele de utilizator i parola lui pentru conectare la baza de date din care face parte tabelul extern.
388
cat.ActiveConnection = CurrentProject.Connection
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
Observai n codul de mai sus linia Dim cat As New ADOX.Catalog, aceasta este echivalenta liniilor: Dim cat As ADOX.Catalog
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
Odat| ce un tabel a fost creat se pot aduce modific|ri acestuia, astfel putem ad|uga sau terge coloane, schimba regulile de validare sau actualiza leg|turile c|tre tabele legate.
Codul care urmeaz| adaug| un cmp de tipul Memo tabelului Clienti din baza de date bdnoua2000.mdb. Public Sub AdaugaunCampADOX()
cat.ActiveConnection = CurrentProject.Connection
0264-401667
389
cat.Tables("Clienti").Columns.Append col
End Sub
n cazul tabelelor legate, dac| parola de conectare la baza de date sau poziia bazei de date pe disc care conine tabelele legate se modific|, de exemplu datorit| mut|rii acesteia ntr-un alt director, codul care urmeaz| va realiza legarea tabelelor dac| se va specifica noua parol| i noua cale c|tre baza de date. Public Sub ActualizareLegaturicuADO() Dim cat As New ADOX.Catalog Dim tbl As ADOX.Table
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
cat.ActiveConnection = CurrentProject.Connection
End If
Next
0264-401667
390
End Sub
n DAO obiectul QueryDef era folosit pentru ad|ugarea automat| a interog|rii la colecia QueryDefs. Obiectul Command este ntr-un fel echivalentul lui QueryDef, dar interog|rile create cu acesta sunt temporare. Ele trebuie explicit ad|ugate coleciei Views sau Procedures pentru ca acestea s| fie stocate n baza de date. Furnizorul Microsoft Jet definete 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 colecia Views Pentru c| n exemplul care urmeaz| interogarea este f|r| parametri i ntoarce nregistr|ri, obiectul ADO Command va fi ad|ugat coleciei ADOX Views.
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
http://www.east.utcluj.ro/mb/mep/antal
End Sub
Crearea unei interog|ri stocate n baza de date folosind colecia Procedures Public Sub CreareIntrogareStocatecuADO1() Dim cat As New ADOX.Catalog
cat.ActiveConnection = CurrentProject.Connection
0264-401667
NU COPIA !.
391
Pentru modificarea instruciunii SQL a unei interog|ri trebuie creat un obiect Command bazat pe interogarea de modificat din baza de date. Apoi se modific| proprietatea CommandText, iar n final se reseteaz| proprietatea Command a interog|rii dup| cum se vede n codul care urmeaz|: Public Sub ModificareIntrogareStocatecuADO() Dim cat As New ADOX.Catalog
Crearea unui obiect index necesit| folosirea obiectului ADOX Index. Dup| crearea obiectului, trebuie ad|ugat unui cmp, apoi se va specifica c| va fi cheie primar|, unic| i ordinea de sortare. n DAO exist| dou| propriet|i Required i IgnoreNulls care mpreun| determin| dac| vor fi sau nu inserate valori Null pentru cmpurile din index i dac| intr|rile index vor fi sau nu create cnd unele cmpuri ale unui index cu mai multe coloane conin valori Null. Tabelul care urmeaz| prezint| proprietatea ADOX IndexNulls comparativ cu cele din DAO.
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
392
Descriere Valoarea Null nu este permis| n cmpul index; nu se adaug| o intrare index. Valoarea Null este permis| n cmpul index; nu se adaug| o intrare index. Valoarea Null este permis| n cmpul index; se adaug| o intrare index.
False
True
adIndexNullsIgnore
False
False
adIndexNullsAllow
Public Sub CreeazaUnIndexADOX() Dim cat As New ADOX.Catalog Dim tbl As New ADOX.Table Dim ind As New ADOX.Index
With ind
.Name = "PrimaryKey"
.Columns.Append "IDClient"
End With
tbl.Indexes.Append ind
0264-401667
cat.ActiveConnection = CurrentProject.Connection
Implicit proprietatea IndexNulls este setat| la valoarea adIndexNullsDisallow ceea ce face ca valorile Null s| fie nepermise n index i nu se va ad|uga o intrare cu un index care are un cmp Null.
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
393
Set cat = Nothing Set tbl = Nothing Set ind = Nothing End Sub
Public Sub CreareRelatieADOX() Dim cat As New ADOX.Catalog Dim che As New ADOX.Key
Crearea unei relaii se face prin obiectul ADOX Key, care dup| crearea i setarea propriet|ilor lui se va ad|uga obiectului Tabel. Relaia din codul care urmeaz| se creeaz| ntre tabelele Categories i Products ale bazei de date Northwind.mdb. Aceast| relaie exist| deja n baza de date i va putea fi creat| din cod numai dac| deschidei fereastra relaiilor i o tergei nainte de lansarea n execuie a codului.
End With
cat.Tables("Products").Keys.Append che
End Sub
.UpdateRule = adRICascade
0264-401667
.Columns("CategoryID").RelatedColumn = "CategoryID"
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
394
Nume Tabel
Nume cmp
TFirme
IDFirma
Firma
Profil
TPolite
IDPolita
IDFirma
Tip/Propriet|i
0264-401667
Baza de date se va numi curs15.mdb. Des - i este scris| n Access 2002, ea funcioneaza 7 i n Access 2000. Se vor crea trei tabele, TFirme, TPolite i TRate, toate cmpurile vor fi de tipul, implicit, Text, mai puin cele care sunt enumerate n continuare:
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
395
TRate
IDRata
IDPolita
http://www.east.utcluj.ro/mb/mep/antal
Observai c| exist| dou| regiuni n formular, cea de sus, n care datele sunt prezentate mai sumar, motiv pentru care se poate alege o form| de afiare care s| cuprind| mai multe firme i cea de jos, n care pentru fiecare firm| selectat| n regiunea de sus se vor afia toate detaliile clientului. Formularul p|rinte se numete FFirme, pe suprafa| lui vor fi puse dou| subformulare care vor avea aceeai surs| de date, tabelul TFirme i care vor fi sincronizate ntre ele. Formularul p|rinte nu are surs| de date. Din acest motiv proprietatea Record Source va fi vid|, iar pentru c| f|r| date nu sunt necesare nici instrumentele de navigare propriet|ile corespunz|toare navig|rii vor fi setate la valorile din tabelul care urmeaz|:
0264-401667
NU COPIA !.
396
Proprietate Scroll Bars Record Selectors Navigation Buttons Dividing Lines Border Style On Open Neither No No No Dialog
Valoare
n vederea sincroniz|rii celor dou| subformulare se folosete proprietatea Recordset care reprezint| sursa de date (Record Source) pentru cele dou| subformulare. Aceast| proprietate
http://www.east.utcluj.ro/mb/mep/antal
permite citirea sau scrierea nregistr|rilor manipulate printr-un formular sau subformular. Pentru a lega subformularele sf1 i sf2 la aceeai surs| de date, n vederea sincroniz|rii lor, s-a pus linia Set Forms!FFirme!sf2.Form.Recordset = Forms!FFirme!sf1.Form.Recordset pe evenimentul On Open a formularului principal. Menionez c| aceast| metod| de sincronizare funcioneaz| numai n Access 2000 i 2002. n figura anterioar| se prezint| formularul FFirme n modul proiectare. n versiunile anterioare de Access formularul p|rinte afia subformularele sub forma unor
0264-401667
NU COPIA !.
397
Pentru subformularul sf1 proprietatea Default View are valoare Datasheet. Pentru subformularul sf2 urma 7 toarele proprieta 7ti sunt modificate: Default View Single Form, Record Selectors No, Navigation Buttons No, Dividing Lines No. Proprietatea Record Source este, pentru ambele subformulare, setat| la TFirme. sf1 va avea vizibile numai controalele corespunza 7 toare cmpurilor Firma, Adresa, Telefon1. Toate celelalte controale vor fi ascunse cu ajutorul lui Hide. De asemenea, pe evenimentul Double Click a formularului corespunz|tor lui sf1 se va scrie codul: Private Sub Form_DblClick(Cancel As Integer) If Not IsNull(Forms!FFirme!sf1.Form.IDFirma) Then DoCmd.OpenForm "FFirma", , , , , acDialog,E Forms!FFirme!sf1.Form.IDFirma End If End Sub
nainte de a trece la discutarea celui de al doilea formular, doresc s| prezint modul de creare a unui meniu Popup care s| permit| sortarea nregistr|rile din sf1 cresc|toare sau descresc|toare. Tehnologia de realizare a meniurilor este aceeai n toat| gama de aplicaii Office ncepd cu Office 97. selectai pe rnd View, Toobars, Customize;
clic pe butonul New, introducei n fereastra de dialog New Toolbar, Sortare, care va fi numele noului meniu (vezi figura
0264-401667
NU COPIA !.
7 ri a subformularului sf1, va Acesta, la realizarea unui clic dublu, pe selectorul de nregistra duce la deschiderea formularul cu numele FFirma (care nca 7 nu exista 7 ). De asemenea, se va transmite ca argument, noului formular deschis, coninutul cmpului Forms!FFirme!sf1.Form.IDFirma din subformularul sf1. Valoarea va fi folosit| pentru a deschide formularul TFirme1 avnd 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 conin date comune. n cazul exemplului prezentat este vorba despre coninutul lui IDFirma. Deschiderea formularului FFirma este condit -ionata 7 de existent -a unei valori n controlul IDFirma. Testarea existent -ei acestei valori se face colosind funct -ia IsNull().
http://www.east.utcluj.ro/mb/mep/antal
dreptunghiuri albe. ncepnd cu Access 2000, subformularele sunt i ele afiate n modul proiectare. Observai c| acestea sunt afiate complet, dei teoretic ar trebui s| fie un pas nainte, practic spaiul alocat subformularului este mic fiind aproape imposibil s| acion|m asupra controalelor lui. i pentru a face lucrurile i mai incomode este imposibil s| deschidem un subformular ntr-o fereastr| separat| ct timp formularul p|rinte este deschis. Problema se poate rezolva numai dac| deschidei prima oar| subformularul i apoi formularul p|rinte. n aces caz subformularul va fi afiat ca un dreptunghi alb n formularul p|rinte, dar va putea fi 7 uor n propria lui fereastr|. editata
398
urma 7 toare);
http://www.east.utcluj.ro/mb/mep/antal
, acesta este
noul meniu . n continuare urmeaz| s|-i complet|m elementele; realiznd clic pe butonul Commands a ferestrei de dialog Customize vor fi afiate toate comenzile care pot fi inserate n noul meniu. n cazul nostru, nainte de a trece mai departe trebuie s| mai realiz|m urm|toarele: 1. Realizai un modul nou cu numele de Sortare care s| conin| codurile funciilor urm|toare: Public Function SortareCrescatoare()
Forms!FFirme!sf1.Form.OrderByOn = True
Forms!FFirme!sf1.Form.OrderBy = "[" &E Screen.ActiveControl.Name & "] ASC" Set Forms!FFirme!sf2.Form.Recordset =E Forms!FFirme!sf1.Form.Recordset End Function
Forms!FFirme!sf1.Form.OrderByOn = True
Forms!FFirme!sf1.Form.OrderBy = "[" &E Screen.ActiveControl.Name & "] DESC" Set Forms!FFirme!sf2.Form.Recordset =E Forms!FFirme!sf1.Form.Recordset
0264-401667
NU COPIA !.
399
End Function
Forms!FFirme!sf1.Form.OrderByOn = False Forms!FFirme!sf1.Form.OrderBy = "" Set Forms!FFirme!sf2.Form.Recordset =E Forms!FFirme!sf1.Form.Recordset End Function 2. Realizai urm|toarele macro-uri:
Observai c| fiecare macro va lansa n execuie o funcie corespunz|toare unei intrari n meniul pe care urmeaz| s|-l construim (ultimul macro n-a mai fost prezentat mai sus, el va lansa n execuie funcia SortareDescrescatoare()). realizai clic cu butonul din dreapta pe noul
http://www.east.utcluj.ro/mb/mep/antal
meniu
apoi, selectai
Customize; selectai pe Commands i apoi pe All Macros, n fereastra Commands (vezi fereastra ala 7 turata 7 ) vor fi afiate cele trei macro-uri; folosii tehnica drag-and-drop pentru a trage numele acestor macro-uri pe suprafaa noului meniu pentru ca el s| fie de forma:
0264-401667
NU COPIA !.
400
pentru asocierea noului meniu Popup controlului sf1 se intr| n modul de editare al formularului p|rinte, apoi al subformularului i proprietarea Shorcut Menu Bar a subformularului va fi setat| la Sortare (vezi figura urm|toare).
dac| ne poziion|m acum undeva pe suprafaa lui sf1 i facem clic pe butonul din dreapta meniul Sortare va fi afiat sub forma:
http://www.east.utcluj.ro/mb/mep/antal
meniului, ap|sai butonul Properties i setai proprietatea Type a meniului la Popup. Acceptat -i mesajul de avertisment dat de Access s - i vet -i vedea ca 7 meniul dispare din lista meniurilor. Daca 7 dorit -i sa 7 -l mai modificat -i, selectat -i Customize, Toolbars, Properties, iar n Selected Toolbar ca 7 utat -i si selectat -i numele Sortare, apoi setat -i pe Type la Menu Bar si meniul va deveni vizibil din nou.
0264-401667
NU COPIA !.
401
Private Sub Form_Open(Cancel As Integer) Dim IDFirma As Long If Not IsNull(Me.OpenArgs) Then IDFirma = CLng(Me.OpenArgs) DoCmd.GoToControl "IDFirma"
http://www.east.utcluj.ro/mb/mep/antal
Am v|zut deja c| la realizarea unui dublu clic pe selectorul de nregistr|ri din sf1 a formularului FFirme, formularul TFirme1 va fi deschis avnd ca nregistre curent| firma pe care 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 parametru celui care urmeaz| s| fie deschis valoarea din cmpul IDFirma. Al doilea formular (TFirme1) are scris codul care urmeaz| scris n procedura de eveniment OnOpen pentru poziionarea pe nregistrarea cu acelai IDFirma. Evenimetul Open apare cnd un formular este deschis, dar nainte de afiarea nregistr|rilor. La prima deschidere a unui formular evenimentele care apar sunt: Open - Load - Resize - Activate - Current.
0264-401667
NU COPIA !.
402
Formularul FFirma este prezentat n figura urma 7 toare. Observai c| pe suprafaa 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 pe tabelul TPolite, iar sf2 pe tabelul TRate. Ambele subformulare vor avea proporietatea Default View setat| la Datasheet. Pentru afiarea sau introducerea datelor n mai multe tabele care se afl| ntr-o relaie 1-M (one-to-may) pot fi folosite subformulare. Un subformular este un formular legat de formularul din care face parte putnd fi afiat n modurile foaie de date (Datasheet view) sau
http://www.east.utcluj.ro/mb/mep/antal
Valoarea parametrului IDFirma este stocat| n proprietatea OpenArgs a formularului care se deschide prin metoda OpenForm. Daca 7 proprietatea OpenArgs cont -ine o valoare atunci se va ga 7 si nregistrarea care are acea valoare n controlul IDFirma. Pentru aceasta prima oara 7 , folosind metoda GoToControl, se va muta focusul pe controlul IDFirma din formular. n continuare, prin folosirea metodei FindRecord, se va ga 7 si nregistraeea care are n controlul curent valoarea specificata 7 n primul argument.
formular (Form view). Din punctul lor de vedere subformularele sunt formulare, dar din punctul de vedere al formularului p|rinte sunt simple controale. Pot fi create prin mai multe metode, cea mai simpl| este tehnologia drag-and-drop, adic| se selecteaz| un formular din
0264-401667
NU COPIA !.
403
La crearea unei referine prin cod ntre un formular i un subformular sunt importante numai numele formularului i al controlului subformular, adic| valorile propriet|ilor Name. n acest sens numele subformularului coninut n proprietatea Source Object nu este folosit nic|ieri pentru referirea controlului de tip subformular. Subformularul este doar un control i de multe ori numele acestuia va fi diferit de cel al numelui formularului coninut n subformular. Pentru a referi un subformular al unui formular se folosete proprietatea Form a controlului subformular de referit astfel: Forms![NumeFormular]![NumeControlSubformular].Form.
0264-401667
NU COPIA !.
Proprietatea Parent este folosit|, n procedura anterioar|, pentru a accesa pe IDPolita din formularul p|rinte.
n condiii normale se pot crea leg|turi numai ntre formularul p|rinte (principal) i subformulare. n cazul nostru este nevoie de crearea unei leg|turi speciale pentru a putea sincroniza o nregistrare din subformularul polielor cu nregistr|rile corespunz|toare ratelor de pl|tit pentru o anumit| polit|. Pentru aceasta este nevoie de un artificiu. Pe suprafaa formularului pa 7 rinte se pune un control Text care va fi Unbound pentru ca nu va avea trecut nimic la proprietatea Control Source. La fiecare trecere pe o nregistrare nou| n subformularul sf1 valoarea acestui control va fi actualizat|, n acelai timp numele acestui control va fi trecut cu mna n propriet|ile LinkChildFields i LinkMasterFields ale subformularului sf2. Actualizarea valorii controlului IDPolita se realizeaz| prin procedura de tratare a evenimentului On Current n subformularul sf1 astfel:
http://www.east.utcluj.ro/mb/mep/antal
fereastra bazei de date, apoi se trage pe suprafaa unui formular p|rinte. Dac| ntre tabelele celor dou| subformulare s-au definit relaii Access va crea automat leg|tura ntre formularul p|rinte i subformular. n cazul nostru leg|tura ntre formularul p|rinte i sf1 se face prin propriet|ile LinkChildFields i LinkMasterFields care vor fi setate la valoarea IDFirma. Aceste propriet|i controleaz| relaia dintre formularul p|rinte i subformular respectiv modul n care acestea interacioneaz|. Numai dac| aceste propriet|i sunt setate corect deplasarea pe o alt| nregistrare n formularul p|rinte va duce la deplasare pe noile nregistr|ri corespunz|toare i n subformular. O alt| modalitate de creare a unui subformular este cea deja discutat| prin selectarea controlului Subform din cutia cu instrumente (Toolbox).
404
Dac| dorim s| referim un control cu numele NumeControlSF al subformularului care are numele de control NumeControlSubformular atunci putem folosi formele de scriere: Forms![NumeFormular]![NumeControlSubformular].Form.!E NumeControlSF Forms("NumeFormular")("NumeControlSubformular").Form.E Controls("NumeControlSF") Observai c| sintaxa este destul de complicat|, pentru ca s| nelegei motivul acestei scrieri trebuie s| tii c|: caracterul punct (.) se folosete numai pentru a prefaa propriet|i sau metode i nu obiecte ale unei colecii; caracterul semn de exclamare (!), n momentul prelucr|rii expresiei, se transform| ntr-un set de paranteze rotunde i de ghilimele n jurul obiectului, astfel scrierea: Forms!NumeFormular!NumeSubformular este echivalent| cu urma 7 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
http://www.east.utcluj.ro/mb/mep/antal
Pn| acum majoritatea codului a fost orientat pe sincronizarea ntre formulare. Ad|ugarea de date ntr-un formular este o operaie care trebuie s| decurg| sigur i f|r| erori. n aces scop scrierea unui cod care s| genereze setul de date care se dorete a fi introdus n tabele devine esenial|. n formularul FFirma, la ap|sarea butonului Adauga, se va realiza introducerea
n cazul formularului FFirma un caz particular este cel n care subformularul sf1 nu are nregistra 7 ri. Secvent -a 7 de cod care urmeaza 7 se va atas - a evenimentului On Current. Ea va fort -a disparit -ia ntregistra 7 rilor afis - ate n subformularul sf2.
0264-401667
NU COPIA !.
405
Dataazi
http://www.east.utcluj.ro/mb/mep/antal
automat| de date n tabelele TPolite i TRate. O singur| nregistrare va fi ad|ugat| n TPolite i una sau mai multe n TRate. Precum se observ| n figura anterioara 7 , unele date sunt preg|tite n avans (data primei rate care este data curent| i data urm|toarei rate care este la o lun| de la 7 rul de rate al data curent|; numele firmei care n acest formular nu se poate modifica; numa poliei care trebuie s| fie cel puin 1) i pentru a ndruma utilizatorul cu privire la valorile care trebuie introduse, ns| exist| posibilitatea modific|rii lor n funcie de necesit|i.
Dataaluna Dataaan
Firma
n continuare se vor prezenta dou| moduri de scriere a codului care realizeaz| nscrierea n tabele, primul folosind DAO i al doilea folosind ADO. Pentru p|strarea simplit|ii codului am preferat s| nu lucrez cu tranzacii dei problema se preteaz| la o astfel de programare ntruct aciunile de ad|ugare trebuie f|cute ntr-o anumit| ordine (pentru p|strarea integrit|tii refereniale) i nu se pot ntrerupe pentru a se face individual i independent. n figura de mai sus au fost scrise numele controalelor folosite n procedurile vor fi prezentate. Pentru controalele care au valori iniiale i restricii severe de valori care pot fi trecute n locul celor init -iale prezint propriet|ile care trebuie s| fie setate. Fereastra propriet|ilor unui control este "mai ciudat|" ntruct exemplul a fost scris n Office XP.
0264-401667
NU COPIA !.
Dup| completarea tuturor controalelor formularului FNou, la ap|sarea butonului Nou, noile -i ca 7 , n figura de mai sus, date vor fi generate i ad|ugate n cele dou| tabele. Observat 7 rii controlul de tipul Text Box, cu numele Firma, apare invalidat, ca urmare a seta proprieta 7tii Enable la No. De asemenea, cele doua 7 subformulare, corespunza 7 toare polit -elor si ratelor vor avea setate, la nivel de formular, proprietatea Allow Additions la No. Aceasta va opri introducerea directa 7 a datelor de la tastatura 7 n aceste subformulare act -iunea fiind 7 , exclusiv, doar prin folosire formularului FNou. posibila
406
http://www.east.utcluj.ro/mb/mep/antal
Prima variant| de cod prezentat| folosete DAO. Principiul de funcionare a codului va r|mne acelai i n cazul implement|rii cu ADO. Variabilele da i du sunt folosite pentru stocarea datei de azi i a datei pentru urm|toarea rat|. Din diferana acestor date se poate calcula num|rul de zile ntre rata curent| i cea care urmeaz|. Pentru realizarea operaiilor
0264-401667
NU COPIA !.
407
Dim db As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim t As String Dim da As Date Dim du As Date
http://www.east.utcluj.ro/mb/mep/antal
aritmetice cu date VBA are funcii speciale, n cazul acesta diferen| dintre dou| date este calculat| folosind funcia DateDiff() n linia 33. n liniile 14 i 16 funcia DateSerial() este folosit| pentru a crea o valoare de tipul dat| plecnd de la o dat| "spart| n zi, luna i an". Liniile 35-46 adaug| o nregistrare n tabelul TPolite, iar liniile 50-66 adaug| una sau mai multe nregistr|ri n tabelul TRate prin intermediul ciclului while controlat prin num|rul de rate stocate n variabila Rate. n DAO, ultima nregistrare ad|ugat| se poate g|si prin folosirea propriet|ii LastModified (vezi linia 44), aceasta ntoarce un Bookmark prin care se poate g|si valoarea lui IDPolita care se genereaz| automat (ntruct are tipul Autonumber). Prin aceast| valoare se creeaz| leg|tura ntre TPolite i TRate, deci n cmpul cheie str|in| din TRate aceast| valoare va trebui s| fie aceeai pentru toate ratele asociate unei anumite polite.
20 MsgBox "Data PRIMEI RATE trebuie sa fie mai mica (<)E 21 decit data RATEI URMATOARE", vbCritical, "Eroare la E 22 introducerea datelor" 23 24 25 26
Exit Sub
End If
If IsNull(Forms!FNou!Rate) Then
0264-401667
NU COPIA !.
408
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
t = "TPolite"
rs1.AddNew
rs1!Data = Forms!FNou!Data
Rate = Forms!FNou!Rate
rs1!Polita = Forms!FNou!Polita
http://www.east.utcluj.ro/mb/mep/antal
27 MsgBox "Numarul de rate trebuie obligatoriu E 28 completat", vbCritical, "Eroare la introducerea numarului E 29 de rate"
NU COPIA !.
c = 1
t = "TRate"
Else
0264-401667
409
62 63 64 65 66 67 68 69 70 iesire: 71 72 73 eroare: 74 75
Exit Sub
76 End Sub
Secvena de cod care urmeaz| realizeaz| aceeai aciune cu cea anterioar|. Exist| ns| o foarte mare diferen| fa| de cea anterioar| datorit| modului de lucru a metodei Update din ADO. Dac| n cazul lui DAO nregistrarea curent| trebuia g|sit| prin folosirea lui LastModified, aici, nregistrarea curent| r|mne curent| i dup| apelarea metodei Update. Din acest motiv n linia 45 s-a scris IDPolita = rs1!IDPolita imediat dup| aplicarea metodei Update.
http://www.east.utcluj.ro/mb/mep/antal
2 3 4 5 6 7 8 9 10 11 12
Dim rs1 As ADODB.Recordset Dim rs2 As ADODB.Recordset Dim t As String Dim da As Date Dim du As Date
0264-401667
NU COPIA !.
410
17 18
19 MsgBox "Data PRIMEI RATE trebuie sa fie mai mica (<)E 20 decit data RATEI URMATOARE", vbCritical, "Eroare la E 21 introducerea datelor" 22 23 24 25
If IsNull(Forms!FNou!Rate) Then
29 30 31 32 33 34 35 36
t = "TPolite"
rs1.AddNew
0264-401667
NU COPIA !.
rs1.CursorLocation = adUseClient
26 MsgBox "Numarul de rate trebuie obligatoriuE 27 completat", vbCritical, "Eroare la introducerea numaruluiE 28 de rate"
http://www.east.utcluj.ro/mb/mep/antal
411
49 50 51 52 53
rs2.CursorLocation = adUseClient
Else
End If
Rate = Rate - 1
Forms!FFirma!sf1.Requery Forms!FFirma!sf2.Requery
77 iesire: 78 79
Exit Sub
80 eroare: 81 82
0264-401667
rs2.Close
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
412
83 End Sub
Aplicaia va avea dou| interog|ri (Restantieri i Restantieri1) care sunt prezentate n figurile care urmeaz|. Pe baza primei interog|ri se va crea un formular cu numele FRestantieri (prezentat n modul proiectare) pentru afiarea celor care au restant -e la plata ratelor.
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
413
n cele ce urmeaz| vor fi create dou| rapoarte i un meniu principal pentru aplicaie. Observai c| nu exist| nc| butoane pentru deschiderea rapoartelor aceast| operaie devenind posibil| prin intermediul sistemului de meniuri. Cele dou| rapoarte care vor fi create sunt prezentate n modul proiectare:
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
414
ncepei realizarea unui meniu Toolbar nou cu numele Meniu. Creai pe rnd articolele de meniu Fisiere, Formulare, Rapoarte. Clic pe File din lista Categories a lui Commands, apoi clic pe meniul Fisiere, el se va desf|ura, f|r| sa 7 conin| articole. Folosind tehnica drag-and-drop tragei articolele prezentate n figura care urmeaz| din lista Commands pe suprafaa liber| a meniului pn| cnd va fi Clic pe butonul din dreapta si modificat -i pe Name: la Fisiere
drag-and drop
deforma:
http://www.east.utcluj.ro/mb/mep/antal
pe articol i selectnd din lista ap|rut| pe Properties pentru a rescrie textul meniului (proprietatea Caption) din limba englez| n limba romn|.
Uneori ntre articolele aceluiai meniu pot sa 7 apar| linii de separaie orizontale. Acestea sunt afiate la activarea propriet|ii Begin a Group Ea face ca articolul curent sa 7 fi separat, de cel anterior, printr-o linie orizontal| gri.
Articolelel unui meniu pot fi precedate de un simbol grafic. Exista 7 cteva simboluri predefinite care se pot selecta din Change Button Image. Daca 7 acestea nu sunt suficiente, noi simboluri pot fi create prin selectarea lui Edit Button Image ... .
0264-401667
NU COPIA !.
415
http://www.east.utcluj.ro/mb/mep/antal
Proprietatea Caption
, observai c| pe lng|
Modificai numele articolelor din meniurile Formulare respectiv Rapoarte dup| cum urmeaz|: FFirme $ Firme, FFirma $ Polite/Rate, FRestantieri $ Restantieri, RTFirme $ Firme, TFirme $ Restantieri. Selectai propriet|ile meniului Meniu, apoi realizai set|rile din figura care urmeaz|. Cea mai important| dintre ele este tipul meniului care de la Toolbar a fost schimbat n Menu Bar. Dup| realizarea set|rilor meniul se poate trage (prin drag-and-drop) deasupra meniului Access-ului, iar celelalte meniuri pot fi ascunse astfel nct aplicaia s| aib| un singur meniu.
0264-401667
NU COPIA !.
rescrierea textelor n limba romn| au fost definite meniurile Formulare i Rapoarte, acestea nca nu conin articole. Selectnd din Commands pe All Forms respectiv pe All Reports completai cele dou| meniuri astfel:
416
http://www.east.utcluj.ro/mb/mep/antal
Meniu
n final, din meniul Tools selectai Startup i realizai set|rile din figura ala 7 turata 7.
0264-401667
NU COPIA !.
417
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
Observai c| fereastra bazei de date nu mai este afiat|. Dac| aplicaia este pornit| innd ap|sat| tasta Shift efectul este numai cel de deschidere a bazei de date f|r| aplicarea set|rilor din Startup. Acest mod de pornire va fi folosit dac| dorim s| mai aducem mici modific|ri bazei de date finale.
0264-401667
449
Dei n cadrul lucr|rii au fost prezentate i utilizate cele mai populare instruciuni VBA lista lor este mult mai lung|. n cele ce urmeaz| mi propun s| prezint, ntr-o form| foarte sumar|, un set mai extins al intruciunilor VBA f|r| a le acoperi pe toate fiind omise cele "obscure" sau rar utilizate.
Instruciune
AppActivate
titlu, asteptare
Activeaz| o aplicaie n curs de execuie cu titlul sau ID de task specificat n titlu. Emite un semnal sonor folosind difuzorul. Apelarea procedurii nume. ntruct acelai lucru se poate obine numai prin folosirea lui nume instruciunea Call este folosit| destul de rar. Schimb| directorul curent la cel specificat n cale. Schimb| discul curent la cel specoficat n disc. nchide unul sau mai multe fiiere de intrare/ieire deschise cu instruciune Open i identificate prin listanrfiiere.
Beep Call
nume, listaargumente
ChDir
cale disc
ChDrive Close
listanrfiiere
Const
NUMECONSTANTA
Date
= data
http://www.east.utcluj.ro/mb/mep/antal
Descriere
NU COPIA !.
Dim
numevariabil|
Do ... Loop
DoEvents
Transfer| controlul sistemului de operare pentru ca acesta s| poat| prelucra eventualele evenimente asincrone ap|rute (ap|sare de taste, clic de mouse). Termin| o procedur|, funcie sau o structur| de control.
End
cuvntcheie tablou
Erase
Elibereaz| memoria dinamic| alocat| unui tablou sau reiniializeaz| un tablou de m|rime fix|. Seteaz| pe Err (starea erori curente) la num|reroare.
Err
= num|reroare
Declare
nume
0264-401667
450 Error
num|reroare
Simuleaz| o eoare prin setarea lui Err la valoarea num|reroare. Ieirea dintr-o procedur|, funcie sau o structur| de control. Copiaz| fiierul cu numele surs| n cel cu numele destinaie. Parcurge toi membrii unei colecii. Reia parcurgerea unei instruciuni sau al unui grup de instruciuni pn| cnd un contor ajunge la o valoare impus|. Declar| o funcie definit| de utilizator. Citete un fiier de intrare/ieire deschis prin instruciunea Open n variabila numevariabil|.
Exit
FileCopy
Function Get
#nrfiier, numevariabil|
GoTo
linie
Input
#nrfiier, list|variabile
Kill Let
cale
numevariabil| = expresie
Face ramificarea i revenirea dintr-un subprogram n cadrul unei proceduri. Salt necondiionat la linia de program linie. Execut| una dintre cele dou| seciuni de cod n funcie de rezultatul unui test logic. Citete date n list|variabile dintr-un fiier de intare/ieire.
Line Input
#nrfiier, var
Load
Lock
LSet
LSet
var1 = var2
Copiaz| o variabil| cu tipul definit de utilizator ntr-o alt| variabil| cu tipul definit de utilizator diferit. nlocuiete caracterele dintr-o variabil| de tipul String prin caracterele dintr-un al ir.
Mid
0264-401667
NU COPIA !.
Seteaz| valoarea variabilei numevariabil| egal| cu cea a lui expresie. Let este opional i n practic| aproape c| nu se mai folosete.
http://www.east.utcluj.ro/mb/mep/antal
451 MidB
nlocuiete date, la nivel de octet, ntr-o variabil| de tipul String prin caracterele unui alt ir. cale Creeaz| directorul (directory sau folder) specificat n cale. Redenumete un fiier sau un director. Specific| o rutin| de tratare a erorilor. Face ramificarea pe o linie pe baza valorii unei expresii. Deschide un fiier de intrare/ieire. La nivel de modul determin| valoarea implicit| de nceput pentru limita de jos a tablourilor. La nivel de modul determin| modul implicit de comparaie ntre iruri.
MkDir
Name
numevechi As numenou
Open
cale, etc.
Option Private
#nrfiier
Private
numevariabil|
Property Get
Option Explicit
Foreaz| programatorul s| declare toate variabilele folosite ntr-un modul. Specific| caracterul privat al unui modul acesta neputnd fi accesat de procedurile din afara modulului. Scrie date ntr-un fiier de intrare/ieire. Declar| variabila cu numele numevariabil| privat| ea putnd fi utilizat| numai n modulul n care s-a declarat.
Property Set
Public
numevariabil|
Face variabila cu numele numevariabil| disponibil| n toate procedurile unui modul. Scrie date din numevariabil| ntr-un fiier de intrare/ieire.
Put
#nrfiier,numevariabil| num|r
Randomize
Iniializeaz| generatorul de numere aleatoare. Dac| num|r este omis de fiecare dat| se obine o nou| valoare. Realoc| memoria unui tablou alocat dinamic.
ReDim
numevariabil|
Property Let
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
452 Rem
comentariu
Reset
nchide toate fiierele de intrare/ieire deschise cu Open. Dup| o eroare, reia execuia programului din linia care a cauzat eroarea. vezi Gosub ... Return.
Resume
cale
varsir = sir
SaveSetting
numeaplicaie, etc.
Select Case
SendKeys
sir, durat|
Set
varobiect = obiect
SetAttr
cale, atribute
NU COPIA !.
Static
Stop Sub
Time Type
= timp
numevariabil|
Unload
Descarc| un formular definit de utilizator din memorie. Anuleaz| controlul accesului la un fiier de intrare/ieire.
Unlock
#nrfiier, domeniunreg
0264-401667
numevariabil|
Seek
#nrfiier,poziie
Seteaz| poziia curent| ntr-un fiier de intrare/ieire. Execut| un grup de instruciuni dintre mai multe grupuri pe baza valorii unei expresii. Transmite o "ap|sare de tast|" definit| prin sir aplicaiei active. Atribuie pe obiect unei variabile de tipul Object cu numele varobiect. Atribuie atributele specificate prin atribute unui fiier specificat prin cale.
Declar| o variabil| cu numele numevariabil| care va reine valorile stocate n ea tot timpul ct codul VBA se execut|.
http://www.east.utcluj.ro/mb/mep/antal
Spune lui VBA c| linia care urmeaz| este un comentariu. Caracterul apostrof ( ' ) are aceeai semnificaie fiind i mult mai des folosit.
453 Width
#nrfiier, width
Atribuie o l|ie unei linii de ieire ntr-un fiier de intrare/ieire. Execut| un grup de instruciuni pentru un obiect specificat. Scrie date ntr-un fiier de intrare/ieire.
Write
#nrfiier
http://www.east.utcluj.ro/mb/mep/antal
0264-401667
NU COPIA !.
454
F|r| a se dori un grupaj de cele mai utile funcii, n cele ce urmeaz| doresc s| prezint cteva din grupurile de funcii VBA folosite mai des la scrierea aplicaiilor Access. Explicaiile sunt sumare, dar dac| numele unei funcii a fost identificat n listele prezentate se poate folosi fiierul help VBA pentru explicaii mai detaliate i exemple de utilizare ale ei.
Funcie
CBool(expresie) CByte(expresie) CCur(expresie)
Funcii de conversie
Valoare ntoars|
expresie convertit| la o valoare Boolean. expresie convertit| la o valoare Byte. expresie convertit| la o valoare Currency. expresie convertit| la o valoare Date. expresie convertit| la o valoare Double. expresie convertit| la o valoare Integer. expresie convertit| la o valoare Long. expresie convertit| la o valoare Single. expresie convertit| la o valoare String. expresie convertit| la o valoare Variant.
CVErr(nreroare)
Valoare ntoars|
Date$()
DateAdd(interval,
num|r, dat|)
Valoarea Date derivat| prin adunarea a num|r de intervale de timp (intervalul de timp poate fi o zi, o lun|, un an etc.) lui dat|.
DateDiff(interval, DatePart(interval,
Num|rul de intervale de timp ntre data1 i data2. Un interval (zi, lun| , an etc.) a lui data.
0264-401667
CVDate(expresie)
NU COPIA !.
expresie convertit| la o valoare Date. Exist| numai din motive de compatibilitate cu versiunile anterioare.
http://www.east.utcluj.ro/mb/mep/antal
455 DateSerial(an,
luna, zi)
Ziua pentru data specificat|. Ora pentru timp-ul specificat. Minutul pentru timp-ul specificat. Luna pentru data specificat|.
Data i ora curent| a sistemului. Secunda pentru timp-ul specificat. Ora curent| a sistemului ca Variant. Ora curent| a sistemului ca String. Num|rul de secunde trecut de la miezul nopii.
TimeSerial(ora,
minut, secunda)
Valoare Date definit| prin ora, minut i secunda. Valoare Date a irului timp.
Ziua din sapt|mn| corespunz|toare lui data. Anul pentru data specificat|.
Valoare ntoars|
http://www.east.utcluj.ro/mb/mep/antal
DateValue(data)
NU COPIA !.
Err
Error(num|reroare)
Mesajul de eroare, de tipul Variant, care corespunde lui num|reroare. Mesajul de eroare, de tipul String, care corespunde lui num|reroare.
Error$(num|reroare)
Valoare ntoars|
CurDir(disc)
CurDir$(disc)
0264-401667
456 Dir(cale,
atribute)
Dir$(cale,
atribute)
Numele fiierului sau directorului, ca i String, specificat prin cale care satisface atributele opionale atribut (de exemplu vbHidden). ntoarce Null dac| directorul sau fiierul nu exist|.
True
EOF(nrfiier) FileAttr(nrfiier,
atins.
tipntors)
Modul (intrare, ieire, ad|ugare, binar etc.)n care a fost deschis fiierul (dac| tipntors = 1) sau handle-ul fiierului (dac| tipntors = 2) specificat prin nrfiier. Data la care fiierul specificat prin cale a fost creat sau modificat ultima oar|.
FileDateTime(cale)
FileLen(cale)
FreeFile(num|rdomeniu)
Urm|torul num|r de fiier disponibil pentru instruciunea Open. Un ntreg reprezentnd atributele fiierului specificat prin cale. Poziia curent| de citire/scriere, ca i Long, ntr-un fiier de intrare/ieire deschis. M|rimea, n octei, a fiierului identificat prin num|rfiier.
GetAttr(cale) Loc(nrfiier)
LOF(num|rfiier)
Seek(num|rfiier)
Shell(cale,
stilfereastr|)
Funcii financiare
Funcie
Valoare ntoars|
DBB(cost,
Deprecierea unui obiect ntr-o perioad| specificat| folosind metoda de calcul cu pant| dubl| (doubledeclining method).
FV(rata,
IPmt(rata,
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Numele fiierului sau directorului, ca i Variant, specificat prin cale care satisface atributele opionale atribut (de exemplu vbHidden). ntoarce Null dac| directorul sau fiierul nu exist|.
457 IRR(valori,
MIRR(valori,
NPer(rata,
NPV(rata,
Pmt(rata,
PPmt(rata,
PV(rata,
Rata(nper,
SLN(cost,
slavare, via|)
Funcii matematice
Funcie
Abs(num|r)
Valoare ntoars|
http://www.east.utcluj.ro/mb/mep/antal
Rata modificat| intern| de plat| pentru o serie de plai i facturi. Num|rul de perioade pentru o investiie sau un mprumut.
Valoarea net| prezent| a unei investiii pentru o serie de pl|i i facturi cu o rat| de reducere. Plata periodic| pentru un mprumut sau o investiie. Plata principal| pentru un mprumut sau o investiie. Valoarea prezent| a unei investiii.
Rata dobnzii periodic pentru un mprumut sau o investiie. Deprecierea folosind metoda liniei drepte (straight-line depreciation) a unui obiect pentru o perioad|.
NU COPIA !.
Partea ntreag| a lui num|r. Dac| num|r este negativ ntoarce primul num|r negativ mai mare sau egal cu num|r.
Valoarea hexazecimal| a lui num|r ca i Variant. Valoarea hexazecimal| a lui num|r ca i String.
Partea ntreag| a lui num|r. Dac| num|r este negativ ntoarce primul num|r negativ ntreg mai mic sau egal cu num|r. Logaritmul natural a lui num|r.
Valoarea octal| a lui num|r ca i Variant. Valoarea octal| a lui num|r ca i String.
Atn(num|r)
0264-401667
Un num|r aleator.
Codul ANSI al primului caracter din ir. Octetul corespunz|tor primei litere din ir. Caracterul Unicode al primului caracter din ir. Caracterul, c| i Variant, care corespunde codului ANSI specificat prin codcaracter. Caracterul, c| i String, care corespunde codului ANSI specificat prin codcaracter. Octetul care corespunde codului ANSI al lui codcaracter. Caracterul Unicode care corespunde codului ANSI al lui codcaracter.
Chr(codcaracter)
Chr$(codcaracter)
ChrB(codcaracter)
ChrW(codcaracter)
InStr(start,
ir1, ir2)
ir1, ir2)
Poziia, n octei, corepunz|toare primei apariii ale lui ir2 n ir1 ncepnd cu start.
lungime)
lungime caractere din stnga lui ir ca i Variant. lungime caractere din stnga lui ir ca i String. lungime octei din stnga lui ir ca i Variant. lungime octei din stnga lui ir ca i String.
Left$(ir, LeftB(ir,
lungime) lungime)
LeftB$(ir,
lungime)
0264-401667
NU COPIA !.
Poziia, n caractere, corepunz|toare primei apariii ale lui ir2 n ir1 ncepnd cu start.
http://www.east.utcluj.ro/mb/mep/antal
Valoare ntoars|
Un ir Variant far| spaiile din partea stng|. Un ir String far| spaiile din partea stng|. lungime caractere, ca i Variant, ale lui ir plecnd de la nceput. lungime caractere, ca i String, ale lui ir plecnd de la nceput. lungime octei, ca i Variant, ale lui ir plecnd de la nceput. lungime octei, ca i String, ale lui ir plecnd de la nceput. lungime caractere din dreapta lui ir ca i Variant. lungime caractere din dreapta lui ir ca i String. lungime octei din dreapta lui ir ca i Variant. lungime octei din dreapta lui ir ca i String.
Mid$(ir, MidB(ir,
MidB$(ir, Right(ir,
Right$(ir, RightB(ir,
lungime) lungime)
RightB$(ir, RTrim(ir)
lungime)
RTrim$(ir)
Space(num|r)
Un ir, ca i Variant, cu num|r spaii. Un ir, ca i String, cu num|r spaii. Reprezentarea n format de ir, ca i Variant, a lui num|r.
Reprezentarea n format de ir, ca i String, a lui num|r. O valoare care indic| rezultatul comparaiei lui ir1 cu ir2.
StrComp(ir1,
ir2, comp)
caracter)
String(num|r,
0264-401667
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
caracter)
caracter, ca i String, repetat de num|r de ori. Un ir, ca i Variant, f|r| spaiile din stnga i dreapta lui ir. Un ir, ca i String, f|r| spaiile din stnga i dreapta lui ir.
Alte funcii
Funcie
Choose(index,
CreateObject(clasa) Environement(ir
| num|r)
Format(expresie,
sirformat)
Array(listaargumente)
Un tablou Variant coninnd valorile din listaargumente. Selecteaz| i ntoarce o valoare a unui argument dintr-o list| de argumente. Un obiect Automation de tipul clasa. O valoare String care reprezint| variabila de mediu a sistemului de operare specificat prin ir sau num|r. expresie ca i Variant converit| conform lui sirformat.
http://www.east.utcluj.ro/mb/mep/antal
Valoare ntoars|
NU COPIA !.
GetAllSettings(numeap,
sectiune)
GetObject(cale,
clasa)
Obiectul Automation specificat prin cale i clasa. Extrage o setare din Registry.
GetSettings(numeap, IIf(expr,
etc.)
ntoarce partetrue dac| expr este True, altfel partefalse. num|r caractere Variant ale fiierului de intrare/ieire specificat prin nrfiier. num|r caractere String ale fiierului de intrare/ieire specificat prin nrfiier.
Input(num|r,
Input$(num|r, InputB(num|r,
#nrfiier) #nrfiier)
Format$(expresie,
sirformat)
0264-401667
461 InputB$(num|r,
#nrfiier) etc.)
num|r octei String ale fiierului de intrare/ieire specificat prin nrfiier. Cere utilizatorului introducerea unei informaii.
True True True True True
InputBox(ntrebare,
dac| numevariabil| este tablou. dac| expresie poate fi convertit| la o dat|. dac| expresie nu a fost iniializat|. dac| expresie este o valoare de eroare.
IsMissing(numeargument)
IsNull(expresie)
dac| expresie este irul nul (""). dac| expresie este un num|r. dac| expresie este un obiect.
IsNumeric(expresie) IsObject(expresie)
LBound(numetablou,
dimensiune)
Cea mai mic| valoare de indice posibil| pentru tabloul definit prin numetablou. butonul pe care utilizatorul l-a selecata din fereastra de dialog.
MsgBox(ntrebare,
etc.)
Partition(num|r,
ntoarce un ir care indic| locul n care num|r apare ntr-un grup de domenii. ntoarce codul RGB al culorii care corespunde lui culoare (un num|r ntre 1 i 15).
QBColor(culoare) RGB(rou,
verde, albastru)
Tab(n)
Poziioneaz| ieirea pentru instruciunea Print# sau pentru metoda Print. Un ir care specific| tipul de dat| al variabilei numevariabil|.
TypeName(numevariabil|)
Cea mai mare valoare de indice posibil| pentru tabloul definit prin numetablou.
Switch(expr1,
valoare1, etc.)
Evalueaz| expresiile (expr1 etc.) i ntoarce valoarea asociat| (valoare1 etc.) primei expresii care se evalueaz| ca True.
0264-401667
http://www.east.utcluj.ro/mb/mep/antal
NU COPIA !.
462
NU COPIA !.
http://www.east.utcluj.ro/mb/mep/antal
Anexa 2 - Lista principalelor funct -ii VBA
0264-401667