58
Studenti: Armend Gjoshi 2014 Tema: two trees olive oil Ligjërues: DrSc Genc Beqiri Projektimi i bazes së të dhënave Punim Seminarik Kolegji Evropian Dukagjini

Projekti olive oils

Embed Size (px)

DESCRIPTION

Projektimi i Bazes së të Dhënave, Punim Seminarik

Citation preview

Page 1: Projekti olive oils

S t u d e n t i : A r m e n d G j o s h i

2014 Tema: two trees

olive oil

Ligjërues: DrSc

Genc Beqiri

Projektimi i bazes së të dhënave

Punim Seminarik

Kolegji Evropian Dukagjini

Page 2: Projekti olive oils

Two Trees Olive Oil

1

HYRJE

- Para se të fillojmë të ndërtojmë një bazë të të dhënave, është me rendesi që kuptohen disa koncepte

themelore dhe terminologjija e databazave.

Si është e strukturuar një bazë e të dhenave dhe cfarë ju duhet të bëni para se të filloni me ndërtimin e një

baze?

Cfarë është një databazë?

- Baza e të dhënave është një kolekcion informatash mbi një subjekt.

Shembuj nga jeta e perditshme janë p.sh. Librat Telefonik, Diskografia e Rexhistrimeve muzikore

ose grumbulli i informative të organizuara për ti menaguar klientat, shitjen ose punëtorët.

Një program për bazen e të dhenave ju jep mundësinë që të menaxhoni me ato të dhëna dhe t`i

analizoni ato për t`i bërë të përdorshme.

Veglat për të analizuar të dhënat tuaja

- Sortimi në mënyra të ndryshme, duke i përdorur tabelat

- Ekstraktimi i vetem një pjese të tyre me anë të formave dhe querive

- Përmbledhje e tyre duke i përdorë raportet

Terminologjija e Bazes së të Dhënave

- Tabela, është një grumbull i informatave, e organizuar në: fusha, rreshta dhe të dhëna

-Fushat: kolonat në tabelë

Ato janë kategori të ndara të të dhënave nga tabela juaj. Në një rexhister telefonik këto do të

ishin:

Shembull: Emri, Adresa, Numri i Telefonit

ku secila kolonë paraqet informatat e grumbulluara për një person të caktuar.

Në një Rexhistër Telefonik secila fletë e një personi do të paraqitet si një record apo rresht në tabelë

-Rekordet: rreshtat në tabelë

Shembull: të dhënat e Skender Skenderit, të dhënat e Fadil Gjoshit etj.

-Vlerat e të Dhënave, paraqesin një pjesë të informatave aktuale vetvetiu

Shembull: Fadil Gjoshi, Rr. Ferhat Binishi 17, Nr. (044) 161855

Shumë njerëz përpiqen që ti ruajnë dhe organizojnë këto të dhëna në fletë punuese të Excelit, të cilat

përmbajnë rreshta dhe kolona. Mirëpo Exceli paraqet një `flat file` apo një fletë rrafshe që don të thot se ajo

eshte nje listë e gjatë, shembull Rexhistri Telefonik ju paraqet vetem një listë të gjatë të informatave.

Page 3: Projekti olive oils

Two Trees Olive Oil

2

Access-i është një ` databazë relacionale`, që don të thot se ju mundëson që të evitohet përsëritja e të

dhënave, ju jep vegla organizative shtesë, të cilat janë shumë më efikase, fleksibile dhe shumë më pak të

prirura për të gabuar.

Name Address City State Zip Order# Item Price

Gino`s pizza 123

Main

Los Angeles CA 93003 1224 Light $77

Gino`s pizza 123 Main

Los Angeles CA 93093 1954 Refined $94

Gino`s pizza 123

Main

Los angeles CA 93003 2426 Light $77

Siq shihet në tabelen e mësipërme në Excel nëse doni t`i evidentoni porositë e konzumatorëve, ju duhet që

cdo here të perseritni emrin e produktit, adresen, qytetin, shtetin,zip kodin , qmimin etj, ku vjen deri te

perseritja e shënimeve, por mund të vie edhe te gabimet gjatë shkrimit, që shihet në tabelen e ilustruar më

lartë.

BAZAT RELACIONALE

Kurse te bazat Relacionale të njejten tabele të Porosive nga Exceli e kemi ndarë në tri tabela të ndryshme, e

para me informacionet mbi Konsumatorët, e dyta me të dhënat e Produkteve që kemi dhe e treta me vet

Porositë.

Në mënyrë që ti bëjmë ato të funkcionojnë mes veti, duhet të implementojmë disa teknika në strukturën e

tabelave, si Qelësat Primar dhe Qelësat e Jashtëm.

Qelësi Primar

Është Identifikuesi Unik i cdo shënimi për cdo rresht të tabelës. Ju duhet të gjeni një mënyrë për t`i dalluar

të dhënat,p.sh. nuk mund të përdorim `Gino`s Pizza` sepse nuk është emër unik, mund të ndodhet një në

lagjen tuaj por jam i sigurt që ka me dhjetra të tillë në gjithë SHBA-të, dhe kisha dashur që të gjithë t`i

kam konsumatorë të mi, prandaj do të shtojmë një fushë të vecantë

Page 4: Projekti olive oils

Two Trees Olive Oil

3

të quajtur Primary Key, me tipin e të dhënave ` Auto Number`duke krijuar kështu sistemin ashtu që cdo

dyqan të ketë numrin e tij identifikues! Në vazhdim këta Qelsa

Primarë do të shëndrrohen në Qelsa të Jashtëm, gjithashtu të njohura si Fusha të Ngjajshme, të cilat lidhin

informatat relacionale në nes dy ose më shumë tabelave. Kjo është fusha e njëjtë që e kanë të dy tabelat dhe

kjo na lejon që të marrim informata nga të dyjat kur të pranojmë një porosi ose kur të egzekutojmë raportet.

Kjo na shpien tani …

Page 5: Projekti olive oils

Two Trees Olive Oil

4

... te Relacionet:

RELATIONSHIPS

Lidhjet mes qelësave primar dhe qelësave të huaj

Akcesi posedon një dritare ku mund të definohet lidhja në mes dy qelsave primar ose të huaj. Lidhja më e

zakonshme është relacioni `një me shumë`, ku një rresht në tabelen e parë ka më shumë paraqitje në tabelen

tjetër. Këtu nga tabela shihet konsumatori ynë `Gino`s Pizza`, i cili shpresojmë të bënë edhe më shumë

porosi nga ne. Egzistojnë edhe lidhje tjera si një me një, shumë me shumë, por 1 me shumë është më e

shpeshta.

Page 6: Projekti olive oils

Two Trees Olive Oil

5

Lidhja 1 me ∞

- Terminologjia jonë e ardhshme do të jetë Llojet e të Dhënave ( Data Types)

Llojet e të Dhënave përcaktojnë fushat e juaja në atë mënyrë që Acces-i, të din se si të menaxhon me ato në

mënyren e duhur. Të hedhim një vështrim në tipe të ndryshme të të dhënave:

- Auto Number në menyre sekuenciale e shton numrin e cdo shënimi të ardhshem

- zakonisht përdoret si Qelës Primar

- Texti – përdoret për karakteret alpha numerike

- Number – qëndron për numrat të cilet i kalkuloni

- Currency – eshte per dollarin dhe valutat e huaja (informata financiare)

- Date/Time – eshte per datën dhe kohen

- Yes/No – eshte per po/jo skenaret (1 ose 0)

- Attachments – ju lejon që të bashkëlidhni fajlat nga programe tjera si Wordi dhe Exceli

- Hyperlinks – janë për e-mailat dhe adresat URL nga web-i

- Memos – eshte per komente të gjata

- Calculations – bëjnë matematikë bazuar në të dhënat nga fushat tuaja të tjera

Page 7: Projekti olive oils

Two Trees Olive Oil

6

- Lookups – përmbledhin të dhëna nga tabelat tjera

Duke përdorur llojet duhura të të dhëva ju do të ndërtoni bazen e të dhënave në akordim me standardet

industrial.

Kur e planifikoni një databazë, ju duhet që të hedhni një shikim në fotografin (tabelen) e madhe që të jeni

të sigurt se jeni duke e ndertuar databazen në menyre efektive. Ky proqes quhet NORMALIZIM dhe janë

standardet e aprovuara në Industrin e Databazave.

Së pari ju dëshironi që ti përdorni fushat më të vogla domethënëse që është e mundshme:

- nuk e doni një fushë të quajtur `Emri , por doni ta ndani në dy fusha, Emri dhe Mbiemri

- Dëshironi të ndani fushen` Adresa` në : Rruga, Qyteti, Shteti, Zip kodi

- Ndani grupet e përsëritura te te dhenave

- Nëse vëreni një informatë të njëjtë më shumë se një herë, këto fusha duhet të barten në një tabelë të

dytë, dhe të lidhura nëpërmjet ID fushes së njëjtë.

Për të planifikuar sa më mire databazen e ardhshme që do ta ndetoni ju duhet të planifikoni dhe të mbledhni

sa më shumë të dhëna mbi p.sh, konsumatorer tuaj, qe në kete moment nuk ju duken të rendesishme por sa

me shumë tabela me fusha te vlefshme te ndertoni, kjo pune do t`ju shpaguhet më vonë. Për këtë punim

seminarik do të ndertojmë dhe shtjellojmë Bazen e të Dhenave punuese: TWO TREES OLIVE

OIL , duke ndertuar katër tabela:

- Produktet të cilat do ti shesim

- Punëtorët ( përfaqsuesit e shitjes)

- Konsumatorët, të cilëve do ju shesim

- Porositë e konsumatorëve

Mbasi të kemi krijuar tabelat, do të formojmë:

- Format për të future të dhëna

- Querit për të analizuar shitjen e kompanis tone

- Raportet për ti printuar të gjitha këto.

Format, Pyetësorët dhe Raportet të gjithave do ju referohemi në vazhdim si Objektet e

Bazes së te Dhenave.

Planifikimi paraprak i bazes së të dhënave ka shumë rëndësi:

- Shpenzoni kohen duke vendosur se qfarë të dhënash do te grumbulloni

- Qfare analizash do te nxjerrim nga ato te dhena me vone

Page 8: Projekti olive oils

Two Trees Olive Oil

7

- Sigurohuni që të perfshini fushat per te gjitha keto kerkesa

- Bëhuni pro-aktiv (parashikues), a ka ndonje informate te cilen e kishit dashur ta keni, dy vite pas, anipse

tani nuk ju hyn ne pune?

NDËRTIMI I BAZES SË TË DHËNAVE

Le të hedhim një vëshrim ne bazen që do ta ndertojmë Two Trees Olive Oil, cfare TABELASH na

duhen qe ti ruajmë:

CUSTOMERS, SALES REP, PRODUCTS & ORDERS; në vazhdim, cfare informatash na

nevojiten per secilen, te renditura neper fusha:

CUSTOMERS

- Store Name, Street Address 1, Street Address 2, City, State, Zip, Work Phone, Fax,

Web Site, Contact First Name, Contact Last Name, Contact Email, Contact Direct

Phone, Type of Store, Sales Rep, Notes, Documents, Flag

SALES REPS

-Last Name, First Name, Address, City, State, Zip, Extension, Email, Date of Hire, Date

of Termination, Photo, Salary

PRODUCTS

-Name, Size, Cost, Retail Price, Profit

ORDERS

-Order Number, Date, Customer, Product, Quantity, Order Status

Do të ishte mire që te gjitha keto ti shkruajme ne një leter ose Word Dokument, te mendojme per

Relacionet permbrenda atyre te dhenave, si do te nderlidhim nje set informatash nga njera tabele me tjetren

(paraprakisht te identifikuara me Qelesin Primar), pastaj ekzaminoni se cfare rezultatesh perfundimtare

deshironi te shihni, si:

FORMAT

- Forma per te future te dhenat mbi Konsumatoret, Perfaqesuesit e Shitjes, Produktet

- Forma e praniminit te porosive, e cila na tregon konsumatoret dhe produktet

RAPORTET

Page 9: Projekti olive oils

Two Trees Olive Oil

8

- Mbi Shitjen e Prodhimeve

- Cili produkt eshte shitur me se miri?

- Rënja e shitjes sipas llojit të vajit dhe madhësisë

- Cileve konsumatore iu kemi shitur me se shumti

- Produktet e porositura

- Agjentët e shitjes, cili prej tyre ka shitur me se shumti, historite e te punsuarëve

Keto do te ishin vetem disa nga pyetjet, te cilat do ten a interesojnë me vone, prandaj planifikimi

paraprak mundet me qenë gjysma e punes në zhvillimin e zgjidhjes se Databazes me te mire per

kompanin e juaj.

1. KRIJIMI I TABELAVE DUKE PERDORUR PJESËT APLIKATIVE

Kurt e jeni gati per te ndertuar Tabelen e juaj te pare, mund të filloni prej asgjëje ose te perdorni pjeset

aplikative si pike fillestare. Mund t`i ruani ato pjesë Aplikative per ti perdorur ato më vonë.

- Shkojmë së pari ne menyren` CREATE` _ APPLICATION PARTS_zgjedhim pjesen aplikative te

gatshme_`CONTACTS`, e cila do te hapet si database e kompletuar me një tabele, një Query, tre

forma dhe tre raporte. Do t`I fshijme Querin, Format dhe Raportet me Delete dhe do te merremi me

editimin e tabeles CONTACTS: se ciles se pari do ia ndrrojim emrin ne CUSTOMERS, pastaj te

fusha ID do te ndryshojme tipin e te dhenave nga `auto number` npastaj te fusha ID do te

ndryshojme tipin e te dhenave nga `auto number` në `text`, sepse llojet e Vajrave te Ullirit do te

identifikohen me shkronja dhe Zip-kod: p.sh.GP94004; Para se te fshijme fushat te cilat nuk na

duhen Contact Name dhe File As, te tipit calculate, edhe pse kane te bejne me stringe tekstuale ato

kalkulojne emrin dhe mbiemrin duke I bashkuar, dhe tani do te ruajmë Pjesen Aplikative në

menyren:

- FILE_SAVE&PUBLISH_TEMPLATE_SAVE AS: do të paraqitet forma per tu plotesuar, se pari

do e quajme kete template si `CUSTOMERS TABLE`, do te klikojme ne Aplication Part, dhe te

Primary Table do te zgjedhim default tabelen te cilen e kemi: Customers. Me klikimin dy here ne

OK do te ruhet pjesa e re Aplikative, te cilen do e gjejme te Aplication Parts, e ruajtur si User

Template si Customers Table. Tani do te fshijmë fushat Contact Name dhe File As, dhe pasi kemi

bere mjaft ndryshime do te ruajmë tabelen me SAVE!

Page 10: Projekti olive oils

Two Trees Olive Oil

9

2.KRIJIMI I TABELES NË LAYOUT VIEW ME QUICK START

Microsoft Access na mundeson krijimine tabelave ne menyre te lehtë edhe nepermjet LAYOUT

VIEW:

Klikojmë në CREATE TABLE_MORE FIELDS_QUICK START_NAME, që namundeson krijim

automatic te fushes First Name dhe Last Name, menyra _ADDRESS_ na mundson krijimin e tri

fushave tjera si Adresa, Qyteti, Shteti, e keshtu me rradhë… START AND AND DATE_ na jep

gjashtë mundesi te ndryshme, duke klikuar ne butonin _CURRENCY_ do te krijojmë fushen

Salary, duke klikuar ne MORE FIELDS _ do ten a jep disa mundesi per Yes/No opcionet, do te

zgjedhim njërën nga ato, për të krijuar fushen _FLAG.

E ruajmë Tabelen e krijuar dhe do ta quajme SALES REPS ( Agjentët e Sitjes)., sin ë fig. më

poshtë.

Page 11: Projekti olive oils

Two Trees Olive Oil

10

3.KRIJIMI DHE EDITIMI I TABELAVE NË DESIGN VIEW

The Design View eshte vegla me e fuqishme ne MS Access 2010 per te ndertuar Tabela. Klikojmë në Create Table_Table Design; Kjo pamje ka dizajnin me te detajuar per konstruktim te Tabelës, si shtesë e

butonave si vegla te fushave te tabelave nga Riboni, kjo menyre ka shumë me tepër mundesi per te rregulluar vecoritë e fushave të tabelave. Pra do te fillojmë ndertimin e tabeles sonë të ardhshme ketu, te

cilen do ta emerojmë PODUCTS table, duke krijuar fushen e pare, që do te jetë, natyrisht ID e produktit, në rastin tonë do shenohet me shkronja (SKU), prandaj do te jetë e tipit _text_, tek pershkrimi (description) do shenojmë: kombinimi i llojit te Vajit dhe madhesise se shishes, ndersa fusha e dyte do te jete _Product_ e

tipit text, _SIZE_ do te jete e tipit number, tek description do shenojme `uncat` si njesi matese; fusha e ardhshme do te jete _PRICE_ e tipit Currency, pastaj _COST_e tipit Currency, PROFIT_poashtu e tipit

Currency, do ta ruajmë tabelen duke e quajtur _PRODUCTS_, do ten a paraqitet dritarja me pyetjen: Is this your Primary key? Do te pergjigjemi JO dhe do te vazhdojmë me definimin e

PRIMERY KEYS ose VENDOSJA E QELËSAVE PRIMAR, në secilen nga tabelat e krijuara.

Page 12: Projekti olive oils

Two Trees Olive Oil

11

QELËSI PRIMAR i tregon Accessit se nuk ka rekorde (rreshta) identik në tabelën tuaj. Secili rresht që ka

identifikuesin unik, një mënyrë që ta dalloj atë prej të dhënave të njëjta potenciale. Ne do te vendosim QELESAT PRIMAR në te tri tabelat tona. Nëse hapim, Tabelen e pare CUSTOMERS në Design View do

te verejmë se Accessi ka vendosur automatikisht Qelsin Primar tek fusha e pare ID. Nëse kliojmë me të djathten ne tabelen Sales Reps dhe e hapim me Design View, fushen e pare do e ndryshojmë në EmpID si Auto Number, do ta ruajmë dhe do ta mbyllim. Më tutje hapim tabelen Products në Design View do të

vërejmë se nuk ka Qeles Primar, prandaj do klikojmë në rreshtin e parë dhe do klikojmë në butonin Primery Key.

Tani që kemi vendosur Qelësat Primarë Accessi do të filloj t`i njohë Relacionet në mes të dhënave tona dhe tabelave të databazes.

4. CREATING A LOOKUP FIELD - (Krijimi i LookUp Fushave)

Look Up fushat i mundesojnë Përdoruesit të Bazes që të zgjedh të dhëna nga një listë, në vend se t`i

plotëson ato drejt per se drejti ne fushë. Kjo pershpejton futjen e informatave dhe redukon kohen. Kur i perdorni LookUp Fields ju mund ti referoheni te dhenave nga tabelat e krijuara me heret ose te krijoni

listen e juaj, prandaj le te fillojmë te krijojmë tabelen e katert per porositë –ORDERS_:

Klikojmë në Create Table_Table Design_krijojmë Fushen _OrderID- si AutoNumber dhe e vendosim

Qelesin Primar; Fusha e dyte, e cil na nevojitet eshte _OrderDate_ si Date/Time, fusha e trete do te jete _CUSTOMER_duke zgjedhur menyren LookUp Wizard, do te zgjedhim te dhenat nga Tabelat tjera: do te

zgjedhim tabelen Customers_next_do te zgjedhim fushat _CustID

Page 13: Projekti olive oils

Two Trees Olive Oil

12

& Company si referente, qe do na paraqiten si fusha ne listen tone,

klikojmë_next_do zgjedhim Sortimin zbritës sipas Company, në dritaren tjetër do të heqim shenjen nga

Hide Key Column për ti pare dy fushat _CustId dhe Company, next_na ipet mundesia se cilen fushe do ta ruajmë, neve do te zgjedhim –CustID_next_zgjedhim titulline LookUp fushes suaj si Customer_next_Zgjedhim _Enable Data Integrity-Cascade Delete-Finish!

Tabela duhet të ruhet para se te krijohen Relacionet_YES_dhe e emrojmë si _ORDERS_OK! Më tutje krijojmë fushen e katert _Quantity_si Number; e fundit do te jetë_OrdersStatus_e cila njejtë do te jetë një

LookUP Field:

Page 14: Projekti olive oils

Two Trees Olive Oil

13

Prandaj shkojmë në Lookup Wizard, por kete here do te zgjedhim vlerat te cilat neve i deshirojmë_next_shenojmë te tre fushat që do ten a duken ne listen lookup: _Processed, Backordered,

Complete_next_emri I listes:_OrderStatus_Limitojmë që vetem te dhenat nga fushat e zgjedhura te paraqiten në Listë dhe klikojmë në Finish dhe prap e ruajmë Tabelen (save).

5. CREATING MULTI-VALUES FIELDS –(Krijimi i Fushave me Shumë Vlera)

- Me anë të Lookup Wizard, ne gjithashtu mund te krijojmë fusha me vlera te shumefishta, në atë

menyre qe marrim disa vlera nga lista: Klikojmë me te djathten ne tabelen_Customer_zgjedhim design view_zgjedhim rreshtin WebPage_dhe shkojmë te mënyra-insert row_ fusim rreshtin e rim bi këtë dhe shenojmë_Type.

Kompanija TWO TREES OLIVE OILS përbëhet nga Restorantet dhe Depot, gjë që do ta cekim në fushen `Type`, duke klikuar ne te dhe ne menyren zbritese zgjedhim_ Lookup Wizard_I want type

in the values that I want_next_ketu do I shenojmë vlerat per Listen, si: Retail dhe Restorants_next_Allow Multiple Values_Finish! Të hedhim tani një veshtrim ne Lookup properties, _display control_zgjedhim Combo Box, ndersa

te Row Source do te shtojmë mundesinë ‘Magazine”; nese klikojm ne datasheet view, do ten a pyet

Page 15: Projekti olive oils

Two Trees Olive Oil

14

per ta ruajtur Tabelen, themi YES, shkojim djathtas ne tabele dhe te fusha Type, klikoni ne rreshtin e pare per Gino`s Pizza, ku do na paraqitet combo boxi, I cili do na jep mundesin te zgjedhim njerin nga tri mundesitë `Retail dhe `Restorant`_OK!

6.CREATING CALCULATED FIELDS

- Ju mund te krijoni nje fushe nga tabela e cila do te performoj Kalkulime bazuar ne te dhenat tuaja:

Klikojim ne tabelen_PRODUCTS_design view_do te krijojmë fushen_Profit_tipi Calculated_ku do të na paraqitet dritarja Expression Builder_do te shënojmë: = [Price]-[Cost], klikojmë OK! Në

General properties do te paraqitet formula [Price]-[Cost]. Gjatë futjes se te dhenave per produktet, do te na duhet ti fusim vetem ato per qmimin dhe

shpenzimet, profitin do ta llogaritë vet Access-i, gjë që do ta vertetojmë më vonë.

Page 16: Projekti olive oils

Two Trees Olive Oil

15

Poashtu mund të krijojmë Pyetsorë dhe Raporte më tutje, duke i llogaritur keto te dhena, pa pasur nevojë që të llogarisim profitin.

SETTING FIELD PROPERTIES Kur ti kemi rregulluar fushat, një dizajnim i mire i bazes se te dhenave na sygjeron që t`i rregulloni vecoritë e fushave për të kontrolluar se cfarë të dhënash do të fusim në fusha. Sa më specific që të

jemi, aq më pak data-errors do të kemi. Vecoritë me te zakonshme mund t`i percaktojmë në Datasheet View, kurse që te gjitha ne Design View.

Fillojmë me tabelen_CUSTOMERS_klikojmë në Fields Ribbon_së pari kemi fushen _Company_klikojmë në _Required_qe dmth. Duhet te shenoni dicka ne ate fushe, nuk mund ta lini te zbrazet, me tutje te shiqojmë_field size_Accessi siguron 255 hapesira per karakteret, që per kete

fushe eshte pak sa e madhe, prandaj e zvogelojmë në 50, klikojmë prap ne te njejten fushe dhe zgjedhim_YES. Tani shkojmë ne te djathte dhe zgjedhim fushen_State/Province_klikojmë në të,

deshirojmë ta hjekim fjalen Province, klikojmë ne butonin _Name&Caption_hapet dritarja, në te

Page 17: Projekti olive oils

Two Trees Olive Oil

16

cilen do e ndryshojmë te _Name dhe Caption_ ne thjesht: State!

Tani le të rregullojmë _Default Value_ te fushes. Shumica e konsumatoreve tanë janë nga New Yorku, prandaj ne vend që të shtypim NY,NY,NY…ne do te rregullojm kete fushe si _Auto

Fill_.Per ta bere kete, klikojmë ne fushen_State_ pastaj ne _Default Value_do hapet dritarja _Expretion Builder_ ku do shenojme: =”NY”_OK, gjë e cila do na paraqitet në fushë, pastaj do e zvogelojm madhesin e fushes prej 255 në 2 karaktere (NY), mbyllim tabelen.

- Hapim tabelen Sales Reps_design view_LastName_General Properties_Required: YES. Njejtë do te veprojmë per fushen _FirstName_Required_Yes.

Shkojmë te fusha_StateProvince_General Properties_Field Size: 2 karaktere_Format: > ( do na paraqiten vetem shkronjat e medha)_Caption: e hjekim fjalen Province_Default Value: “NY”_.

Page 18: Projekti olive oils

Two Trees Olive Oil

17

Gjithashtu duam të formatizojmë formen e Dates, zgjedhim fushen _StartDate_Format: Short Date_ njejte veprojm me EndDate! E mbyllim Tabelen Sales Reps dhe i ruajmë ndryshimet.

- Hapim tabelen Products në design view, fillojm me fushen SKU, I zvogelojme karakteret nga 255 në 6, hapim cilësin Required_Yes, dhe sigurohuni qe cilesia _Indexed_ të jetë Yes, kjo I mundeson

Access-it që ti procceson SKU fushat dhe kërkimet ti hap më shpejtë. _Size_Number_Field Size-Integer. Ruajmë dhe mbyllim_Products_tabelen.

- Hapim_Orders_design view_OrderDate_Format_Short Date_

- Tani le ta rregullojm vleren Default Value, ashtu që default ta bëjmë diten e sotme:_Default Value_Expression Builder: vendosimshenjen=, pastaj klikojim te Functions_Built- in

Functions_Date/Time_Now()_OK! Kur kalojmë në Datasheet View dhe e ruajmë, te fusha OrderDate do të na paraqitet data e sotit (2/3/2014).

SETTING INPUT MASKS Input Masks janë veqori të fushave, të cilat automatikisht formatojnë numrat telefonik, numrat e

Sigurimeve Sociale dhe të dhëna tjera, kështu që krejt cka duhet te beni eshte ti shkruani vet numrat. Hapim tabelen Sales Reps në design view,_HomePhone_Input Mask_klikojm në buid butonin, do te

hapet dritarja Input Mask Wizard_ ku do te rregullojm pamjen e numrit telefonik në fushë.

Page 19: Projekti olive oils

Two Trees Olive Oil

18

Tani do perserisim hapat e njejtë per –CellPhone_Input Mask Wizard…Finish.

Tani do te kalojmë në Datasheet View, e ruajmë ndryshimin me Save dhe kalojmë te

fusha_HomePhone_shenojmë nr.(310)456-1234 dhe kur shtypim_Tab_do te shohim nr. Telefonik te shtypur ne menyre te rregullt.

SETTING VALIDATION RULES Validation Rules, kontrollojnë të dhënat tuaja për sipas standardeve te kompanis suaj dhe nevojave

të Bazes suaj se te Dhenave. Këto rregulla te validimit monitorojnë të dhënat se si do të paraqiten dhe eliminojnë mundesit e gabimeve. Dallojmë dy variante te rregullave te validimit:

1.Validimi sipas fushës (Field Validation), e cila siguron që të dhënat korrekte janë shënuar dhe

Page 20: Projekti olive oils

Two Trees Olive Oil

19

2.Validimi sipas rreshtit(Record Validation), i cili siguron që fushat mbrenda atij rekordi funkcionojnë në mënyrë të rregullt.

Hapim tabelen Orders_Fields_Validation-Field Validation Rule_Expression Builder_shënojmë >0 AND <72_OK! Që don të thot se sasia duhet të shënohet dhe duhet me qenë më e vogël se 72.

Hapim Field Validation Message_dhe shkruajmë me fjalë në gj.angleze: “Quantity must be greater than 0 and less than or equal to 72”, mbyllim tabelen. Hapim tani tabelen Products në design view,_Size field_Validation Rule_këtu do të rendisim

madhësin e shisheve të vajit,=8 or =16 or =32 or =64 or =128, Accessi do ti vendos automatiisht thonjëzat rreth fjalëve, tek _Validation Text_ do shënojmë: Bottle ounces must be 8,16,32,64, or

128, e mbyllim tabelen Products_Save! - Tani le të tajtojmë RECORD VALIDATION (validimi i rreshtit), kjo ju mundeson qe te krahasoni

dy vlera te fushës, në atë mënyre që do te paraqitet një Error Message nëse kombinimi nuk

funkcionon. P.sh. te Sales Reps tabela, data e perfundimit (Termination Date) duhet patjeter me qenë pas dates së fillimit (StartDate):

Hapim_Sales Reps_datasheet view_Fields_Validation_Record Validation Rule_Expression Builder_[EndDate]>[StartDate]_OK! Mbyllim dhe ruajmë tabelen. Duke I perdorur Validation Rules, neve shumë redukojmë gabimet njerzore gjatë shënimit të të

dhënave.

Page 21: Projekti olive oils

Two Trees Olive Oil

20

RELATIONSHIPS

Creating relationships and enforcing referential integrity

- MS ACCESS 2010, konsiderohet si një Bazë e të Dhënave Relacionale, që don të thot se të dhënat

janë të ndara në Tabela të cilat janë të lidhura në mes veti. Tani do të vendosim Relacionet në mes katër tabelave tona dhe do të sforcojmë Integritetin Referencial. Shkojmë te Database Tools_Relationsheeps_Show table_ zgjedhim 4 tabelat_

Pranë seciles tabelë do të vërejmë qelesat primar të vendosur në fushen e pare reciprokisht. Gjithashtu do te verejme fushat e ngjajshme ne tabelat e databazes (te cilat do te funkcionojnë si Qelesa te jashtem). Do të lidhim fushen_EmpID_nga tabela _SalesReps_me fushen_SalesRep_ nga

tabela _Customers. Duke sforcuar Integritetin referencijal, duke klikuar në butonat Cascade Update Related Fields dhe Cascade Delete Related Fields, duke zgjedhur menyren Join Type_2: Include all

records …do te fitojm5 relacionin 1 me ∞. Ngjajshëm do të veprojmë me fushen CustID nga tabela Customer, duke e lidhur me fushen_Customer nga tabela _Orders; Fitohet relacioni: 1 me ∞;

Page 22: Projekti olive oils

Two Trees Olive Oil

21

Nga tabela Products__do zgjedhim SKU fushen me qelsin primar, te cilen do ta lidhim me fushen e jashtme korresponduese të tabeles _ Orders. Duke fituar ne kete menyrë relacionin: 1 me ∞. E mbyllim dritaren Relationships dhe e ruajmë me SAVE, relacionet e fituara nga tabelat do te na

ndihmojnë me tutje ne nxjerrjen e formave, queryve dhe raporteve.

ENTERING DATA INTO YOUR TABLE Mbasi kemi ndertuar strukturen e tabelave, ka ardhur koha që ti plotesojmë ato me të dhëna. Kemi ndertuar, pra 4 tabela duke specifikuar vecoritë e fushave. Pasi ti kemi plotesuar ato me te dhena,

mund ti shiqojmë edhe ne formen subdatasheets, kur egziston një mundesi e tillë. Poashtu mund te formatojmë te dhenat ne tabelat tona, p.sh. pamja e shkronjave tona, me anë të tekst formatting,

poashtu mund te ndryshojme vijat kufizuese (Gridlines) ne tabelë – vertikalisht ose horizontalisht,mund të ndryshojmë ngjyrat e rreshtave, kemi edhe veglen-SPELLING_ per te hulumtuar shqiptimin e saktë të fjalëve nga aspekti gramatikor, mund te luajme me gjeresinë e

fushave sipas deshires, lartesin e tyre, mund te fshehim nje fushe per most u dukur me veglen_MORE_Hide Fields. Të gjitha ndryshimet në strukturen e Tabelave duhet t5 ruhen me

SAVE, kurse ndryshimet e të dhënave nuk ka nevojë të ruhen. Pasi kemi mbyllur tabelen Customers, do të hapim tabelen _ORDERS_klikojmë në TOTAL_në fund të tabeles do kemi rreshtin total-klikojmë në fushen kuantity dhe pasi kemi klikuar ne butonin

combo box, do ten a paraqiten ne menyren renese kalkulimet si:SUM, AVERAGE etj, Modifikimi I tabelave tuaja do ti beje ato me atraktive dhe te perdorshme.

Page 23: Projekti olive oils

Two Trees Olive Oil

22

FINDING, SORTING AND FILTERING DATA (Gjetja,Sortimi dhe Filtrimi i të Dhënave)

MS ACCESS-i na mundeson qe te gjejme saktesisht te dhenat te cilat na interesojnë, duke perdorur teknikat e Gjetjes, Sortimit dhe Filtrimit të të dhënave.

Hapim tabelen _SALES REPS_ dhe na intereson te gjejmë shitësit të cilet fitojnë 8$/h, pra rreshqasim ne navigation bar-djathtas-gjejmë fushen_Salary_dhe selektojmë rekordin 8$,klikojmë

në Ribon_Find_hapet dritarja me menyrat Find dhe Replace, te cilat na japing mundesi te gjejme te gjithe punetoret me fitimin 8&/h, ose të zevendesojme 8$ me 9$/h, shembull.

Dalim nga dritarja Find and Replace me Cancel dhe hapim tabelen Customers. Duhet te gjejmë

konsumatorin I cili nuk harxhon më vajrat tona dhe duam që ta fshijmë nga databaza jonë; klikojmë në _Find_shenojmë emrin UNI dhe Accessi do e gjej rreshtin me emrin e konzumatorit Uni. Mbyllim dritaren me Cancel, e shenojm rreshtin e gjetur duke klikuar dhe me komanden DELETE

E fshijmë nga tabela. Do të hapet dritarja me pyetjen se nese do e fshijmë kete record, do te fshihen edhe rekordet me porosina te ketij klienti nga tabela ORDERS, pasi janë në relacion, I themi YES!

Tani do te bejmë ca Sortime: Klikojmë në combo boxin e fushes _STATE_ na ofrohen mundesite Ascending ngritese,

Descending/ rënëse, nga A deri Z, ose, Z deri A;

Page 24: Projekti olive oils

Two Trees Olive Oil

23

Këtu mund te bejme edhe filtrimin, duke klikuar në _Select All_zgjedhim vetem shtetin CA_dhe_MD (Maryland)_OK! – dhe do të shohim vetëm konsumatoret e filtruar.

ADVANCED FILTERING Nga tabela_CUSTOMERS_klikojmë në fushen _CITY_klikojmë në-Advanced_ Filter by Form, kjo

do ten a pastron tabelen dhe tani mund te mbushni cfarë deshironi të gjeni, kjo eshte perfekte kur doni te gjeni te dhena te cilat perputhen me me shumë se një kriterium, do zgjedhim te_

STATE_MD_kalojmë te _WEB PAGE, dhe do te gjejmë te gjitha kompanitë, te cilat kanë Web faqe, shkruajm_Is Not Null_,pra tani jemi duke kerkuar kompanite nga MD te cilat posedojnë WebSite/Faqe!? Vazhdojmë me komanden –TOOGLE FILTER ON_dhe do na paraqiten dy

konsumatorë të tillë.

Page 25: Projekti olive oils

Two Trees Olive Oil

24

Komandën Advanced Filtering/Sort do ta perdorim me vonë edhe te krijimi i Formave dhe Pyetsorëve.

FORMAT (FORMS) Janë Objekte të bazes se te dhenave me anë të cilave mund të shiqojmë te gjitha te dhenat nga

tabelat tona dhe kanë dy përparësi: -E para: na mundeson te shiqojmë një record per një moment, ne vend se ti veshrojim te gjitha -E dyta: e bejnë të lehtë shtimin e të dhënave në tabelat tuaja.

Forma e pare që do ta krijojmë eshte _Data Entry Form_nga tabela_SALES REPS_Create Tab_klikojmë në butonin_FORM_dhe akcesi automatikisht do ta krijoj edhe subformen me 25

rekorde, neper te cilat lehte mund te navigojmë nga e par ate e fundit. Zgjedhim datasheet view, dhe cdo e dhene e ndryshuar ketu di te rexhistrohet edhe ne tabelen SALES REPS. Ta shtojim një shkronjë O te Phenix-city-; Mund te krijojmë, poashtu edhe nji

record te ri (26), mund te shtojmë shenime edhe ne subformen e Customer Rep, do kthehemi pas te rekordi I pare, e ruajmë si SALES REPS AND CUSTOMERS FORM dhe e mbyllim.

Page 26: Projekti olive oils

Two Trees Olive Oil

25

Një tjeter lloj i Formes quhet SPLIT FORM, klkojmë në tabelen –PRODUCTS_Create_More Forms_Split Form_tani do të kemi në pjesen e siperme një forme te thjeshte me te dhena, ndersa

poshtë një listë me te gjithë rreshtat. Kurt ë klikojmë në cilindo nga rekordet poshtë, i njejti rresht na paraqitet ne formen më lartë. E ruajmë si _Products Split Form_dhe kur e hapim tabelen PRODUCTS do ta verejmë diferencen në pamje dhe sa me atraktive dhe efiqiente eshte te punojmë

Page 27: Projekti olive oils

Two Trees Olive Oil

26

me forma.

USING FORM WIZARD

Një menyre tjeter e ktijimit te Formave eshte duke perdorur Wizardin e Formës, Klikojmë në tabelen CUSTOMERS_Create_Form Wizard_do na paraqitet dritarja me tabelen e

caktuar dhe neve do zgjedhim fushat sipas deshires nga ana e majtë, per ti bartur ne anen e djathtë, ose ne rastin tone klikojmë në shigjeten e dyfishtë, për ti bartur të gjitha fushat përnjëherë; pastaj zgjedhim tabelen _ORDERS_duke i selektuar të gjitha fushat nga ajo dhe klikojmë në

NEXT_ACCESS-i automatikisht i njeh relacinonet mes tabelave dhe i rregullon në formë, _ Datasheet-Next_emrojmë Formen: Customers Order Form dhe Subformen: Orders

Subform,_FINISH. Do te fitojmë nje formë me shenimet e Konsumatorëve ne pjesen e siperme, e cila ka nevojë per ridizajnim e fushave dhe një listë me informatat e Porosive ne pjesen e poshtme.

Page 28: Projekti olive oils

Two Trees Olive Oil

27

MODIFYING A FORM IN LAYOUT VIEW Në Lay-out View mund te shtojm apo te ndryshojmë te dhenat, por eshte nje menyre per editim me pamjen e pergjithshme te Formave, duke i modifikuar rreshtat ose fushat , fontet, fotografitë,

trashesin e vijave, ndryshimi i ngjyrave etj, per tu dukur me bukur!

Page 29: Projekti olive oils

Two Trees Olive Oil

28

USING DESIGN VIEW (Përdorim i Dizajn Pamjes)

Egziston dukja e tretë e formes, e cila quhet DESIGN VIEW, e përdorur për të bërë ndryshime të stilit të lirë. Hapim Customers Order Form, vërejmë se disa labele (hapësira) duhet riaranzhuar. Për

t`i bërë këto ndryshime shkojmë në Design View, kalojmë në anen e djathtë te dritares, nëse property Sheet eshte e hapur,e mbyllim, kapim labelin `Documentation` -drag and drop` dhe e zvogelojmë, e kapim me kursorin kryq dhe e leshojmë ne hapsiren perfundi `Flag`, duke lënë

hapsirë për kutinë e vogel `Documentation`. Selektojmë të gjitha komandat nga ana e djathtë, e vendosim kursorin në njeren nga ato mu ne mes dhe I ngrehim në të djathtë për të liruar hapësirën.

Pastaj, selektojmë labelet nga e majta dhe duke perdorur kursorin `Resize` I hapim nga e majta, për t`I bërë pak me te medha, ne menyre qe te mund te lexohen. Mandej, levizim nga e majta, selektojmë grupin e kutijave me CustID dhe i shtyejm ne te djathtë, njejte veprojme me labelet nga

e majta, i selektojmë dhe i hapim nga e majta, per ti bere te lexueshme. Tani, na eshte liruar një ekstra hapsirë ne anen e majtë, i selektojmë te gjitha kutijat, i kapim dhe me shigjeten në keyboard

do ti levizim nga e majta. Tani do zbresim më poshtë, klikojm në boxin Orders dhe e fshiejm me DELETE. Pastaj, klikojmë në subform e kapim me maus dhe e zgjerojmë nga e majta.

Page 30: Projekti olive oils

Two Trees Olive Oil

29

Kthehemi në Datasheet View, tani Forma duket shumë më mirë. Veprimi I ardhshem që na mbetet eshte që të riformatojmë gjeresinë e fushave me double-click. E mbyllim dhe e ruajmë Formen e riaaranzhuar.

Tani do te krijojmë një Formë komplet të re, me disa vegla të avansuara (advanced controls) :

_CREATE_FORM DESIGN_dhe tani kemi një formë te zbrazet, që do te jetë Forma e Servisit të Konsumatorëve tonë. Së pari percaktohemi per njeren nga Themat (Foundry), pastaj do te shtojim një LOGO_zgjedhim foton nga folderi I ruajtur. E cila na paraqitet ne Form Header, do e

zmadhojmë pak, tani le ta shtojm një titull, që do ta emrojmë si_CUSTOMERS SERVICE FORM. Do të shtojmë edhe daten/kohen në formatin e dëshiruar, te cilat do na paraqiten ne te djathtë nga

titulli, kur te klikojmë në Datasheet View ato do te duken bukur. Kthehemi te Design View, Titullin do e zhvendosim ne mes, duke klikuar ne Format_Align text Center! Tani, do te shtojmë disa kontrolle në pjesen e poshtme, ashtu që të dijmë porositë e secilit

Konsumatorë: shkojmë te DESIGN tab, ku do te na paraqiten disa vegla, klikojmë në COMBO box, dhe e vendosim me klikim me poshte, do na hapet Combo Box Wizard, zgjedhim mënyren- Find a

record in my Form based on the value I selected in my Combo Box_Next_zgjedhim fushat CustID_ & Company_Next_e quajmë CustomerID_Finish.5 Më tutje do te vendosim një Ubound Text Box, klikojmë në labelin A në Ribon, me maus e ngehim

një vijë poshte hapsires Unbound, dhe fillojmë të shkruajmë textin: …`Our Customer`… Tani klikojmë në butonin TAB nga Riboni, dhe me maus e vizatojmë një hapsirë parfundi me

madhsinë 6x3 kutija, Emrimet si Page12,page 13 do ti ndryshojmë te Property Sheet_ALL_Name:

Page 31: Projekti olive oils

Two Trees Olive Oil

30

_Service Request, Website! Tani klikojmë në Service Request, per të bartur të dhënat nga tabela Service Request, pra ne do të perdorim një SUBFORM, klikojmë në Ribon tek butoni Subform/Subreports dhe klikojmë në

hapsiren e krijuar me TAB butonin, do te na hapet SubForm Wizard:

…do të vazhdojmë me _Use existing tables and queries_Next_zgjedhim tabelen Service Requests_Xgjedhim te gjitha fushat me shigjeten e dyfishtë_Next_e lëmë të quajtur si Service Request Subform-Finish!

Në vazhdim do e fshijmë titullin mbi subformen e krijuar `ServiceRequestsSubform` me DELETE. Klikojmë parap në Subformen tonë dhe me shigjetat nga keyboardi e lëvizim që të zë vend më mirë

mbrenda kutisë. Kthehemi në Datasheet View dhe keshtu do duket Subforma e krijuar, posa te klikojm në Combo box, ne menyren rënëse mund te zgjedhim Konsumatorin sipas ID-së caktuar.

Page 32: Projekti olive oils

Two Trees Olive Oil

31

Për ti ridizajnuar labelet tona, tabi kalojmë në Lay-out View,me double-click do rregullojmë gjerësin e fushave, kurse fushen Request do ta zgjerojm per te futur shënime në të. Kthehemi në

Design View dhe të punojmë edhe pak, klikojmë në Website, klikojmë në Ribon te butoni Web Browser_dhe pasi të kemi klikuar në hapsiren e subformes, do të na hapet dritarja `Insert -

Hyperlink`, e cila fillimisht kërkon të shënohet Addressa: http://www.twotreesoliveoil.com/contact.html, të cilen automatikisht do ta riformaton në URL Bazike: http://www.twotreesoliveoil.com, klikojmë _OK! E lëvizim dritaren me larte dhe majtas,

E zmadhojmë deri poshtë. Gjëja e fundit që do të bëj, eshte të vendosi një vijë të dukur mirë, mes Form Header dhe Data dritares, prandaj do të klikojmë në butonin LINE nga Riboni, dhe me maus e

nenevizojmë vijen ne mes Form Header dhe Ribon, shkojim te Format_Shape Outline_zgjedhim trashesin e duhur te vijes, te ndryshojmë poashtu edhe ngjyren në gjelbërt që e kemi perdorur në kete punim, dhe kthehemi në Datasheet View, plotesojmë fushen Request: Please Select Catalog,

Sttus me Open, dhe kur te klikojmë në Website do na hapet Hyperlinku: Twotreesolive oil…! me të gjitha kontaktet e adresat e servisave te Kompanisë, te duhura per konsumatorët tanë.

Pra, sic vërehet, krijimi i një forma me Disagn View, na merr shumë më tepër kohë, mirëpo këtu kemi kontrolin komplet mbi atë se cfarë jemi duke punuar.

Page 33: Projekti olive oils

Two Trees Olive Oil

32

SETTING TAB STOPS Ju mund të ndryshoni rendin e lëvizjes nëpër fusha, duke levizur me Tab ne një Formë. Hapim me double-click _Customer Order Form_ dhe duke shtypur tastin TAB në Keyboard do të

levizim neper fushat e epërme të formes dhe të Order tabeles, më poshtë. Nëse duam që të kufizojmë lëvizjen e TAB-it në tabelen e poshtme, kalojmë në Design View,

Page 34: Projekti olive oils

Two Trees Olive Oil

33

Gjëja tjeter ,që duam te bejme eshte te largojmë Subformen tonë nga komanda TAB, hapim Property sheet, dhe perfundi Orders Subform, te menyre –ALL_levizim deri ne fund poshtë_hapim TAB STOP_ zgjedhim NO!

Tani, kur te kthehemi te datasheet view do te verejme se TAB-I me nuk kalon te subforma.

ADDING BUTTONS TO A FORM (Shtimi i Butonave në një Formë)

Ju mund të rritni funkcionalitetin e një Forme, duke përdorur Butona të para programuar. Hapim Customers Order Form dhe dëshirojmë që te headeri, pranë titullit, të shtojmë një buton

komande për printim! Zgjedhim design view, në ribon klikojm te menyja Design, zgjedhim komanden xxxx, dhe shenjen

e cila na paraqitet si kursor, e vendosim te titulli, na hapet dritarja _Command Button Wizard: Do të zgjedhim_Form Operators_dhe _Print Current Form_Next_Do e zgjedhim komanden me text, nuk do zgjedhim butonin e gatshem PRINT, sepse do e formatizojmë më tutje.

Page 35: Projekti olive oils

Two Trees Olive Oil

34

Nëse duam ta ndryshojmë pamjen e butonit te printimit, shkojmë te Design tools_Format_Quick Styles_ zgjedhim njerin nga butonat e gjelbërt. Mund te ndryshojmë edhe formen e butonit

me_Change Shapes_pastaj_Design_datasheet View_dhe ja si duket Butoni jonë! Nëse shtypim Butonin e krijuar, do na shfaqet dritarja me Print Properties.

MS Access-i na ofron funkcione praktike për Butonat e Formave tona.

USING NAVIGATION FORMS (Përdorimi i Formave të navigacionit/lundrimit/kërkimit)

SWITCHBOARD-i, nga verzionet paraprake të Accessit ka fituar një zëvendësim të mirëpritur, NAVIGATION FORMS! Kur krijoni databaza per t`i perdorë të tjerët, ose perdorni web-share

menyren e funkcionimit, Navigation Forms krijojnë butone për t`ju qasur dhe parë më lehtë format dhe raportet tuaja. Hapim Bazen e të Dhenave, klikojmë në Create_Navigation Form_Vertical Left_zgjedhim

Customer Order Form_e kapim dhe e lëshojmë në maje të listes; tani kapim_Orders by Customers Report_dhe e lëshojmë njejte ne listen lartë majtas; Njëjtë nga Raportet zgjedhim_Sales Reps and

Customers_dhe Products Report, Service Request Form, dhe Sales Reps Phone List nga raportet! Tani që i kam butonat e mi, do të mirrem me pamjen e tyre: Klikojmë në butonin e parë, shkojm ne_ Format_Quick Styles_zgjedhim nje buton te

gjelbert_Change Shape_zgjedhim katerkendeshin e rrumbullaksuar. Përsërisim veprimet per

Page 36: Projekti olive oils

Two Trees Olive Oil

35

butonat tjerë, duke i ndryshuar ngjyrat, vijat kufizuese, hijezimet.

Duhet cekur, se NAVIGATION FORMS, funkcionojnë vetëm për Forma dhe Raporte, kurse Jo për Tabela dhe Query !

Kjo mënyrë inovative na mundëson që shumë lehtë të kalojmë nga një Formë ose Raport në tjetrin.

QUERIES (PYETSORËT) Pasi kemi mësuar si të ndertojmë Tabelat dhe të veshtrojmë te dhenat duke i perdorur Format, ka

ardhur koha që t`i analizojmë këto te dhëna, duke përdorur Pyetsorët. Pytsori ju lejon që të nxjerrni saktesisht të dhënat që ju duhen në cdo kohë, në menyrë qe ju mund t`i shiqoni dhe t`i analizoni të dhënat tuaja në menyra te ndryshme. Ato mund të krijohen per një

perdorim, ose të ruhen për t`i perdorur pa kufi herë.

Mund të krijoni një Query, për të selektuar e cila plotëson një kriter (kusht) të caktuar

P.sh. Kërkoni porositë nga një shtet i caktuar, shembull Kalifornia

Deshironi te kalkuloni qmimin total për një porosi ( qmimi prodhues+transporti+TVSH)

Dëshironi të analizoni për një punetor të caktuar, a eshte i mbipaguar, apo nënpaguar

Ju duhen Rexhistri Telefonik me adresat e të punësuarve tuaj

Page 37: Projekti olive oils

Two Trees Olive Oil

36

Poashtu, mund ta perdorni nje Query si baze per një raport

Mund të beni edhe Action Querys, per te shtuar informata ne nje tabelë

Ose të fshijmë të gjitha të dhënat, të cilat plotesojne nje kriterium Në thelb, ju ndertoni një Query, kur do herë që dëshironi të shtroni pyetje nga databaza juaj!

PËRDORIMI I QUERY WIZARD PYETSORIN e parë, që do ta ndertojmë eshte SELECT QUERY, që don të thot, se do të përdorim disa nga fushat, por jo të gjitha nga tabela. Do të perdorim Query Wizard për të bërë këtë: Për të filluar klikojmë në _Create_Query Wizard_në dialog box ne zgjedhim_simple Query

Wizard_OK_(të krijojmë një listë telefonike për Agjentët e Shitjes)_zgjedhim Tabelen_Sales Reps_ Selektojmë fushat: LastName, FirstName, CellPhone, HomePhone dhe Email_Next_emri i

pyetsorit: Sales Reps Phone List Query_Finish! Do të fitojmë një Query me shenimet e kerkuara te punetorve tanë, që nuk ndikon te shenimet e Tabeles SALES REPS, sikurse ndikonte Forma; kete Pyetsorë do ta perdorim me vonë gjatë

krijimit të raportit për Shitësit tanë. E mbyllim dritaren duke i ruajtur ndryshimet.

KRIJIMI I PYETSORËVE NË DIZAJN VIEW DUKE PËRDORUR KRITERET Krijimi i Pyetsorëve në design view ju jep fuqi të plotë në analizimin e të dhënave tuaja.

Hapim Querin, të cilin sapo e krijuam,Sales Reps Phone List Query, në design view, hapet dritarja: Në pjesen e siperme shihen Tabelat me fusha, kurse poshtë eshte e vendosur nje diagram me 5 fushat e zgjedhura që duam t`i shohim. Nëse na pyet a duam të ruajm ndryshimet, themi JO.

Në vazhdim do të krijojmë një Query per të analizuar shitjet tona në Maryland!? Na duhet t`i nxjerrim konsumatorët tonë nga Merilandi dhe porositë e tyre, pra, klik në_Create_Query

Design_do te fitojm një Query të zbrazët_zgjedhim tabelat_Customers dhe Orders_zgjedhim

Page 38: Projekti olive oils

Two Trees Olive Oil

37

fushat:Company dhe State (tabela Customers)_zgjedhim fushen: Order Date nga Orders, selektojmë tabelen Products dhe zgjedhim fushat: Product, Size dhe Price. Në fushen e parë,State, te rubrika Criteria do shenojmë “MD”, ne fushen e dyte Company te rubrika

Sort do te perdorim sortimin Ascending, njejte te fusha e tretë OrderDate_Acending,

Pas egzekutimit keshtu do te duket Qyery `Maryland` i fituar ne Datasheet View:

Page 39: Projekti olive oils

Two Trees Olive Oil

38

KRIJIMI I WILDCARD PYETSORËVE WILDCARDS na lejojnë që të egzekutojmë querit tonë, kur nuk kemi perputhje te sakte me kriteret e parashtruara.

P.SH. Kishim një bisedë me njerin prej konsumatorëve dhe e dija që kisha vendosur nje shenim mbi komentet për vajrat, por nuk me kujtohej se kush ishte dhe cfarë thash, prandaj le të krijojmë një

Query: _Create_Query Design_Customers table_Company field_WorkPhone_ContactFirst_ContactLast_Notes: _Shift *oil*_RUN! Do të fitojmë Querin me fjalën *oil* të cekur në komente te fusha Notes.

Kjo eshte Query per nji perdorim, prandaj nuk ka nevojë të ruhet, por duke perdorur wildcards Queries, na mundeson një fleksibilitet komplet në themelimin e kritereve tona.

KRIJIMI I PYETSORËVE ME PARAMETRA TË RIPËRDORSHËM Nganjëherë kur e egzekutojmë një Query, keni deshire qe te perseritni te njejtat analiza, por te

ndryshoni grupin të cilin e keni perdorur per kete qëllim. Nuk ka nevojë të krijojmë Query të shumëfishta, një PARAMETER QUERY na mundeson që të ripërdorim një Query të rregulluar.

Klikojmë në queryn Maryland Orders, e kopjojmë dhe I themi paste në fushen e zbrazët të All Access Objects, e riemrojmë si Orders by State. E hapim në design view duke vendosur kriterin te fusha e parë:[What State?], klikojmë në View butonin dhe Dialog Boxi do te na hapet,duke na

Page 40: Projekti olive oils

Two Trees Olive Oil

39

pyetur: What State?, pra duhet te caktojmë një shtet, p.sh. NY, dh e do fitojmë Querin me shenimet:

Sa herë që të hapim Queryn Order by State do të na hapet dialog boxi me pyetjen: What State?

Page 41: Projekti olive oils

Two Trees Olive Oil

40

CREATING YES/NO QUERIES KRIJIMI I PO/JO PYETSORËVE

YES/NO QUERY-it ju mundesojnë që ti shenoni me FLAG rekorde specifike nga një tabelë, për një qëllim të caktuar.

P.SH. –Eshte verë dhe na duhet një listë e punetorëve, të cilët ju kanë pyetur për pushim. Nëse hapim tabelen SALES REPS dhe kalojmë djathtas te fusha FLAG, le t`i shenojmë me shenjë

ata punetore që kanë kerkuar pushimin vjetor. I zgjedhim p.sh. 10 sosh, mbyllim tabelen. Tani klikojmë një here ne tabelen SALES REPS_Create_Query Design_zgjedhim tabelen SalesReps_zgjedhim fushat: EmpID, FirstName,LastName, StartDate dhe Flag.

SORT_ASCENDING (StartDate)_te FLAG vendosim kriterin YES, Yes d.m.th. se boxi ka shenjen ne te, kurse No d.m.th. se nuk ka. _VIEW rezultatet, do te fitojmë querin me listen e punetoreve qe

kanë kerkuar pushimin, të renditur sipas stazhit më të vjetër:

YES/NO Query na mundeson që të perfitojmë nga FLAG opcioni në databazen juaj.

Page 42: Projekti olive oils

Two Trees Olive Oil

41

KRIJIMI I AND/OR PYETËSORËVE Shpesh herë hasim në rastet kur Query duhet të perballohet me ma shumë se një kriter. Ja se si do te

krijojmë AND/OR Query-t: Na intereson lista e punetorëve që janë punësuar në vitin 2003 dhe janë ende me ne? Do të perdorim AND pyetësorin, sepse ne kete rast duhet te plotesohen te dy kushtet!

Klikojmë në _CREATE_QUERY DESIGN_SALES REPS: Zgjedhim fushat: LastName, FirstName, StartDate, EndDate

Në Criteria te StartDate shënojmë: <1/1/2003; pas shtypjes së Tab në keyboard, Accessi do të vendos asteriksat kesi soji: <#1/1/2003# Te EndDate në Criteria shenojmë: Is Null ( në terminologjin e databazave d.m.th. është e zbrazët).

Klikojmë në View dhe konstatojmë se 4 punëtorë janë me neve, për një kohë shumë të gjatë.

E mbyllim Querin dhe e ruajmë si `Longest Employed`. Tani do krijojmë OR QUERY:

Kjo na mundeson te krijojmë Pyetesorë, të cilet plotesojnë një kusht ose tjetrin! Ketu kriteret nuk vendosen ne te njejtin rresht por perfundi njeri-tjetrit:

Na intereson lista e punetoreve me te ardhura me te larta dhe atyre me ato ekstremisht të ulta? Zgjedhim tabelen SALESREPS, fushat: LastName, FirstName, Salary , kurse te kriteri vendosim: <=10 OR

>=30

Page 43: Projekti olive oils

Two Trees Olive Oil

42

Në VIEW do te shohim Querin me listen e puntorëve me rroga të jashtëzakonshme:

Page 44: Projekti olive oils

Two Trees Olive Oil

43

CALCULATION QUERY / PYETSORËT KALKULUES Eshtë e mundur që të bëjmë kalkulime përmbrenda pyetësorëve tanë. Le të krijojmë një Query, i cili do na jep qmimin total të cdo porosie? _CREATE_QUERY DESIGN_zgjedhim 4 tabelat: Products, Orders, SalesReps dhe Customers,

Me fushat respektive: OrderDate, Company, Product, Size, Price, Quantity, Lastname. Te dy fushat e para sortimin e vendosim si Ascending. Tani le të llogarisim Totalin për porositë:

Klikojmë në kolonen e fundit dhe në Ribon _Builder_EXPRESSION BUILDER_ shënojmë Formulen: Total: [Products]![Price] * [Orders]![Quantity] Shtypim OK, dhe do na plotesohet kolona e fundit në grid me Formulen e Totalit;

Le të shiqojim rezultatin e Totalit per secilen porosi në View:

Querit Kalkuluese na mundesojnë që të bëjmë cfarëdo llogaritje ndërmjet cfarëdo fushave të tabelave nga Baza jonë e të Dhënave.

Page 45: Projekti olive oils

Two Trees Olive Oil

44

CREATING STATISTICAL QUERIES (KRIJIMI I PYETSORËVE STATISTIKORË) Në qoftë se dëshironi që të bëni analiza statistikore në databazen tuaj, atëherë ju mund të përdorni Pyetsorë Total! Shkojmë te Create tab_Query Design_zgjedhim Products dhe Orders tabelat.

Kemi shitur deri me tani diku mbi 8 miliard shishe të vajit të ullirit. Do te analizojmë prodhimet tona, të klasifikuara sipas madhësisë.

Nga tabela Products zgjedhim fushat: Size, Price dhe dy herë Profit, Nga tabela Orders zgjedhim fushat: OrderID dhe Quantity. Lartë në Ribon qëndron shenja Sigma për shumen, klikojmë në te dhe në grid na paraqitet rreshti

Total, i cili në default grupon (Group By). Fushen Size e lëjmë me Group By, sipas madhesise, pa marr parasysh cfare eshte ajo.

Te fusha Price_Group By_zgjedhim Avg_, për Profitin zgjedhim Min dhe Max, për OrderId zgjedhim Count, kurse për Quantity _ Sum! Klikojmë në View dhe shohim:

Për të qartësuar titujt e kolonave dhe rezultatet e fituara, klikojmë në design view dhe korigjojmë titujt: Size nuk e prekim, Average Price:Price, Smallest Profit:profit, Largest Profit:Profit, Number

of Orders: OrderID, Total No Ordered: Quantity! Dy pikat tregojnë që fjalët e shkruar në të majt prej tyre do të qëndrojnë si tituj për kolona.

Page 46: Projekti olive oils

Two Trees Olive Oil

45

Cdo herë kur egzekutoni një Pyetsorë statistikor, ju do të keni llogaritë më të reja mbi gjendjen e prodhimeve tuaja.

USING UPDATE QUERIES Kur të keni nevojë për ti ndryshuar të dhënat në tabelen tuaj, mund ta kryeni këtë shpejt, duke

përdorur UPDATE QUERY! Më duhet momentalisht t`i ngriti qmimet, nuk kam mundesi te shkoj rresht per rresht që t`i

ndryshoj, kur mund ta bëj këtë me një tabelë përnjëherë! CREATE_QUERY DESIGN_PRODUCTS table_Close! Zgjedhim fushen_PRICE_ dhe tani do e ndryshojm llojin e Querit duke shtypur butonin në

Ribon_UPDATE. Le të themi p.sh. se do ngritim qmimet e produkteve tona për 10%. Poshtë në grid, te rreshti Update_shenojmë: [Price]*1.1

Kur te klikojm në View, do shohim qmimet e ngritura për 10%; Nëse egzekutojmë Querin me RUN! Na pyet a jemi te sigurt per ndryshimet ne 90 recorde, themi Yes, dhe nese e hapim tabelen Products, do te shohim qmimet e update-uara per 10%

Tani do ta fshijmë fushen Price nga gridi me Delete, si dhe tabelen Products.

Për Querin e dytë, le të themi se Agjenti I shitjes nr.5 April Walters eshte duke u larguar, dhe te gjithë klientat e tij do ja kalojmë agjentit nr.2 Layla Douglas.

Page 47: Projekti olive oils

Two Trees Olive Oil

46

Klik në Query tools design_Show Table_Customers_Close. Zgjedhim fushen SalesRep, sigurohemi se komanda _UPDATE_eshte e kyqur, te Criteria: 5, Update To: 2, _view: do te kemi nji klient Walters I cili do te ndryshoj, kthehemi pas ne design view dhe _RUN!_Yes!

Hapim Customers tabelen dhe shohim ndryshimin, kosumatori I ciki ishte I april Walters tani eshte i Douglas- it.

DELETE QUERIES Keta pyetsore i perdorim kur deshirojmë te fshijmë ndonji rekord nga tabela, sipas një kriteri specifik. P.SH. konsumatori Zinno Lettis ka kthyer porosinë për disa vajra! Por deri sa ishin duke pritur, ata

vendosen që të anulojnë porosin e tyre. _CREATE_QUERY DESIGN_ORDERS table_CLOSE.

Zgjedhi fushat Customers dhe Order Details, pastaj zgjedhim tipet dhe vendosemi per DELETE! Poshtë krijohet nje rresht i ri per Delete – Criteria; Te Customers_Criteria_shenojme: ZL11722,

Order Status_Criteria_shenojme: Backordered Kur te klikoni ne View butonin, do shohim tre rreshta te gatshem per tu fshirë:

Page 48: Projekti olive oils

Two Trees Olive Oil

47

kthehemi pas ne design view, klik on RUN!_Yes.

Hapim tabelen-CUSTOMERS_ zbresim ne fund te Zino Letis dhe porosit e anuluara janë zhdukur.

CROSSTAB QUERY Në vend që te veshtroni te dhenat e juaja bazuar ne një kriter, ju mund t`I analizoni ato bazuar ne

nje apo me shume variabla/ndryshore duke i perdorur CROSSTAB QUERIES. Ndoshta jeni kjurioz që të dini se sa shishe nga secili lloj vaji shitet cdo ditë? Per te bere kete, perdorim Crosstab Query per të krahasuar Daten e porosisë me produktet, dhe

Shumen e sasisë. _CREATE_QUERY WIZARD_CROSSTAB QUERY_Next_ORDERS table_Next_fusha

OrderDate_Next_Products_Next_Quantity_SUM_next_ndryshojme emrin; Products Sold by Date Crosstabe_Finish. Nëse levizim teposhte deri te rreshti me dt.Mars/9/2006/ do te mesojme se atë ditë,jane shitur 104 shishe gjithsejt dhe posaqerisht te ndara sipas madhesis ne unca te shisheve…

Page 49: Projekti olive oils

Two Trees Olive Oil

48

Eshtë me rendesi te dijme se ne mund te ndertojme Crosstabe Queries nga tabela te ndryshme, mirepo per ta arritur kete duhet qe te krijoni një SELECT QUERY, per ti bashkuar (JOIN)

FUSHAT PREJ TE GJITHA TABELAVE TUAJA NE NJI VEND. Atehere ju mund te ndertoni nje CROSSTAB prej atij PYETSORI.

RAPORTET

RAPORTET janë Objekte te Access-it, te cilat i formatizojnë te dhenat tuaja për printim.

Mund te bazohen ne Tabela ose Query

Formatim i bukur dhe organizim i informatave per ti bere me atraktive per lexim

Raportet ndryshojnë nga Format

Format janë specifikisht te krijuara per perdorim ne ekran ( On Screen Use)

Raportet janë te dizajnuara per tu shtypur ne leter

Raportet mund te perdoren per t`I grupuar te dhenat tuaja

Me anë të tyre mund te bëhen kalkulimet

Mund te bejne efekte speciiale si Formatime te kushtezuara

- Pra le te fillojmë me krijimin e Raportit tonë te pare: Klikojmë në tabelen _PRODUCTS_CREATE_REPORT;

Raporti na paraqitet ne layout view, me pamje atraktive, I gatshem per tu printuar, ani pse pamja mund te ndryshohet teresisht. E ruajmë, duke e quajtur _PRODUCT REPORTS.

Page 50: Projekti olive oils

Two Trees Olive Oil

49

USING THE REPORT WIZARD Maxhistari I Raportit ju udhëheq nëpër hapa, se cilat fusha do t`i printoni, si do të duken,I do te ju pergjigjen. Le të krijojm një raport nga Query I krijuar me heret: Sales Reps Phone List Query_

_Create_Report Wizard_hapet dritarja e Maxhistarit_i zgjedhim te gjitha fushat me >>Next_Next_Last Name, First Name-Ascending_Tabular, Portret_Next_Sales Reps Phone List Report_Finish.

Page 51: Projekti olive oils

Two Trees Olive Oil

50

FORMATIMI I RAPORTIT NË LAYOUT VIEW Pasi që kemi krijuar Raportin, mund ta formatojmë atë në Lyout View; Neve i eksploruam shumë mundesi te Layout te Format, prandaj do t`i cekim vetëm ato më të rëndësishmet për raportet tona të

vecanta. Hapim raportin ne fund te Access Objects_Sales Reps Phone List Report_Layout View_zgjedhim

temen (Foundry)_mund te ndryshoni ngjyren e fonteve; Raportet janë te bazuara ne tabela, prandaj te gjtha te dhenat jane te organizuara neper rreshta dhe kolona. Mund te selektojm dy rreshta me Shift, ti zgjerojmë fushat te gjitha pernjeherë,mund te

levizim kolonat ne teresi majtas-djathtas, mund te ndryshojmë madhesin e fonteve te Email adreses, duke klikuar ne Design_Format_zvoglojmë madhesin e fonteve ne 10, dhe te gjitha adresat e fushes

Email do zvogelohen; levizim ne fund te faqes, selektojme Page Nuber_Delete_ Shkojmë ne Design_Page Numbers_rregullojm shfaqjen e nr. te faqes. Tani jemi gati per Printim, Shkojmë në Page Setup_zgjedhim _Size (madhesia e

faqes)_Marginat_print Data Only_Portrait ose Landscape, mund te printojmë faqen ne Kolumne: Nëse hapim-PAGE SETUP_hapet dialog boxi, I cili na jep te njejtat mundesi si komandat ne Ribon.

Kur të jemi gati klikojmë në_Design_Report View_File_PRINT!

Page 52: Projekti olive oils

Two Trees Olive Oil

51

IDENTIFIKIMI I RAPORTEVE NE DESIGN VIEW

- Raportet kanë poashtu pamjen tjeter, Design View, e cila ju jep kontrollen e plotë mbi raportin tuaj.

Kuptimi i kesaj ju lehteson punen me raportet dhe ju mundeson ndryshime te lehta. Kemi eksploruar shume nga Design View mundesitë tek kapitulli I Formave, prandaj ketu do ti cekim vetem ato me te rendesishmet per formatimet e nje Raporti te posacëm.

Hapim_Sales Reps Phone List Report_Design View_Dallojmë Report Header dhe Report Footer, te cilet do te paraqiten prej faqes pare deri te e fundit, poashtu edhe titujt e fushave të cekura

Klikojm te labeli_Sales Reps Phone List Report (titulli)_Design_Property Sheet_e cila mundeson ndryshime cilesore sipas fushes se selektuar_ Te PROPERTY SHEET dallojmë tabet:

- Format – gjithcka duket ne keto kontrolla, - Data – informatat te cilat I permbajnë keto kontrolla

- Event – ngjarjet që ndodhin kur ti perdorni keto kontrolla - Other – disa mundesi tjera dhe - All – te gjitha mundesit e grupuara ne një listë të gjatë

P.SH. Klikojmë te titulli_ Sales Reps_Property sheet_All_pecial Effect: Flat: Raised.

Kthehemi te VIEW dhe do te verejm titullin tone me nje hijezim 3D te bukur. Kthehemi ne design view, duke manipuluar me detajet me te imta, ju do te keni kontrrollë të plotë tek Raporti juaj.

SHTIMI I MUNDËSIVE GROUP DHE SORT TE RAPORTI

Kur kemi punë me shumë të dhëna, mund t`i grupojmë informatat e përsëritura, në atë menyre qe

raportin te mund ta lexoni dhe lehtë ta kuptoni. Hapim_Order Totals Query_ku shihet kalkulimi total per secilen porosi. Le ta shëndrrojmë këtë Query në një Raport, ashtu që të mund të lexohet më lehtë:

Klick te Querit_Order Totals_Create_Report_shohim se kompanitë tona janë te grupuara, por edhe të perseritura.

Klikojmë_Design tab_Group & Sort_Group,Sort&Total/ ne pjesen e poshtme te ekranit do te paraqitet kjo hapësirë_klikojmë:_ADD a GROUP_Company_një subheading do të paraqitet me porositë perfundi: Kompania është hjekur menjiherë nga secili rresht, në mënyrë që leximi të behet

më I kuptueshëm. Klikojm te labeli ~All Kind of Taste~ dhe e ngushtojmë, Klik në _ADD a SORT_Order by Date, klikojm te Company_A-Z/Z-A, …kur te kemi mbaruar me formatim do te

fitojmë kete raport, ku dallimi eshte I dukshem me Querin, prej të cilit e kemi nxjerr:

Page 53: Projekti olive oils

Two Trees Olive Oil

52

SHTIMI I FUSHAVE EGZISTUESE NGA TABELAT TJERA Access-I na mundson që te shtojim një fushe nga tabelat tjera, nese e hapim raportin ne Layout

View dhe e prdorim Veglen_Design_Add Existin Field.

Page 54: Projekti olive oils

Two Trees Olive Oil

53

SHTIMI I TOTALEVE DHE SUBTOTALEVE NË RAPORT Gjatë leximit te nje raporti, shtrohet nevoja që të permbledhim ca kalkulime, si per nensekcione ashtu edhe per raportin ne teresi. Butoni TOTAL I MS Accessit (sigma) e lehtëson kete veprim. Hapim raportin ne Layout_Orders by Customer_( duam te mesojm se sa ka shpenzu secili

konsumator me neve dhe sa eshte fitimi ynë per periudhën e caktuar?)_ Klik në kolonen_Total_Design_Totals_Sum_ një subtotal do te na paraqitet perfundi cdo rreshti.

Ne fund te faqes do te shohim Grand Totalin, shkojim te Format ne Ribon_klick në_$_e cila ndryshon Currency formatin_klikojmë në subtotal duke e krijuar atë currency, poashtu. Ne te majt shohim nje tjeter subtotal per qmimet (Price Total), klikojm me te djathten mbi të, e

ndryshojmë në Average (AVG): tani do I shohim mesataret per porositë tona. Pas formatimeve tjera te mundshme me p.sh. presjen dhjetore ose me mundesit nga property sheet Raporti ynë do te duket

keshtu:

Page 55: Projekti olive oils

Two Trees Olive Oil

54

Poashtu mund te krijojmë raporte nga me shumë tabela (Multitable Reports), me anë të Report Wizard-it.

MAILING LABELS

MS Access 2010, na mundeson që te krijojmë Labele apo etiketa me adresa të konzumatoreve, te

firmave te ndryshme që porosisin etj, me anë të mundesisë në Ribon – Create – Labels.

SHTYPJA E RAPORTEVE Pasi që raporti të pergatitet, te formatohet, te editohet dhe të kontrollohet ne disagn view ose lay-out

view, ai eshte gati per printim, gje të cilen MS Access 2010 na jep shumë mundesi. D.m.th. hapet raporti i ruajtur në All Access Objects, klikojmë në File – Print – Print Perview – ku na hapen

shumë mundësi per te modifikuar pamjen dhe formatin e raportit final para shtypjes.

F U N D

Page 56: Projekti olive oils

Two Trees Olive Oil

55

Page 57: Projekti olive oils

Two Trees Olive Oil

56

Page 58: Projekti olive oils

Two Trees Olive Oil

57