Documente Academic
Documente Profesional
Documente Cultură
ILIE COAND
CZU 004.6 (075.3) 58 Descrierea CIP a Camerei Naionale a Crii Coand Ilie Access: Ghid de iniiere (proiectarea i utilizarea Bazelor de Date) / Ilie Coand; Academia de Transporturi, Informatic i Comunicaii. - Ch.: Evrica, 2001 (Tipogr. AM). - 100 p. Seria Teorie Economic, Matematic, Informatic ISBN 9975-941-81-8 1000 ex. 004.6 (075.3)
Lucrarea constituie descrierea unor elemente necesare i suficiente pentru elaborarea proiectelor Bazelor de Date. ntr-un mod accesibil, cu explicarea noiunilor strict necesare, n baza exemplelor de creare a Bazelor de Date, se demonstreaz tehnologia proiectrii. Includerea noiunilor noi prin exemple de folosire a acestora, n scopul de a mbunti n continuare performanele acelorai Baze de Date se presupune a fi destul de util att pentru lrgirea posibilitilor pe orizontal, care permit gestionarea informaiei mai diverse i mai complete, ct i pe vertical, care permit includerea unor noi obiecte, ce asigur exploatarea Bazei de Date la un nivel mai sigur i mai comod la utilizare. Cartea este adresat elevilor, liceenilor, studenilor, cadrelor didactice - tuturor celor care doresc s-i nsueasc ntr-un timp scurt noiunile eseniale i s deprind cele mai simple tehnologii de proiectare a Bazelor de Date n mediul Access din Microsoft Office.
Lucrarea a fost realizat n cadrul Institutului de Matematic Aplicat i Informatic al Academiei de Transporturi, Informatic i Comunicaii. Seria Teorie Economic, Matematic, Informatic Redactor: Dumitru Solomon, Academician al Academiei Internaionale de Informatizare, Doctor habilitat Autor: Ilie Coand, confereniar, Doctor n tiine fizico-matematice
Argument
ARGUMENT
aarea Bazelor de Date (BD) la gestionarea informaiei n diverse domenii ale -i istre devine din ce n ce mai insistent. Apariia pe pia a pachetului Vlkrra>of Office, care include i aplicaia Access, un soft destul de convenabil i - .; : aenani oricare, a accelerat simitor implementarea proceselor automatizate de Trei i datelor. e, ca o BD s funcioneze eficient n favoarea utilizatorului, acesta din irs.i i : : e. n primul rnd, s cunoasc bine modul ei de exploatare, precum i cele ~ -j :: "_mte principii de funcionare a ei. De asemenea, utilizatorul trebuie s fie ..." - ' i cont de posibiliti i necesiti, s fac unele modificri pentru a se :<aa i i lucreze i n alte condiii, similare celor iniiale. Pentru un utilizator mai . x.portant este s cunoasc i cele mai simple elemente i tehnici de : : c i _nei BD. a~ma vedere, condiiile descrise mai sus pot prea, pentru majoritatea .: . : : : greu de realizat. Aceast carte are intenia de a spulbera astfel de preri. 1s&zi posesia unui calculator este o realitate pentru majoritatea celor care se a. i.3-1 i : : ucrarea informaiei oriunde ar activa. Dou lubruri simple pot lipsi: ae i-i organiza mai eficient lucrul cu volume mari de informaie i deinerea a ra -a r asemenea acestuia. Astzi la dispoziia noastr snt puse destul de multe - : - : aespre BD, de la cele mai simple pn la cele mai complicate tehnici de i in _ unei BD. ns cu greu vei putea gsi unul, care, fr a v familiariza cu un : liiiiii- r e ie noiuni noi i complicate, s v conduc ntr-un mod clar la proiectarea . ' - D : -ie, care, ct de ct, s constituie un exemplu de nceput i s v conving .. . : _ :;i _~ei BD este un lucru accesibil i pentru dumneavoastr. . zarea metodei de cunoatere de la simplu la compus pentru proiectarea unei KD : ir. venit pentru nceptori, de aceea pe parcursul expunerii materialului, iu ic i>:i 'snt explicate n msura necesitii i la momentul utilizrii acestora. :i_' de proiectare a unei BD este prezentat iniial prin crearea celei mai g ii |pig i a care conine doar o singur tabel. Apoi se extrage i se analizeaz :, a n ea. Ulterior se ajunge ia concluzia c mai este nevoie de folosit i alte aa:.r....: s asigure informaie mai detaliat. Se demonstreaz ntr-un mod accesibil : am :: a:e realiza acest lucru. Se explic cum trebuie de procedat la modificarea BD a.:a.r. antele cresc. Astfel, cititorul va fi ndrumat spre a nelege din ce n ce : : irnnicile de proiectare a unei BD.
Argument
Volumul lucrrii date permite studierea tehnicilor de proiectare a BD utiliznd un numr relativ mic de elemente i noiuni din Access. ns instrumentele folosite n modul de utilizare practic i concret snt suficiente pentru a nva proiectarea unei BD simple. S fim contieni c proiectarea unei BD poate fi privit ca o activitate de creaie. Dou baze de date pot pstra i furniza aceeai informaie, ns, dup structur i dup modul de exploatare, ele pot fi cu totul diferite. M aterialul lucrrii este repartizat n lucrri de laborator, fiecare avnd un anumit scop. Repartizarea este foarte relativ i depinde, n mod direct, de capacitatea cititorului de a realiza cele expuse timpul rezervat pentru o lucrare de laborator. Atenionm c studierea noiunilor i a tehnicilor de proiectare trebuie fcut anume n ordinea n care este expus materialul. La sfritul fiecrei lucrri este prezentat o list de ntrebri, probleme, discuii, care vor spori eficiena studierii, cititorului oferindu-i-se posibilitatea de a-i ncerca forele la proiectarea i a altor obiecte.
Lucrarea de iaborator nr. 1 1. C ite va etape principiale la nceputul proiectrii unei Baze de Date " - Hi S se proiecteze o baz de date (BD) care ne-ar ajuta s facem un : ~ : u al informaiei despre mrfurile vndute pe parcursul unei perioade. Ne ^ ;rem o BD, care ne-ar da posibilitate s analizm, n orice moment, : sir. : :i e pentru fiecare tip de marfa vndut. - r : scop, mai nti, trebuie s stabilim urmtoarele: .:'nd s se ia la eviden informaia despre vnzri?Rspunsul poate fi la fiecare operaie de vnzare s se fac nregistrrile cu informaia : : i Astfel s-a ajuns la concluzia ca imediat, dup sau poate chiar n ~ :~ : . inzrilor, s se nregistreze informaia necesar i suficient pentru a : ms -iaunde la ntrebrile formulate. 1 s fie nregistrat informaia? Una dintre cele mai obinuite i comode : j t nregistrare este forma de tabele. Deci informaia poate fi nregistrat n mbele. : laicele vor fi necesare? De regul, ntr-o tabel se conine informaie ..: la un grup de particulariti ale unui obiect, proces etc. n cazul nostru - ' : a despre informaia referitoare la vnzri. Prin urmare, pentru acest proces 11 : r - cerca s folosim doar o singur tabel. :: : e i obinuit const din coloane (n terminologia BD coloanele se numesc i rnduri (informaia dintr-un rnd ntreg al unei tabele se numete 'ir ;: i;e l De regul, ntr-o coloan se introduce informaie omogen, de acelai : ::: rindurile. Cte coloane va avea tabela i ce fel de informaie va fi n i nire ele? Lund n consideraie condiiile problemei, rspunsul poate fi JL-Tiiii:. tabela urmeaz s conin 5 coloane pentru informaia despre : e i mrfii, unitatea de msur, data vnzrii, cantitatea i preul, : I :c im stabilit c vom avea doar o singur tabel i c ea va conine coloanele ^ H ir o ta ia respectiv, este util s se fac o mic analiz, pentru a stabili dac ~ ~ f ' gur tabel este suficient. n cazul dat, problema formulat este simpl, i r. : e comod i suficient s folosim doar o singur tabel, compus din cele 5 - : m e. In care vom nregistra informaia precizat mai sus. .....^nentiil n care am determinat rspunsurile, cel puin la aceste 5 ntrebri, : I crearea unei Baze de Date noi. ' . funcie de versiunea pachetului M icroSoft Office, dup activarea i l ..... \ceess (mediul Access poate f activat n diferite moduri: se poate face un : - 1 >: r.;ia cu denumirea respectiv din meniul Program s din S tart sau* se^poate : 7..i :: respectiv de pe Desktop), pe ecran pot s apar diferite imagini X } "t -":V": * de lucru. De fiecare dat trebuie s acionm conform indicaiilor i ire a lii :* : >:nse. n funcie de scop. n fig. 1.1 este prezentat imaginea la prima ::: cescr.idere a Access-ului. Observm n ea mai multe opiuni, dintre care, : t* i " doar una este potrivit, i anume, opiunea Blank Access Database. : : ci ;: 5ie mediul pentru crearea unei Baze de Date noi.
Atragem atenia c pentru nceptori ar fi foarte bine s studieze cu atenie imaginile i comentariile ataate la fig. 1.1-1.7. ncercai s creai Baze de Date, deocamdat goale, cu aceleai (sau alte) denumiri i n diferite directorii, apoi, folosind tehnica din Windows, s modificai denumirile, s le copiai n alte directorii, s le lichidai definitiv. n aa mod vei nsui bine gestionarea fiierelor de tip mdb. S trecem la aciuni concrete pentru proiectarea unei Baze de Date noi. innd cont de comentariile din fig. 1.1-1.3, n versiunea Access-2000, sau din fig. 1.4-1.7, n versiunea Access-97, acionm respectiv ca s obinem o imagine asemntoare cu cea din fig. 1.8, desigur, la nceput, far informaia respectiv completat. Citii cu atenie comentariile din fig. 1.8 i completai informaia n modul respectiv, pentru a obine ntocmai ceea ce este n ea. Imaginea din stnga apare n versiunea Access-2000. Avem posibilitatea de a deschide una dintre bazele de date deja Create a new database using create. n acest scop trebuie de activat opiunea Open an existing file (aa cum este artat aici), apoi de fcut un click pe vizards, pages; and proje QdejJW Tfire din :ta ataat cu denumirile Tierelor,j^C de fapt, snt nite baze de un click pe butonul OK, BD, fiierul respectiv, va fi deschis. n care dorii s creai o baz de date More Files nou, treBtrk^ictivat opiunea respectiv A:\planificare zi\planificare zi A:\planificare\planificare zi Blank Access database, apoi - OK. F:\planificare zi\planificare zi Exist i alte modaliti de deschidere a F:\planificare ff\planificare ff unei baze de date, de exemplu, cu dublu click pe denumirea fiierului. Fig. 1.1. Opiunile n prima etap de lucru n mediul Access.
'^M y Documents Computer Network Places ^Shortcut to 3.5 Floppy (A) Shortcut to DOS (C)
'O O C U f f le n f c S
Dup ce am determinat c intenionm s crem o baz ie date nou, adic, dup ce am acionat n modul deSmmai sus, pe ecran apare urmtoarea imagine (n Access-^, n aceast etap trebuie s artm locul unde dorim caBa^a de Date nou s fie salvat. n acest scop acionniici. Apoi atribuim un nume pentru Baza de Date n curs de proiectare, introducem numele^ici, avem grij ca ajci s fie indicat infoprfaia respectiv^pcfi acionm butonul Create. Jtentru a evita cop&fii, trebuie s fim aj atribuirea Bazei de Date^&gTs nu coincid cu v reu n o ra creat i salvf^falte directorii. 18 re a te
Zj
Cancel
Fferjame:
|db2
Imediat dup acionarea butonului Create, apare fereastra u imaginea din fig. 1.3. n aceast etap, cnd Baza de Date^ste^goal, nici un obiect nu este creat, ni se ofer trei opiuniT^ste-^blaes ncepei cu crearea unei tabele n y'egimul de proiect (D esgl^k^Observai butoanele Open, Design, New, care pot fi ac^nate^entru a ncepe proiectarea unei tabele noi, trebuie de acionatNew entru a deschide proiectul unei tabele deja proiectate, ale^bfiaDesign, iar pentru a o deschide cu afiarea datelor din ea S fim ateni ca s fie activat pagina cu obiectele respectv&^Dac se lucreaz cu tabelele, atunci trebuie s fie activat abeast pagin -- lista tipurilor de te din care poate fi construit o Baz de Date n Access^ZOOft^omparai-o cu lista de obiecte respective din versiunea Acbesscg? (fig. 1.7). Fcnd cte un click pe fiecare denumire din aceast list, vom obine lista cu obiectele deja create de tipul dat. Fig. 1.3. Fereastra de baz a bazei de date db2.
C re a t e a N e w D a ta b a s e U sin g
Q a ta b a s e W iz a rd
n fig. 1.4 este artat imaginea care apare n Access-97, corespunztoare cu cea din fig. 1.1. Aceasta este lista celor mai recent d#s6mse Baze de Date.
Fig. 1.4. Prima imagine la activarea Access-ului-97. S avein ; jw J fffT ^: ^jD o22 V ]F 3ez222 : ^jFaez222s
zl
Imaginea n Access-97, corespunztoare celei din fig. 1.2. Atenionm c diferenele snt minifne. De fiecare dat, la deschiderea unei Baze de Date, trebuie s fim ateni la ceea ce ni se propune i s alegem opiunea potrivit, innd cont de stogurile concrete. n cazul dat, Baza de ^Dal^W^va fi salvat, creat n directoriul nff.
Datasheet V
T able'W ^ ar Im port Tatii*
Link Table
Imaginea n Access-97 corespunztoare celei din fig. 1.3. Observm componentele comune .sens, ns plasate diferit. Lista de paginheu^obiecte este plasat aici orizontal, acrte^-vertical. Atragem atenia c caseta New table apare dup acionarea butonului New, apoi putem alege o opiune din list. Ateniei urice obiect deja creat poate fi deschis n regim de proiect (Design View) pentru &modific structura iui.
Fig. 1.6. Alegerea opiunii Design View la proiectarea unei tabele noi.
1Tablei : Table
I Reports ] 3 Macros j ^
PagirnleTculista de obiecte de tipurile Tjjt icord; h i Queries care pot fi create n Accgs&^L La nceputul a b le l : T a b le crerii BD toate paginilej^ft^goale. Dac vom alege I Field Name I Data Type I Description M opiunea DataSheeHfiew, atunci vom obine Field Properties imaginea asemntoare cu aceasta, iar opiune Design View asigur imaginea-proiec n sr a l ILookup )
Fig. 1.7. Alegerea opiunii respective la crearea unei tabele noi.
O dat creat aa-zisul fundament al bazei de date, se poate trece la o etap nou: organizarea introducerii continue a informaiei. La prima vedere, totul pare destul de simplu, clar i evident, ns modul n care vom organiza procesul de introducere a informaiei va determina volumul de erori, date introduse greit etc. la nregistrarea informaiei. Iat de ce, n etapa de proiectare a tabelei, este util s folosim, cel puin, unele dintre cele mai simple, mai accesibile procedee de verificare a informaiei. n cazul nostru, putem pune sub control cantitile i preurile controlnd ca valorile s fie pozitive, iar data vnzrii s fie introdus n mod automat i s coincid cu data zilei curente. Acest lucru poate fi asigurat dac determinm proprietile n modul indicat (fig. 1.8). n acest caz concret, pentru coloana C ant se pune o restricie: valorile trebuie s fie pozitive, fapt artat prin Validation rule >=0, iar mesajul Cantitatea trebuie s fie >=0 va aprea imediat pe ecran n cazul cnd va fi vreo ncercare de a introduce valori negative. Cifra 0 (zero) n rndul Default value arat c valoarea 0 (zero) n coloana C ant se va nregistra n mod automat. Pentru a asigura nregistrarea automat a datei curente, e necesar de selectat rndul DataVinz i de scris funcia care calculeaz data zilei curente Date() n rndul Default Value.
Vnzri: Table
Field Name Den UnMas* DataVif Cant Pret Data Type
w
Description I
| Vv
Vomzafi :
I Desi
\
100 20.7 30 50.25 100 30 50.5 0
1M
1UnMas I Dat&ViiiJ * 1
General I ookup Field Size Format Decimal Places Input Mask Caption Default Value Validation Ruli Validation Texo Single Auto
0 >0
^ 4 R e c o r d ; I {
\ >*\ of 7
30 5 2 25 3 2 5 0 zJ
Tabela Vinzari Ia etapa de proiect. nainte de aavea posibilitatea de a introduce informaia n tabel, este necesar de a determina coloanele i tipurile de date n ele. n cazul nostru, se planific 5 coloane, cu denumirile indicate n coloana Field Name i cu tipurile de date respective indicate n coloana Data Type.
TabelaWmzari inl^m de tabel, care conine o m careva inwmMie. Atragem atenia: n coloanele Deibi UsiMas se conine inforhaaie de tip Text, m'sqloanele Cant i Pret -Nnformaie de tip Number (numr), iar n DataVinz informaie de tip Date/Time conform tipurilor de date artate n coloana Data Type din figura din stnga,
Atenie. Atunci cnd selectm un alt rnd n coloana Field Name (vezi imaginea din stnga fig. 1.8), lista de proprieti, afiate puin mai jos n aceeai imagine-proiecL poate fi alta i, pentru fiecare cmp, trebuie de ales proprietile cuvenite. Aceasta
nseamn c fiecare coloan din tabela care o proiectm poate avea setul su stabilit de proprieti. Introducerea datelor poate fi organizat n diverse moduri. Ne vom opri la cel mai simplu mod, care ntru totul ne convine. Deschidem tabela (selectm tabela n fereastra bazei de date, acionm butonul Open (deschide)) i pe ecran apare tabela gata pentru a primi informaia. Introducerea informaiei n cazul dat este un proces simplu, trebuie doar s fim ateni la ceea ce introducem. Se presupune c informaia introdus este cea indicat n fig.1.8, partea din dreapta. Aceast tabel poate fii completat n momentul vnzrii n fiecare zi. In aa mod vom reui s nregistrm informaia necesar la timpul potrivit. Deci, pentru asigurarea pstrrii informaiei primare despre vnzri, persoana competent trebuie s introduc toat informaia care se cere conform coloanelor din tabela proiectat. In scopul de a v nsui la nivelul cuvenit proiectarea tabelelor: 1) proiectai aceeai tabel atribuindu-i un alt nume; 2) facei o copie a unei tabele create, ca i n sistemul Windows; 3) deschidei n imagine de proiect o tabel deja creat i ncercai s schimbai locul unor coloane (se procedeaz asemenea ca la copierea informaiei n W ord); 4) facei modificri n tipurile de date pentru unele coloane i analizai rezultatul; 5) modificai formatul datelor, n special, al datei calendaristice; 6) exersai cu introducerea datelor, lichidarea informaiei din cteva rnduri, lichidarea total a informaiei din tabel; 7) introducei informaie care contravine condiiilor puse la proiectare i analizai modul de afiare a mesajelor; 8) introducei cmpuri noi; 9) copiai cteva nregistrri dintr-o tabel n alta (se face ca n Word); 10) modificai dimensiunile coloanelor n tabele (se face ca i n Excel); 11) deschidei n fereastra de baz paginile Quieries, Forms, Reports, Macros, Modules ca s v convingei c snt goale.
ntrebri i probleme
1. Care obiect poate fi considerat element al fundamentului unei BD? 2. Cum se atribuie denumirile unei coloane? 3. Ce este un tip de date al unui cmp? 4. Cum putem modifica tipurile de date la un cmp? 5. Ce este i cum poate fi folosit For mat-ui? 6. Ce este o restricie i cum poate fi atribuit? 7. Cum putem modifica ordinea coloanelor? 8. Cum putem modifica denumirea unei tabele? 9. n cte forme de imagini putem deschide o tabel? Care ar putea fi cmpurile, dac am dori s crem o tabel cu informaia despre: 1) vnzri la un magazin de nclmin te; 2) mprumutri de cri la o bibliotec; 3) persoane pentru o cltorie turistic; 4) transmiterea unor mrfuri dintr-un depozit n altul; 5) achiziionarea unor produse de la populaie.
Lucrarea de laborator nr. 2 1.2. rea ea obiectelor de tip Select Query (cerere, interpelare) 51 .cclm s crem o cerere, care ne-ar afia rspunsul la problema formulat iierirs& ie Laborator precedent. Atenionm c9 dup cum vom vedea mai trziu, :r ; i ; : : - : : lem poate f rezolvat doar prin crearea unei singure cereri. : : Irr. pagina Queries din fereastra BD curent, acionam butonul New i pe icrm ti. :cdne o imagine asemntoare cu cea din fig. 1.9 ~ fereastra cu imagineai~ jr : cereri. Selectm tabela Vinzari, apoi acionm butonul Add (sau facem : ,: l : :.:k pe denumirea tabelei), dup care nchidem cutia Show table. In . : uii-t, :1c :nd cte un dublu click pe denumirile coloanelor din lista Vinzari, vom i iimacrjea din fig. 1.3. Confirm c acionm n BD Labor.
. * *Q L iC Ji |
Macros
Modules
Tables | ~
Lista din care a fost trecut lista cmpurilor. Queries j Both | f.... :
flose
jf
Fereastra-proiect a unei Select Query, numele Queryl. ista cu denumirile coloanelor (cmpurilor) din tabela adugat Vinzari. De aici vor fi copiate n gridul cererii, rndul Field. Fig. 1.9. Imaginea-proiect a unei cereri (Select Query). :! La nceput imaginea aprut nu va conine rndul Total din Gridul r,rc -i aduga, facem un click pe 2 (totals) din bara cu butoane respectiv " grid se va insera rndul Total cu Group By n fiecare coloan (cmp). ir ce fcut cte un click n fiecare coloan, n zona din dreapt a celulelor, r : : :es:a Group By i, din lista aprut de fiecare dat, de selectat cuvntul i i apar aa cum e artat n fig. J .10. , : : din fig-1-10 este o cerere de tip Select, care are un cmp calculat, cmpul Zr: se obine rezultatul nmulirii numerelor din coloana (cmpul) Cant cu acife raoana (cmpul) Pret n fiecare rnd (nregistrare, record) din tabela V1 jffliiam riL .. : eres:a Group by din celula (Den, Total), coloana Den, rndul Total din : : roat informaia din tabel se divizeaz n attea grupe cte denumiri
4'
11
diferite avem n coloana Den. n cazul dat vom obine trei grupe: Lapte, Apa Carne, deoarece n coloana Den snt doar aceste trei denumiri diferite. Funcia Sum din (Cost, Total) semnific c se va calcula suma costurilor n fiecare grup, deci v o r avea trei sume rezultante. Funcia Avg din coloana Pret va calcula media aritmetic preurilor n fiecare grup. Funcia First din DataVinz va determina data din prima nregistrare din fiecare grup, iar funcia Last din UnMas - unitatea de msur din ultima nregistrare fcut n fiecare grup. Funcia Ascending (cretere) va sorti informaia n ordinea alfabetic a denumirilor din coloana Den.
'vdit ery Tools Window Help
.
I L *b c * : D a ta b a s e
It G& . . -
I j j
Reports
W
j 3
Macros ]
'
Forms
Mocjies
CSickam acest buton pentru a afia rezultatul cererii create. Ljsta din care se aleg netiile oentru Total.
Un cmp de calcul cu numele Cost: valoarea din Cant sfe nmulete
Fig. 1.10. Imaginea-proiect a unei Select Query cu calcularea sumelor totale pe grup. n aceast etap putem spune c am creat deja obiectul numit TotalGr - o cerere de tip Select, care n orice moment ne asigur afiarea pe ecran a rezultatului rspunsul la problema formulat la nceput. Adic ni se arat (vezi fig. 1.11) c Apa a fost vndut n sum de 420, Carne - 4256.25, Lapte ~ 356 de uniti bneti. Modul de funcionare a acestei BD: pe parcursul vnzri lor s se fac nregistrrile respective n tabela Vinzari; cnd dorim s aflm ct s-a ncasat pentru fiecare tip de marfa vndut, trebuie doar sa selectm cererea TotalGr, apoi s acionam Open i rezultatul va fi afiat imediat pe ecran.
12
'
2l
& few
rfP Quepgg_j__(^1 _!__(-ftepniis-} TI M arm* 1 M odules -------- 1 Denumirea cererii create i salvat cu acest nume ' ^ r<si> G R ^ _____ Y --l^per Cererea a fost salvat, i s- fost select^tfs^a | : ickat Open i s-a obinut rezultatul.
^
06/05/01 05/05/01 06/05/01 i V fM lB M bf 3 V .
juc* ToMaBR - S e le c t Query . SB 1 Zmmm le o r s ; LastOfUtMas But.2L Kg L H1L d l SiisnOfCai 160 2.333333333 150.25 27.5 71.200001 5 c o st. 420 4256.25 356 1
:g. 1.11. Rezultatul cererii create (proiectul din fig. 1.10). " ii: I : -ai convins c cererea afieaz rezultate corecte, facei urmtoarele (de - 1.1 ; ~ 1 ~:" idei i deschidei cererea din nou i ncercai s dai explicaii): T ^ i:: doar ntr-un rnd o liter mare n aceeai liter mic n tabela Vinzari
'in s i i a u D e n .
1 liierii: : ; i: ntr-un rnd un spaiu gol n interiorul sau n faa unei denumiri din Bfet . i _are s analizm succint ce posibiliti ni se ofer prin utilizarea riteria i Or din Gridul cererii. Realizai urmtoarele: : :r:e a cererii TotalGr (selectai-o, agai-o i, innd CTRL apsat, ~ ^ : cu mouse-ul ntr-un loc liber (observai c de imaginea mouse-ului *-x aam t :eva cu semnul +), relaxai mouse-ul i vei avea o copie a cererii). Apoi .: > aenumirea, asemenea ca i la modificarea denumirii fiierelor, enumirea, de exemplu, TotalCarne. - - :: : ere rea TotalCarne n imagine de proiect (selectai aceast cerere, apoi r io a it Deagn). .: r .'.iul Criteria, coloana Den, cuvntul Carne, aa cum este artat n I ipci acionai butonul respectiv pentru a afia rezultatul. Explicai ismtjffini,. : -1 : copie, numii-o TotalCarneLapte, apoi deschidei-o n forma proiect - Carne O r Lapte n rndul Criteria, coloana Den sau Carne n rndul 1 .a Lapte n rndul Or, apoi clickai butonul pentru a vedea ce se obine. >: ibc:iTr :.a:a cnd nchidei cererea, rspundei cu Yes pentru a salva cererea
W M S3L
13
C riteria
0
Carne
__
Informaia din rndurile Criteria i Or este baza construirii expresiilor logice, care determin care informaie s fie afiat i care nu.
Wher/
nsriind condiiile logice n rndurile Total, Criteria i Or i selectnd corect funciile opionale respective din lista ataat celulelor din rndul Total n gridul cererii, avem posibilitate de a gsi rspunsuri la un numr destul de mare i variat de ntrebri despre vnzri (doar n cazul c rspunsul poate fi gsit n baza acestei unice tabele).
ntrebri i probleme
n care scopuri se proiecteaz cererile? Cum se ataeaz o tabela la o cerere? Ce este grid-ul cererii i cum se completeaz cmpurile? Cum poate fi modificat denumirea unui cmp? La ce se folosete rndul Criteria i Or din grid? Cum s facem ca s apar sau s dispar rndul Total din grid? Pentru ce i cum se aleg funciile n rndul Total din grid? Explicai folosirea informaiei din rndurile Sort, Show? Explicai cnd i pentru ce se folosesc funciile din lista ataat la rndul Total din gridul cererii. ' 10. Creai cereri pentru a afia informaia despre (un rnd din tabel corespunde / unei vnzri): ^ a) costul produselor la fiecare vnzare; b) costul crnii la fiecare vnzare; c) produse care au fost vndute la kg; d) produsele care au fost vndute ntr-o anumit zi; ^ e)^ costul total al produselor vndute ntr-o anumit zi; f) costul total al produselor vndute la un pre anumit; g) costultotal al produselor din carne vndute ntr-o anumit perioad; h) costul total al produselor din lapte i din came (luate mpreun) n dou zile anumite (zilele nu snt una dup alta).
O O ON
1. 2. 3. 4. 5. 6. 7.
Lucrarea de laborator nr. 3 \ E xem ple de Select Q u ery la rezo lv area p ro b lem elo r cabelei Vinzari create n modul descris n lucrrile de laborator : w: ~ crea cteva cereri. Astfel vom nsui mai profund tehnologia utilizrii x : exemple de cereri pentru a determina urmtoarele: i ; asrii la fiecare operaie de vnzare. : ire: Proiectm urmtoarea cerere:
ii?1 "
nilM uC : r
Zm r W E tm : * a r
B ac . *TL
UnMas Vinzari E
DataVinz Vinzari 0
Cant Vinzari 0
Pret Vinzari 0
cost: fcantipret]
ZJkm sm .
S t '" i liLjMpae 1
0 100 20.7
U n M as
~ ] D a t& V Im
I jlJiiifflptti __ 1 i .. IH I.il
cost
30 5 2 25 3
2
5
Observm c la 1 informaia din 3000 tabela Vinzari s-a 103.5 mai adugat nc 60 0 coloan, Cost .1256.25 . un cmp calculat 300 din cerere. 60 252.5
V^
'
1 u f ~casrilor n umia vnzrilor crnii n iuna mai i vnzrilor de ap n .iirl. B oi i i urs Proiectm cererea
! : Select Query
*---------------
Ilar
J n ria t
ftmmm
''rz& i
a
DataVinz Vinzari
Cant Vinzari
Pre Vinza
cost [cantllpret]
s !
0
>=801 /06/018 <=#30/06/01 $ 1
El
o : btine rezultatul (vezi tabela de mai jos). |e?jepf Of Cost Aman : Select Query ir"' " * " _ D Cant Pret DataYInz UnMas 05/05 100 30 K g I B
B ut.3L 053631 107/01 1 100 0 3
U M *11 c&st
3000 30d!
\LlJI---------
G : 1
1 ! *! o f 2
15
3,. ncasrile totale. Rezolvare. Proiectm cererea (imaginea din stnga). Vom obine rezultatul (imaginea din dreapta):
J otallncas : Select Query
HE3E3
T otal:
Sort:
Show C riteria
or:
A
cost: fcantl"fpretl
Record: l< I 4
4. ncasrile totale n fiecare zi. Rezolvare. Proiectm cererea. Obinem rezultatul (vezi tabela de mai jos).
T otalPezile : S e le c t Query
Field: Table: Vinzari Total: Group By Sort: A scending Show: Criteria: V - or: I H H i S l s i 0 T o ta lP e z ile : S e le c t Query
DaiaVbtz
06/01/01 05/03/01
Avg Min Max Count StDev Var
First
_c
mm.
US
Concluzie: Introducerea continu a informaiei curente despre vnzri n tabela respectiv i crearea doar o singur dat a unui numr suficient de cereri, conform necesitilor, asigur ntr-un mod destul de convenabil i rapid obinerea informaiei nesesare
-inixi Tables
Queries J [ Forms j 11 Reports j 3 Macros j ^ Modules j
Open
W rn
Fig. 1.6. Pagina Queries din Baza de Date Labor cu lista de cereri create.
16
n nrtbri i probleme
I. I fa: r ; : _ e i cnd nu trebuie inclus n gridul cererii rndul Total? I..fac rsocie folosit W here i cnd Group By? ; zl: : ferite proiecte i determinai care este deosebirea dintre folosirea ' up E 5 W here cu aceeai condiie logic n rndul Criteria. - I : rrc-.ie s folosim Last, First, Max? Dai exemple. 5. I . de folosire concomitent a rndului C riteria i a rndului Or, dar ici :i< rea rndului Total din grid. * : = i rect: s se foloseasc funcia Group By n cmpul Cod sau n cmpul t a i . - _ produs i de ce? Argumentai prin exemple. : r r necesar de folosit opiunea Expression n rndul Total din gridul 1 iwr . : cerere care poate rezolva o problem prin utilizarea doar aunui rnd i~ - - agice, rndul Criteria, apoi o alt cerere, care rezolv exact aceeai i n i~i_ cir care conine condiii i n rndul Criteria, i n rndul Or. ! ; .;mple de cereri cu Where, cu Group By i cu condiii logice, att "ir . cit i n Or. ii : :
Or
: _m se
* L. I .
: : - :ie de utilizare a funciei Count. ir: -portant ordinea coloanelor n cererile cu opiunea Group By? Dai
fcia: :;are este deosebirea dintre folosirea unei condiii logice n cmpul cu Group By n Total i folosirea aceleiai condiii logice cu opiunea ,.:c de G roup By. : .m.cereri care conin i Where, i Group By (n aceeai cerere) i j mi ~ : i u l de selectare. * : i : resiile logice conform condiiilor din rndurile Criteria i Or din piiHxatefe cererilor, lit : r : 1 e de utilizare a opiunii Average. L necesitatea utilizrii opiunilor respective n rndul Total. IU. a : : : e de utilizare a opiu ' i. E : iicai necesitatea utilizrii Group By n mai multe cmpuri.
17
1
But.2L Kg But.3L But.2L L Pachet 1kg Pachet0.5L
. Ap
; Came
1 50.25
. ^P .A ?*
Lapte
5
30
[ came
came j Lapte
>]
o '
15 . ___ 2.5 _
<1
of 10
1 |T | 0 0 inSord? ! V ii
Record:
l<| < j|
8 Hnj
Fig. 2.1. Tabelele Product i DetVinz n care a fost repartizat informaia din Vinzari. S proiectm o alt BD pentru rezolvarea problemei formulate n paragraful 1. n modul descris mai sus proiectm tabela DetVinz cu coloanele (cmpurile): Cod (cu informaie de tip Integer number sau Long Integer); Cant (numr de tip Single
18
D-ataVinz (cu tip de Date/Time). S nu uitm s fixm DefaultValue=Date() pentru : : oana DataVinz i Validation rule=>0 pentru coloana Cant. Proiectm i tabela Product cu cmpurile respective (fig. 2.1). S se in cont de rele artate i explicate n fig. 2.2. Dup ce tabelele DetVinz i Product au fost proiectate,deschidei-le i 'traducei informaia indicat n fig. 2.1 Proiectarea cererii pentru a rspunde Ia ntrebarea form ulat n problem a din paragraful 1: In funcie de versiunea pachetului Access, acionai nmodulrespectivpentru a ij unge n fereastra de proiect a unei cereri noi. La proiectarea tabelei Product m m cmpul ui Cod i se atribuie rolul de Cmp Cheie primar (Primary Key). Aceasta Text nseamn cel puin c codurile Text n aceast coloan nu se pot Number repeta, ceea ce se confirm i leld Propertie prin valoarea proprietii Genera! Indexed: Yes (No Field Size Long nt Facem un clicTtci /pentru a Duplicates). Atribuirea rolului Format selecta rndul, apoi fclickm de Cheie se face prin Auto Decimal Places butonul Primary Key pentru a selectarea mai nti a cmpului, Input Mask atribui, pentru a anula Caption astfel ca acest rnd sa fie atribuirea, mai repetm o dat. Default Value evideniat aa cum este artat Validation Rule n figura din stnga, apoi Validation Text Required No clickm butonul Primary Indexed Yes (No Duplicates) Key. Fig. 2.2. Proiectul tabelei Product.
Show Table
b e V in z :- ;
* Cod
Cant DataVinz
Icod
jden UnMas Pret
Tables
{IP
Queries
Both
Soft Show:
Diana:
- .
Au fost selectatg^fcfele DetVinz i T Produc^ataafe la cerere prin acionarea AddTCa rezultat apar listele cmpurilor chre jtomat prin linia de legtur, (ficai dac fiecare legtura a fost fcut^ko^ct. Deoarece este activ pagina Both, nista de obiecte disponibile pentru ataare la cererea care se proiecteaz snt i tabelele, i cererile. Acionm Close pentru a termina procesul de ataare a
obiectelor la cerere.
Pentru ca dou sau mai multe tabele s fie ataate corect la cerere, ele trebuie s fie legate ntre ele. Fiecare tabel trebuie s fie legat cel puin cu o alt tabel dintre cele ataate. Legtura dintre dou tabele poate fi fcut n diferite moduri ~ n mod automat sau manual, n mod permanent sau temporar .a.m.d. Pentru un nceptor este bine ca de fiecare dat cnd se proiecteaz o cerere nou legturile s se fac n mod manual i temporar. Cmpurile prin intermediul crora se face legtura trebuie s conin aceeai informaie dup sens. Nu denumirile cmpurilor snt importante, ci sensul datelor, care se conin n aceste dou cmpuri prin intermediul crora se leag tabelele. Pentru a lichida o legtur, se face un click pe linia de legtur; legtura devine mai pronunat semn c ea este selectat, apoi se apas tasta Delete. Pentru a lega doua tabele, agai cmpul respectiv dintr-o tabel i trasai-1 pe cmpul respectiv din cealalt tabel. La relaxarea mouse-ului apare linia de legtur. Dup ce am ataat toate obiectele la proiectul cererii, nchidem Fereastra Show table, verificm i corectm (dac este necesar) legturile, apoi completm rndul Field din gridul cererii cu cmpurile din listele ataate. Trebuie s obinem imaginea din fig. 2.4. n fig. 2.4 este redat imaginea cererii, care calculeaz rspunsurile la aceeai problem, rezolvat deja mai sus n alt mod. n acest caz, BD const din dou tabele. Dac analizm cu atenie proiectul cererii TotalGr i proiectul cererii TotalGrM, putem constata c ultimul este mai complicat. Da, este mai complicat pentru procesul de proiectare, deoarece a fost necesar de a folosi ca izvor de informaie dou tabele, ceea ce a condus la complicarea proiectrii. ns, acest mod de proiectare are o proprietate destul de eficient i mai comod pentru utilizatori - va fi cu mult mai uor i mai sigur de introdus informaia iniial.
TotalGiM : Select Query
!od
rteiu, cod Pretl: Pret Cant:Canl UnMasI: UnMc Den1: den Tabie: Product Product DetVinz Product Product ; -T o ta l *teup By Sum Max Last Last Soit 0 Show: 0 0 Criteria: n rndul Table^trfdenumirile tabelelor din care se or:
co$f[cant]x[pret Sum
3 0 1 E ia informaia n cmpul dat Semnui^acesta arat c acest cmp este marcat i va fi afiat pe ecran. Fig. 2.4. Proiectul cererii pentru rezolvarea problemei din paragraful 1.
20
. d Deni 1 Came
2 Came 3 Came 4 Lapte 5 Lapte 6 Apa j 7 Apa
UnMas 1 Kg:
Pachet 1Kg
Cantl
150.25 30
Protl
30 30 15 5 2.5 2 3
cost
4507.5 900 300 356 25 120 300
- [ | X Atragei atenia BataYmzl la denumirile 06/05/01 coloanelor: snt /05/01 cele noi, care au 11/06/01 fost introduse n 06/05/01 proiectul cererii, 11/05/01 desprite de 06/05/01 numele respectiv 05/06/01 prin semnul
acord; < j * 1 1
* | of 7 | m \r
den UnMas
Pentru a asigura ca numerele s apar cu un numr dat de semne zecimale dup virgul, facem un click dreapta npmpul respectiv, apare o
list n care
Field:
Table: Product Product
selectm
Total: Group By
Sort
Show: C riteria:
or.
Fig. 2.6. Stabilirea numrului de semne zecimale. n calitate de exerciii creai alte cereri pentru a rspunde la ntrebrile formulate r lucrrile de laborator precedente. ntrebrile snt aceleai, dar proiectele vor f diferite. Argumentai avantajele acestei variant de BD bazat pe dou tabele n comparaie cu BD bazat doar pe o singur tabel.
21
Atenie! La crearea cererilor nu este necesar de ataat toate tabelele. Le ataam doar pe acele de care avem nevoie i pe acele fr de care nu putem face careva
22
legaturi ntre tabele. Nu oricare dou tabele pot f i legate ntre ele. Uneori este nevoie ie ataat nc una sau mai multe tabele doar pentru a face legtura necesar dintre careva tabele date.
C a te g o rii : T a b le
Description Codul categorii un numar intreg Denumurea cate goriei, pina la 255 caractere Descrierea, pe ;curt, despre ceea ce se conine in FieldProperti ss
Generai j Lookup Field Size Format Input Mask Caption Default Value Validation Rule Validation Text Required Allow Zero Length Indexed
No No No
Cmpului CoCat i s-a atribui Cheia. Cmpurile DenCat i Descriere pot coni ne maximum \ 2 5 5 de caractere. n coloana Description se conine informaia care apare n partea de jos a ecranului Status Bar.
: fereastra (injterfaa)
Access4rftii. Deoarece n moipdntul dat ne aflam n )escriere (se vec^bara vertical), n status Bar apare exact ceea ce a fost scris in coloana Description n etapa de proiectare a tabelei ( fig. 3.1).
Categorii: Table
CodCat.
DenCat
0
{Descrierea, pe scurt, despre ceea ce se conine in acesstr categorie,
23
P r o d u c i ;' T a b l e Field N am e
"...
.
D a ta T yp e N um ber Text Text N um ber N um ber T " ----------- -Description
2 _ cod d en U nM as P re t O codcat
Field P ro p er Lookup Field Size F o rm at Decimal Places In p u t M ask C aptio n D e fa u lt Value V alidation Rule Validation T e x t R equ ired In d e x e d G en eral
Long In te g e r A u to
n ^ gol, lasfiritul lTS^k^fost adugat numele CodCat, apoi n coloana Data Type a fost ales tipul (un numr), iar n Description a fost nscris CoduS categoriei produsului dat informaie pentru Status Bar.
Fig. 3.4. Adugarea unui cmp nou n tabela Product. Dup ce ai adugat coloana CodCat, nchidei tabela cu alegerea Yes, apoi deschidei-o i introducei informaia respectiv n coloana nou aprut CodCat, aa cum este artat n fig. 3.5. Atenie! La nchiderea tabelei, dup ce ai fcut modificri n structur (adugarea unui cmp este o modificare a structurii tabelei), ai mai adugat o coloan, putei fi prentmpinat cum c careva date se pot pierde. Trebuie de selectat Yes, fiindc n cazul adugrii unui cmp nou informaia nu poate fi pierdut. Atragem atenia c, dac apare vreun produs nou dintr-o categorie nou, atunci, mai nti, se nregistreaz Categoria n tabela Categorii, apoi Produsul - n tabela
Product.
|1 wm
-- '
UnMas Pret 30 30 15 3
cod
den
1 Came
BenCat
Kg
Pachet lK g Pachet OJKg L Pachet 0.5L But. 2L But. 3L
2%
2 2
| Lactate 2 Came
5 Lapte
6 Apa 7 Apa
2.5
O
R e co rd : I 4 j f
2 3 O
\ h |> * 1 of 7
Informaia din coloanele CodCat (tabelele Categorii i Product ) este aceeai dup sens; prin intermediul cmpurilor Codcat se poate face legtura dintre aceste dou tabele. Mai nti se completeaz tabela Categorii, apoi
Product. Fig. 3.5. Tabela cu coloana CodCat completat conform tabelei Categorii.
24
Dup ce ai completat coloana CodCat n tabela Product, nchidei-o i, astfel, :oate tabelele vor fi gata pentru a proiecta noi cereri.
Remarc. n acest caz, BD este proiectat n baza a trei tabele, fiecare dintre ele -oninnd informaia corespunztoare. n ansamblu, toate tabelele pstreaz informaia in detaliu.
t - 't . iiflArtiiler 1
v -ln fx
Cod Cant DataVxnz
05/05/01 06/05/01 06/05/01 06/05/01 05/06/01 06/05/01 06/05/01}
Product: Table
mi
den
UitMas
Pret 30 30 15
codcat
C od* !
1 Lactate 2 Came 3 Buturi
Descriere
Lapte, cacaval, st Came deporc,bo,i Apa minerala, apa
Kg
Pachet 1Kg Pachet 0.5Kg L Pachet 0.5L But. 2L
5
2.5
0 Tabela Categorii se modific doar cnd apare o categorie nou de mrfuri (se modific cei mai rar), tabela Product - cnd apare un produs nou (se modific mai des dect Categorii), iar DetVinz se modific cel mai des.
3 J_EL_ But. 3L 15/ La introducerea informaiei n DetVinz este util ca tabela Product s fie afiat pe ecran (este o modalitate de a introduce corect codul produsului). Exist i alte ci, mult mai eficiente, pentru a evita greelile (despre ele se va vorbi mai trziu).
2 3
Fig. 3.6. Tabelele care constituie fundamentul BD. Dac analizm cu atenie informaia din aceste 3 tabele, observm c ea este divizat dup anumite criterii: n Categorii avem informaia doar despre categoriile mrfurilor, n Product avem toat informaia doar despre fiecare tip de marfa aparte i " DetVinz avem doar informaia care se nate n procesul operaiunii de vnzare. Care produs, n ce cantitate i cnd se vinde, se tie imediat dup ce s-a terminat : reraiunea concret de vnzare. Adic informaia n aceast tabel poate fi introdus :: ar dup ce a avut loc vnzarea. O baz de date nu poate fi eficient far asigurarea unor eforturi minime la ::: cucerea informaiei. n tabelele Product i Categorii informaia poate fi introdus - _ mai devreme dect apare un produs nou sau o categorie nou. O dat ce informaia este introdus, aceste 3 tabele vor funciona ca un tot ntreg. Apare ntrebarea: cum ar arta o singur tabel, dac am dori s crem o BD ce ar . za zoat informaia aceasta? Rspunsul poate fi gsit destul de greu. C oncluzie: S uitm de*faptul c putem utiliza eficient o baz de date simpl : singur tabel i s gestionm un volum mare i divers de informaie! Pentru a explica totui, n acest caz concret, cum ar arta acea singur tabel. I n m o cerere cu proiectul din fig. 3.7. Ca rezultat obinem rspunsul (fig. 3.8), Astfel i.care arta acea singura tabel ~ fundament pentru proiectarea unei BD simple. Apare i" r e : area: dac e mai simplu cu o singur tabel, de ce s complicm BD cu dou sau
25
trei tabele? ns un cititor mai atent poate fi de alt prere. Tabela DetVinz poate conine sute sau chiar mii de nregistrri (fiecare operaiune de vnzare este o nregistrare n tabela DetVinz) i atunci tabela din fig. 3.8 va fi cu mult mai mare dect cele preluate mpreun. Pe lng aceasta, n acea singur tabel va trebui de completat toat informaia n toate coloanele, cu excepia DataVinz, pe cnd n cazul utilizrii a trei tabele, vnztorul va trebui s completeze doar primele dou coloane din DetVinz. Prin urmare, cazul BD cu 3 tabele este cu mult mai convenabil pentru utilizatori, ns, dup cum se observ, destul de complicat pentru cei care o proiecteaz. ! e l e c t U u e iy
Aceast cerere va uni toat informaia din cele trei tabele n una singur. Astfel vom avea posibilitatea de a mai uor.
Pret Product 0
------------DataVinz DetVinz 0
UnMas Product 0
Cant DetVinz 0
j l L I . . . ____
Fig. 3.7. Proiectul cererii pentru informaia despre toate operaiile cu privire la vnzri.
v ? J s
b H
1 0 : P re t 1
|
Kg iL
U nM as
D a ia V m z
C a s ii |
But. 2L
Kg
05/05/01 06/03/01 06/05/01 06/05/D 1 05/06/01 06/05/01 06/05/01 11/05/01 11 //Dl 11/D5/01
30 j 5 2 30 3 2 5 30 15 2.5
^Tabela rezultatul cererii care ne prezint informaia n detaliu despre toate operaiile de vnzare.
1 Record: J | i J 1
1.
C odG i D enC ail codi
Reid: CodCat Table: Categorii Tota(: Group By Sort; Show: Criteria: or:
Ascending
Rezultatul cererii
Proiectul cererii
Fig. 3.9. Sumele pentru mrfurile din fiecare categorie. 2. Suma total ncasat n baza vnzrilor doar a lactatelor i crnii. Rezolvarea fig. 3.10. >^ 1 di 5 8ga#|gSf51:
Rezuatufeste doar un singur Tmmi^flindc^se cere suma pentru came lactate mpreun, nu pentru fiecare din eie.
Fig. 3.10 Sumele ncasate la vnzarea produselor din lapte i din came. 3. Sumele totale ncasate pentru fiecare categorie doar n baza mrfurilor vndute n cantiti mari i cu preuri mai mari (Cantitatea > 25 i preul >2). Rezultatul - n fig. 3.11,
Field: Total:
Sm l
CodCat Group B _y
: Categorii
Stew:
Criteria: or:
I
>2
7]
0
:w
4 i\
Fig. 3.11. ncasrile totale pe fiecare categorie.
27
4y Costurile produselor: lactate vndute la litre n cantiti mai m ari dect 30, carne - n cantiti mai m ari dect 40, buturi - cu preul mai m are dect 2. Rspunsul - fig.3.12.
impuEx: Select Query
Field: CodCat DenCat Categorii cotj Product den Product UnMas Product Cant DetVinz Pret Produci DataVin DetVinz cost: [cantHpretl
0
nL H
0
>40 >30
>2
IL L
SimpuEx: Select Query
U P
CodCat
DenCat
1 Came 2 Came 3 Buturi 1 Lactate
cod
den
cost
Fig. 3.12. Proiectarea cererii cu condiii complicate de selectare. Atragem atenia la faptul cum se construiete expresia logic n baza informaiei din rndurile C riteria i Or: toate condiiile din acelai rnd se unesc cu operaia logic & (And), apoi expresiile obinute pentru fiecare rnd se unesc prin operaia logic V (Or). n cazul utilizrii expresiilor logice, atunci cnd avem W here n rndul Total, aceast expresie se refer absolut la toate nregistrrile. Pentru cei care cunosc scrierea i citirea SQL se recomand de fiecare dat s apeleze i la SQL. Concluzii'1. Baza de Date descris n acest paragraf este mai eficient dect cele descrise anterior i este mai indicat pentru utilizare. 2. Nu este nevoie de a cunoate prea multe lucruri din Access pentru a proiecta BD simpl. 3. Utilizarea unei BD este necesar, deoarece ne ajut s realizm mai uor mamulte lucruri cu informaia care crete de la zi la zi. 4. Pentru o persoan care posed careva aptitudini de lucru n sistemul Windows. ? deci tie s lucreze cu fiierele i s opereze cu aa-zisele ferestre, poate f destul de uoar proiectarea unei Baze de Date la acest nivel, fapt ce i-ar facilita cu mult gestionarea informaiei respective.
28
li;reMri, probleme, discuii -.aaa.:nentai avantajele utilizrii, doar pentru acest caz concret, a unei BD r aa:a:e pe mai multe tabele. 1 : :: alte structuri i alte tabele pentru a rezolva toate problemele : : - Laie n acest capitol. 3L ' :c:: s planificai proiectarea unei baze de date care utilizeaz tabele cu similare (adic cu aceleai coloane; tipurile de date pot fi diferite), dar :arr gestioneaz informaia despre (informaie care poate fi ncadrat n a^erneaea tabele): aicamentele la o farmacie; persoanele angajate la o firm; : aim ie din fondul unei biblioteci; ti-iiatele sesiunii la o facultate. fL *ni r.;:.ic: cereri pentru a determina:^ i n ir^ir:ie din categoria lactate vndute ntr-o anumit zi; * T irf iir: ie vndute ntr-o anumit zi i la un anumit pre; Sii t indute ntr-o anumit zi la un anumit pre i mrfurile vndute ntr-o altei ir.fflnit zi la un alt pre; a ; i ai mrfurilor dintr-o anumit categorie, vndute ntr-o anumit zi; 1 ) 1 3f - ^ : :i ai produselor din carne vndute la un pre mai mic dect o anumit ' : :ntr-o anumit zi i costul total al buturilor vndute n restul zilelor fiii r .: singura cerere); Iii iar: : a fi: st vndut cantitatea maxim de un produs din came; L" i i e medii ale vnzrilor pe fiecare categorie; ir'1 I n i: operaii de vnzri ale mrfurilor din fiecare categorie; ! )! i ia: prima i ultima dat vndut un anumit produs; -ill e a r ,.- < * ii came vndute ntr-o anumit zi* la un pre mai mare dect o . aioare i mai mic dect alta i buturile vndute n restul zilelor; e ir : _ ...se din lapte au fost vndute n sume totale mai mari dect o anumit m : IQil ara ae aperaii vnzri pentru produsele din came cu costul total mai ara : : anumit valoare; IE ". a:a ai buturilor vndute ntr-o anumit zi i costul total al produselor in : a" : indute n alt zi (preul produselor din came mai mare dect o iiiiiiiii,ci ".aioare).
1 Data Type Number
ni.
Description
Date/Time
Number antifcatile intrate, achiyitionarte
General j tookup ) Field Size Format Decimal Places Input Mask Caption Default Value Validation Rule Validation Text Required Indexed Single . Auto ,
Proprietatea Validation Rule permite ca n acgast'coloan s fie intpjdtfSedoar numere tifa Se asigur acelai "lucru i pentru cmpul Cant. n cazul ncercrii de a introduce numere negative, pe ecran se va afia urmtorul jnesaj:
Fig. 3.13
nchidem proiectul tabelei DetVinz confirmnd modificrile prin Yes i ca rezult: vom obine tabela DetVinz modificat (cu 4 coloane). n etapa de introducere a informaiei pot aprea confuzii, erori, se pot confund coloanele C ant cu CantV. Ar fi mult mai sigur dac la introducerea informaiei desp vnzri s nu apar coloana CantV, iar la introducerea informaiei despre intrri coloana Cant. Acest lucru l putem asigura crend o cerere pentru vnzri i o a it . cerere ~~ pentru intrri; se vor utiliza cererile i n scopul de a face mai comod proces* I de introducere, i n scopul de modificare a informaiei n tabele. Aadar, crem o cerere pentru vnzri (bazat pe DetVinz) i o cerere per ir intrri. Proiectm cererile respective i le salvm, respectiv, cu numele Vinzari Cant IntrariC antV (vezi proiectele n fig. 3.14, imaginile lor n form de tabel - i fig. 3.15).
30
Astfel, atunci cnd va trebui de introdus informaie despre vnzri, se va deschide :~:erea V inzariCant, iar atunci cnd va trebui de introdus informaia despre intrri :espre marfa achiziionat) - se va deschide cererea IntrariC antV . n aa fel, n "i-care caz de introducere a informaiei apare tabela sau cu coloana Cant, sau cu :: 'oana CantV. Acest lucru s-a realizat prin utilizarea posibilitilor oferite de cereri. O cerere roate fi utilizat nu numai n scopul de a afia informaia, ci i n scopul de a duce i modifica informaia din tabele. Pstrarea informaiei despre vnzri i achiziionri n aceeai tabel este un lucru .: ~iod, care permite destul de simplu, dup cum vom vedea mai trziu, s se determine ; icurile de marfa disponibile pentru vnzri.
n cererea VinzariCant coloana a doua este Cant i informaia va nimeri coloana Cant din DetVinz, iar n ntrariCap^V - C^ntV i informaia va nimeri n coloana din aceeai tabel DpfVinz
Cant DetVinz DataVin v DetVinz
0 5 !
J
Field: Cod Table: DetVinz Sort: Show: ia Criteria: or:
___________________________"
A'
Field: Cod T able: DetVin Sort:
CantV DetVinz
0
DataVinz DetVinz
A,
Show : j
^ Criteria: or:
<1
<i
Fig. 3.14. Proiectele cererilor VinzariCant i IntrariC antV . ggg I g g C f n fx m DetVinz : Table :. Cod ;c*a\ Bat&Ym Vuiz S T ] Da&
100 20.7 30 50.25 100 30 50.5 30 20 10 400 100: 0 ^ u r 05/05/01 06/05/01 06/05/01 06/05/D1 05/06/01 06/05/01 06/05/01 11/05/01 11/06/01 11/05/01 12/07/01 100 1 4 20.7 30 6 1 50.25 7 100 6 30 4 50.5 2 30; 3, 20 5 10 5 400 7 100 0 0 05/05/01 06/05/01 06/0|/01 06/05/01 05/06/01 06/05/01 06/05/01 u/05/01 11/06/01 11/05/01 12/07/01 12/07/01 12/07/01 300 100 200 78 300 45 679 45 100 39 570 42'?
C*d 1 4 6 1
C m tV
300 100 200 78 300 45 679 45;
Dt%Z | 05/05/01 06/05/01 06/05/01 . 06/05/01 05/06/011 06/05/011 06/05/011 11/05/01 11/06/011 11/05/01! 12/07/011 12/07/01 j 12/07/011
i _
100
39 570; 439
m im
12/07/01 d 1 1
O i
'R ecord:
;sc o rd ; Hh If
N 14 1j1 . ..
0 j |>* 3--
n fig. 3.15, pentru comparaie, se arat formele n care apare informaia extras de cererile V inzariCant i IntrariC antV din aceeai tabel DetVinz. Acest mod de pstrare a informaiei permite s calculm uor stocurile de mrfuri. Pentru calcularea stocurilor, proiectm cererea TotalInStoc. Rezultatul este redat n fig. 3.16, iar proiectul ~ n fig. 3.17.
is 1 T o t a ll n S l o c : S e l e c t Q u e i
Cdf~De3&l jjC a m e m ..... 2: C am a ... ....3 C am e ......4 Lapte .......3j Lapte ..... 6 A p a 7 A pa [R eo ^ d T 1 < i r
|| s i t ..378.00 . ... i m s j ; : 45.00 30.00 20.00 100.00 779.00 ? . 410.00 609.00 60.00! 245.00 739.001 200.00 IS IilI
v n .? z
n coloana Intrat se afieaz numrul total de uniti intrate, iar n cooana Ieit - numrul total de uniti vndute. n coloana InStoc numrul total de uniti ramase n stoc.
InStoc-Intrat-Iesit.
Fig. 3.16 n cmpul calculat InStoc se utilizeaz i i f f i i i i s i i MM funcia Sem, iar n rndul Total din grid se menioneaza^c se conine o expresie. Acest k _ cod lucru ne sugereaz c ntr-un cmp calculat 1 putem folosi orice funcie standard din i - : : Access sau chiar once alt funcie scris n Prat Visual Basic, n calitate de parametri pot fi i cmpurile din obiecie ataate la cerere.
'
'
LtU;
DetVinz 1 Sort Show. Ditai*
or.
: Group 6y
a
-m r NM
m _________________
Fig. 3.17. Proiectul cererii cu un cmp calculat pentru determinarea stocurilor rmase.
32
33
La fel <* la crearea unei cersri obi5ui.e, I c e , ! cimpurile de acl. Apoi facei' tin click pe Query i apare lis t a m care clickai pe Make-TableQuery i vei objkfe boxa Make Table. n caseta Table Name scnpfnumele tabelei care dorii sa fie cj^f de a<5east cerere, apoi tastai OK.
f
f jf
Table:
SelecJ^Query
j
Make New
Table Name: jSumarlnfol
B p ^ d s s t a b Query
S ? M ake -Iab S e Quer*> ti^S Update Q uery. # i Aopend Q uery... 1 Qelete Query
y r
'V s
gfeififte:}
CantP:1.1-1.1
Fig. 4.1. Proiectul cererii care, n baza tabelei Product, formeaz tabela Sumarlnfo.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ ,
4 ,
P ro iectarea unei cereri de tip MakeTable (pentru a forma o tabel au lista com plet a produselor aflate n depozit)
1: i ca ia nchidere s rspundei cu Yes i, respectiv, s atribuii numele pentru aceast cerere. Dup ce vei nchide proiectul, aceast tabel m f -auuai : _ un alt semn, ceea ce sugereaz o aciune specific deschiderea ei. ; - i ::rm a tabela Sum arlnfo, trebuie s facem un dublu click pe numele ei !S -'OSw 'J ;:1~. apoi s acionm Open. A.n'brti Dac o astfel de tabel deja exist, atunci va aprea prentmpinarea fc - - - a : are trebuie s rspundem cu Yes pentru ca tabela veche s fie lichidat. : m m a: se v a forma varianta nou a acestei tabele. r . r deschiderea cererii M akeSum arlnfo, vei obine tabela Sum arlnfo cu lista zt rrc-du.se cu valoare zero n coloana CantP. I e : ae fiecare dat cnd vei deschide aceast cerere, de fapt, vei forma din nou aifeela Sum arlnfo. 4..1 P ro ie c ta re a u n ei A p p en d Q u ery (astfel la lista format n Su m a rln fo vor fi plusate toate produsele din stocul iniial) : aduga la tabela Sum arlnfo informaia despre stocurile de la nceputul ::ea.m o cerere de tip Append, care extrage informaia din unele tabele i altele.
Append
fiiew iTsert
saaiEsm X
Append To
-r
SS
fej Show T able\. ' Kernove fable 3 * Select Query
Hi
Crosstab Query
s I Make-Table Quer
# 1 Update Q u e ry ^ ,
! ^,.
X 1 Qelete Query SQL Specific
La nceput, ca i4a 6 Se Sefesl Query, se Completeaz griduJ ere; ererii, apoi se face un click peQuery; apare o\is n care sH^ctm Append Query i ca rezultampai are cutia Append. Artm in care tabel Sumarmi fo trebuie adugat, apoi OK i se nchide cutia A ppend. Dup aceast trecem la completarea m formaiei n rndul Append To din gridul c\ reni. n cazul dat dorim ca informaia din Cod, E n l , Stoclneep din tabela Stoclncep s fie adugat respectiv, n coloanele Cod, Den, CantP din tal la Sumarlnfo. Dup ce am stabilit c informaia va fi ^adugat la tabela Sumarlnfo, clicknd n Sumar ppend , apare lista coloanelor i cod lurem s selectm-dgnurnirea respectiv a den olone. n care se va nscrie informaia.
Stoclncep
Proiectul cererii de tip Append, care adaug informaie din tabela Stoclncep n tabela Sumarlnfo.
35
n acelai mod ca i la proiectarea cererilor obinuite, dup terminarea procesului de proiectare, nchidem proiectul atribuindu-i numele AddlnitialStoc. Vom observa c acet tip de cerere va fi marcat n mod deosebit. Atenie! De fiecare dat cnd deschidei aceast cerere toat informaia din tabela Stoclncep va fi adugat la tabela Sum arlnfo. Concluzie: Este corect de fcut acest lucru o singur dat, doar dup formarea tabelei Sum arlnfo deschiznd cererea M akeSum arlnfo de tip M ake Table. n mod analog, proiectm nc o cerere de tip Append (n scopul de a aduga n tabela Sum arlnfo informaia recent despre operaiunile din In trare i Ieire a mrfurilor, informaie care poate fi calculat prin intermediul unei cereri bazate pe tabelele DetVinz i Product).
Append
Append To * Cod Cant DataVinz CanfcV L iy Field: Table: Total: Sort: Append To: Criteria:
den
Table Name;
. ' , , '
UnMas
Pret
Inftu-maia curent din coloanele Cod, Deni, Mersextras din tabelele DetVinz i Product, care conin datele de ultim or (ca rezultat al descidenyacestei cereri) i va fi adugat la tabela
..........
Cod DetVinz Group By cod ^
*
.. . .
Den1:den Produci^ ^
........... .............. . -
^
den
..........
on
Fig. 4.3.
4\
Proiectul cererii care calculeaz diferenele dintre numrul de uniti intrate i numrul de uniti ieite (rezultatele obinute se adaug la tabela sumar Sumarlnfo).
Dup terminarea proiectului acestei cereri, salvai-o atribuindu-i numele A ddD iflntrarilesiri. A te n ie i De fiecare dat la deschiderea acestei cereri, informaia calculat va fi adugat n tabela Sum arlnfo. Concluzie: Aceast tabel poate fi deschis doar dup ce se vor deschide, n ordinea strict consecutiv, cererile M akeSum arlnfo, apoi AddlnitialStoc. La acest m oment, dispunem de trei obiecte: cererile M akeSum arlnfo, AddlnitialStoc i A ddD iflntrarilesiri, care, fiind deschise n ordinea descris, asigur formarea tabelei Sum alnfo cu informaia suficient pentru calcularea stocului curent. Deci, dup acionarea cererilor numite mai sus, este necesar de a deschide nc o cerere, care ne va afia informaia despre stocurile curente. n acest scop proiectm cererea:
36
I B
[
1* cod den jCantP i
cod Sumarlnfo Group By
mmm
Action. DeleteObject OpenQuery OpenQuery OpenQuery OpenQuery / ! Comment U Lichudarea tabelei SumarlnfC Qearea uri tabele noi Surrv Add la lista formata a stocuri Add la Ista format[ a diferen
Action j DeleteObject
mReport enabie OUputTo PrhtOut *| Re (Re paiotQbject/ Quer> Name Iaca &ode
Comment Lichudarea tabelei Sumarlnfo Qrearea unei tabele noi Sumarlnfo AcfSaJista formata a stocurilor ini'iaie Add la lilb^fcrmatf a diferen'elor Intrari-iesiri Lichidam tabefetenasInStoc formam RamasInStbinecenta deschidem tabela RamafnSfcocT
f i
sfion Arguments
l
Tabe RamasInStocT
Icategors
kfo
37
problema de respectare strict a ordinii aciunilor. A ccess-ul ne ofer o m odalitate de a uni mai m ulte aciuni ntr-o anumit ordine (prin crearea obiectelor M a cros). A cestea snt nite obiecte care pot uni ntr-o anumit ordine o m ulim e de aciuni, ce pot fi ndeplinite printr-o singur deschidere a M a cro s-u lu i. S proiectm m acros-ul respectiv (vezi fig. 4.5). D up ce am terminat proiectul m acros-ului, l salvm atribuindu-i num ele T o ta lR a m a sIn S to cM . D ac totul a fost efectuat corect, atunci, fiind pe pagina M a cro s a B D curente i facnd un dublu click pe num ele acestui M a cro s T o ta lR a m a sIn S to cM , vom activa tot iragul de aciuni din acest macros. Ca rezultat, pe ecran vom obine tabela cu stocurile curente.
:
jjjjjjf - [
455.5 30 160 1415.600006 398 370 1078
co d
| Deni JCam e
2 Came 3 Came 4:Lapte 5iLapte 6 Apa 7 Apa
m
a R e c o rd :
1 4h I
mmm 1 H uMof 7
Observm c produsele se repet dup denumiri, ns ele au coduri diferite. nseamn c snt produse cu aceeai denumire, dar nregistrate ca produse diferite (poate unitatea de msur este alta sau poate se deosebesc prin alte caracteristici). Ar fi fost mai comod dac n aceast tabel ar fi indicat i unitatea de msur. Acest lucru poate fi realizat, dac n locul ultimei operaii din macros-ul TotalRamasInStocM, n loc de aciunea Open Table, care deschide tabela RamasInStocTotal, s-ar deschide o cerere bazat pe informaia din aceast tabel i tabela Product, pentru a afia informaia, inclusiv i despre caracteristicile fiecrui produs. rezultat al acionrii macros-ului
Pentru a afia mai detaliat informaia despre fiecare produs din stoc, proiectm urmtoarea cerere:
StoculCurentQ : Select Query
* cod den UnMas Pret codcat
- ii
CodCai DenCat Categorii Ascendir cod Ram< 0 den Pro A \sc 0 UnMas Product
_
Pret Product
TotaIRamas RamaslnSto 0
38
llSISt UiiMas But. 3L But. 2L Pachet 0.5K. Pachet 1Kg Kg Pachet 0.5L L
Fret TotalRamas
3 2 15 30 30 2.5 1078.00 370.00 160.00 30.00 455.50 398.00 1415.60
Cost
995 m l
7078.001 I
cu informaie mai detaliat despre produse. n acest scop se va face o copie a m acros-iui deja proiectat, se va atribui un nume, de exem plu DetaliiStocM, i se va m odifica -itim a aciune: n loc de a deschide tabela RamasInStocT, deschidem cererea
StocC urentQ cu proiectul de mai sus. Copierea i m odificarea denumirii m acros-ului se face analog cu aciunea asupra unui fiier n sistemul Windows. Pentru a m od ific coninutul m acros-ului, selectm denum irea lui (DetaliiStocM) in pagina M a c r o s din fereastra B D curente, acionm butonul Design i ca rezultat -pare macrosul D e ta liiS to c M n form de proiect. Facem un click n ultimul rnd acolo unde este O p e n T a b le) i selectm din lista aprut Open Query, apoi trecem :n coloana C o m m e n t i nlocuim coninutul de acolo cu deschiderea cererii S tocC urentQ . D up aceea, puin mai jo s, selectm denumirea StocCurentQ din lista aprut dup clickul fcut n boxa Q u ery N am e. Proiectul trebuie s devin cel din fig. -.8. Dup ce ai fcut m odificrile necesare, salvai-1. Facei pe rnd un dublu click pe aenumirea am belor macros-uri i analizai avantajele i dezavantajele acestor dou "ioduri de afiare a inform aiei respective.
m D e t a l i i S t o c M ; 1
Comment Lichudarea tabelei Sum arlnfo C rea rea unei tab ele noi Sum arlnfo Add ia lista fo rm a ta a stocurilor ini'iale Add la lista fo rm a t[ a diferen'elor Intrari-iesiri Lichidam tab ela Ram asInStoc formam Ram asInStoc recenta T 1 Deschiderea cererii StocCurentQ Action Arguments
| -Ti
________
_ z J
^ I
39
ncercai s facei m odificrile necesare, astfel nct aceste dou macros-uri s acioneze absolut independent.
3.
4.
5. 6.
7.
8.
9.
10. Ce inform aie conine coloana A ctio n din proiectul unul macros?
11. Este oare obligatorie informaia din C o m m en t n proiectul unui macros? 12. Explicai aciunile din lista care apare la proiectarea unui friacros (care le cunoatei). 13. Cum putem deosebi tipurile de cereri pe pagina Queries? 14. Care este deosebirea dintre acionarea unei cereri de tip Append sau M ak e Table de una de tip Select? 15. n cte moduri poate de lichidat un obiect din Baza de Date? 16. S se proiecteze un m acros, care ar afia: a) lista de produse cu preul dat din stocul curent; b) costul total al produselor din stoc; c) costul total al produselor intrate n stoc ntr-o anumit perioad; d) stocul curent al produselor dintr-o anumit categorie; e) lista de produse pentru care stocul curent a crescut fa de cel iniial. 17. Determinai produsele care difer doar dup pre. Propunei o m odalitate de m odificri, pentru a face posibil rezolvarea acestei probleme. Facei aceste m odificri, apoi proiectai un macros pentru a determina: a) lista de produse pentru care s-au fcut vnzrile produselor la pre mare, n timp ce n stoc erau produse de acelai tip la pre mai mic; b) lista pe produse care au intrat cu un pre mai mare, n timp ce n stoc mai erau exact aceleai produse, dar la un pre mai mic; c) lista de produse care s-au vndut la un pre mai mare, n timp ce n stoc existau exact aceleai produse, dar la un pre mai mic.
40
Categorii : I afoOe
CodCat| DenCat J. Lactate Lapte, cacaval, sminti Came de porc?bovine, 2 Came 3 auturi Ap a minerala, apa duilc * 0^ Informaia despiXprod usul nou se introduce n coninu^ > a tabelei Product, Dac apare vreun prod u^cjintr-o categorie nou, atunci-nregistrin m ^ q ti categoria tirGategorii, apoi prociusul n Product.
in 1 ! * - f
41
lataY m z 1
4 300 100 200 78 300 45 679 45 100 39 570 439 05/05/011 06/05/01 j 06/05/01 j 06/05/01 j 05/06/01 j 06/05/01 j. 06/05/01 j 11/05/011 11/06/01 i 11/05/01 j 12/07/011 12/07/01S
12/07/01
cod
den
UtMas
Pret codcat
Codc|DenCadj*
Descriere
6 1
7
6 4
2
Kg..........
Pachet lKg i Pachet 05Kf L Pachet 05L But. 2L But. 3L
j Lactate Lapte, cacaval, $m\ 2;Came Came de porc, bovii 3 auturi Apa minerala, apa &
0 i v
0 nregistrrile se fac n continuarea tabelei-cerere IntrariCantV. n momentul cnd la intrare apare un produs nou, trebuie mai nti s-l nregistrm n tabela Product, dar dac este dintr-o categorie nou, atunci nregistrm mai nti categoria nou, apoi produsul n Product. S fim ateni la codurile introduse n coloana Cod i la cantitile nregistrate n coloana CantV. Data se nregistreaz n mod automat.
5 5. 7 0
1 >
I D t
Cod
Cant
DataVinz
05/05/01 jj 06/05/011 06/05/011 06/05/01 j 05/06/011 06/05/011 06/05/01
cod 1 den
| Came
2 Came
UnMas
Pret codcat
3 Came 455.5 30 160 1415.6000 398; 370 1078;
K
Pachet lK g Pachet 0.5K^
Came
3 Came 4 Lapte 5 Lapte 6 A pa 7 A pa -:ord! N 1 I f
3 Came
4 Lapte 5 Lapte 6 Apa 7 Apa
L
Pachet 0.5L But. 2L But. 3L
nregistrri se admit doar n tabela VinzariCant. Informaia se introduce n continuarea tabelei VinzariCant doar n co lan ele j^ d ^ i^ DataVinyse va completa [tomatMai nti se determin codul din/Product, apoi el se nregistreaz n VinzariCant. In coloana Cod din VinzariCant trebuie s fie doar codurile din Product. Este util de a nchide periodic aceast tabel i de acionat macros-ul respectiv pentru a o deschide din nou.
Fig. 5.3. nregistrarea informaiei despre ieiri (vnzri). 4. A naliza stocurilor curente. Acionm macros-ul DetaliiStocM i vom obine informaia prezentat n fig. 5.4.
42
8
P ret
1078.00 370.00: 160.00 30.00
'
TeMMaitas
6 A pa
3 Came 2 Came LCam e 5 Lapte 4 Lapte
3 2 15
30 30
Kg
Pachet 0.5L
455.50
398.00 1415.60
....
........
2.5 5 '11 |f
995.00
7078.00
i'll
!*) of 7
i jgpi
i 1 '
Probleme
nregistrai produse la intrare (cte 3 din fiecare categorie),fiecare produs s intre de dou ori cu coduri diferite n dou zile diferite. 2. nregistrai vnzri: cte trei pentru fiecare produs; n aceeai zi s fie vndute i produse care difer doar ca pre. 3. Proiectai cteva macros-uri pentru rezolvarea unor probleme propuse n lucrarea de laborator nr. 7. Proiectai cereri sau macros-uri pentru a calcula: 1) costul total al mrfurilor intrate n fiecare zi; 2) costul mrfurilor ieite n fiecare zi; 3) diferena (cantitilor) dintre intrri i ieiri pentru fiecare produs; 4) preul mediu al produselor care difer doar ca pre; 5) numrul de produse diferite pentru fiecare denumire; 6) stocul curent la o dat anumit; 7) mrfurile intrate n ziua curent; 8) mrfurile ieite n ziua curent; 9) mrfurile de un anumit tip care difer doar ca pre; 10) mrfurile de un anumit tip care difer doar ca unitate de msur. 1.
43
Informaie pe categori i
odCaft:
1 Lactatei
Lapte Lapte Lapte
Pachet 0.5L
Titlul raportului (Report Header/Footer) apare 13/07/01 doar pe prima pagin. ' fr reT"Cost: DataVinz " |_D#mmiirile coloanelor snt n sectorul Page Header i apar la nceputul fiecrei 12/07/01 pagini. 4__2J 1
10
2.5
categoriei snt n sectorul CodCat Header, care se Lapte afla n sectorul titlului Cost total: 138 Lactate grupei, i apar la nceputul 2 Came ----------- C IZ 2 --------------fiecrui grup. 20 15 I 1 1 ^ 0 1 Detalii n sectorul Detail ^achet 0.5K 3 Came 115^ 30 30 3achet IKg 2 Came Nqrfcnnaia n detaliu din 50.25 30 1507.5]| 06/05/01 <g 1 Came fiebsre grup. 30 )| 05/05/01 1 Came Sector pentru total (CodCat Footer) pe grup. Cost total: 5707.5 Caute Sector pentru total pe raport 3 B&imi (ReportFooter) apare la 3 9ut.3L 300 1271 7 pa sfrton raportului. 30 2 60 06/05/01 3ut. 2L 6 pa Sazrorul Page Footer apare 100 3 300 05/06/01 7 ^ 9ut.3L 4a sfritul fiecrei pagini, 30 9ut.2L 2 60 06/05/0j, (aici nu este prezentat, 6 Apa 720 Baiisf Cost total: deoarece acest raport constituie doar o pagin). Total general: 7808.5
50.5 20.7
[o o o o
Codul i d en u m irea
E tlJ -jjFig. 6.1. Raportul obinut n baza proiectului din fig. 6.1.1. nainte de a ncepe proiectul unui raport, trebuie s stabilim cel puin urmtoarele: 1) Ce fel de informaie dorim s includem n raport. 2) Dac avem deja vreun obiect (tabel sau cerere) n care s se conin toat informaia pe care dorim s-o includem n raport. 3) Dac nu exist astfel de obiect, el trebuie creat. n cazul nostru, crem o cerere i PeCategRaportQ, bazat pe tabelele DetVinz, Product, Categorii cu cmpurile DenCat, Cod, Den, UnMas, Cant, Pret, DataVinz, Cost:[pret]*[Cant] (far vreo condiie n C riteria sau Or). 4) Care este formatul raportului (cu titlu, ftr titlu, cu grupri, far grupri, cu totaluri pe grup sau tar, cu comentarii detaliate sau fr, cu fonturi pronunate sau nu, cu anumite figuri geometrice, tablouri sau nu etc.). Cu alte cuvinte,
44
formatul raportului trebuie stabilit cu cea mai mare precizie posibil, deoarece, de regul, m odificrile, n funcie de natura lor, pot cere mari eforturi i timp. Dup ce s-au realizat c ele necesare, descrise mai sus, se poate ncepe proiectarea raportului.
22
egRapoilR: Report
j . 1. 1 , I . 2 i 3 i 4 I 5 I 6 * I - 7 I 8 I - 3 I 1 0 I * II
[Report Header
Informaie pe catedori H
PageReader
UnMas:
[Cant:
cod den
CodCat Footer
jclencat
UnMas
Cant
Pret
Cost
DataVinz
j=Tost total:"
rSum{[cos1j
Se pot determina cu uurin sectoarele respective n forma de proiect a raportului de mai sus. n fiecare sector se afl nite obiecte n form de patrulater, care se numesc Controale (n englez Controls). Unele controale pot fi prezentate prin dou elemente: coptrolu propriuszis, care ctfnine informaia i eticheta lui, care ne sj^gereazce conine Controlul dat. Atare controale se prezint prin dou patrulatere. Informaia din etichet este aceeai i n proiect, i n raportul propriuzis, pe cnd controlul propriuzis, n proiect conine denumirea sursei, iar n raport - coninutul ei.
Fig. 6.1.1. Proiectul raportului din fig. 6.1. Atragem atenia, A ccess-u l ne ofer posibilitatea de a utiliza aa-zisul W izard D esigner la proiectarea rapoartelor. A ceast posibilitate poate fi utilizat, de regul, atunci cnd nu avem prea mari cerine fa de formatul raportului, important fiind doar rezultatul. Pentru nceptori ns, este mult mai util s deprind proiectarea unui raport rar W iza rd D esig n er, ca mai apoi, pe parcursul proiectrii, s poat aprecia i alege la nivelul cuvenit c ele propuse de W izard D esign er. 1. n funcie de versiunea pachetului M ic o so ft O ffice, acionm n modul respectiv ^ pentru a activa pagina R ep o rts a bazei de date curente. Pentru diferite versiuni im aginile pot fi diferite, ns procedeele, de regul, snt aceleai: se face un click pe R ep o rts - pagina respectiv devine activ; acionm butonul N ew (dac avem intenia de a crea un raport nou), ni se deschide o caset nou sau poate chiar tot aici va trebui s selectm opiunea D esign (evitai W izard D esign er ! i, poate chiar tot aici, s determinm (n cazul nostru trebuie s selectm num ele P e C a teg R a p o rtQ ) n baza crui obiect se va proiecta raportul. Dur toate aceste aciuni, acionnd la momentul potrivit O K , vom obine pe ecran
45
Page
B id
Reportl : Report
If.:'* * 1 * 1 ' 2 * I * 3 IF Page Header
*D et<a il
0 Pagi3 Footer
Primul lucrTpecafeltrebuie s-l facem este s- acionm butonul L ist^ ic ^ ^ zu ltat trebuie s apar (dac nu este deja pe ecran) lista cmpurifeNQbiectului selectat, n baza cruia se va crea raportul. n caz c lissiu este, nchidei proiectul, far a-1 salva, i ncepei din nou proiectttkAtragei atenia la ataarea obiectului la etapa cuvenit. LirvH4<din interiorul 'sectofntnrfGridui) se pot nltura sau prezent^p^n activarea opiunii Grid din lista opiunilor ataate la comanda View sau la alt comand, sau prin click-dreapta n interiorul seciei i activnd sau dezactivnd opiunea Grid.
Fig. 6.2. Prim a im agine a proiectului unui raport. 2. Avnd deja pe ecran cea mai sim pl form a proiectului unui raport, urm eaz s acionm n modul cuvenit pentru a aduga seciile Report Footer i Report
Header.
le Edit View Insert Format lools Window Help
L
jj .
1I
' 1|
Soiling and Grouping
Field/Expression
ft
|
iip rfo
, . 1 . , . 2 i 3 1 4 Report Header
den
# Page Header
Group Properties Group Header Group Footer Group On Group Interval Keep Together Yes * V Yes Each Value
* CodCat Header
1
With^ s t Detail! Whole Group With First Detail
* Detail
fPagt5 FoO
* ReportFc
nseamn c la trecerea de pe o pagin pe alta, pe pagina precedent, s se asigure cel puin un rnd cu informaie din grupul de trecere. A ceasf^esiejista de mpuri din obiec
Facem unclicl^aici i apare a^atTapoi mai facem un click,aici, apare lista de cmpml i selectm CodCat, eoarece trebuie sa facem grupe pentru fiecare categorie. Dup aceea, n par^a r k io s , facem cte un iprpentru a obine tate. Apoi facem ck aici, din lista aprut alegem den i vom oi^ine imaginea respectiv/ Aceasta nseamn c pentru codul categoriei vomi avea sectoarele G rouF H eader i
J o r n p n tri I Field/Expression CodCat den [Sort Ordeil a Ascen j r j Ascen
m
Group Properties Group Header Group Footer Group On No No Each Value
If
DataVinz
No
n acest scop analizm listele de opiuni ale comenzilor (n primul rnd View, apoi Insert) din meniul de comenzi de baz ale Access-ului i activm opiunea R eport Header/Footer. Imediat n proiect se vor include sectoarele respective la nceputul i sfritu proiectului. Ateniei Din cauz c proiectarea unui raport este un proces de lung durat, este necesar, din cnd n cnd, pe parcursul proiectrii, s salvai proiectul. 3. In continuare inserm i sectoarele respective pentru codul i denumirea grupurilor de categorii (a se vedea fig. 6.3, analizai i acionai conform indicaiilor), 4. Dup ce am inserat sectoarele respective, trebuie s trecem la inserarea Controalelor. O parte din ele vor fi legate (bound) de cmpurile din lista cererii PeCategRaportQ , ataat la raport, o alt parte vor fi absolut independente i vor conine informaie de tip Text, iar o a treia parte vor fi nite cmpuri (cmpuri calculate) dezlegate (unbound), n care se vor afia rezultatele unor calcule conform funciilor din Access sau chiar ale utilizatorului, scrise n Visual Basic.
innd tasta CTRL apsat i fcnd click pe denumirile din list, vom obine un grup^iectat. l agm i-l copiem (legm) n Detail. Relaxnd moused obine imaginea cu toate controalele selectate (toate au pe contur emne). Facem un click ntr-un loc liber aim i toate controaleife vor deveni libere. Avnd toate controalele deselectate, libere, selectm doar etichetele lor. Pentru CoCa aceasta, poziionm mouse-ul aici, DenCa apsm i inem apsat butonu^stng al mouse-ului, micm mouse-ul/pe diagonal pn aici, vom observa c se traseaz un patmlater, relaxam mouse-ul met atunci cnd patrulaterul a m in s jataVii etichetele. Ca rezultat, vom reui Cost selectarea unui grup de Obiecte (cele selectate vor avea senwe pe contur). Facem un click dreapm peste grupul selectat, apare o list^cu opiuni, alegem Cut, observm c grupul selectat a disprut. Facem un click dreapta n sectorul Page H pder, apoi Paste. Grupul de etiche/e acolo, n Page Header.
:~Ir
Jni^as:
JnMas
* irt;
# CodCat Footer
"ant
jcod
Hden UnMas:
:==[ :n
>
jUnMas
Cant
::g. 6.4. Transportarea etichetelor controalelor din sectorul Detail n sectorul Page
Header. 5. Dup ce am obinut etichetele n sectorul Page Header, facem un click ntr-un loc liber n acelai sector i toate controalele-etichete vor deveni libere. Conform indicaiilor din fig. 6.5, aranjai etichetele n Page Header, modifcmdu-le i dimensiunile astfel, ca s obinei ceea ce este artat n fig. 6.1.
47
6. Facei acelai lucru i n sectorul Detail. 7. Trecei cmpurile CodCat i DenCat din list n sectorul CodCat Header, apoi, asemenea ca din Detail, trecei doar etichetele n Page Header i aranjai-le n modul cuvenit (n Page Header ~ etichetele, iar n CodCat ~ controalele de
pe conturul unui control servesc ca mnere (Handies) prin intermediul crora putem modifica dimensiunile, iar cel din stnga-sus pentru -i schimba poziia. Poziionai mouse-ul pe unul dintre ele, apare un CodCath semn, apsai i inei apsat butonul stng, micai mouse-ul, innd butonul apsat, relaxai butonul i observai ce se ntmpl.
Fig. 6.5. Deplasarea i modificarea dimensiunilor unui control. 8. Inserarea controalelor pentru calcule n sectorul CodCat Footer.
Dac bara de instrumente TooSBox nr^te-pc2erit, atunci facem un click pe butonufacesta i apare -cutia respectiv. Facem un click pe butonu[^ab|, observm c se activeaz, poziionmmouse-ulici (atragem atenia c de elgsterligat ceva), cu butonul^frgal mouse-ului apsat trasgj-5uin spre dreapt - n jos>j^&xm mouse-ul aici i oservm c am oJ)ittut un aa-zis control dezlegaftunbound), n care putem msene o expresie de calcul, cai^ffoate includiejjJimstii-Aceasta l care, n cazul dat, trebuie lichidat (facei un click pe ea, apoi Delete). Facei mrrfidt-aici n interiorul controlului rmas i introducei expresia =Sum([cant]) i controlul este gata.
Toolbox
dencat
=nCost Total:"
j=Sum([cant])
~n
_________ l _
Fig. 6.6. Inserarea unui control liber (unbound) pentru calculare. Procednd n modul descris n fig. 6.6, facei ca n sectorul CodCat Footer s fie aa cum este artat n fig. 6.1.
48
9. n mod asemntor inserm controalele respective i n sectorul Report Footer, aranjndu-le n modul respectiv. . Pregtim n modul corespunztor i sectorul Page Foooter. 11^ Pentru sectorul Report Header, pentru titlul lui folosim butonul Aa din bara de instrumente (Tool Box), iar pentru dat ~ controale ca i pentru celelalte controale calculate. 12. Facei un click pe butonul PrintPreview din bara standard i observai ce ai realizat, ce v-a reuit i ce nu. 13. Trecei din nou n forma proiect i aranjai cum se cuvine toate controalele. Facei ca toate s aib aceleai dimensiuni dup nlime, aliniai-le la linia cea de sus (Top).
_ _ _ _ _ _ insert j Format lools Window
H [e!p
I it m
^ O l
! El &
Fig. 6.7. Modificarea dimensiunilor i alinierea controalelor n grup. n cazul dat, s-a selectat un grup de controale, s-a activat comanda Format, dup aceea a fost selectat opiunea Size, apoi To Shortest. Ca rezultat, toate controalele au devenit egale ca nlime cu cea mai scurt, n partea dreapt se va face alinierea spre dreapta. Ateniei nainte de a alinia sau modifica dimensiunile n grup, trebuie s asigurai ca controalele s nu fie suprapuse. Se admit doar granie comune. 14.Formatul controalelor. Facem un click-dreapta pe un control din sectorul Detail, apoi alegem Propeties din lista aprut i ca rezultat apare o caset cu lista de proprieti pe care putem s le atribuim controalelor. 15.Atribuim i celorlalte controale, din alte sectoare (CodCat Header, CodCat Footer, Report Header, Report Footer), astfel de proprieti, nct afiarea s coincid cu forma din fig. 6.1. 16.Dup ce am aliniat i modificat cum se cuvine dimensiunile i am atribuit proprietile respective n sectoarele Report Header i Page Header. uzsL~ cte o linie utiliznd butonul \ din ToolBox.
49
17. Aliniem ctre Top controalele din fiecare sector, apoi agm marginea de jos a fiecrui sector i ngustm pe vertical pna la maximum dimensiunea lui. 18. Raportul este gata. l salvm nc o dat. Titiul listei cu proprieti ne sugereaz c proprietile afiate snt ale controlului numit Textl5, control de tip TextBox. Facem c Border Style s aib valoarea Solid, iar Border Width 4 Hairline, ceea ce nseamn c controlul \a.t va avea grani format de o linie subire. n aceast list putem ob&erva i alte proprieti, care pot fi atribuite i ncercate. O datkstabilite proprietile pentru controlul dat, facem un dublu clck pe butonul aat (copierea formatelor), apoi cte un click peste toate controalele care dorim s preia aceleai proprieti. n cazul nostru este util s le facem (toate din Detail i cele din Page Header) cu aceleai proprieti.
T e x t B o x :
T e x llS
Format I Data I Event j other j Width . . . , . . . . . Height. . . . . . . . Back Style . . . . BackColor , , . , Special Effect , Border Style Border Color. . , . Border Width . Fore Color. . . . Font; Name . . . . . Font Size Font Weight-----Font Italic............ Font Underline . * . No Text Align I . . . , ,
All
I | f I q i a y '\ m ] t
Q psignV fiew ^
1&&>^- 3. , , 4, = = =
I Layout Preview ...............
4 CodCat Header
Report Footer
n treb ri, probleme, discuii 1. Cte sectoare pot fi incluse n raport? 2. Care este deosebirea dintre controale de tip legat (bound) i dezlegat sau liber (unbound)? 3. Care pot fi controale pentru calcule i cum pot fi create? 4. Cum s realizm calcularea totalurilor? 5. Care este deosebirea dintre organizarea calculrii totalurilor n cereri i n rapoarte? 6. Cum se face inserarea i lichidarea sectoarelor? 7. Care sectoare snt prezente n orice raport? 8. Cum s facem ca linia de trecere de la o pagin la alta s fie determinat aa cum dorim? 9. n ce scopuri putem folosi sectoarele Page Header i Page Footer, R eport H eader, R eport Footer? 10. Cnd pot fi folosite controale de tip Text i de tip Labei? 11. Ce este eticheta unui control? Cum se face alinierea controalelor? 12. Argumentai necesitatea proiectrii rapoartelor. Se poate oare de tiprit informaia i altfel? Care snt avantajele proiectrii raportului bazat pe o cerere n loc de o tabel? 13* Ce fel de informaie poate fi inclus n Report Header, n Report Footer? 14. Care este deosebirea dintre posibilitile calculului totalului pe grup n cereri i cele ale calculului totalului pe grup din raport?
51
7. Cereri cu parametri
n paragraful precedent a fost descris procesul de proiectare a unui raport. n acest paragraf vom vedea cum n baza raportului proiectat pot fi create alte rapoarte, cu informaie mai detaliat, rapoarte mai universale, mai comode i mai utile. Realizm urmtoarele: 1. Facem o copie a cererii PeCategRaportQ deja create, apoi cererii noi (obinute la copiere) i atribuim numele InflCategQ . 2. Copiem raportul PeCategRaportR i-i modificm numele (celui nou copiat) n InflC ategR . 3. Deschidem cererea InflC ategQ , adugm n gridul ei (vezi fig. 7.1) textul [Introduceti codul categoriei], apoi salvm cererea modificat. Cererea salvat trebuie deschis pentru a verifica dac ntr-adevr putem obine informaia doar pentru o categorie.
F ie ld : CodCat
= : Categorii
Sort; Ascending
C a te g o r ir ^ ^ 0 0
cod P roduct
8f iw :
o r: <l l
01
^Dup ce ap introdus ilifomiaa'&ici, acionai butonul i imediat apare cutia n care se cere s introducem codul categoriei. Introducei, de exemplu, cifra 1, apoi apsai OK i vei obine doar informaia din categoria cu codul 1.
Fig. 7.1. Proiectul cererii InflCategQ . 4. Deschidem raportul InfCategR n imaginea proiect i stabilim ca informaia s fie preluat din cererea cu parametri InflC ategQ . (Vezi instruciunile din fig. 7.2.) 5. nchidem raportul salvnd modificrile. 6. Trecem n fereastr Reports a BD i deschidem raportul recent creat. Pe parcurs va trebui s introducem codul unei categorii i OK, dup care vom obine informaia n form de raport. Astfel au fost dem onstrate urm toarele: 1) proiectarea unei cereri cu parametri; 2) schimbarea sursei de informaie pentru un raport; 3) modul de creare a unei alte cereri prin copierea proiectului unei cereri existente; 4) crearea unui raport nou prin copierea proiectului altui raport deja creat;
52
5) modul n care utilizarea cererilor cu parametri ca surse de informaie pentru rapoarte contribuie la lrgirea considerabil a posibilitilor extragerii informaiei.
InflCategR: Report
/ier Filtermv>. V.. . . . , . - O n fiV.v.'; v v O rder B y B yOn.,,.,. Caption, ...-.J ... RecordLocks,
.. I I . . J ...
^Report Footer
'Total genera!
ii
Pentru a schimba obiectul din care se ;age informaia ntr-un raport, e necesar: 1. gtim obiectul care dorim s fie n 1@ vechi. 2 . S deschidem&egt/aport n forma lui de proiect. S facem un click-dreapt a l i e i , apoi s ectm Properties. Obinem pe ecran caseta cu lista deTproprieti pentru ortul dat. 4 . S cfe^raici. Apare o list de obiecte, ofakcare trebuie s selectam ! i nou, ce trebuie s devin surs pentrh^portul dat. 5. Este util de fcut modme^ri i n titlul raportului. (Facei un click aici, apoi modificai titlul n Informaie pentru o singur categorie.) Ateniei Cmpurile obiectulu-surs nou creat trebuie s coincid cu cmpurile celui vechi. n caz contrar, va trebui de modificat i controalele din sectoarele respective ale raportului!
Fig. 7.2. nlocuirea sursei pentru Raportul InflCategR. n continuare se descrie un alt exemplu de modificare a cererilor i rapoartelor. 1. Facem o copie a cererii InflC ategQ deja create, apoi cererii noi (obinute la copiere) i atribuim numele Inf2CatDataQ. 2. Copiem raportul InflC ategR i-i modificm numele (celui nou copiat) n Inf2CatDataR. 3. Deschidem cererea Inf2CatDataQ, introducem n gridul ei [Introduceti codul unei categorii] O r [Introduceti codul altei categorii] n loc de informaia existent, n coloana CodCat, rndul C riteria. n cmpul DataVinz introducem [Introduceti data DeLa] O r [Introduceti Data PinaLa ] in rndul Criteria. 4. Salvm cererea recent proiectat (vezi proiectul din fig. 7.3). 5. Deschidem cererea Inf2CatDataQ pentru a verifica dac ntr-adevr putem obine informaia conform restriciilor date. 6. Deschidem raportul InO C atD ataR n imaginea de proiect i facem ca sursa de informaie s fie cererea nou creat - Inf2CatDataQ. (Vezi paragraful 4.) 7. Salvm raportul InO CatD ataQ .
53
8. Deschidem raportul recent obinut (pe parcurs va trebui s rspundem de patru ori la prentmpinrile respective) i vom obine raportul cu informaia filtrat.
T^rec^adat are dpi param etri n Introduced codul unei categoriei Field C odC ai " cmpulTodCaJ^i vktrebui de Table: C ategorii rspuns depkfa ori 3 Sort A scending premtp^inrile re sp g c lb ^ r^ ^ ^ Show:. i------.................................................. C riteria: [Introducei codul unei categonei] O r [Introducei codatei categorii] De asemenea snt^oi pararnhri -n cmputDatjHnn z, la care va4 _ j trebui de n ^ u n s . Deci cererea ^ Field: D ataV inz dat a rp 4 p a ra m e tri, care Table: D etV ing m b u n a constitui; un fel de _ _ la extragerea informaiei. _
Show : ____ j,
Cancel
Informaie pe categorii
1471
jc o d c t ^ e n c a t :
.. " p n M a s : ^ ^ 08
C o s t to ta l: C o s t to ta l: to t !: 1381 5 7 0 7 .5 720
T o ta l g e n e i al:
Page:
iii
< 11
4 Report Header
_
i L...
.....
Infornlatiepei lateflorii
......
force New Page Row Or Col Keep Together. ---------1 =Date() Visible.......... Can Grow, junMas:jc aCan it Shrink. . . .
Section: GroupHeader2
fS fT a it
I L ,, f Page Footer 4 Report Footer
, .... .... -.I.IIIIII. III I \ llU M L M I IIJ I.II
. ^
Frm at I T 1 E v / i
0ther
A "
\j='Total cjener
. . I I.. .
II
Se deschide proiectul Raportului, sKace un clickyBreapta, de exemplu, Bici, /bi se selecteaz Properties \ de propriet/i pentru sectorul Detail (acesi sector a fost ales). Facem un cliak aid i din list alegem No la proprietatea Visible. Dup aceea facem un click i pe CoaCat Header, apare caseta respectiv, apoi facem No la proprietatea Visible. Astfel am obinut o nou form de afiare a informaiei. Mai jos este prezentat raportul n care nu snt vizibile sectoarele Detail i CodCat Header.
Fig. 7.5. A scunderea unor sectoare din raport. Facem o cop ie a raportului P eC a teg R a p o rtR , i m odificm num ele n P eC a teg T o ta lR , l deschidem n im aginea lui de proiect, apoi urmm instruciunile prezentate n fig. 7.5. Dup ce am fcut m odificrile necesare, salvm proiectul i, de fapt, am obinut un raport nou. n tr e b r i, p r o b le m e , d iscu ii
1. Descriei avantajele i dezavantajele cererilor cu parametri. 2. Descriei cum pot fi proiectate rapoarte cu multe funcii i cum pot fi folosite ele (funciile). 3 . Proiectai un raport cu totaluri pentru fiecare produs vndut din fiecare categorie.
Proiectai un raport pentru a afia informaia despre (s se includ maximul detalii i s se explice cum poate fi simplificat): 1) costurile totale ale produselor din dou categorii anumite (mpreun); 2) informaia n detaliu despre intrri i ieiri; 3) stocurile curente ntr-o anumit zi; 4) produsele repartizate pe categorii; 5) produsele intrate (n ordinea intrrii Ion: 6) produsele vndute ntr-o perioad oarecare
[r'T'jr; Un astfel de obiect se numete Formular (n englez Form). Acest \poie obiect poart numele Baza isgonine 4 (patru) com^nenteTJbutoane i un control de tip etichet. Evident c, avnd pe ecran un astfel de obiect, este clar ce putem face.
H .b If
Fig. 8.1. Un exemplu de formular instructiv care poate aprea la deschiderea BD. 8.1. C re a re a u n u i fo rm u la r i in serare a (p lasarea) u n u i b u to n n el
Acionm n modul urmtor: 1. Trecem pe pagina Form s a BD i acionm butonul New, far a ataa (lega) vreo tabel sau cerere, apoi alegem opiunea Design. Astfel, vom avea pe ecran imaginea proiect a unui nou formular n etapa de proiectare. -r1 -------------------------------- Casta cu instrumente. lickm aici, apoi trasm
.
emnea ca i la inserarea controalbtar n rapoarte). Dac lipsete, atunci clicknraici i caseta apare. Sectorul ~cu gWd n care pot fi plasate butoanele i controlul. Fig. 8.2. Imaginea proiect a unui formular n etapa iniial de proiectare.
56
2. Inserarea unui buton de comand n formular. a) Proiectm i salvm macros-ul OpenPeCategRaportR (vezi fig. 8.3).
OpenPeCategRaportR : Macro
1O penR eport
Report Name View Filter Name
wnere LoncHCion
Pare a fi convenabil de a atribui denumiri care sugereaz coninutul. n cazul nostru macros-ul va trebui salvat cu numele OpenPeCategRaportR.
Fig. 8.3. Proiectul macrosului care va fi acionat la clickarea unui buton i va deschide raportul PeCategRaportR. b) Facem un click n interiorul proiectului formularului n curs de proiectare, apoi facem un click pe butonul Command Button din ToolBox (vezi fig. 8.2). Observm c de mouse s-a agat ceva, trasm un patrulater, cam acolo unde se sugereaz n fig. 8.2. Ca rezultat, imediat apare o caset de nsoire Command Button W izard; clickm Cancel ca s-o nchidem, apoi facem un click-dreapta pe butonul deja plasat. Din lista aprut alegem Properties (de fapt far proprietatea On Clck determinat) i obinem imaginea din fig. 8.4.
ie Command Button: CotnmandO
Fcnd un click aiciTSpre lista de macros-uri deja create. Trebuie s alegem numele OpenPeCategRaportR, asigurnd ca atunci cnd se face click pe buton, starteaz macrosul dat, care deschide raportul respectiv.
On D WClick,............. On Mouse Down. On Mouse Move On MouseUp, On Key Down.. On Key U p ................ On Key Press.
Fig. 8.4. Atribuirea unui macros proprietii On Click. c) Facem un click n interiorul butonului, constatm apariia unei bare verticale licrind, semn c putem modifica denumirea butonului creat. Introducem numele InformCom pleta.
57
d) Facem un click pe pagina AII din boxa Com m andButton..., apare toat lista de proprieti. Utilizm bara Vertical Scrolling pentru a afia lista din fig. 8.5. e) Folosind semnele de pe conturul butonului (dac nu snt, atunci facem un click ca s apar), modificm dimensiunile lui ~ ~c s ncap denumirea. Agndu-1 de colul din stnga sus, l putem plasa unde-i mai convenabil. f) Salvm formularul atribuindu-i numele Rapoarte.
* Command Button: CommandO Format j Data | Event ] Other All
Fore Color.................. -2147483630 Font M a r n e M S Sans Serif Pont Si ze, . . . . . . . . 8 Font Weight................Normal Font Italic. . . . . . . . N o Font Underline........... N o Shortcut Menu Bar, . ControlTip Text. . . . Se va afia raportul cu informaia completa)
Clickai aici: pentru culoarea denumirii; ^pentru mrimea literelor. Acest text apare pe un tirmHa poziionarea (fra a face click) mouse-ului pe butonul dat.
Fig. 8.5. Atribuirea proprietilor de Form at i de Sugestie (ControlTip text). Pentru verificare, n pagina Forms a BD, selectm formularul Rapoarte, apoi acionm Open (sau facem un dublu click pe numele formularului). Trebuie s apar imaginea din partea de sus din fig. 8.6.
Acionnd butonul creat H| InformCompIeta din formularul dat Rapoarte, apare -raportul Peb ategRaportR, deoarece macros-ul ataat acestui buton la evenimentul On Open deschide anume acest raport (fig. 8.3, fig. 8.4).
i PeCategRdpoitR : Report
Informaie pe categorii
147/01
CodCat: DenCat: jcod den:
"""fu n M ^
Pachet 0.5L Pachet 0.5L jJ 400 10 2.5 2.5
^o st: ate
1000 1 25 1
1 Lactate
-4
Page! <H
5I [.apte
Lapte
_>j
Fig. 8.6. Verificarea n aciune a butonului InformCompIeta. n calitate de exerciii, n modul cum a fost creat butonul IndormCom pleta, deschidei formularul Rapoarte n imagine de proiect i plasai n el nc 3 (trei butoane): Inform Pe 0 Categ, Inform Pe 2 Categ i Data, Inform doarTotaluri, care
58
deschid respectiv rapoartele InflC ategR , Inf2CatDataR, PeCategTotalR. Ca rezultat, formularul R apoarte trebuie s apar n forma din fig. 8.7.
61 Rapoarte: Form
"'Controlul dat se proiecteaz n mod analog cum s-a proiectat denumirea n sectorul Report Header ia proiectarea raportului.
4
Fig. 8.7. Formularul Rapoarte cu butoanele care deschid anumite rapoarte. 8,2. C re a re a fo rm u la ru lu i de b az B aza 1. Crem un macros care deschide formularul R apoarte (fig. 8.8).
O p e n R a p o a it e : M a c r o
? ;
Comment Deschite formularul Rapoarte
Action OpenForm
Action Arguments Form Name View Filter Name W here Condition D ata Mode Window M ode Rapoarte Form
Normal
Fig. 8.8. Macros-ul O penRapoarte deschide formularul Rapoarte. 2. Trecem n pagina Form s a BD, facem un click pe New i, far a lega vreun obiect de formularul n curs de proiectare, facem click pe OK, obinem imaginea proiect a formularului nou. 3. Procednd n modul descris mai sus, subparagraful 8.1, proiectm n acest formular butonul cu numele Rapoarte. S fim ateni ca proprietii On Click s-i atribuim startul macros-ului OpenRapoarte. 4 Avind butonul R apoarte deja creat, nchidem formularul atribuindu-i numele Baza. 5. Deschidei formularul Baza facnd un dublu click pe numele lui (sau selectai-1. apoi Open). 6. n formularul deschis Baza facei un click pe butonul R apoarte i ca rezultat trebuie s apar i al doilea formular Rapoarte (creat anterior) deschis, nchidei ambele formulare.
59
Remarc. Dac ceva nu-i astfel cum este descris, atunci trebuie de verificat dac ai atribuit corect startul macros-urilor respective la crearea butoanelor.
Ne asigurm s fie toat proprieti. Apoi, folosind bara Scrolling, r em lista aa cum este artataici, apoi verificm dac macros-ul apoarte este n lj^t i este^atribuit. Dac macros-ul dat nu este n list, atunci trebuie s creai acest macros i s v ntoarcei din nou aici.
3. Trecem pe pagina Macros, selectm macrosul OpenRapoarte, apoi facem un click pe butonul Design i ca rezultat pe ecran apare imaginea-proiect a acestuia.
Dac imaginea difer de cea artat n fig. 8.8, atunci trebuie s modificm proiectul, apoi s-l nchidem salvnd modificrile (s alegem Yes la prentmpinrile respective). _______ > ::[
SI Baza: Form
8
ffT
-/* y&m
. i 5 > 8 i 1 i 2 i 3 ' i 4
R e ta il
iToolbox
Rapoarte
t
Au
abl Q
Acionm^ici ca s apar cutia ToolBox (dac nu este pe ecran). Facem un click pe butonul acesta, de mouse se aga ceva, apoi poziionm butonul u n d e^aici. mndu-1 apsat, micm mouse-ul pin uttSgya aici, relaxm mouse-ul i ca 3ine un patrulater de tip Etichet "eim ^ Labei), m care~puTerrrTntrQducG4extuI cuynit. >electndu-l, apoi folosind semnele de pe frontier, ca i la controale n rapoarte, putem modifica dimensiunile lui. Fcnd un click-dreapta pe acest control, apoi alegnd Properties din lista de opiuni, pe ecran apare lista cu proprieti cu ajutorul crora putem alege culorile, mrimea, tipul fontului etc.
Fig. 8.10. Inserarea unui control de tip etichet (Labei) pentru comentarii.
60
| Rapoarte!
zl
Record: H | 11 ~ of 1
Fig. 8.11. Formularul Baza cu dou obiecte (un buton i un control de tip Labei).
r~ Z F
Form Name View Filter Name Where Condition Data Mode Window Mode
zi
Baza Form
Action Arguments
Datorit faptului c numele acestui macros este AutoExec, el starteaz imediat ce este deschis BD. Evident c acestui macros i putem ataa i alte aciuni.
Normal
Baza s fie incluse nc dou butoane, far a le atribui aciuni la activarea lor. Acest lucru poate fi realizat ntocmai cum a fost inserat butonul Rapoarte, ns s fie excluse procesele de creare a unor macros-uri i atribuirea proprietilor On Click a aciunilor
de deschidere a lor (macros-urilor). Ca rezultat trebuie s obinei o imagine a formularului Baza (fig. 8.13).
SE Baza: Foim A cio n ai b u to nu l potrivit!
Cereri
Rapoarte
Deoarece proprietii On Click pentru butoanele Intrri sau Ieiri i Cereri nu i s-a atribuit nici o aciune, la clickarea lor nu se va ntmpla nimic. La clickarea butonului Rapoarte se va deschide formularul Rapoarte cu cteva butoane n el, care pot deschide rapoartele respective.
Record; | <I I
> I M of 1
Fig. 8.13. Formularul Baza, care se deschide automat dup deschiderea BD. nchidei i deschidei baza de date de vreo cteva ori ca s verificai dac formularul Baza se deschide automat i, n caz de necesitate, facei modificrile respective ca s asigurai acest lucru. Remarc Proprietilor On Click pentru butoanele Intrri sau Ieiri i Cereri li se vor atribui valorile cuvenite mai trziu.
Action
zl
Fig. 9.1. Proiectul unui macros care deschide o cerere. 3. Facei un click n interiorul proiectului formularului nou i, n modul descris mai sus, creai un buton, atribuindu-i proprietii On Click startul macrosului OpenCostAman (vezi fig. 9.2).
Command Button: CommandO
I 1 I 2 I 3 I
Format j Data j Event | Other Font Si ze, , , .......... 10 Font Weight , . . . . . . Extra Bold Font I t a l i c , , . . , . . , Font Underline , Shortcut Menu Bar.. ControlTip Text. . , . Help Context I d . , , , Tag............ On Enter. ............... On Exit. . . . . . . . . . On Got Focus.......... On Lost Focus,, . . , On Click. . . . . . . . . . OpenCosnAman Informaii despre toate vinzarilelr 0 No No
4 Detail
Mrixnea fontului -10. "ont evideniat Extra B S J La poziionarea mouseului pe buton apare pe un timp scurtnjesajul. La^li^k^aDutonului starteaz macros-ul. Semnele (ptrate negre pe contdrul butonului) nesdgereaz c ^Proprietile date snt atribuite butonului marcat.
! Fig. 9.2. Atribuirea unor proprieti pentru un buton. 4. Salvai formularul cu numele Cereri, apoi nchidei-1.
63
5. Trecei pe pagina Forms i deschidei formularul (cu un dublu click sau selectai-1, apoi Open), apare formularul cu butonul respectiv. Facei un click pe butonul creat i se va deschide cererea respectiv, (a se vedea imaginea n fig. 9.3). Ateniei Ferestrele pot fi una peste alta, agai-le de titlu i permutai-le, iar, agnd marginea ferestrei, putei modifica dimensiunile ei. Acionai n modul cuvenit pentru ca pe ecran s fie imaginea din fig. 9.3. 6. Trecei n proiectul formularului Cereri i inserai n ele nc dou butoane: Total Pe Categorii i Total pe zile, la acionarea crora s se deschid cererile TotlGR i TotalPezile, respectiv. 7. Inserai i un control de tip Labei (pentru informaie explicativ). 8. Salvai formularul, nchidei-1, apoi deschidei-1 din nou. Ca rezultat vei obine o imagine similar cu cea din fig. 9.4.
Facnd un click aici, se selecteaz o coldan, sapoi, fcnd un c/lick aici, tabela Coi t Aman va fisort^lMn cretere. AstfiTputem sorta informaia dup orice coloan. Fcnd un click n interiorul tabelei-cereri, cererea devine activ, apoi, facnd un click pe butonul respectiv, obinem proiectul cererii date i putem face chiar i unele modificri pentru a obine ceea ce dorim. La nchiderea cererii, putem salva i modificrile, dac dorim.
Den came Lapte Apa Came Apa Apa Lapte came came Lapte
UnMas Kg L But.2L Kg But.3L But.2L L Pachet Ikg Pachet 0.5 kg Pachet 0.5 L
Cant
05/05/01 100 06/05/01 20.7 06/05/01 30 06/05/01 50.25 05/06/01 100 30 06/05/01 50.5 06/05/01 30 11/05/01 20 /06/01 l i /05/01 10 15/07/01 0 i > 1 |* * | of 10
cord: H | _jl
P ret 30 5 2 25 3 2 5 30 15 2.5 0
butonului
1. Creai macros-ul OpenCereri (fig. 9.5). 2. Deschidei formularul Baza n imagine de proiect. 3. Facei un click-dreapta pe butonul Cereri, alegei Properties din lista aprut, apare lista de proprieti, atribuii valorile cuvenite i, ca rezultat, pe ecran se va obine imaginea din fig. 9.6.
64
4.
Acionai unul din butoanele ont Controlul de tip Labei cu comentarii. toanele care asigur trecerea de la
imaginea-proiect la cea de formular
i^~pmpriiL-zis (ijnvers").
Fiecare dintre achite butoane, fiind acionate (facnd cte un click pe ele), deschide o anumit cerere, cea inclus n macros-ul respectiv ataat la proprietatea On Click a butonului.
Fig. 9.4. Fiecare buton din formular asigur deschiderea unei anumite cereri.
1 M O p e n C e ie r i : Ma< Action ^ JL Action Arguments Form Name View Filter Name W here Condition D ata Mode Window Mode Comment | 1^ | jd
Normal
Acest macros va deschide formularul ereri n imagine de brm. In calitate de arametri se mai pot folosi i alte posibiliti, care pot fi utilizate la un alt nivel de proiectare a BD. Valoarea Normal este cea oportun n acest caz.
Fig. 9.5. Proiectul macros-ului OpenCereri. 5. Facei un click pe butonul cereri n formularul Baza i ca rezultat trebuie s se deschid formularul Cereri. 6. In caz c acest lucru nu se ntmpl, verificai, mai nti, dac macros-ul respectiv este atribuit proprietii On Click pentru butonul Cereri, apoi dac macros-ul O penCereri are ca aciune deschiderea acestui formular.
Detail
..---7......-..:..r
ControlTip Text,,,... La acionare se va deschide formularul Cereri Help Context Id , . . , 0 Tag........................ On Enter............ OnExit.. . ........... , On Got Focus, On Lost Focus..,.. On Click.. . . . . . . . . . OpenCereri nw
.
Creai un formular nou i inserai cte un buton pentru a deschide fiecare obiect creat. Argumentai comoditatea sau incomoditatea utilizrii formularelor cu butoane pentru deschiderea obiectelor.
66
Field:
Table:
Soft Show:
Cod DetVire
CantV DetVinz
DataVinz DetVinz
C riteria:
or:
TW ~
0 .
UnMas Produc
Pret Produci
codcat Product
_ 0
DenCat Categofi
Descrieri Categorii _ 8
Ateniei nainte de a salva fiecare dintre proiectele din fig. 10.1, modificai-le dimensiunile respective i poziionai-le pe ecran anume n acest mod. Astfel se va asigura afiarea tabelelor anume cu aceste dimensiuni i n locurile respective.
2. Crem macros-ul cu proiectul din fig. 10.2 i l salvm cu numele IntrariD eM arfa. 3. Trecem pe pagina M acros din baza de date i deschidem (printr-un dublu click sau selectare i Open) macros-ul IntrariD eM arfa. Ca rezultat trebuie s obinem imaginea din fig. 10.2.1. 4. n cazul dac tabelele nu snt aranjate corect, deschidem unul cte unul proiectele celor 3 cereri, facem modificri la coloane, modificm dimensiunile ferestrelor, poziiile lor, apoi le salvm ca s obinem cele scontate.
Fii ateni ca, la selectarea rndului respectiv din Action pentru cererea datjdci s^-BpedtlHQsau CategoriiQ pentru a deschide cererile respective. Cererea trebuie salvat cu numele IntrariDeMarfa.
Fig. 10.2. Proiectul macros-ului IntrariD eM arfa care deschide trei cereri.
Infxj
C od C antV D atoYm
300 100 200 78 3oo 45 679 45 100 39 570 05/05/01 06/05/01 r 06/05/011 06/05/01} 05/06/01 ; 06/05/011 06/05/01 j 11/05/011 11/06/011 11/05/011 12/07/01!
cod
den
UnMas
P'et codcat
1 Came 3 Came
Record: l < h I f
co rd : JlLJl
Pozimatffd mouse-ul pe desprire a dou coloane (cmpuri), putem aga i modifica astfel limea coloanei, n imaginea dat avem trei liste obinute prin deschiderea cererilor respective.
------------------------- "T
68
Concluzie. Acest mod este mai accesibil: nu este necesar de fiecare dat s modificm poziiile i dimensiunile tabelelor. In plus, observai c n tabela din stnga se conin doar 3 coloane, i nu 4, aa ca n tabela DetVinz. Remarc. Pentru organizarea introducerii informaiei despre vnzri, n proiectul macros-ului respectiv va trebui n loc de cererea IntrariCantV de inclus cererea VinzariCant, care, de fapt, se bazeaz pe aceeai tabel, ns n proiectul ei, n loc de cmpul CantV, trebuie de inclus cmpul Cant. n rest, totul este la fel. In calitate de exerciiu, proiectai mai nti cererea VinzariCant (numai dac aceast cerere nc nu-i proiectat). nainte de salvare, poziionai-o n partea stng cu dimensiunile corespunztoare. Proiectai macros-ul cu numele lesiriCant (asemntor cu cel din fig. 10.2) (s nu fie inclus operaia de deschidere a cererii CategoriiQ) i salvai-1. Pentru verificare, deschidei-1 i verificai dac apare imaginea din fig. 10.3 (observai c tabela Categorii lipsete, deoarece la vnzri nu este necesar).
Ar fi bine dac n acest loc ar fi o 2 tabel, n care s se 2 arate stocurile 2 curente, pentru a 1 verifica vizual 1 cantitile respective. 3 | Observai diferena: 3ci este o alt 0 coloan din tabela DetVinz.
deit
Pret codcat
i 7 6 4 2 3 5 5 7 0 ecord: iii
06/05/01 06/05/01 06/05/01 ym 05/06/01 ; 06/05/01 06/05/01 I I 11/05/01 IB ' 11/06/01 Hi 11/05/01 II 12/07/01 i i 12/07/01 V 15/07/01
'
30 30 15 SLQaine 4 Lapte'' 5 5 Lapte PacheTtT5Lv^ 2.5 6 Apa But. 2L . 7 Apa But. 3L 3 0 0 Q i Came 2 Came
Record; I; M
| |
1 M * 1of 7
1 >
69
2. Proiectm cererea RamasInStocQ (nainte de salvare, poziionm proiectul cu dimensiunile respective n partea dreapt-sus a ecranului).
ai1 RamasInStocQ : Seleet Query
Field:
Table:
Sort: Show: Criteria: or:
cod RamasInSto 0
Den1 Ramai nS 0
T ofcalRamas RamasInStocT__ 0
Dimensiunile ferestrei-proiect trebuie s fie cam aceleai ca la cererea CategoriiQ. Ea trebuie plasat, nainte de salvare, tot n acelai loc al ecranului. Acest lucru ne va asigura ca tabela respectiv s apar anume n acel loc i s ocupe doar spaiul rezervat ei.
Fig. 10.4. Proiectul cererii RamasInStocQ. 3. Modificm ultima aciune din macros-ul DetaiiStocMM. (n loc de aciunea OpenTabele includem aciunea OpenQuery, apoi, mai jos, n loc de numele tabelei RmasInStocT inserm numele RamasInStocQ.) 4. Salvm macros-ul DetaiiStocMM, apoi l deschidem cu Open pentru a verifica dac apare tabela cu informaia despre stocuri. Dac informaia nu apare, atunci corectm cele necesare. 5. Proiectm i salvm un macros IesiriCantM (vezi proiectul n fig. 10.5).
1M
Avei grij ca pentru rndurile (aciunile) de Comment I^ Action L _ ^ __ - - -aici, atunci cnd vor fi OpenQuery \ ^eschide VinzariCant uescl1c adi^tQ -J /delectate primele dou OpenQuery starteaza rnacrosul DetaiiStocMM S S I aciuni, s fie numele RunMacro p 1 -VinzariCant sau numele Action Arguments / ProductQ, respectiv. i g
IesiriCantM : Macro
'
DetaiiStocMM
Fig. 10.5 Proiectul Macos-ului IesiriCantM . 6. Trecem pe pagina M acros i deschidem macros-ul IesiriCantM . Vom obine pe ecran imaginea din fig. 10.6.
Concluzie. Afiarea pe ecran a tabelei cu informaia despre stocurile curente asigur ca informaia respectiv s fie verificat vizual. O verificare, cel puin vizual, n mod sigur, poate diminua volumul de erori la introducerea cantitilor de marfa vndut.
70
Cod
Cant
cod
den
UnMas
Pret codcat 30 15
cod j P eni
1 4 6
RamaslnStocQ: S
20.7
Pachet 1Kg ; 30
5
2.5
2
3
30
20
5 >
1 0
400
But. 3L 3 7 Apa 11/05/01 0 0 11/06/01 Atragem atenia c informaia din 11/05/011 12/07/01 12/07/01 15/07/01
5 . 7;^ o U1
100
aces^tabel este adecvat la momentul deschiderii macros-ului IesiriCantM. Pentru a rennoi informaia, trebuie de nchis toate aceste tabele, apoi de deschis din nou IesiriCantM (prin nchiderea tuturor tabelelor i prin startul din nou a macros-ului IesiriCantM).
Fig. 10.6. Imaginea ecranului la introducerea informaiei despre vnzri. 10.4. U tilizarea u n u i fo rm u la r la in tro d u cerea in fo rm a iei desp re in tr r i sau ieiri Incomoditatea evident la utilizarea procedeelor precedente de introducere a informaiei const n faptul c, de fiecare dat, trebuie s inem minte care macros trebuie de deschis. Acest lucru poate fi depit prin utilizarea formularelor. Deci, din nou este necesar de fcut modificri, care vor conduce la complicarea n continuare a procesului de proiectare a BD. n schimb, pentru utilizatori, includerea unor noi posibiliti, obiecte va face BD mult mai comod la exploatare. In acest scop acionm n felul urmtor: 1) proiectm un formular nou, care conine dou butoane: In trri i Ieiri. 2) atribuim proprietilor On Click aciunile de deschidere a macros-urilor IntrariD eM arfa i IesiriCantM , respectiv, pentru butoanele In trri i Ieiri. (vezi fig. 10.7).
Command Button: Command!
All
j Moc
-:i ^ A c io n a i u n u
I.....
In tr r i
1
nr.
F
le s ir i
Shortcut Menu Bar, , a j ControlTip Text, , . . Pentru infirma'ia la iesire, vinzari Help Context Id , 0 Tag.................................................................................. On Enter. . t .1^1 On E x it, . , ................. On Got Focus............ On Lost Focus......... 1 On C l i c k I e s i r i C a n t M On Dbl Click. . . . . . . jd .
/.
Y \
'
Data
] Event ] Other
AH
4- Detail
*1
Acionai unu
1 ! 1 f
Help Context d , , . , 0 T a g ............ On Ent er . . . . . . . . . On E x it...................... On Got Focus............ On Lost Focus . . . . . On Click. . . . . . . . . . On Dbl Click ...............
"
Intrri Ieiri
J
IntrariDeMarfa
zJ
Ieiri
Acionarea butonului Intrri va afia pe ecran imaginea din fig. 10.2, iar acionarea butonului esiri cea din imaginea 10.6.
Record H |
i * J of i
10.5. Deschiderea formularului Intrri Ieiri prin acionarea butonu lui Intrri sau Ieiri din formularul Baza
1. Proiectai macros-ul Openlntrarilesiri (vezi proiectul n fig. 10.9). 2. Deschidei formularul Baza n imaginea-proiect, iar butonului In trri sau Ieiri atribuii-i proprietile respective (vezi fig. 10.9). 3. Salvai formularul Baza, apoi deschidei-1 n forma de lucru. 4. Acionai butonul Intrri Ieiri i se va deschide formularul Intrri Ieiri. 5. Acionai butonul Intrri i vei obine imaginea din fig. 10.2. 6. nchidei toate tabelele afiate n imaginea din fig. 10.2. 7. Acionai butonul Ieiri din formularul Intrri Ieiri; trebuie s apar imaginea din fig. 10.6. 8. nchidei tabelele artate n imaginea din fig. 10.6. 9. nchidei formularul Intrri Ieiri.
Remarc. Dac ceva nu va decurge n modul descris mai sus, atunci trebuie de gsit etapa n care ai procedat greit. Verificai nc o dat toate proiectele i valorile atribuite proprietilor butoanelor respective.
72
Action Arguments Form Name View Filter Name Where Condition Data Mode Window Mode Intrri Ieiri Form
Norm al
F o rm a t] D a c a ]E v e n t )O th e r A ll J S h o rtc u tM e n uB ar,. A oti ^o n ^ ro ^P^ * -eV d e sc h id efo rm u la ru lIn tra rile sirij H e lpC o n tex tId.... 0 .............. nE nter.......... Intrri sau Ieiri | O ,L O nE x it, O nG o tF o cu s...... O nL o stF o cu s..... O nC lic k ....... . O p e n ln tra rile siri O nD b iClick,,.,,..
....
Fig. 10.9. Proiectul macros-ului O penlntrarilesiri i atribuirea proprietilor pentru butonul In trri sau Ieiri. ntrebri, probleme, discuii 1. Argumentai comoditatea modurilor de introducere a informaiei de pe poziiile utilizatorilor i proiectanilor innd cont de nivelul diferit de competen a acestora. 2. Propunei procedee, care, dup prerea dv., snt mai simple i mai comode (att pentru proiectani, ct i pentru utilizatori). 3. Propunei alte formulare, care pot fi deschise n alt ordine - scopul fiind unul: asigurarea lucrului mai comod, att pentru utilizator, ct i pentru proiectant. 4. De ce la afiarea listelor despre categorii i produse se folosesc cereri? 5. Care este cauza c, din cnd n cnd, la introducerea informaiei la ieire, trebuie de nchis toate listele, apoi de startat din nou macros-ul respectiv? Ct de des trebuie s facem acest lucru? Argumentai. 6. Propunei alte procedee de rennoire a informaiei despre stocurile curente. 7. Propunei alte formulare, cu comentarii mai multe i mai detaliate, la introducerea informaiei. 8. Este oare convenabil ca n formulare s se fac comentarii voluminoase? Argumentai. 9. Care lucruri par a fi incomode la introducerea informaiei? Cum pot fi nlturate? 10. Ce date noi mai snt necesare la introducerea informaiei i cum putem pregti astfel de informaie la nivelurile de complexitate descrise mai sus? 11. Caracterizai posibilitile reale ale unui utilizator nceptor, necesare pentru nsuirea procedeelor de lucru descrise mai sus. Care dintre ele, dup prerea dv., pot fi nsuite ntr-un timp relativ scurt? Argumentai. 12 . Gndii-v cum i unde, la locul de activitate, ai putea utiliza o BD similar ca structur.
73
den UnMas Pret codcat
cod Product
UnMas Product
Pret Product
codcat Product
Lista de mrfuri obinut de aceast cerere va fi utilizat ulterior la proiectarea unui control de tip ListBox. Ordinea coloanelor n aceast cerere este important. Nu este necesar de inclus toate cmpurule din Product. Lista de produse va fi sortat n cretere (Ascending).
TFTT"
Fig. 11.1. Proiectul cererii, care va fi utilizat la crearea unui control de tip ListBox. M b .
sectorul Detail nu In prima etapa4i proiecti lele sau se este nici un Cont cmpuri a insereaz, sau < Da,c li^ta obiectului legat < $ -\ lipsete, facei ur i un pfick pe lipsete, facei un click aicT,
^ant i DataVinz, apotrecei- sectorul ^taJFal formularului (aseme#a ca i la ^ unui raport^r^njai-le aa cum 6ste aici, apoi trasai 'controlul atesta (ca p a trasarea ikjs controalelorg^jatPtrfotaluri la proiectarea Cant .4* abl Q (I 17 T DataVinz 1 itorhimediat apareJista cu proprieti. Completai valorile proprietilor n modul indicat. Explicaii List Box: Marfa va fi luat din A ll Format | Data | Event j Other lista prezentat decererealbistaProdQ, cu N a m e M arfa 5 coloane, dem isurile coloanelor se vor Control Source,, -yafjja^Jtirl^coloanelor vor avea Row Source Type Table/Query fimensiunile, informaia va fi luat din Row Source ListaProdQ m m a coloan i inclus n coloana cu Column Count 5 Column Heads., Yes . nele cod al tabelei legate de acest 1cm ;2cm ; 2cm ; lcm; 0,505cm ^ Column Widths, : adic n tabela DetVinz. Controlul Bound Column,, dat are numelej^Jarfa.
2. Trecem pe pagina Forms, clickm New, va aprea o fereastr nou i va fi necesar de legat acest formular de tabela DetVinz (legtura se face selectnd denumirea tabelei dintr-o list ataat unei cutii), clickm OK i vom obine imaginea-proiect a unui formular nou. n acest caz, deosebit de cele proiectate anterior, formularul va fi legat de tabela DetVinz. 3. Dup ce am ndeplinit ntocmai indicaiile din fig. 11.2, facem un click-dreapt ntr-un loc liber n sectorul Detail, ca rezultat apare o list, apoi n lista aprut selectm Tab O rder, apare o alt caseta (vezi imaginea din fig. 11.3). n continuare acionm conform indicaiilor.
f j lesiriFom: Form
Format j Data I Eveht j Other Record Source...... betVinz Filter,, , _ _ _ _ _ _ _ I Order B y. . . . . . . . . . . . I Allow Filters, , ..... res Default View....... "V tew jJU lQ Sjed. , , , , Datasheet A lowEditTrrrrT^r^JeJ
Facem ca ordinea controalelor rTI fie anume aceasta (urmai (indicaiile), apoi cT cK amOK. Facem un click-draipta' undeva aic Detail, seje^fcatrroperties i apare list degp&pfeti n care trebuii s inserai/ atasheet pentru Default View i yiews
Buildgvent, !i TabOrder,,
Custom Order:
* Form &
Form Footer
Click to select a row, or click and drag to select^ multiple rows, Drag selected row(s) to move them to desired tab order,
Allowed. ^ ^4!_ k k y
afiarea formularului n forni de tabel. Remarc. Cutiile Tab Order, Form nu snt afiate n acelai timp, aici snt prezentate mpreun pentru explicaie.
Cancel
Auto Order
Fig. 11.3. Ordinea cmpurilor (Tab O rder) i modul D atasheet de afiare a for mularului. 4. Dup ce am ndeplinit toate aciunile indicate n fig. 11.3, acionm butonul respectiv pentru a trece la imaginea D atasheet a formularului (adic s vedei cum apare formularul n form de list). 5. Avnd imaginea D atasheet View, ncercm lucrul cu utilizarea controlului ListBox (fig. 11.5).
75
llP I ijia
: | Design View
lesfForm
CodMarfa:
cod
DataSaeet view
imagine n form d tabel,
06/05/* 50.25 etVinz. 100 05/06/011 | UnMas |Pret h i c f^ c e s ta este un control de I i i 13 tip ListBox, care leag (But. 3L But. 2L 2 3 tabela Product de DetVinz 2 S Pachet 0.5Kg 15 (prin intermediul primei 2 Pachet lKg 30 coloane din cererea 30 2 Kg ListaProdQ i coloana Pachet 0.5L 2.5 1 Cod din DetVinz). 5 1 L Trebuie de lrgit controlul
;;" 5 1 H M i of 13
Denumiril^i^lotielor snt cele IcKetele din formular, ordinea lor este stabilit n caseta Tab BataVin Order, forma n care apare *415/05/01] Informaia este ca i o tabel 2074 esta-i Datasheet View). ^ 1 30 Acestea snt controale legate direct
N <
cod.
Fig. 11.4. Formularul lesiriForm n D atasheet View.
esriFonn : F c
C odM arfa: |
cod 6 3 Req 2 1 5 4
05/135/01 100 06/05/01 20.7 06/05/01 30 06/05/01 50.25 100 Pret | den * ^ | UnMas !But. 3L Apa 13 2 Apa ^ > But. 2L Came \ Pachet 0.5Kg 15 PacWt lK g 30 Came \ 30 Came V Kg \ \ Pachet GS5L 2.5 Lapte 5 Lapte
\ w m
lesiriFomi : Form
C odM arfa:
fZSIxl lCant:|DataVim:: 1 l
10 11/05/011 | ty*? 12/07/01 12/07/01 ', 16/07/01 P r e t I cc
2 2 li 1 1
L_ ... Vizualizarea i Aoreetarea informaiei introdus anterior: racem un clicl^ ici i imediat apare lista (liVta prezentat de cererea ListaProdQ ataat acestui control), n care se dau amnunte despre produsul cu codul dat. Atenie, putei modifica informaia ! Dac facei un click pe vreuna din poziii din list, atunci codul se va schimba (astfel se va schimba informaia despre produsul vndut).
\ L
Dup testarea proceselor de verificare i introducere a informaiei, nchidem formularul lesiriForm. 7. n formularul Intrri Ieiri crem butonul lesiriModif cu proprietatea On Click pentru a starta macros-ul OpenlesiriForm (acest macros deschide formularul lesiriForm), care trebuie proiectat n prealabil.
t: QphJeiriff^ti^^
Action j Comment 1 j
6.
t\
Action Arguments lesiriForm Datasheet
^|
/
Form Name View Filter Name Where Condition Data Mode Window Mode
Norma!
Fig. 11.6. Proiectul unui macros care deschide un formular n imagine de tabel (Datasheet View). 8. Trecem formularul n imagine de Form View (imagine Formular) i acionm butonul nou creat. Trebuie s apar imaginea din fig. 11.7, gata pentru aciunile respective.
lesiriForm: Form
mm
Cast: DataVto
CodMarfa:
Intrri
cod den
Ieiri
lesirModif
111
100 12/07/01 e 1 0 16/07/01 0 16/07/01 Pret UnMas But. 3L 3 But. 2L 2 Pachet 0.5K gU Pachet lKg 30
1 * of 1
E a T 'In tr ri Ieiri'
zJ
5 R e< 4
ILL
La acionarea butonului lesiriModif apare formularul lesiriForm i putem aduga imediat informaia facnd cte un click n urmtorul rnd liber, apoi din lista aprut selectm produsul potrivit.
77
Aadar, pentru a introduce informaia pe parcursul vnzrilor, avnd pe ecran formularul Baza, clickm butonul In trri Ieiri. Ca rezultat se deschide formularul Intrri Ieiri, clickm butonul lesiriModif din acest formular i apare formularul lesiriForm, n care putem introduce informaia despre ieiri (vnzri). Concluzionm c un astfel de procedeu de introducere a informaiei este cu mult mai convenabil dect celelalte descrise anterior, ns, dup cum, probabil, v-ai convins, nu este chiar att de uor de realizat proiectarea unor astfel de obiecte. n mod analog putem proiecta un formular IntrariF pentru introducerea informaiei despre intrri. n acest scop vom repeta paii precedeni, ncepnd cu al doilea, cu urmtoarele excepii: Pasul 2. n loc de cmpul Cant se trece cmpul CantV. Eticheta cutiei de tip ListBox trebuie s fie cu numele CodMarfa. n imaginile respective, fig. 11.2 i 11.3, trebuie s fie CantV n loc de Cant. Salvai formularul atribuindu-i numele
IntrariF. Pasul 4. n imaginea corespunztoare asemntoare cu cea din fig. 11.4, n formularul IntrariF se nscriu denumirile CodMarf i CantV, respectiv. e Pasul 5. Se ncearc lucrul cu formularul IntrariF analog cu lesiriForm (vezi
imaginea asemntoare n fig. 11.5). Pasul 6. nchidei formularul IntrariF . Pasul 7. Creai butonul IntrModifl n formularul Intrri Ieiri cu proprietatea On Click, ca s starteze macros-ul OpenlntrFForm. Acest macros trebuie s deschid formularul IntrariF, de aceea se va proiecta n prealabil. (A se vedea proiectul asemntor n fig. 11.6, asigurm parametrului Form Name valoarea IntrForm.) Pasul 8. Trecei formularul Intrri Ieiri n Form View i acionai butonul creat. Se va afia o imagine ca cea din fig. 11.8 (va fi formularul IntrariF). Menionm c modul de introducere a informaiei prin intermediului formularului
IntrariF nu este destul de eficient. Ce s facem atunci cnd apare un produs nou? Ar fi
mult mai convenabil dac pe ecran, concomitent, am avea un obiect pentru introducerea informaiei despre produsele noi. Despre crearea unui astfel de obiect vom vorbi mai trziu. Acionai unul i
Intrri
Bi IntrariF: Form
CodulMirf:
1
T439 12/07/01
Lo d u le s ta lG r rtn S to c M tV in z
16/07^
U
2 2
den
Came Came Came Lapte Lapte A pa A pa
1 UnMai
Kg
23/08/01 Pret [codc- D ata fc fo ^ V 30 02/07/01 _ 20/07/01 -1 10/07/01 19/07/01 22/07/01 30/07/01
Int 3
R e co rd : 1 . j2
L ll. il
o i
1 1 3 3
2.5
2 3
Observm deosebirea acestui formular de cel g. 11.7: denumirea formularului este alta (InirariF), <0e4Marf n loc de codMarfa i CantV n loc de Cant.
nr
J / J i 1 or 1
n continuare, pentru a mbunti i mai mult performanele ultimului procedeu de introducere a informaiei despre vnzri, ar fi bine, la momentul introducerii cantitii de marfa n coloana Cant, s apar undeva o tabel cu stocurile curente. n acest scop: Proiectm cererea StocuICurentQM (o cerere de tip M ake Table), care formeaz tabela StocCurentT.
1.
] \Make Table
Make New Table Table Name: IStocCureptT Cancel OK;
(*
frec
codcat
-
Current Dal
<1, 1
Field: cod * den Table: Ramai r Product Sort: Ascending Show: 0 Criteria: or:
Tabela Raitasiit6c este rennoit printr-o aciune precedent ds6niderii acestei cereri, astfel Tabela
S to c C u r e r i it T va conine informaie curent desnre stocuri rret Product 1otalHamas RamasInStoi Lost: Ipretfl 1otaiHamas]
UnMas Product
*i i
2. Prin copierea tabelei StocCurentT crem tabela StocCurentTT ntocmai cu aceleai coloane. 3. Crem o cerere de tip Delete Query, care lichideaz toat informaia din StocCurentTT i o salvm cu numele DeleteStocQ. (n aceast tabel se va trece toat informaia din tabela StocCurentT.) 4. Crem cererea care trece toat informaia din tabela StocCurentT n tabela
StocCurentTT.
5. Proiectm macros-ul (vezi proiectul n fig. 11.11). Acest macros conine un ir de aciuni, care asigur completarea tabelei StocCurentTT cu informaia cea mai recent despre stocuri. 6. Proiectm cererea (vezi proiectul n fig. 11.13). 7. Pentru proprietile controlului Cod din formularul IntrariF orm atribuim valorile artate n fig. 11.14. 8. Salvm formularul IntrariForm, apoi l deschidem prin acionarea butonului IntrariModif din formularul Intrarilesiri i, ca rezultat, vom obine pe ecran imaginea din fig. 11.15.
% Show Table,.;
DeleteS tocQ
Rernbve Idbie
cod den
Crosstab Query
U nM as^
Proiectarea ncepe ca i oricare cerere de tip Select. Dup ce avem ataat lista, agm ] stelua i trecem aici toat lista (prin trecerea smbo\\jJj^Xfeccm toate cmpurile). Facem un ici, apoi un clicked, agjUL43e4ttfBelete n gridul cererii^pirfJ^mrlfTcoloana StocCure] d n urmtoarea eria nsciem >0 (mai cojpar^wflrndi "impe^a zero), nseamn c tobte rndurile (nrg^istri care au n coloana Cod fi lichidate. Datjflind c un numr jarozitiv toate codurile snt/pozitive, toat infcjrmaia din tabel^tocCurentTT va fi lichidat
cod r StocCurentTT Where _
Delete Query
f 1
' V i
>0
Append
Irfx i
------ |stocCurentTT| OK
tm m m m cod 4
den UnMas Pret TotalRamas
Append To
Table Name:
_J
lU
Field: cod Table: StocCurent* Soft Append To: cod Criteria: or
den StocCuren den
gif; Ham: |
UnMas StocCurei UnMas Pret StocCuren Pret TotalRamas StocCurentT TotalRamas
Aceast cerere asigur ca informaia din StocCurentTT s coincid cu cea din StocCurenTT (vom avea dou tabele cu aceeai informaie). Aceste tabele conin informaie temporar i informaia din ele poate f i lichidat oricnd atunci cnd se dorete de a face copieri ale BD.
Fig. 11.11. Crearea unei cereri de tip Append, care ia informaia dintr-o tabel i o adaug n alta.
80
LOM
Comment Lichudarea tabelei Sumarlnfo Crearea unei tabele noi Sumarlnfo Add la lista formata a stocurilor ini'iale Add la lista formatf a diferen'elor Intrari-iesiri Lichidam tabela RamasInStocT formam RamasInStoc T lichideaza tabela StocCurentT formeaza dinnou tabela StocCurentT Lichideaza informa'ia din StocCurentTT Copiaza tot din stoccurent in stoccuerntt asigura recadularea informa'iei Action Arguments
Control Name
marfa
Sensul aciunilor incluse n acest macros snt bine explicate prin comentariul ataat. Primele 6 aciuni repet aciunile unui alt macros, scopul cruia a fost descris mai sus.
Fig. 11.12. Macros-ul care asigur formarea tabelei StocCurentTT cu informaia curent despre stocurile de marfa.
StocCur entQQ : S e le ct Query > j
Includem doar cmpurile care dorim s apar la utilizarea controlului ListBox din formularul lesiriForm.
j cod Table: StocCurent Sort: Show: 0 C riteria: or: <1 1 den StocCuren Ascendinq . El.. . UnM as StocCurentT ....... Pret StocCureni 0 TotalRama StocCureni ___ EL Cost StocCurentT 0
Detail
Nam e ................, , . Marra Control Source.........Cod Row Source Type , , , Table/Query . Row Source.........,, StocCurentQQ & Column Count......... 5 Column Heads......... Yes Column Widths , . . ,. 1cm ;2cmj 2cm; cm ; Bound Column . , , . , 1 - ts * * Before Update After Update;. On E n t e r S t o c u l C u r e n t ^ On Fvit*......... ...
A II StocCijrentQQ furnizeaz ^jrfrormaie despre stocul curent: StoculCurentM 1 1 calcutectz infofrnaia ^despre stocurile ^ curente.
Cod ar&:
Cmt D aiaY m z:
30 11/05/01 20; 11/06/01 .10! 11/05/01 430 12/07/01 100 12/07/01 0 16/07/01 100 16/07/01 0 16/07/01 Pret | UnMas 2 But. 2L But. 3L 3 30 / Kg Pachet! Kg 30 / Pachet 0.5Kg 1 / L
......4... 50.5 30 ... ... 2 20 ............. 3 5 1 0 5 400 ........... ... 7 100 3 0 ........ | 10SU
1 617 1 2 3 4 5
200.00 Apa But 2L 2 > e< 3L N a ^1078.00 Apa . 455.50 j Came \ V Pachet! Kg Came r * Came f X^\2^chet 0,5K^i 15 ' ^415.60 | Lapte Lapte, ;0-
M 5
( 1 1J M M L
S-a fcut un click aic cantitatea total 20jfh coloana Cant a fost ncris 100, apoi s-a trecut la nntorul rnd, s-a fcut un click aici i, dup cum observm, produsul Apa a devenit cu 100 uniti mai puin. Fig. 11.15. Un mod convenabil de introducere a informaiei despre vnzri. n treb ri, probleme, discuii 1. 2. 3. 4. n ce scop putem utiliza cereri de tip Delete, Append? Cnd trebuie i cnd nu trebuie legat formularul de un obiect? Pot oare s difere denumirile etichetelor de cele ale controalelor respective? Explicai. Indicai deosebirea dintre un control legat de cmpul unui obiect din acest formular i un control de tip ListBox. 5. Este oare vreo legtur dintre limea controlului de tip ListBox i dimensiunile atribuite proprietii Column Width? 6. De ce trebuie s fixm valoarea Datasheet pentru proprietile Default View i Views Allowed? ncercai s utilizai i Single Form, Form respectiv. 7. Care, dup prerea dv., snt avantajele utilizrii controalelor de tip ListBox? 8. Studiai cu atenie proprietile din grupul Event i propunei alte faciliti la introducerea informaiei cu utilizarea acestor tipuri de controale. 9. Comparai modul de introducere a informaiei descris n aceast lucrare de laborator cu cele descrise anterior. Argumentai cazurile cnd se poate aciona i far controale de tip ListBox, pstrnd aceleai faciliti. 10. Care este avantajul principal, dup prerea dv. (cci avantaje snt multe) la folosirea controalelor de tip ListBox? 11. Comparai creterea complexitii proiectrii unui astfel de procedeu de introducere a informaiei i creterea comoditii. 12. Analizai metodele de introducere a informaiei cu sau far utilizarea controalelor de tip ListBox. 13. Propunei alte moduri de introducere a informaiei, care, dup prerea dv., pot fi mai convenabile i pentru proiectani, i pentru utilizatori. 14. Propunei o alt metod, mai eficient, pentru introducerea informaiei despre intrri i despre ieiri.
82
je >
: categoria
^Column Count.. I Column Heads., Column Widths., W M siiM l:: : ;' On Exit............
P nm c
Fcnd uH ick n controluTl^lstBox cu numele> :ategoria dinfemjularul Product!^ apoi fcndu^[click pe un produs din lismbbinut, codul categoriei coloan a cererii tegOritQ-i copiat n-r trfoana C&dCat a tabelei Product. Pentru ca cererea CtegoriiQ s starteze din > u , adic s ne furnizeze informaia de ultim modificare, atribuim proprietii On Enter st^ macros-ulu^CategReqM, care are proiectul dat.
Fig. 12.1. Atribuirea unor proprieti la un control de tip ListBox. 2. Proiectm formularul CategoriiF, legat de tabela Categorii; toate controalele trebuie s fie obinute prin trecerea lor din lista cmpurilor tabelei Categorii. Toate
83
controalele trebuie plasate n partea de sus (s ocupe cam a cincea parte) a sectorului Detail. Sectorul Detail trebuie s fie de forma unui dreptunghi (nlimea puin mai mare i s fie de mrime cam trei cincimi din nlimea Display-ului). Apoi atribuim valorile Single Form i Both, respectiv, proprietilor Default View i Views Allowed (vezi mai sus cum s-a fcut pentru formularul lesiriForm). Ateniei nainte de a salva cu numele CategoriiF acest formular, facem ca dimensiunile lui s constituie cam trei cincimi din nlimea ecranului. nchidem toate formularele de pe ecran. Deschidem formularul CategoriiF cu Open, apoi aranjm ferestrele n aa fel pe ecran, ca s se vad formularul ProductF de pe pagina Forms i sectorul Detail al formularului CategoriiF (vezi fig. 12.2). 4. Dup ce am inserat formularul ProductF din Forms n formularul Categorii, analog ca Ia un control obinuit, modificm astfel dimensiunile lui, nct controlulformular s ocupe cele trei cincimi rmase din spaiul Detail. Corectm din nou dimensiunile, permutm controalele astfel, ca s obinem o imagine similar cu cea din fig. 12.2. Acestea snt controale de tip abel - pentru comentarii. Acgste Controale snt legate direct de tabela Categorii. Controlul n care este inserat rmularul ProductF; numele lui ne sugereaz aceastb
Subform/Subfepof: ProductF
Acest formular
trebuie agat i inserat ntr-un loc liber din sectorul Detail al formularului
Format
Event
Other
All
Name, Source Object, , . .. ProductF Link Child Fields . . . . CodCat link Master Fields , ^CodCat
CategoriiF. Voj
obine o imagme asemntoare unui control
Fcnd un dublu click n aproper^e^rania contibU^ lista de proprieti i trebuie s facem.ca proprietile Link Child Fields i Link Master Fields s aib valorile date (cmpul Codcat din CatrgoriiF (Link Master Fields) este legat de cmpul CodCat (Link Child Fields) din formularul ProductF).
Fig. 12.2. Crearea unui SubForm ular (SubForm) i atribuirea unor proprieti. 5. Avnd imaginea-proiect a formularului nou CategoriiF, modificm dimensiunile lui, ca s aib forma unui ptrat cu latura de mrime cam jumtate din nlimea ecranului, apoi l salvm.
84
6. Deschidem din nou formularul CategoriiF cu Open i vom obine imaginea din fig. 12.3.
Categoria produsului
CodCat: DenCat: (Lactate 1
FormularulJPrpductF inserat (nc^ibat^nformularul CategoriiF. rmaia din aceste dou tabele este legat&snrin intermediul controalelor cu numele ete etichet CodCat i Categ ale celor dou controale cu acelai nume CodiXat. Eticheta poate avea nume diferinde cel al controlului. cestersmk-etichetele, i nu denumirile controalelor. Dac facem un click aici, apare lista i putem selecta categoria respectiv. Astfel se introduce informaia despre codul categoriei.
4 Lapte 5 Lapte
R ecord: H1<
Utiliznd aceste butoane, putem categorie la alta. Vom serva c n lista de mai jos se va afia informaia despre produsele doar din categoria selectat. Formularul pentru introducerea i vizualizarea informaiei despre mrfurile din fiecare categorie.
Fig. 12.3.
7.
8. 9.
10. 11.
Proiectm un formular nou cu numele GeneralF, care nu trebuie s fie legat de vreun obiect i de pe pagina Forms a BD inserm n el (n modul descris mai sus) alte dou formulare, IntrariF i CategoriiF. Apoi modificm dimensiunile lor i le deplasm n locurile cuvenite. Salvm proiectul, nchidem formularul (formularul nou creat GeneralF), apoi l deschidem cu Open i vom obine imaginea din fig. 12.4. Ateniei Proprietile Link Master Fields i Link Child Fields pentru formularul GeneralF trebuie s aib valori vide. Proiectm macros-ul OpenGeneralF, care deschide formularul GeneralF n imaginea FormView. Crem butonul IntrariModif n formularul Intrri Ieiri, iar proprietii On Click a acestui buton i atribuim valoarea OpenGeneralF (adic atunci cnd IntrariModif va fi acionat, se va deschide formularul GeneralF). nchidem toate formularele, apoi nchidem i Baza de Date. Deschidem BD, acionm butonul ntri sau Ieiri i ca rezultat apare formulam!
Intrarilesiri.
12. Acionm butonul IntrariModif i apare formularul GeneralF definitivat pentru 2 introduce informaia la intrare.
85
GeneiF: Foim Introducerea informaiei despre Intrrii se face in coloanele CodulMarf si CantV din partea sting in cazul daca apare un produs, nou atunci se fac inregistrari in Product sau Categorii si Product apoi se lucreza iar in partea sting.
ta r:
- : ^
Cm
DataYi ;
' >
Categoria produsului
CodCat i
4J 3 .. j 1 7 6 4 2
....... 679[ 45
05/05/01 06/05/01 06/05/01 06/05/01 05/06/01 06/05/01 06/05/01 11/05/01 11/06/01 11/05/01 12/07/01 12/07/01 16/07/01 17/07/01 codcat
Descrieie|[a^
Pio&ictF;
5 2.5
Descri
K g
Pachet IKg j Pachet 0.5Kg| Pachet 0.5L But. 2L But. 3L
86
'-Sort
Show: 0
ipExpresia data calculeaz numrul de zile pn la ZilePinaLaExp: [DataExpl-DateQ expirarea termenuliLXkmdiia fie afiate doar produsele valabile nc o zi.
Fig. 13.1. Afiarea listei produselor cu termen de pstrare mai mic dect cteva zile.
87
3.
La acest nivel de proiectare a BD gsirea doar a produselor cu termenul expirat, rmase n stoc, este o problem destul de complicat. Exerciiu. Utiliznd diferite tipuri de cereri, s se determine produsele cu termenul expirat, rmase n stoc.
B
* cod
cod den
UnMas Product 0
TotalRamas RamasInStoc* 0
Prin utilizarea cererilor cu parametri, n loc de aceast condiie, utilizn^de exemplu, e^fesia <=[InJ*dauceti numrul de fpin[ ia expirare], vom "avea posibiliti mult mai largi (s avem grij ca expresia dat s aib format de numr).
Fig. 13.2. Se calculeaz lista de produse cu termen expirat rmase n stoc. 2. Facem o copie a macrosului TotalRamasInStoc, apoi modificm denumirea macros-ului obinut prin copiere, n ProdExpInStocM. 3. Deschidem in imagine-proiect macros-ul ProdExpInStoc i n loc de ultima aciune, care deschide tabela RmasInStocT, includem aciunea de deschidere a cererii recent create ProdExpInStocQ. 4. Salvm proiectul i nchidem macros-ul ProdExpInStocM. 5. Deschidem prin Open acest macros ProdExpInStocM i vom avea lista respectiv.
Concluzie. Utilizarea macros-urilor mbuntete i lrgete cu mult posibilitile unei baze de date, dar i le cere proiectanilor eforturi mult mai mari.
cunotinele i experiena respective n domeniul proiectrii formularelor. Comoditile i performanele cresc n direciile respective. n acest caz, dup cum vei vedea, modificri vor fi cu mult mai multe i mai complexe. Urmeaz de fcut urmtoarele: 1. Adugm cmpul DataExp la tabela Product (la sfritul listei) cu tipul Date/Time (astfel, vom avea coloana n care se va introduce informaia primar). 2 . Modificm cererea ProductQ (n proiect mai adugm cmpul DataExp). (Astfel toate obiectele care utilizeaz aceast cerere vor include informaia i despre DataExp.) Ateniei Pentru a nu complica lucrurile, ne vom strdui ca adugrile s se fac doar la sfiritul listei cmpurilor deja existente. Pentru controlul de tip ListBox, din formularele IntrariF i ProductF, cu numele Cod, este necesar ca proprietatea Column Count s ia valoarea 6, apoi s mai adugm un numr la proprietatea Column Width, deoarece avem deja 6 coloane. In caz de necesitate vor fi lrgite pe orizontal controalele respective din formularele IntrariF i ProductF, astfel ca s ncap toate cele 6 coloane. 3. Cererea StocCurentQQ trebuie modificat mai esenial (vezi fig. 13.3). Astfel, aceast cerere va avea 7 coloane. 4. Facem modificri i n formularul lesiriForm. Acest formular, prin intermediul cererii StocCurentQQ, formeaz lista pentru controlul de tip ListBox Cod. Deoarece informaia despre DataExp este n coloana a 7-a, trebuie de fcut modificri i pentru proprietatea Column Count (pentru controlul Cod) (valoarea 6 se schimb n 7, apoi mai adugm un numr la proprietatea Column Width (a aceluiai control Cod)). 5. Urmeaz ca n toate obiectele n care dorim s avem informaia i despre data expirrii s facem modificrile necesare referitoare la coloana DataExp. o
* cod den UnMas au
Show Table
Add Close
P fe t
........
jJ
Bpchidem cererea StocCuren w n imaginea proiecr^vom observa doar tabela siocCurentTT ata&), facerr/ click 4 ici, apare Cutia S h o w T a b la f icem un pe tabela Product, apoi Aad (sau un 5tefrqep click), dup aceea Close i lista Vinzari se ataeaz la cerere. Verificm dac estSegtur ntre aceste dou liste, o corectm, dac>s^e nevoie. Apoi facem un dublu click pe DataExp (sau agm acest DataExp i-l inserm la sfrit n gridul cererii).
89
6. n formularul G eneralF crem butonul ProduseExp, care deschide macros-ul ProdExpInStocM creat mai sus (p.13.2). Remarc: a) Data expirrii termenului este o caracteristic important pentru multe produse aflate n vnzare. Pot fi proiectate multe interpelri (cereri) legate de data expirrii, b) n mod analog pot fi adugate i alte caracteristici, care deosebesc un produs de altul. Concluzie: 1. Utilizarea doar a trei tabele permite s proiectm BD destul de utile, care ne pot oferi mari posibiliti att pe orizontal, ct i pe vertical. 2. O dat cu creterea dorinelor cresc i cerinele: o BD simpl este uor de proiectat, dar ne ofer posibiliti limitate, ns pe msur ce dorim s lrgim sau s aprofundm performanele, proiectantului i se cer eforturi cu mult mai mari. 3. O BD simpl poate fi creat de oricare utilizator, ns, dac se dorete o BD cu posibiliti mari, va fi nevoie de consultaia unor specialiti.
PiodlnRecfacia
HEII
cod j mt | cost 1 1317. 7 Apa 6 Apa 90 j 5 Lapte 1425 3000 3 Came 2 Came 1350 5 Lapte 97.5 j 4 Lapte 3895 j 3 Came oj 2340! 1 Came 900 j 7 Apa 15001 3 Came 9000 j 1 Came ^ jd fT
Codiri
CodExt DataExp Datalntr
Cant
1
_
'
Field: Codlnt Table: Facturi Total: Group Sort: Show: Criteria: or:
cost: Sum([pret]1cantVj
^ ~ ~
_0_
ecord;
1 2345 3 2345 3 2345 3 2345 3 2345 2 Fp/34 2 Fp/34 2 Fp/34 2 Fp/34 1 MM/67 1 MM/67 1 MM/67
H | |
Fig. 13.4. Afiarea listei petru fiecare produs din fiecare factur.
i Query ! Run
icturiQ: Cmsstab Query
*0 Show lable.,,
Cod Cant 1 _
pdL
den UnMas
j'CrosstabQud
bl M a|<e-Table Query,., / ! Update Query *#*1 Agpend Query...
Codlnt Facturi Group By
CantV
La nceput se procedeaz ca ia o cerere cu calcularea totalurilor pe grup. Dup aceea se face un cK^aic^goLaici, se mai Sereazun rnd Heading n gridul cererii, apoi click aici i alegem Row He^ditffTapoi^aici i aleggm- Hpadmg.
cost: Sum([pret
^8 gelete Query
SQ L Specific
cod Product
tG[Sr&
Apoi click aici i selectm Value. E posibil i invers: Column Heading pentru CodExt i Row Heading pentru coloana den (forma de afiare - diferit).
Ey&msian a lu e ..... 4 v
1>
.
_
3895 97.5
1425
1;
!1&
I of 12
92
93
11. Deschidem cu Open formularul GeneralFM od i vom avea imaginea similar cu cea din fig. 13.7. Vom observa c lipsesc controalele de tip Labei cu informaie explicativ (comparai cu formularul CategoriiF). 12. Deschidem formularul FacturiFM od i inserm controlul de tip Labei ca s obinem ceea ce este n fig. 13.7, apoi salvm modificrile. 13. Crem un buton IntrariM od n formularul In trri Ieiri pentru a deschide acest formular GeneralFM od. 14. Introducem informaia despre intrrile de marfa. n formularul din stnga, trecem la o nregistrare nou (folosind pentru aceasta butonul respectiv din partea de jos a subformularului). Introducem codurile Intern, DataExp i CodExp (D atalntr se nscrie automat). Observm c n lista de mai jos, n coloana CodFact, deja este numrul dat. Trebuie doar de introdus informaia n coloanele C odulM arf i CantV.
iGeneraiFMod: Form
introducerea informaiei despre Intrri se face in coloanele CodulMari si CantV din partea sting, in cazul c]nd apare un produs nou se introduce mai intii in locurile respective din partea dreapta apoi se continua lucrul in partea sting
Categoria produsului
todCat | ~2 DenCat (Carne
DesciiaefCatne de poic
categoria data
UnMas: Kg Pachet IKj Pachet 0.51
Pret:
30 30 15
Caieg:
CtMfefs
1Came 2 Came
3 Carne
2 2 2
Subformularul pentru a introduce informaia despre intrrile produselor legate de facturile de nsoire.
Butoanele pentru a trece de la o nregistrare la alta sau la ultima, sau la una nou n tabela Facturi. Fig*. 13.7. Imaginea de lucru a formularului GeneralGM od pentru introducerea informaiei la intrarea mrfurilor.
Remarc. In multe cazuri apare necesitatea de a modifica preurile unor produse. In acest scop pot fi utilizate cu succes cererile de tip IJpDate.
94
Pret Produc
lrretj/2 1 1
S fim foarte ateni la modificarea preurilor prin aplicarea acestui tip de cereri. O dat modificat, irmaia nu mai poate fi recupeFa!rej^gul, n prealabil, se face o copie a taBeterProduct, apoi se pot face modificrile. In acest caz, la toate produsele cu termenul de valabilitate care ex pira-a&t^-preu rile se micoreaz de dou 6ri.
Fig. 13.8. Proiectul unei cereri de tip UpDate pentru modificarea preului, ntrebri, probleme, discuii 1. Deschidei tabela DetVinz i introducei informaia n coloana CodFact. Folosii doar trei numere: 1, 2, 3 (adic avei doar trei facturi). 2. Deschidei tabela Facturi i introducei informaia despre aceste trei facturi. Aceasta va nsemna c toat marfa a fost nsoit de una dintre aceste facturi. 3. Deschidei formularul GeneralFM od i observai legtura dintre produse i facturi. In continuare informaia va fi introdus doar prin intermediul acestui formular. 1. Descriei acest mod convenabil de introducere a informaiei. Propunei alte modaliti. 2. Ce vi se pare complicat? 3. Creai cereri sau macros-uri, apoi inserai butoane n GeneralFM od pentru afiarea: a) listei de produse cu termen de expirare n dou zile; b) listei de produse ce au fost vndute cu termenul expirat; c) Listei de produse intrate n aceast perioad, pentru care termenul expir peste cteva zile; d) Costul total al produselor termenul crora expir astzi.
95
ncheiere
/4
ncheiere
Baza de Date proiectat la nceput ntr-o variant simpl, a fost apoi modificat, demonstrndu-i-se cititorului anumite tehnici de perfecionare a unei BD deja existente. Obiectele noi snt incluse inndu-se cont de anumite necesiti poteniale, deoarece o asemenea situaie de adaptare a unei BD n timpul de exploatare a ei pare a fi cea mai frecvent, iar posedarea tehnicilor de perfecionare poate fi destul de util pentru un numr mare de utilizatori. Baza de Date creat poate fi perfecionat n continuare n ambele direcii, pe orizontal i pe vertical, att prin utilizarea instrumentelor descrise aici, ct i prin includerea altor obiecte noi: programe i funcii scrise n Visual Basic. Programarea unei BD necesit cunotine respective att n domeniul proiectrii (se creeaz posibiliti mari pentru tehnologii noi de utilizare a obiectelor), ct i n domeniul programrii. Ar fi greit s credem c este posibil proiectarea unei BD la un nivel nalt fr utilizarea tehnologiilor programate. Volumul relativ mic al acestei lucrri, precum i nivelul de proiectare respectiv propus pentru nceptori, n-au permis includerea unor tehnologii programate. In acelai timp, exemplul concret prezentat din domeniul comerului, nicidecum nu ngusteaz sfera de utilitate a tehnicilor demonstrate, care pot fi aplicate cu uurin n mai multe domenii de activitate, n care este posibil o clasificare similar a informaiei respective. De exemplu, o BD la o staie de deservire auto: serviciile prestate corespund mrfurilor; serviciile pot fi clasificate pe categorii; bonurile de plat corespund facturilor. Un alt exemplu, o BD la o firm de transporturi auto: automobilele puse la dispoziie corespund mrfurilor; toate automobilele, conform anumitor proprieti, pot fi clasificate pe categorii; serviciile prestate corespund facturilor de plat. Lista poate fi continuat. Desigur, n BD respective pot fi incluse i alte obiecte, obinndu-se astfel BD adaptate. Prin urmare, un utilizator care posed tehnologia crerii Bazelor de Date dintr-un anumit domeniu este capabil s realizeze acest lucru i n alte domenii de activitate. Totodat, menionm c nici pe departe Bazele de Date din diferite domenii nu pot avea aceeai structur. Mai mult ca att, chiar n acelai domeniu se pot crea BD cu structuri completament diferite ~ totul depinde de miestria proiectantului i de cerinele utilizatorului.
96
Cuprins
CUPRINS
Argument........................................................................................................3
Lucrarea de laborator nr. 1
1. Cteva etape principiale la nceputul proiectrii unei Baze de D ate................................ ............................................................................5 1.1. Crearea tabelelor - fundament al Bazelor de Date........................................... 8
Lucrarea de laborator nr. 2
97
Cuprins
7. Cereri cu param etri.................................. ............................................................. 52 7.1. Cum s facem ca s apar doar unele sectoare din raport................................ 54
Lucrarea de laborator nr. 11
8. Exemple de creare i utilizare a formularelor (Form s).................................... 56 8.1. Crearea unui formular i inserarea (plasarea) unui buton n e l........................56 8.2. Crearea formularului de baz B aza...................................................................59 8.3. Cum s verificm atribuirea corect a proprietilor unui buton......................60 8.4. Inserarea n formular a unui obiect pentru comentarii..................................... 61 8.5. Deschiderea n mod automat a formularului Baza la deschiderea BD............ 61
Lucrarea de laborator nr. 12
9. Un mod de organizare a lucrului cu cererile.......................................................63 9.1. Deschiderea formularului Cereri prin acionarea butonului Cereri din Baza.......................................... ................................................................... 64
Lucrarea de laborator nr. 13
10. Organizarea procesului de introducere a informaiei.....................................67 10.1. Introducerea direct a informaiei n tabele.................................................... 67 10.2. Utilizarea cererilor i a unui macros la introducerea informaiei n tabele............................................ ........................................... 67 10.3. Posibiliti de afiare a stocurilor curente la momentul vnzrilor................ 69 10.4. Utilizarea unui formular la introducerea informaiei despre intrri sau ieiri................................................................................................ 71 10.5. Deschiderea formularului Intrri Ieiri prin acionarea butonului Intrri sau Ieiri din formularul B aza......................................................... 72
98
Cuprins