You are on page 1of 91

SADRŽAJ :

PREDGOVOR 1

1. OSNOVNI POJMOVI O BAZAMA PODATAKA 2

1.1 RELACIJSKE BAZE PODATAKA 3


1.2 DIZAJNIRANJE BAZE PODATAKA 4

2. UVOD U RAD S MS ACCESSOM 8

2.1 TABLICE 12
2.2 RELACIJE U BAZI 19
2.3 UPITI 28
2.4 OBRASCI (FORMS) 39

3. PRIMJER – BANKA (UPLATE / ISPLATE) 49

3.1 PROGRAMI PO.5E7$NI DOGAĐAJIMA UPOTREBOM MACRO NAREDBI 58


3.2 PARAMETARSKI UPITI 66
3.3 IZVJEŠĆA (REPORTS) 80
3.4 IZRADA GLAVNOG IZBORNIKA APLIKACIJE 85
PREDGOVOR

Ova knjiga je prevestveno namijenjena učenicima osnovne škole Klinča Sela


u kojoj ja predajem izbornu informatiku. Moja preporuka je korištenje ove knjige
za učenike sedmih i osmih razreda, koji žele proširiti svoje znanje iz područja rada
s bazama podataka.

Nadam se da će se njome poslužiti i učiteljice i učitelji te da će svima, kojima dođe


pod windowse, biti izvor usvajanja novih znanja i vještina ili pomoć za rješavanje
nekih zadataka u ovoj domeni.

Knjiga je podijeljena u tri cjeline.

U prvoj sam naveo osnovne pojmove o bazama podataka.

Druga cjelina se bavi relacijskim bazama, odnosno MS Access-om.

Treća cjelina je jedan opsežan primjer, koji može biti od velike koristi za one
koji se žele ozbiljnije uključiti.

Autor

1
1. OSNOVNI POJMOVI O BAZAMA PODATAKA

Engleski naziv Database kod nas je doslovno preveden s baza podataka. Što nam se u stvari krije
iza tog naziva?

Baza podataka je uređeni skup međusobno povezanih podataka o jednoj ili više
tema, predmeta i sl. [ECDL definicija].

Ovo je samo jedna od mnogobrojnih definicija. U nešto širem smislu mogli bi kazati da je baza
podataka skup zapisa i datoteka koje su organizirane za neku svrhu. Koliko kod vam izgledalo
čudno s bazama podataka se susrećete svaki dan, a navest ćemo samo neke tipične primjere:

• Telefonski imenik
• Osobni adresar
• Red vožnje brodova, vlakova i sl.
• Vaša ladica s plaćenim računima složenim po mjesecima

Primjeri su zaista brojni. No, za ilustraciju zamislimo slučaj s vašom ladicom s računima. Smatrat
ćemo da su unutra složeni plaćeni računi režija (telefon, komunalije, struja, voda, stanarina),
uplaćene rate kredita, plaćena polica osiguranja i registracije vozila i još primjerice račun mjesečne
uplate za školu stranih jezika. Malo ćemo karikirati situaciju. Vaša mala baza podataka iz godine u
godinu postaje sve veća. Odlučite vidjeti koliko ste ukupno i prosječno potrošili za sve režije u
prethodne tri godine. Vadite račune režija od protekle tri godine uzimate kalkulator i izračunavate
željene vrijednosti i zapisujete ih na komad papira. Možete zamisliti da je riječ o prilično zamornom
poslu. Zadovoljni vraćate sve račune ponovno na mjesto, a s njima i papir s izračunima. Vi ste u
ovom slučaju bili tipični korisnik i upravitelj vaše baze podataka (Database manager). Što ste kao
upravitelj radili? Primili ste određeni zahtjev korisnika, dohvatili ste potrebne podatke, napravili
neke zahvate nad tim podacima (obradili ih), dobili željeni rezultat kojeg ste dali korisniku i
ponovno vratili podatke na staru lokaciju.
Sada kad smo se upoznali s pojmom baze podataka možemo izvršiti i njihovu podjelu:

• Baze podataka podržane računalom


• Baze podataka bez računalne potpore

Mi ćemo se baviti samo prvima, a primjer ove druge je naša ladica s računima. U ovom slučaju
ulogu našeg upravitelja bazom podataka (Database managera) preuzima MS Access 2003. U
računalnoj terminologiji možemo dati novu definiciju za računalom podržane baze podataka:

Baza podataka je skup datoteka s minimalnom zalihosti podataka organiziranih i


strukturiranih po nekom pravilu tako da daju korisne informacije o nekoj temi ili se
koriste u nekoj drugoj aplikaciji.

2
Logički način na koji je organizirana baza omogućuje jednostavan pristup, manipulaciju podacima
i ponovno pronalaženje istih.
Podaci i informacije o čemu je riječ?

PODATAK Î tekst, broj, slika, zvuk koji se mogu pohraniti na računalu. Predstavlja
"sirovinu" koju treba obraditi kako bi postala informacija. Sam za sebe ne mora značiti
ništa.
INFORMACIJA Î značenje pridodano podatku na način da se smanjuje stupanj
neodređenosti o nekoj temi, predmetu, osobi, događaju i sl.

Primjerice podaci 232, motokultivator i 12000 sami za sebe nemaju neko važno značenje, ali ako to
malo posložimo na sljedeći način Î šifra proizvoda motokultivator je 232, a cijena mu je 12000kn
Î dobivamo informaciju. Postoje tri osnovna tipa baza podataka:

1. Hijerarhijske baze podataka


2. Mrežne baze podataka
3. Relacijske baze podataka

Redoslijed kojim su navedene ujedno predstavlja i tijek njihovog povijesnog razvoja. U okviru ovih
vježbi zanimaju nas samo relacijske baze podataka.

1.1 Relacijske baze podataka

Većina suvremenih sustava za upravljanje bazama podataka zasnovani su na relacijskom modelu


baze podataka. Taj model se sastoji od većeg broja međusobno povezanih datoteka koje su
strukturirane u obliku tablica. Kao i sve tablice i ove tablice u relacijskim bazama podataka se
sastoje od stupaca i redaka. Redci predstavljaju zapise (slogove), a stupci polja. Relacije se odnose
na veze između podataka pohranjenih u različitim tablicama.

ID_zaposlenika Prezime i ime stručna sprema godina radnog staža odjel


1 Marković Zorana SSS 12 nabava
3 Gustić Špiro NSS 10 nabava
4 Franić Branko SSS 5 prodaja
6 Velimirović Žana VSS 5 marketing

polje
zapis / slog

3
Prema tome, zapis ili slog bi bio skup informacija opisan jednim ili većim brojem svojstava (polja).
Iz gornjeg, jednostavnog primjera možemo vidjeti da tipovi podataka u poljima mogu biti različiti.
Tipovi podataka koje ćemo najčešće koristiti su:

• Tekstualni (Text)
• Brojčani (Number)
• Valuta (Currency)
• Datum (Date)
• Vrijeme (Time)
• Logički (Yes / No)

Relacijski model baze podataka u velikoj mjeri odgovara predodžbi događaja stvarnog svijeta i
podacima što ih ti događaji generiraju [Panian]. Da bi mogli predočiti na što se odnosi pojam
relacije poslužit ćemo se opet jednim primjerom. Rekli smo da su podaci u relacijskim bazama
podataka pohranjeni u vidu tablica. Neka nam se u jednoj tablici nalaze podaci o narudžbama, a u
drugoj podaci o kupcima (naziv, adresa, matični broj itd). Umjesto da se uz svaku narudžbu
ponovno navode svi podaci o nekom kupcu, ta informacija se dobije uključivanjem samo jednog
polja kojeg možemo nazvati identifikacijski broj kupca. To polje je jedinstveno za svakog kupca
tako da ne može doći do zamjene informacija. Ono će se nalaziti u tablici kupci i u tablici narudžbe.
Na ovaj način izbjegavamo redudanciju (zalihost) podataka.
Drugi razlog raširenosti relacijskih baza podataka vezan je uz razvoj programskih jezika za rad s
bazama podataka (Database Language). Razvijen je veliki broj tih jezika, ali su najvažniji tzv.
jezici za postavljanje upita (Query Language). Riječ je o jezicima koji korisniku omogućuju
jednostavno postavljanje upita upravitelju baze podataka (database manageru) te brzo dobivanje
odgovora koji je iskazan na pregledan način. Najpoznatiji takav jezik je SQL (akronim od
Structure Query Language).

1.2 Dizajniranje baze podataka

Računalno podržana baza podataka Æ trebali vam to???


Koji su presudni razlozi za prelazak na poslovanje s računalom podržanim bazama podataka,
preciznije za uvođenje programskog relacijskog sustava upravljanja bazama podataka kao što je MS
Access 2003? Navedimo samo neke:

• Imate previše podataka u odvojenim datotekama što otežava manipulaciju tim podacima
• Ti podaci vam trebaju za razne analize Æ skupni podaci prodaje po kvartalima, trendovi
rasta cijena, što ako analiza, najbolje prodavan aranžman u sezoni i sl.; drugim riječima
potrebi su vam različiti uvidi u podatke, ali vam je potrebno dugo vremena i prilično
komplicirano dolazite do njih
• Potreba za dijeljenjem podataka između više korisnika uz sprečavanje višestrukih unosa
(primjerice u poslovnici vaše turističke agencije u Zagrebu rezervirana je soba za neki

4
period u hotelu Ivan - Solaris, a ista soba je za isti period rezervirana dan ranije u drugoj
poslovnici u Pragu)
• Podaci koji se unose u neku datoteku vezani su s podacima u drugim datotekama, a sve
mogu mijenjati različiti korisnici Æ spora obrada podataka uz vrlo moguću pojavu
nedosljednosti u podacima
• Želite imati Web stranicu stalno ažuriranu svježim podacima (još imamo 30 ručnih češalica
za leđa, a nova cijena im je 250kn – jesu skupe, ali dobro češu)

Sada kada smo se odlučili da ćemo prijeći na računalom potpomognute baze podataka i da ćemo za
relacijski upravljački sustav bazom podataka (RDBS – Relation Data Base System) izabrati MS
Access 2003 možemo prijeći na izradu baza podataka. No, prije izrade vrijedno je potrošiti vremena
na dizajn baze podataka i planiranje naših potreba. U stvari, dizajniranje možemo svrstati pod jednu
od faza planiranja našeg informacijskog sustava temeljenog na bazi podataka.
Osnovna pogreška koja se čini pri dizajniranju baze podataka je razmišljanje o podacima koje ćemo
staviti u bazu ("s čim ćemo je puniti"). Puno ispravnije je razmišljati o tome koje informacije
želimo dobiti na izlazu iz naše baze. Nakon što ste odlučili što želite od vaše baze, razmotrite što
vam je na raspolaganju – što imate Æ na osnovu toga stvarate strukturu baze (tablice). Slijedi
definiranje svih postupaka i akcija (pretraživanja po kriterijima, izračuni, sortiranja…) koji će se
primjenjivati nad podacima kako bi dobili željene informacije. Tek na kraju odredite način na koji
će se baza puniti podacima.
Neko nepisano pravilo je da nacrtate dijagram buduće baze podataka. Ukoliko bazu radite za nekog
drugog, potrebno je obaviti niz razgovora sa svim korisnicima. Nužno je da razumijete problem što
bolje, želje i potrebe korisnika na svim razinama, kao i tipove podataka i dokumenata koji se traže.
Sve to zapisujete u vidu bilješki na osnovu kojih stvarate dijagram buduće baze. Ponekad je
potrebno dijagram par puta predočiti korisnicima da vidite jeste li dobro razumjeli njihove potrebe i
jesu li vaša razmišljanja o načinu budućeg poslovanja s bazom podataka u skladu s njihovima 1 .
REZERVACIJE

SMJEŠTAJNI
GOSTI

KAPACITETI
(svi podaci)

KORISNICI

Slika 1-1 Pojednostavljeni dijagram baze podataka

1
Laički pristup – za razliku od ovog postoje posebne metode pri projektiranju informacijskih sustava

5
Daljnje preporuke pri dizajniranju baze podataka [ECDL]:

1. Osiguravanje jedinstvenosti svakog zapisa Æ svaka tablica treba imati jedinstveni


primarni ključ čime sprečavamo stvaranje dvostrukih zapisa
2. Neka svako polje bude jedinstveno Æ ne smije biti ponavljanja podataka u tablici
3. Učinite polja funkcionalno zavisnim Æ svako polje trebalo bi predstavljati podataka koji
se odnosi na zapis; ako ne onda je ili suvišno ili pripada nekoj drugoj tablici
4. Osigurajte nezavisnost svakog polja Æ promjena bilo kojeg polja u zapisu ne utječe na
niti jedno drugo u istom zapisu
5. Polja ne smiju sadržavati izračune ili izvedene podatke Æ primjerice u jedno polje
unosite cijenu proizvoda, a u drugom vam je sadržana stopa PDV –a; stvarnu cijenu uvijek
možete izračunati iz cijene i stope PDV –a
6. Podaci trebaju biti u najmanjim logičkim jedinicama Æ npr. upisujete odvojeno ime i
prezime klijenta kako bi mogli izvršiti njihovo sortiranje po abecedi

Sistematični pristup dizajniranju i izradi baza podataka poštedit će vas kasnije brojnih muka.

Baza podataka Æ skup datoteka strukturiranih, organiziranih i povezanih po određenom pravilu u


jedinstvenu cjelinu radi dobivanja željenih informacija

Podatak Æ logička cjelina koja sama za sebe ne mora imati neko značenje. Može biti tekst, broj,
datum, vrijeme, itd. Predstavlja "sirovinu" iz koje se dobiva informacija.

Informacija Æ skup obrađenih i povezanih podataka na način da dobivaju neko značenje ili smisao

Relacijska baza podataka Æ baza podataka izgrađena od tablica u kojoj postoje jedinstvene veze
između podataka u različitim tablicama

Zapis (slog) Æ jedan redak u tablici relacijske baze (informacije)

Polje Æ jedan stupac u tablici relacijske baze (podaci)

Relacijski upravitelj bazom podataka (RDBM) Æ aplikacijski software kojim kreiramo bazu
podataka i manipuliramo podacima u njoj
(MS Access)

SQL Æ neproceduralni programski jezik za postavljanje upita RDBM - u

6
1. Što podrazumijevamo pod pojmom baza podataka?
2. Navedite nekoliko primjera baza podataka?
3. Kako se općenito dijele baze podataka?
4. Što je to podatak, a što informacija?
5. Navedite nekoliko primjera podataka i informacija!
6. Nabrojte tri osnovna tipa baza podataka?
7. Što je relacijska baza podataka?
8. Kako su podaci organizirani u relacijskoj bazi podataka?
9. Što je slog, a što polje?
10. Koji je drugi naziv za slog?
11. Što predstavlja polje u tablici, a što slog?
12. Koja je uloga relacijskog upravitelja bazama podataka?
13. Navedite jedan RDBM?
14. Koji je upitni jezik danas najzastupljeniji?
15. Navedite neke od primjera za prelazak na poslovanje s računalom podržanim bazama
podataka?
16. Nabrojte i objasnite osnovne preporuke pri dizajniranju baze podataka po ECDL - u!
17. U čemu leži prava snaga baza podataka?

7
2. UVOD U RAD S MS ACCESSOM

MS Access je dio MS Office paketa, tako da će vam veći dio njegovog sučelja biti poznat. Ako se
prvi put susrećete s njim vjerojatno će vam se činiti kompliciraniji od ostalih aplikacija iz istog
paketa što i nije čudo, jer se s njim mogu razviti prave poslovne aplikacije za potrebe malih i
srednjih poduzeća. Pa krenimo redom. Access se pokreće kao i bilo koja druga aplikacija, a to vam
je vrlo dobro poznato. Kada ga pokrenete pojavit će vam se njegov prozor kao na slici ispod:

Kontrolni gumbi

Traka s padajućim izbornicima Naslovna traka

Access Database
alatna traka

Okno zadataka

Statusna traka

Slika 2-1 Prozor MS Access - a

Možete krenuti od potpuno prazne baze ili otvoriti već neku postojeću. Ako otvarate već postojeću
bazu onda to možete učiniti na sljedeće načine:

[1] Izbornik File Æ Open…


[2] Na Database alatnoj traci kliknete na ikonu Open

8
[3] U oknu zadataka Getting Started pod dijelom Open kliknite na ime željene baze ili na
ukoliko baza nije na popisu

Pri stvaranju nove baze preko File Æ New ili klikom na ikonu sa standardne alatne trake
otvorit će vam se okno zadataka New File:

Slika 2-2 Izgled okna zadataka New File

Značenja naredbi iz tog okna su sljedeća:

Stvara novu, potpuno praznu


bazu
Stvara HTML stranicu za
pristup bazi podataka
Stvara novi Access projekt
temeljen na postojećim
podacima
Stvara novi Access projekt s
novim podacima

Stvaranje baze iz već postojeće

9
Pretražuje Microsoft Internet
arhivu s predlošcima na
temelju upisane ključne riječi
Otvara MS Office stranicu s
raspoloživim predlošcima za
download u vašem Internet
pregledniku
Postojeći predlošci za novu
bazu na vašem računalu

Interesantno je da se otvorena baza u MS Accessu ne treba spremati na već uobičajeni način, već će
cjelokupnu bazu sa svim načinjenim promjenama Access automatski spremiti (naravno pod istim
imenom i na istu lokaciju kako je kreirana). Ukoliko cijelu bazu želite premjestiti ili spremiti na
drugu lokaciju trebate je prvo zatvoriti u Accessu, a potom preko Windows Explorera izvršiti
željenu akciju kopiranja ili premještanja. Preko File Æ Save tj. Save As… ili klikom na ikonu s
Database alatne trake vršite samo spremanje pojedinih objekata u bazi Æ tablice, upiti, obrasci,
izvješća, moduli, … Prema tome, MS Access baza podataka će se sastojati od manjeg ili većeg
broja objekata:

• Tablice (Tables) Æ osnovni građevni elementi svake relacijske baze podataka, a


namijenjeni su skladištenju podataka
• Upiti (Queries) Æ koriste se za postavljanje pitanja o podacima u bazi Æ izvlačenje
željenih informacija iz baze
• Obrasci (Forms) Æ možemo reći da predstavljaju sučelje prema korisniku Æ služe za
interakciju korisnika s RDBM – om
• Izvješća (Reports) – prikazuju željene informacije u obliku pogodnom za ispis
• Stranice (Pages) Æ vezano uz rad s bazom preko interneta Æ prikazuje Web stranice za
rada s bazom preko interneta
• Makroi (Macros) Æ procedure koje olakšavaju izvođenje stalno ponavljanih ili vrlo
složenih radnji
• Moduli (Modules) Æ korisnikove programske funkcije pisane u VBA programskom jeziku
(Visual Basic for Applications)

Od svih spomenutih objekata jedino su tablice namijenjene pohranjivanju podataka u bazu. Svi
ostali služe za upravljanje, manipuliranje, predočavanje, analiziranje, … tih podataka. Dobro, ovdje
smo već spomenuli objekte, a u našem prozoru nigdje im ni traga. Da bi mogli doći do objekata
potrebno je otvoriti bazu na jedan od prethodno opisanih načina.U ovom početnom dijelu
upoznavanja s Accessom poslužit ćemo se već gotovom bazom podataka Nortwind koja služi kao
ogledni primjerak, a do nje možemo doći preko Help Æ Sample Databases… Æ Nortwind
Sample Database. Pojavit će vam se pozdravni prozor Æ kliknite na check box Don't show this
screen again kako vam se ne bi ubuduće pokazivao, a potom na OK. Nakon toga u prvi plan će se
postaviti tzv. glavna Navigacijska ploča aplikacije (Main Switchboard). Možete i nju ugasiti, a

10
njezino objašnjenje dat ćemo kasnije. Konačno smo došli do željene stvari – prozora baze podataka
(u ovom slučaju baze Nortwind):

Alatna traka baze podataka

Aktivni dio prozora

Traka s objektima

Slika 2-3 Izgled prozora baze

Na samom vrhu se nalazi naslovna traka s imenom baze i verzijom datotečnog formata Access
baze. U desnom dijelu te trake je kontrolni gumbi. U traci s objektima postoji i kartica koja se
naziva Grupe (Groups). Za sada nam je dovoljno znati da se u njoj mogu stvarati vlastite grupe već
postojećih objekata. U jednoj grupi možete imati objekte različitog tipa (npr. tri tablice, dva
izvještaja i jednu formu). Bitno je istaknuti da se ti objekti fizički ne smještaju u pojedinu grupu,
već se samo stvaraju prečaci na njih. Aktivni dio prozora (isprekidana linija) mijenjat će izgled
ovisno o izabranom objektu u traci objekata. Alatna traka baze podataka donosi nam nekoliko
zanimljivost s kojima se još niste susreli u nijednoj office aplikaciji:

gumb za otvaranje selektiranog objekta u izvršnom (korisničkom) modu, a


njegov izgled se može mijenjati ovisno o tipu izabranog objekta
gumb za otvaranje objekata u dizajn modu (razvojnom modu) – u modu u
kojem ih možete mijenjati
gumb za stvaranje novih objekata Æ otvorit će vam dijaloški okvir za
izbor načina kreiranja novog objekta
briše selektirani objekt
izbor načina prikaza u aktivnom dijelu prozora

• Ne miješajte Access Database alatnu traku s alatnom trakom baze podataka


• Svaka Access datoteka (baza) ima ekstenziju .mdb
• Postoji razlika između kontrolnih gumbi prozora baze i kontrolnih gumbi
MS Access prozora

11
Izaberite nekoliko različitih objekata, a ujedno probajte mijenjati načine prikaza u aktivnom dijelu
prozora. Nekoliko objekata otvorite u razvojnom i izvršnom modu, čisto da uočite razliku. Zatvorite
bazu Nortwind, ali nemojte izaći iz Accessa. Sada kad smo vidjeli od kojih objekata se sastoji MS
Access baza i od kojih elemenata se sastoji prozor baze možemo krenuti dalje. Osnovu relacijske
baze podataka čine tablice. Krenut ćemo od nove prazne baze u kojoj ćemo kreirati samo jednu
tablicu Æ tablicu kontakt informacija (osoba, tel, fax, e – mail, ...)

2.1 TABLICE

[1] Stvorite novu bazu podataka Æ File Æ New Æ Blank Database...


[2] Otvorit će vam se dijaloški okvir za spremanje baze (uočite razliku s ostalim aplikacijama iz
obitelji MS Office – pri otvaranju odmah odabirete ime i lokaciju buduće baze podataka)
[3] Za lokaciju odaberite vaš USB key; kreirajte novi folder kojeg ćete nazvati
primjeri_Access, a u njega spremite bazu pod nazivom vj_1 klikom na gumb Create (ili s
ENTER)

ovdje upisujete
ime nove baze

Slika 2-4 Određivanje lokacije za novu bazu

Nakon što ste kliknuli na Create (ili potvrdili s ENTER) otvorit će vam se prozor baze podataka s
imenom vj_1 u naslovnoj traci. Za sada vam se u aktivnom dijelu prozora ne nalazi niti jedan
objekt.

[4] Ukoliko vam nije selektiran objekt Tables u traci objekata kliknite na njega

12
[5] Na raspolaganju su vam tri mogućnoati u aktivnom dijelu prozora za kreiranje nove tablice
Æ kreiranje u razvojnom modu (in Design view), kreiranje pomoću čarobnjaka (using
wizard) i kreiranje unosom podataka (by enetring data)
[6] Izaberite prvu mogućnost brzim dvoklikom Æ in Design view

Slika 2-5 Kreiranje tablice u razvojnom modu

[7] U otvorenom dijaloškom okviru Table redom upisujete nazive za pojedina polja vaše
tablice (Field name), određujete im tip (Data type) i opcionalno dajete opis polja
[8] U prvo polje pod ime upišite ID_kontakta, a kao tip za njega odaberite AutoNumber; pod
opisom napišite Æ identifikacijsko polje za jedinstvenost zapisa

Slika 2-6 izgled dijaloškog okvira Table

13
To polje će nam poslužiti kao primarni ključ (Primar key) za ovu tablicu. Tip podataka
AutoNumber je posebni tip podataka razvijen u MS Accessu i predstavlja cjelobrojni tip podataka
koji se samostalno inkrementira (povećava za jedan) pri unosu svakog novog zapisa Æ ovim
sigurno ne mogu postojati dvije iste vrijednosti. Što podrazumijevamo pod jedinstvenost zapisa?
Vrlo je lako shvatiti Æ u našoj tablici kontakata vrlo je vjerojatno da možemo imati dvije osobe
koje imaju isto ime i prezime Æ pridjeljivanjem različitog ID_ kontakta svakom od njih osigurali
smo da se ne miješaju podaci ove dvije osobe, a istom logikom i ostalih. Vrijedno je istaknuti
sljedeće stvari:

Primarni ključ Æ sastoji se od jednog ili više polja, a služi kako bi osigurali jedinstvenost svakog
zapisa u tablici.
Tip podataka u polju (Data type) Æ određuje tip podataka u polju (Tekst, Datum, Broj,
Automatski inkrement...)
Svojstva polja se određuju u kartici General Æ veličina (Field size), ime koje će se koristiti
(Caption), indeksirano (Indexed)...

[9] Unesite dalje redom podatke prikazane donjom tablicom:

Field Name Data Type Description


Ime Text
Prezime Text
Telefon Number Telefonski broj (kućni, na poslu ili mob)
Grad Text
Adresa Text
e - mail Text
fax Number Broj faxa

[10] Definirajmo primarni ključ za našu tablicu Æ kliknite mišem na sivu kućicu lijevo od
naziva polja Id_kontakta Æ označit će se cijeli redak Æ kliknite na ikonu Primary key
koja se nalazi na Access Database alatnoj traci (ili preko izbornika Edit Æ Primary
key)

s oba načina označeno


polje postavljate za
primarni ključ

Slika 2-7 Postavljanje primarnog ključa

14
U kućici pored označenog polja pojavit će se oznaka ključa koja ukazuje da je polje označeno kao
primarni ključ.

˜ Primarni ključ može biti sastavljen od jednog ili više polja (označite ih držeći
pritisnutu tipku CTRL)
˜ Ukoliko niti jedno polje niste postavili za primarni ključ, Access će automatski
pri spremanju tablice postaviti polje s oznakom ID i tipa AutoNumber za
primarni ključ

[11] Sada možemo spremiti tablicu Æ File Æ Save Æ u dijaloški okvir upišite ime tablice
Tab_kontakti

Slika 2-8 Dijalog za spremanje tablice

Malo ćemo se poigrati nekim svojstvima podataka u poljima. Prvo ćemo polju koje smo proglasili
za primarni ključ pod svojstvom Caption upisati Kontakt br.

[12] Kliknite u polje ID_kontakta Æ pod svojstvom Indexed izaberite Yes(No Duplicates) Æ
pod svojstvom Caption upišite Kontakt br.

Upisivanjem naziva pod Caption osigurali smo da će se upisani naziv (Kontakt br. ) pojavljivati
na obrascima i nazivu tog polja u tablici u izvršnom modu, a ne naziv polja ID_kontakta.
Polja Ime, Prezime, Grad i Adresa ćemo staviti da budu obavezna (svojstvo Required), zabranit
ćemo nultu duljinu (svojstvo Allow Zero Length) i zbog bržeg pretraživanja uključit ćemo
indeksiranje s dozvoljenim ponavljanjima (možemo imati više osoba istog imena, istog prezimena,
istog imena i prezimena, mogu biti iz istog grada, a više osoba može živjeti na istoj adresi).
Indeksiranje u tablicama nam omogućuje brže pretraživanje, dohvaćanje i sortiranje zapisa po
dotičnom polju, ali može usporiti ažuriranje podataka.
Za kraj ćemo polju Grad ograničiti duljinu na 40 znakova (svojstvo Field size Æ upišete željenu
vrijednost) Æ kod ograničavanja duljine polja budite izuzetno oprezni.

Svojstava ima previše i ovise o tipu podataka u polju, tako da ih nećemo sve objašnjavati.
Uočite da klikom na pojedino svojstvo u desnom dijelu okna dobivate njegov kratki opis.
S većim brojem svojstava upoznat ćemo se tijekom ostalih primjera.

15
[13] Spremite napravljene promjene klikom na ikonu Save Æ izađite iz Design moda

U aktivnom dijelu prozora sada bi trebali imati jednu tablicu koja se naziva Tab_kontakti. Ovdje
smo namjerno napravili dvije pogreške, a to je da smo polje Telefon i fax stavili da budu tipa
Number. Probajmo popuniti našu tablicu s nekoliko podataka da vidimo kako će se odraziti naše
greške. Pretpostavimo da smo odlučili broj telefona (faxa) zapisivati u obliku 023212457.

Slika 2-9 Izgled prozora baze podataka s kreiranom tablicom

[14] Napravite brzi dvoklik na tablicu Tab_kontakti (ili je označite, pa kliknite na ikonu Open
na alatnoj traci baze podataka)
[15] Unesite proizvoljno nekoliko podataka

oznaka trenutno označenog zapisa

oznaka mjesta za novi unos


traka s navigacijskim gumbima

Slika 2-10 Izgled tablice u izvršnom modu

Vrlo brzo ćete uočiti da vam se svaki uneseni telefonski broj (fax) zapisuje bez početne nule (npr.
iako ste unijeli 023 zapiše vam se 23 Æ krivi podatak). Kao što smo već rekli to nam se događa jer
smo odredili krivi tip podataka za ta polja Æ trebalo je umjesto Number staviti Text. Spomenutu

16
grešku ispravit ćemo otvaranjem tablice u razvojnom modu, ali prije toga spremite unesene zapise
(ovaj put kombinacijom tipki CTRL + S Æ zatvorite tablicu).

[16] Otvorite tablicu u razvojnom modu Æ označite tablicu Æ kliknete na ikonu


[17] Promijenite tip podataka poljima Telefon i fax u Text
[18] Spremite načinjene promjene
[19] Ponovno otvorite tablicu u izvršnom modu i izmijenite podatke za telefon i fax
[20] Unesite podatke za još nekoliko osoba
[21] Spremite tablicu

Numerički tip podataka (Number) ćemo koristiti za polja koja se isključivo mogu
tretirati kao brojevi (nad njima se mogu vršiti matematičke operacije)!

Povratak na prvi zapis Sljedeći zapis Unos novog zapisa

Povratak na prethodni Skok na Ukupni


zapis zadnji zapis broj zapisa

Slika 2-11 Navigacijska traka

Promjenu visine redaka i širine stupaca u tablici vršite kao i u MS Excelu. Brisanje zapisa možete
napraviti na nekoliko načina. Označite zapis, a potom pritisnete tipku DELETE; označite zapis i
kliknete na ikonu Delete Record ; napravite desni klik mišem na zapis kojeg želite izbrisati i
potom iz skočnog izbornika izaberete naredbu Delete Record. Više zapisa brišete istom logikom
samo ih označite držeći pritisnutu tipku CTRL. Budite oprezni prilikom brisanja pojedinog zapisa
jer je riječ o nepovratnoj akciji! Svaki put pri brisanju će vam se pojaviti poruka koja vas upravo
upozorava na tu činjenicu Î tek nakon potvrdnog odgovora zapis biva izbrisan iz tablice:

Slika 2-12 Dijalog za potvrdu brisanja zapisa

Ako želite izbrisati cijelu tablicu označite je u aktivnom dijelu prozora baze i pritisnete tipku
DELETE. Pri tom će vam se javiti sličan dijaloški okvir upozorenja kao u prethodnom slučaju.
Drugi način je preko skočnog izbornika, a treći klikom na ikonu za brisanje objekata .

17
Da bi naša tablica kontakata bila potpunija želimo dodati polje za unošenje datuma rođendana
osobe koje neće biti obavezno za unos.

[22] Otvorite tablicu u Design modu


[23] U prvo polje ispod polja fax upišite Datum rođenja i za tip podataka izaberite Date /
Time, a format neka bude General Date

Prvo što vam pada na pamet je kako će osoba koja unosi podatke (vi ili netko drugi) znati kakvog
formata treba biti datum kojeg unosi. U takvim slučajevima nam pomaže tzv. ulazna maska (input
mask). Ulazna maska predstavlja uzorak koji nas vodi prilikom unosa podataka i sprečava moguće
pogreške bez stvaranja nekih posebnih pravila provjere korisničkog unosa. U ovom slučaju ulaznu
masku ćemo kreirati korištenjem čarobnjaka.

[24] U kartici General kliknite na Input Mask i potom na gumb koji će se pojaviti pored
tog svojstva
[25] Pojavit će vam se dijalog čarobnjaka za stvaranje ulazne maske Î izaberite Short Date i
potom kliknite na gumb Edit list Î popunite otvoreni dijalog kao na slici ispod

Slika 2-13 dijalog za definiranje korisničkih ulaznih maski

Nakon klika na CLOSE gumb u listi čarobnjaka bi vam se trebala pojaviti ulazna maska koju ste
upravo kreirali (rođendan) Î izaberite tu masku i kliknite na Finish.

[26] Spremite načinjene promjene u tablici


[27] Otvorite tablicu i unesite nekim osobama datume rođenja Î uočite kako vam ulazna
maska točno diktira oblik unosa Î spremite unesene podatke

Nakon ovog uvoda o tablicama trebali bi biti u stanju samostalno kreirati tablice i raditi s njima u
Accessu. Prava snaga relacijskih baza podataka direktno proizlazi iz njihovog naziva, a to je
mogućnost stvaranja relacija ili veza između dvije ili više tablica. Da bi mogli stvoriti relacije
potrebno je imati kreirane barem dvije tablice.

18
2.2 Relacije u bazi

Osnovna greška koju možete napraviti pri izradi baze podataka je prenijeti način razmišljanja iz
Excela, jer ćete u tom slučaju svaki problem rješavati na način da ćete sve podatke nastojati utrpati
u samo jednu tablicu. To je protivno osnovnoj preporuci pri izradi relacijskih baza o dijeljenju
domene problema u manje cjeline tzv. entitete i stvaranju veza među njima. Sjetimo se malo našeg
primjera s tablicom kontakata. Uzet ćemo samo jedan najčešći slučaj, a to je da neke osobe mogu
imati veći broj telefona (kućni, posao, mobitel…). Kako bi se to odrazilo na našu tablicu Æ za
svaki broj trebali bi stvoriti cijeli zapis, tj. ponoviti sve podatke osobe, a samo mijenjati brojeve
telefona.

Slika 2-14 Izgled tablice nakon novih unosa

Pretpostavili smo da samo dvije osobe imaju dodatne telefonske brojeve. Već i iz ovog
jednostavnog primjera možete zaključiti da nepotrebno ponavljamo veliki broj podataka kako bi
dodali samo jedan novi vezan uz istu osobu (duži unos i stvaranje suvišnih podataka Æ
redundancija podataka). Neka nas sada zanimaju podaci baš za osobu koja ima veći broj telefona.
Izvršit ćemo filtriranje podataka tablice po tom zapisu.

[1] Otvorite tablicu u izvršnom modu i dodajte dvjema osobama još brojeve mobitela (stvarate
cijela dva nova zapisa)
[2] Kliknite na prezime osobe za koju znadete da ima dva unosa i potom na ikonu Filter By
Selection sa Access Database alatne trake
[3] Nakon što dobijete rezultat pretraživanja po postavljenom filtru isključite ga klikom na
ikonu Remove Filter Æ spremite načinjene promjene u tablici

Očigledno sve dobro funkcionira izuzev što rezultati nisu previše pregledni i što nepotrebno
ponavljate veliki broj podataka. Zamislite što bi bilo da vaša kontakt lista sadrži popis od recimo
300 osoba i da svaka od njih ima po tri telefona (kućni, posao i mob). Nameće se zaključak da bi
puno elegantnije rješenje bilo kada bi podatke podijelili u dvije tablice. Jedna tablica bi sadržavala
telefonske brojeve, a druga sve ostale podatke o osobama. Još ih je potrebno povezati po nekom

19
ključu i problem je riješen Æ došli smo do relacijske baze podataka. Imamo dva entiteta i jednu
relaciju. Entitete ćemo nazvati telefon i osoba.

ENTITET je dio stvarnog ili apstraktnog svijeta koji je opisan određenim brojem
svojstava koje predstavljamo podacima (osoba, ustanova, predmet, dokument, …)

Veze koje stvarate u relacijskim bazama podataka mogu biti:

• Jedan na jedan (one – to – one) Æ odnos ili veza koja nam jednom zapisu iz jedne
tablice pridružuje točno jedan zapis iz druge tablice i obrnuto (npr. svakom studentu
ćemo pridružiti samo jedan broj – matični broj studenta); ovakav tip veza je vrlo
rijedak, jer sve takve veze možete staviti u jednu tablicu
• Jedan na više (one – to – many) Æ jednom zapisu iz jedne tablice pripada više
zapisa u drugoj tablici, ali jednom zapisu iz te druge pripada točno jedan iz prve (npr.
jedna osoba može imati više telefona, ali svaki broj telefona je pridružen samo jednoj
osobi) – ovo je najčešći tip veze koji susrećemo
• Više na više (many – to – many) Æ zapisu iz jedne tablice pridruženo je više zapisa
iz druge i obrnuto. Ovaj tip veze je moguć samo kada se definira treća tablica tzv.
spojna tablica čiji se primarni ključ sastoji od dva polja - stranih ključeva prve i
druge tablice (primjerice jedna narudžba može imati više proizvoda, a istovremeno
svaki proizvod se može pojaviti na više narudžbi)

Definiciju primarnog ključa smo već dali, tako da nam preostaje još definirati strani ključ:
Strani ključ (Foreign key) Æ je polje koje jednoznačno određuje zapis iz druge tablice. U jednoj
tablici možemo imati više stranih ključeva. Drugim riječima preko stranih ključeva ostvarujemo
veze između tablica. Veza po primarnim ključevima bi dala 1:1 tip veze Æ izbjegavajte ovo!
Krenimo mi na stvaranje naše male relacijske baze. Ta baza se sastoji od dva entiteta (telefon koji
reprezentira brojeve telefona osoba i osoba koji predstavlja sve ostale podatke vezane uz pojedinu
osobu – adresa, grad, mail, …). Složili smo se da uz jednu osobu može biti vezano više telefonskih
brojeva. Prikažimo model entiteti - veze za tu bazu:

OSOBA
#ID_kontakta 1:n TELEFON
• Ime #ID_telefona
• Prezime # ID_kontakta • Tel_broj
• Grad
• Adresa
o e – mail
o fax
o datum rođenja

Slika 2-15 model entiteti – veze naše baze

20
Samo objašnjenje načina stvaranja modela entiteti – veze, kao i pravila i konvencija koji su vezani
uz te modele je vrlo široka tema koja prelazi okvire ove skripte. Dat ćemo samo kratke upute koje
vam mogu biti dovoljne pri stvaranju i razumijevanju takvih modela:

o Nacrtate sve entitete koji čine vašu bazu


o U njima navedete svojstva koja ih opisuju
o Primarni ključ označite s znakom ljestve #
o Svojstva koja su obavezna označite sa znakom •
o Svojstva koja su opcionalna označite sa znakom ο
o Za vrstu veze upotrebljavajte sljedeće oznake (1:1 za one to one; 1:n za one to many i n:n
za many to many vezu); vodite računa s koje strane ide n kod 1:n veze
o Vezu koja ne mora dati ni jedan rezultat označite isprekidanom linijom (npr. osoba ne mora
imati telefon), a vezu koja obavezno daje neki rezultat označite s punom linijom
o Ispod linije koja označava vezu navedite ključ po kojem su entiteti povezani

[1] Kreirajte novu bazu na vašem USB – u unutar mape primjeri_Access i nazovite je
relacije_vj2
[2] Stvorite dvije tablice na osnovu prethodnog modela (tablica osoba i tablica telefon)

Veze se kreiraju klikom na gumb Relationships na Access Database alatnoj traci. Otvorit će
vam se dijaloški okvir u kojem određujete što ćete povezivati Æ u ovom slučaju mi ćemo se
ograničiti samo na tablice:

Za stvaranje
veza među
Za stvaranje
tablicama
veza među
Za stvaranje
upitima
veza između
tablica i upita

Slika 2-16 Dijalog za određivanje objekata za stvaranje veza

S ponuđene liste označite tablice među kojima želite stvoriti vezu (možete koristiti CTRL za
označavanje na preskok ili SHIFT za označavanje niza) Æ kliknete na Add kako bi tablice bile
dodane u prozor za stvaranje veza. Tablicu (upit) možete dodati i brzim dvoklikom na njeno ime.
Postupak onda ponavljate potreban broj puta dok ne uključite sve željene objekte Æ ovaj dijalog
zatvarate klikom na Close gumb.

21
[3] U otvorenom prozoru Relationships tablice možete pomicati principom drag 'n' drop, a
dimenzije im mijenjati kao i bilo kojem objektu u Windowsima Æ postavite ih na željenu
poziciju

Povucite i
otpustite kako bi
1 stvorili vezu
2

Slika 2-17 Izgled prozora za stvaranje veza (Relationships) (1) i dijalog za uređivanje veza (2)

Vezu ostvarujete na način da odvučete polje po kojem su entiteti povezani iz jedne tablice u drugu.
Prikazat će vam se dijaloški okvir Edit Relationships za uređivanje te veze. Na samom vrhu tog
dijaloga navedene su tablice (upiti) koje su u vezi, a odmah ispod naziv polja po kojem su povezani.
U jednoj tablici to polje je primarni ključ, a u drugoj strani. Posebno su nam interesantne opcije
određene s check boxovima. Prva od njih je nametanje pravila referencijalnog integriteta (Enforce
Referential Integrity). Ova pravila nam osiguravaju da ne možemo imati unose koji nemaju svog
para. To bi kod nas značilo da ne možemo unijeti broj telefona koji ne pripada ni jednoj osobi Æ
unijeli broj telefona, a nismo podatke o osobi kojoj taj broj pripada. Prije uključivanja preostale
dvije mogućnosti potrebno ih je dobro i razumjeti. Opcija kaskadnog ažuriranja povezanih polja (
Cascade Update Related Fields) osigurava da se pri promijeni primarnog ključa u glavnoj tablici
automatski zamijene polja povezanih zapisa u drugoj tablici s novom vrijednosti. Posljednja opcija
kaskadnog brisanja povezanih zapisa (Cascade Delete Related Records) omogućava automatsko
brisanje svih zapisa nakon brisanja glavnog (primarnog) zapisa Æ kada obrišemo osobu iz tablice
Tab_osoba automatski se brišu svi njezini brojevi telefona. Na samom dnu nalazi se oznaka tipa
veze Æ u ovom slučaju one – to – many.

[4] Uključite sve tri opcije


[5] Kliknite na gumb Create kako bi stvorili vezu

Da niste uključili opciju nametanja referencijalnog integriteta ne biste dobili vezu koja s jedne
strane ima oznaku 1, a s druge ∞ iz čega je direktno vidljivo o kojoj vezi se radi. Veze koje se
temelje na spajanju primarnih ključeva dviju ili više tablica se automatski proglašavaju one – to –
one vezama, jer drugačije nije ni moguće. Korisno je istaknuti da prilikom realiziranja veza many –
to – many nećete biti u stanju direktno to ostvariti, već ćete stvarati jednu dodatnu tablicu tzv.
tablicu za premoštavanje čime se veza razbija na niz one – to – many odnosa. Pored nametanja
referencijalnog integriteta možete utjecati i na tip veze preko gumba Join Type…

22
Slika 2-18 Izgled prozora relacija nakon uspostavljene veze između tablica

Strani ključ u tablici ne može biti tipa AutoNumber kao i primarni ključ, jer je on vezan
s vrijednošću koja dolazi iz primarne tablice – može biti bilo koja vrijednost uz
mogućnost ponavljanja Æ bit će tipa Number, a duljine Long Integer!

[6] Spremite napravljene veze


[7] Zatvorite prozor s vezama

Brisanje relacije možemo vršiti na više načina. Otvorite prozor s relacijama (Tools Æ
Relationships…) označite vezu koju želite obrisati i pritisnete tipku DELETE ili napravite desni
klik mišem na vezu i iz skočnog izbornika izaberete Delete. Uređivanje je slično. Nakon što ste
otvorili prozor s vezama napravite brzi dvoklik na vezu koju želite urediti ili napravite desni klik
mišem na vezu, te iz skočnog izbornika izaberete Edit Relationship…

[8] Otvorite tablicu Tab_osoba u izvršnom modu i unesite proizvoljne podatke za nekoliko
osoba
[9] Uočite znak plusa koji se javlja pored polja ID_kontakta Î kliknite na znak plusa osobi
kojoj želite unijeti broj telefona Î unesite nekima i više brojeva (kućni, posao, mobitel)

Slika 2-19 Unošenje podataka u vezane tablice

[10] Spremite načinjene promjene u tablici Tab_osoba

23
[11] Otvorite sada tablicu Tab_telefon u izvršnom modu Î imat ćete prikaz sličan ovom na slici
ispod:

Slika 2-20 izgled tablice Tab_telefon

Prikaz je prilično nerazumljiv jer iz ID_kontakta ne možemo vidjeti o kojoj osobi je riječ. Međutim,
MS Access posjeduje korisno svojstvo koje se naziva pogled među tablicama, a omogućuje nam da
izbjegnemo baš ovakve situacije. Do njega dolazimo preko kartice Lookup u razvojnom modu
tablica. Bilo bi korisno da umjesto ID_kontakta imamo ime i prezime osobe. Drugim riječima za
svaki ID_kontakta u tablici Tab_telefon vezat ćemo i prikazati pripadno ime i prezime.

[12] Otvorite tablicu Tab_telefon u razvojnom modu


[13] Kliknite na polje koje predstavlja strani ključ (ID_kontakta)
[14] Prebacite se u karticu Lookup i promijenite Display Control iz Text box u Combo box Î
automatski će vam se otvoriti nova svojstva za oblikovanje

Osnovna razlika između Text boxa i Combo boxa je što prvi može prikazati samo jednu vrijednost,
a drugi više njih. To je upravo ono što mi želimo Î želimo vidjeti ime i prezime osobe.

[15] Izvor podataka koji će se prikazivati određuje se svojstvom Row source Î kliknite na
strelicu pored i za izvor izaberite tablicu Tab_osoba

Slika 2-21 Odabir izvora podataka koji će se prikazivati

[16] Svojstvo Bound Column označava za koji stupac se vezuju podaci Î ostavite vrijednost 1,
jer je ID_kontakta upravo u prvom stupcu
[17] Column Count označava koliko stupaca uključujemo – trebamo uključiti ID_kontakta +
ime + prezime. Kako su to uzastopni stupci i ujedno je riječ o prva tri stupca, dovoljno je
postaviti da se broje samo tri stupca.
[18] Column Heads određuje hoće li se u našem combo boxu prikazivati zaglavlja stupaca iz
izvorne tablice (roditeljske – parent tablice) Î postavite na NO

24
[19] Pod Column Widts zapravo leži iluzija koju ćemo stvoriti. Postavit ćemo širinu prvog
stupca na nula, a ostala dva na 4cm (upisujete samo brojeve bez jedinica). Na ovaj način
nećemo vidjeti prvi stupac ID_kontakta već samo ime i prezime. Nama se prikazuje ime i
prezime osobe, a računalo radi s brojem – ID_kontakta.
[20] List Width određuje širinu liste (combo boxa) Î postavite je na 6cm (možete ostaviti i
automatsku širinu određenu po defaultu)
[21] Limit to List određuje može li korisnik unijeti vrijednost koja nije u listi. Kada se Bound
Column (vezani stupac) ne prikazuje kao prvi stupac combo box automatski djeluje kao da
je zabrana na unos postavljena Î ostavite YES
[22] Prebacite se na karticu General i pod Caption upišite Ime i prezime
[23] Spremite promijene načinjene u Design modu
[24] Otvorite tablicu u izvršnom modu da vidite napravljene promijene

Slika 2-22 Rezultat promijene pogleda među tablicama

Za sada smo zadovoljni s našom bazom, ali recimo da nas zanima informacija da li je riječ o
kućnom ili poslovnom broju, te da se kasnije informacije mogu izdvajati i po broju mobitela.
Očigledno je potrebno dodati još jednu tablicu koja će definirati vrstu telefonskog broja. Tablica će
imati samo dva polja (id_vrste_tel_broja i vrsta_tel_broja), a bit će povezana s tablicom
Tab_telefon preko ključa id_vrste_tel_broja).

† Skicirajte novi model entiteti – veze


† Kreirajte novu tablicu koju ćete nazvati Tab_vrsta_tel_broja u kojoj će vam
polje id_vrste_tel_broja biti primarni ključ, a vrsta_tel_broja polje s tekstualnim tipom
podataka duljine 15 znakova
† U tablicu Tab_vrsta_tel_broja redom unesite podatke Æ mob; kućni; posao
† U tablici Tab_telefon dodajte polje koje predstavlja strani ključ Æ id_vrste_tel_broja
(vodite računa kojeg tipa podataka to polje treba biti u toj tablici)

Sada kada ste kreirali novu tablicu i u Tab_telefon dodali strani ključ preostaje nam još uspostaviti
nove veze.

[25] Preko izbornika Tools Æ Relationships… otvorite prozor relacija

25
[26] Otvorite dijalog za dodavanje tablica u taj prozor Æ klikom na ikonu Show Table… s
alatne trake Relationship ili napravite desni klik mišem bilo gdje na površinu relacijskog
prozora i iz skočnog izbornika izaberite Show Table…

Slika 2-23 Dodavanje nove tablice u relacijski prostor za stvaranje veza

[27] U otvorenom dijalogu izaberite novostvorenu tablicu i dodajte je u relacijski prostor klikom
na gumb Add
[28] Stvorite vezu između tablica Tab_telefon i Tab_vrsta_tel_broja povlačenjem pripadnog
polja iz jedne u drugu tablicu
[29] U dijaloškom okviru Edit Relationships koji vam se pojavi uključite opciju nametanja
referencijalnog integriteta (Enforce Referential Integrity)

Slika 2-24 Izgled relacijskog prostora nakon načinjenih promjena

26
[30] Spremite načinjene promjene u relacijskom prostoru (CTRL + S)

Otvorite li tablicu Tab_telefon u izvršnom modu vidjet ćete da je nužno mijenjati pogled među
tablicama Tab_telefon i Tab_vrsta _tel_broja. Prisjetimo se da se promjena pogleda radi preko
kartice Lookup u Design modu tablice.

[31] Otvorite tablicu Tab_telefon u razvojnom modu i kliknite na polje id_vrste_tel_broja


[32] U kartici Lookup napravite promijene prema donjoj slici:

Slika 2-25 promjena pogleda među tablicama

[33] Prebacite se u karticu General i pod Caption stavite naziv vrsta_telefona


[34] Spremite načinjene promjene i potom tablicu otvorite u izvršnom modu
[35] Popunite podatke za vrstu telefona i potom spremite načinjene promjene

Combo box za izbor


vrste telefona

Slika 2-26 Izgled tablice Tab_telefon nakon promijenjenog pogleda

[36] Popunite bazu kontakata proizvoljnim podacima tako da imate podatke bar za 15 osoba
[37] Nakon popunjavanja dodatnim podacima zatvorite bazu
[38] Kopirajte vašu bazu relacije_vj2 u novu mapu baze koju ćete načiniti unutar vaše mape
primjeri_Access

27
[39] Preimenujte kopiranu bazu u upiti_vj3

Došli smo do dijela kada iz naše baze želimo izvlačiti neke informacije i vršiti razne manipulacije s
točno željenim setom podataka. Tu na scenu stupaju upiti – eng. Queries.

2.3 Upiti

Organizacija podataka u relacijskim bazama u vidu odvojenih tablica koje su povezane nekim
ključem može se nekom na prvi pogled činiti prilično nepregledno i nespretno, pogotovo kada se
želi doći do neke složene informacije ili kada želimo istovremeno raditi s podacima koji su
pohranjeni u više različitih tablica. Međutim, upravo su upiti namijenjeni za ispunjavanje takvih ili
sličnih zadaća i predstavljaju koristan alat puno korisniji od klasičnih filtera. Upiti korisniku
omogućavaju povezivanje podataka iz jedne ili više tablica, sortiranje podataka na novi način,
izračunavanje novih polja temeljem poznatih i filtriranje nekog seta podataka po točno željenim
kriterijima, pa čak i puno više od toga. Pri tom razlikujemo dva tipa upita:

† Select Queries (Upiti izdvajanja) – samo selektiraju podatke i izdvajaju ih po


korisnikovim kriterijima
† Action Queries (Akcijski upiti) – mogu mijenjati podatke u tablicama Æ umetati nove,
mijenjati ili brisati već postojeće

Jednom kada kreirate upite s njima možete raditi kao s ostalim tablicama u bazi. Zbog toga se često
nazivaju i virtualne tablice. Rezultati koje daju služe kao izvori podataka za obrasce (Forms) ili
izvješća (Reports). Skup zapisa koji nastaju kao rezultat pokretanja upita nazivaju se recordset
(zabilježeni skup zapisa). Ako ga možete uređivati onda se naziva dynaset (dinamički skup
zapisa), a ako ne snapshot (snimka zapisa).

Upiti nam služe za dohvaćanje i manipulaciju informacija koje su sastavljene od


cijelog ili dijela skupa zapisa jedne ili više tablica. Time nam pružaju različite
poglede na isti set podataka.

Poznavanjem osnovnih pojmova vezanih uz upite možemo krenuti i na njihovu izradu u Accessu. U
tom smislu koristit ćemo se kopiranom bazom upiti_vj3. Zbog važnosti koju imaju u bazama
podataka nećemo ih izrađivati korištenjem čarobnjaka, premda je i to moguće. Puno je bolje naučiti
njihovo kreiranje iz razvojnog moda, pa čak i kada je riječ o iznimno jednostavnim upitima.
Kreiranje upita na ovaj način omogućava određivanje polja koja želite vidjeti kao i postavljanje
kriterija nad poljima kako bi dobili željenu informaciju. Recimo da nas zanimaju sljedeće
informacije Æ upitom želimo izdvojiti sve osobe iz Zagreba s navedenim mail adresama i
brojevima mobitela.

1) Otvorite bazu podataka upiti_vj3


2) Iz trake objekata u prozoru baze izaberite Query

28
3) Kako smo rekli, upit ćemo kreirati u razvojnom (Design) modu (pogledu) Æ napravite brzi
dvoklik mišem na Create query in Desgn view u aktivnom dijelu prozora baze
4) Access će nam automatski otvoriti prozor za kreiranje upita s tzv. Query mrežom i prozor
Show Tables iz kojeg izabirete tablice čiji podaci će biti uključeni u upit

Dodajemo
tablice čiji
podaci služe za
stvaranje upita
2

Mreža upita za određivanje


polja i kriterija koji tvore upit

Slika 2-27 Kreiranje upita preko Design pogleda

Access odmah prepoznaje koja polja su povezana na koji način temeljem prethodno uspostavljenih
relacija. U ovom slučaju izabrali smo sve tri tablice iz razloga što su nam potrebna polja iz svake
od njih.

5) Napravite brzi dvoklik na polje ID_kontakta iz tablice Tab_osoba ili ga odvucite na željenu
poziciju u mreži upita
6) To isto ponovite s poljima Ime, Prezime, Grad i e – mail iz iste tablice
7) Iz tablice Tab_telefon izdvojite polje Tel_broj
8) Iz tablice Tab_vrsta_tel_broja u upit uključite polje vrsta_tel_broja

Uključili smo sva polja koja su nam potrebna za stvaranje upita. Slijedi nam određivanje kriterija Æ
želimo izdvojiti samo osobe iz Zagreba Æ pod Criteria: za polje Grad ćemo staviti "Zagreb" što
je identično ispitivanju uvjeta = "Zagreb"; zanimaju nas samo brojevi mobitela, pa ćemo kriterij za
polje vrsta_tel_broja postaviti "mob". U mreži tablice pod imenom polja možemo definirati i

29
zamjensko ime (alias) koje će se koristiti umjesto stvarnog imena polja u tablici. Zamjensko ime
definiramo tako da ispred stvarnog imena upišemo novi naziv nakon čega slijedi znak dvotočke.

9) Postavite zamjensko ime Kontakt broj za polje ID_kontakta i Telefon za polje


id_vrste_tel_broja

Sjetite se da smo spomenuli kako upite možemo smatrati virtualnim tablicama. To će značiti da će
raspored stupaca u mreži upita odgovarati stvarnom rasporedu stupaca virtualne tablice (upita).
Promjenu širine stupaca, zamjenu mjesta stupcima i brisanje pojedinog stupca u mreži upita vršite
potpuno analogno kao i u Excel tablicama.

10) Zamijenite mjesta stupcima s poljima Ime i Prezime

Korisno bi bilo da imamo uključeno sortiranje po prezimenima i imenima.

11) Pod polja Prezime i Ime uključite uzlazno sortiranje (Ascending)

Slika 2-28 Sortiranje po polju Prezime

Preko check boxa Show određujemo hoće li se dotično polje prikazati u upitu. U ovom slučaju
želimo da sva polja budu vidljiva. Nakon svih učinjenih zahvata mreža upita bi vam trebala biti
popunjena na sljedeći način:

Slika 2-29 Izgled mreže upita nakon popunjavanja svih podataka

Svi kriteriji koji se nalaze u istom retku odgovaraju vezanju s logičko i (AND),
dok redanje kriterija u svim redcima ispod odgovara vezivanju s logičko ili (OR)

Pri kreiranju složenih upita ne morate se ograničiti samo na kreiranje upita iz tablica, već ih možete
kreirati iz drugih upita, te kombinirano iz tablica i postojećih upita. Uostalom ovo je direktno
vidljivo i iz dijaloškog okvira Show Table. Pokretanje upita iz Design pogleda direktno možete

30
izvršiti naredbom Run . Ukoliko ste zadovoljni spremanje upita vršite na način kao što ste
spremali tablice. Ime upita upisujete u dijalog sličan onom pri spremanju tablica. Inače upite u
izvršnom modu pokrećete potpuno analogno kao što ste otvarali tablice.

12) Spremite upit pod imenom Up_Zg_mail_mob

Zgodno je da u svakom trenutku nakon "testiranja" upita možete dodatno uključiti neku novu
tablicu (upit) preko ikone Show Table , ali naravno samo dok ste u Design pogledu. Ne
zaboravite i famozni desni klik! Što je još interesantnije možete po volji dodavati nova polja ili
brisati stara, mijenjati kriterije, dodavati nove ili brisati stare. Nakon svake promijene snimite upit i
potom ga testirate sve dok ne dođete do željenog rezultata. Budući da nam kriteriji omogućavaju
stvaranje složenih upita korisno je istaknuti logičke operatore koje koristimo u njima:

Kriterij Značenje
774 Podatak koji je jednak broju 774 (isto kao = 774)
> 774 Podaci koji su veći od 774
< 774 Podaci koji su manji od 774
>=774 Podaci koji su veći ili jednaki od 774
<= 774 Podaci koji su manji ili jednaki od 774
<> 774 Svi podaci koji su različiti od 774
Like "Da*" Svi podaci koji počinju s Da
"Zagreb" Or "Dubrovnik" Zagreb ili Dubrovnik
between 1/6/1978 And npr. svi rođeni između 1. lipnja 1978. i 1. kolovoza
1/8/1978 1978.

† U tablici Tab_osoba namjerno stavite datum rođenja za tri osobe da bude


između 1. srpnja, 1981. i 1. rujna, 1981.
† Spremite tablicu i potom načinite upit koji će izdvojiti sve osobe rođene u tom periodu
† Za polje ID_kontakta koristite zamjensko ime Kontakt broj
† Napravite silazno sortiranje po prezimenima i imenima osoba koje zadovoljavaju taj kriterij
† Spremite upit pod nazivom Up_period_rođ

Sjetite se početka naše priče o zapisima koje upiti daju (recordset). Rekli smo da postoje dva tipa Æ
dynaset koje možete uređivati i snapshot koje ne možete uređivati. Pri kreiranju upita trebate voditi
računa kakav tip zapisa želite da korisnik dobije. Ukoliko mu želite omogućiti promjenu podataka i
unos novih recordset ćete postaviti da bude tipa dynaset, a u protivnom snapshot. Sve je ovo priča
koja vam možda na prvi pogled nije jasna, ali nakon što sami podesite tip zapisa kojeg upit daje sve
će vam biti puno jasnije. U biti po predefiniranim postavkama svi upiti koje ste kreirali su stvorili
dynaset zapise. Da bi se u to uvjerili pokrenite zapis Up_Zg_mail_mob u izvršnom (korisničkom)
modu i probajte promijeniti neke podatke za ime, prezime, mail i broj telefona, ali ne dirajte polje
Telefon. Spremite načinjene promjene i otvorite tablicu s podacima Tab_osoba Æ sve načinjene

31
promijene su i ovdje zabilježene. Ništa neočekivano. Vratimo se na naš upit i u korisničkom modu
za jednu osobu umjesto mob upišite mob_posao. Spremite načinjene promijene i zatvorite upit.
Sada otvorite tablicu s podacima o vrsti telefona i vidjet ćete da umjesto mob sada imate
mob_posao Æ to znači da su se svim osobama koji imaju mobitel podaci mob promijenili u
mob_posao Æ ovo baš i nije ono što ste htjeli.

1 Promjena
u upitu

2a

2b

Uzrokovala
neželjene promjene
u ostalim podacima

Slika 2-30 Dynaset tip zapisa u upitima može prozrokovati i neželjene promjene

Kada bi ponovno pokrenuli isti upit ne bi davao nikakav rezultat Æ bio bi prazan. Sasvim normalno
ako se zna da je uvjet koji je postavljen glasio ="mob" Æ takav podatak više nigdje ne postoji
(zamijenjen je s mob_posao) i rezultat upita je prazan skup podataka. Da bi izbjegli ovakve situacije
trebate voditi računa o dvije stvari:

1) Da li upitom želite korisniku omogućiti da samo pregledava određene podatke – Select


Query
2) Da li upitom korisniku želite omogućiti da utječe na te podatke (mijenja ih, briše, dodaje
nove itd.) – Action Query

U slučaju da ste se odlučili da korisniku želite omogućiti samo uvid u podatke po određenim
kriterijima kreirat ćete prvi tip upita. Kako ovo izvesti? Pa, radimo sve kao i do sada samo na kraju
tip zapisa promijenimo u snapshot. Učinimo to za naša dva upita:

13) Otvorite upit Up_Zg_mail_mob u razvojnom modu

32
14) Napravite desni klik mišem bilo gdje na površini prozora upita i iz skočnog izbornika
odaberite Properties… ili na alatnoj traci Query Design kliknite na ikonu Properties
15) Iz otvorenog prozora Query Properties promijenite Recordset Type iz Dynaset u Snapshot
16) Spremite upit i to isto ponovite s drugim upitom
17) Pokrenite oba upita u korisničkom modu

Promjena tipa zapisa u Snapshot


onemogućava korisniku da utječe
na podatke

Slika 2-31 Promjena tipa snimljenog zapisa u upitu

Uočite da vam gumb za upis novog zapisa nije aktivno , a također vam se ne može pojaviti ni
ikona koja označava mijenjanje zapisa . Isto tako nema slobodnog retka za upis novog zapisa
pored kojeg se uvijek nalazi ikona . Dobili smo što smo htjeli Æ korisnik samo može
pregledavati podatke izdvojene nekim kriterijem. Ovakav način postavljanja upita upisivanjem
primjera kriterija u pripadne retke mreže upita naziva se Query By Example. Osim čistog
izvlačenja informacija iz baze moguće je proširiti upite na način da izvršavaju određenu
matematičku operaciju nad jednim ili više polja. Primjerice zamislimo da nas zanimaju podaci
koliko svaka osoba ima telefonskih brojeva. Potrebno je kao i do sada kreirati upit izdvajanja koji
će nam dati tražene informacije Æ tablice koje je potrebno uključiti za stvaranje upita su
Tab_osoba i Tab_telefon; polja iz prve su ID_kontakta, Ime i Prezime, a iz druge Tel_broj. Da
bi mogli vršiti jednostavne izračune potrebno je u razvojnom modu uključiti redak Total u mreži
upita. Iz alatne trake s padajućim izbornicima iz izbornika View izaberite Totals.

Slika 2-32 Uključivanje retka za izračune u mreži upita

33
Pojavit će vam se redak Total koji je automatski postavljen na Group By (grupiraj po) što znači da
se zapisi grupiraju po vrijednostima dotičnog polja. Kliknite na strelicu Group By polja Tel_broj i
izaberite Count (pobroj) čime će vam se pobrojati telefonski brojevi za svaki kontakt koji imate u
bazi.

Redak za
izračune

Ugrađene
funkcije

Slika 2-33 Određivanje izračuna po nekom polju

Testirajte upit (preko ikone Run ) i potom ga spremite pod nazivom Up_ukupno_telefona.
Opis osnovnih ugrađenih funkcija prikazan je u donjoj tablici:

Tablica 2-1 Ugrađene Access funkcije

Funkcija Opis
Group By Grupiranje rezultata upita po dotičnom polju
Izračunava sumu svih vrijednosti u dotičnom polju i prikazuje
Sum
rezultat u upitu
Avg Daje prosječnu vrijednost svih vrijednosti nekog polja
Min izvlači minimalnu vrijednost u polju
Max izvlači maksimalnu vrijednost u polju
Count pobrojava koliko zapisa zadovoljava postavljeni kriterij
First vraća samo prvi zapis koji ispunjava postavljeni kriterij
Last vraća samo zadnji zapis koji ispunjava postavljeni kriterij
Expression želite stvoriti polje za složeni izračun
Ukazujete Accessu da želite polje upotrijebiti za definiranje uvjeta,
Where
ali ga ne želite prikazati u rezultatu upita

34
Ako ste bili malo radoznaliji sigurno ste malo "prošarali" po Design View alatnoj traci upita i u njoj
uočili ikonu Query Type pomoću koje možete birati kakav tip upita želite kreirati.

Slika 2-34 Izbor tipa upita

'R VDGD VPR UDGLOL LVNOMX čLYR XSLWH VHOHNFLMH 6 HOHFW 4XHU\ SRGDWDND 0H đXWLP X RYRP WUHQXWNX QDV
]DQLPDMX PRJXćQRVWL L GUXJRJ WLSD XSLWD D WR VX W]Y &URVVWDE 4XHU\ SRSUHčQL LOL NULåQL XSLWL  7DNYL
XSLWL QDP VOXåH ]D JUXSLUDQMH LQIRUPDFL MH SR GYLMH LOL YLãH NDWH JRULMD âWR EL WR ]QD čLOR X QDãHP
NRQNUHWQRP SULPMHUX" 6LJXUQR QHNH RVREH PRJX LPDWL YLãH PRELWHOD YHćL EURM WHOHIRQD QD SRVOX LOL YHćL
EURM NXćQLK EURMHYD =D LOXVWUDFLMX ćHPR SUHWSRVWDYLWL GD QHNH RVREH LPDMX GYD LOL YLãH PRELWHOD 2QR ãWR
åHOLPR GRELWL NDR UH]XOWDW XQDNUV QRJ XSLWD MH GD QDP VH L]GYRMH RVREH NRMH LPDMX PRELWHOH L GD VH
SREURML NROLNR PRELWHOD LPDMX

18) Preko tablice Tab_osoba za nekoliko osoba unesite podatke za više mobitela
19) Prebacite se na mod za stvaranje novog upita u kojem trebaju biti uključene sve tri tablice

U ovom slučaju polja Prezime i Ime iz tablice Tab_osoba ćete spojiti u jedinstveno polje Osoba
upotrebom operatora ampersand (&). Kao i svaki drugi operator i ovaj ima svoju namjenu, a služi
za spajanje (ulančavanje) dva ili više nizova znakova (stringova) Æ dodaje jedan string na kraj
drugog. Prema tome ulančavanje polja Prezime i Ime iz tablice Tab_osoba u novom polju naziva
Osoba izvršit ćemo na sljedeći način:

Field: Osoba:[Tab_osoba.Prezime]&" "&[Tab_osoba.Ime]

Razmak osiguravate primjenom znaka navodnika. Bez znakova navodnika s razmakom između
direktno bi dobili spojene stringove, npr.:

StipicaStipić

2YDM RSHUDWRU ćH YDP YLãH SXWD GREUR GRćL 1R QDVWDYLPR PL VD VWYDUDQMHP QDãHJ NULåQRJ XSLWD

20) Prvo polje u mreži upita kreirajte na gore opisani način primjenom operatora ampersand (&)
21) Promijenite tip upita iz Select Query u Crosstab Query preko ikone Query Type

35
8 P UHåL XSLWD SRMDYLW ćH YDP VH MRã GYD GRGDWQD UHWND Æ YH ć SR]QDWL 7RWDO L GRVDG QHSR]QDWL
&URVVWDE 7RWDO QLMH SRWUHEQR REMDãQM DYDWL DOL NRMH VX P RJXćQRVWL SULPMHQH UHWND &URVVWDE" 8 WRP
UHWNX RGUHđXMHWH ãWR ćH ELWL UHGFL ãWR ćH ELWL VWXSDF X YDãHP NULåQRP XSLWX L NRMD YULMHGQRVW ćH VH
L]UDčXQDYDWL L SULND]LYDWL X VWXSFLPD =D QDã XSLW PUHåD ćH LPDWL VOMHGHćL L]JOHG

6OLND  0UHåD NULåQRJ XSLWD

Kod križnog upita možete im ati više zaglavlja redaka ( Row Heading) po kojima se
vrši grupiranje po redcim a, samo jedno zaglavlje za stupac ( Coloumn Heading)
samo jednu vrijednost koju prikazujete kao rezultat (Value)!

Upotrebom funkcije Where osiguravate da se pretraživanje vrši po postavljenom kriteriju, ali da se


to polje ne prikazuje u rezultatu upita.

22) Testirajte upit i potom ga spremite pod nazivom Up_ukupno_mob

S ovim smo završili naš prvi dio susreta s upitima. U narednim poglavljima još ćemo se vraćati na
njih kako bi upoznali mnogo naprednije mogućnosti koje nam nude, ali i zbog njihove važnosti koju
imaju u bazama podataka. Ne zaboravite da još niste ni zakoračili u mogućnosti SQL – a čemu će
biti posvećeno cijelo jedno poglavlje. Zanima vas kako napraviti korisničko sučelje u bazi? Dobro,
no nemojte žuriti jer je vrijeme da ponovimo neke stvari koje smo do sada naučili.

† Tablice, Upiti, Forme i Izvješća predstavljaju osnovne objekte Access baze podataka.
† Tablice služe za pohranu strukturiranih podataka na organiziran način Æ osnovni gradivni
element relacijske baze podataka
† Entitet Æ sve ono što postoji u stvarnom ili apstraktnom svijetu o čemu možemo bilježiti
podatke (svakom entitetu odgovara jedna tablica)
† Primarni ključ Æ jedno ili više polja koja osiguravaju jedinstvenost svakog zapisa u tablici
† Strani ključ Æ polje koje jednoznačno određuje zapis iz neke druge tablice

36
† Relacije Æ veze među tablicama uspostavljene pomoću ključeva
† 1:1 (one – to – one) Æ veza koja se ostvaruje preko primarnih ključeva (izbjegava se)
† 1:n (one – to – many) Æ veza koja se ostvaruje preko stranog ključa (najčešći tip veze)

† n:n (many – to – many) Æ veza koja zahtjeva stvaranje dodatne (spojne) tablice kako bi se
ta veza razbila na 1:n veze (direktno nije dopuštena u relacijskim bazama)
† Referencijalni integritet Æ onemogućava unos podataka u vezanim tablicama koji nemaju
svoj primarni ključ
† Kartica Lookup u razvojnom modu TablesÆ za promjenu načina pogleda među tablicama
† Upiti (queries) Æ najčešće za dobivanje željenih informacija iz baze po korisnikovom

kriteriju; Æ testiranje upita Æ View Æ Design View (vraća nas nazad u razvojni mod
za eventualne izmjene)
† Select Query Æ upiti za izdvajanje informacija iz baze
† Action Query Æ akcijski upiti koji vrše neku akciju nad podacima (ažuriranje, brisanje…)
† Record set Æ zapis koji nastaje kao rezultat izvođenja upita
o Snapshot – record set koji se ne može mijenjati
o Dynaset – record set koji se može mijenjati
† Obrasci (Forms) Æ sučelje prema korisniku
† Izvješća (Reports) Æ prikaz informacija u prihvatljivom i razumljivom obliku za korisnika
(pogodni za ispis)

† Æ otvara objekt u izvršnom (korisničkom) modu

† Æ otvara objekt u razvojnom (design) modu

† Æ navigacijska traka za kretanje među


zapisima

† Svi objekti i sve promjene na svakom objektu se spremaju (primjerice CTRL + S ili )
† Access automatski sprema bazu podataka pri izlasku iz baze
† Svaka Access baza podataka se prepoznaje kao datoteka s ekstenzijom .mdb

37
1) Nabrojite osnovne objekte Access baze podataka?
2) Kratko opišite ulogu svakog objekta u bazi.

3) Što je primarni, a što strani ključ? Navedite i engleske nazive.


4) Na koji način se uspostavljaju veze među tablicama?
5) Koje su tri vrste veza u relacijskim bazama podataka i kako ih označavamo?
6) Jedna vrsta veze od te tri nije direktno dopuštena. O kojoj je riječ i kako taj problem
rješavamo?
7) Upiti za izdvajanje se nazivaju?
8) Upiti kojima korisnik na neki način utječe na podatke nazivaju se?
9) Kakve vrste zapisa mogu nastati kao rezultat upita?
10) Redak za izračune u mreži upita uključujete preko izbornika?
11) Redanje kriterija u istom retku mreže upita odgovara njihovom povezivanju kojim logičkim
operatorom?
12) Kriteriji koji se nalaze u različitim redcima mreže upita odgovaraju njihovom povezivanju s
kojim logičkim operatorom?
13) Jedan od ta dva logička operatora sužuje izbor podataka. O kojem je riječ?
14) Jedan od ta dva logička operatora proširuje izbor podataka. O kojem je riječ?
15) Kako se naziva operator &?
16) Za koji tip podataka je vezana njegova upotreba?
17) Field: Kolegij: [Tab_prof.profesor]&" "&[Tab_kolegij.naziv_kolegija] Æ Što
dobivamo kao rezultat ove operacije?
18) Izvršni (korisnički) način rada nam služi za kreiranje objekata (DA / NE)?
19) Korisnik radi s objektima baze isključivo u razvojnom načinu rada (DA / NE)?
20) Koja je uloga navigacijske trake?
21) Access automatski sprema cijelu bazu podataka (DA / NE)?
22) Koju ekstenziju dobivaju MS Access datoteke?

38
2.4 Obrasci (Forms)

Obrasci kao i upiti ne sadrže nikakve podatke, nego osiguravaju neku vrst "prozora" kroz koji
možemo vidjeti tablice i upite. To znači da se kreiraju iz tablica ili upita. Odnosno kažemo da
obrasci predstavljaju korisnički orijentirano sučelje prema podacima u bazi. Omogućuju vam kao
kreatoru baze da odredite način i format pojavljivanja točno željenih podataka na zaslonu, kao i da
dopustite korisniku određene zahvate nad podacima ili dodavanje novih.

korisnici

obrasci

? ? upiti

tablice
Tab_1 Tab_2 Tab_3 Tab_4

Slika 2-36 Veze između tablica, upita i obrazaca

Obrasce je moguće napraviti na tri načina:

† Upotrebom čarobnjaka za obrasce (Form Wizard)


† Alatima za automatsku izradu obrazaca (AutoForm) – slično čarobnjaku, ali bez pitanja
† Ručnom izradom – najbolji način koji nam daje najveću slobodu pri izradi obrazaca

39
Napravit ćemo obrazac koji nam daje pregled kontakt informacija o osobi i mogućnost mijenjanja
istih, odnosno unosa novih. Da bi obrazac mogli napraviti prvo je potrebno pripremiti potrebne
informacije, tj. u ovom slučaju kreirati upit koji će izvlačiti imena i prezimena osoba i njihove
telefone. Preko File Æ New Æ From existing file… otvorite bazu upiti_vj3 i u otvorenom
dijalogu kliknite na gumb Create New Æ stvorit će vam se nova baza na istoj lokaciji s imenom
upiti_vj31 koja je potpuna kopija vaše baze iz treće vježbe. Na kraju vježbe u kojoj ćemo se
upoznati s obrascima samo ćemo preimenovati ovu bazu.

[1] Napravite upit koji će vam davati sve informacije o osobama i svim njihovim telefonskim
brojevima Æ nazovite ga Up_svi_telefoni
[2] U prozoru baze u traci s objektima kliknite na Forms (Obrasci)

Prvo ćemo korištenjem čarobnjaka za izradu obrazaca kreirati obrazac koji nam daje pregled vrsta
telefonskog broja i mogućnost unosa novog ili brisanja već postojećeg.

[3] Napravite brzi dvoklik na Create form by using wizard


[4] Otvorit će vam se dijalog Form Wizard koji vas kroz nekoliko jednostavnih koraka vodi do
gotovog obrasca Æ u prvom koraku iz padajuće liste izaberite tablicu Tab_vrsta_tel_broja
i iz nje izaberite oba polja za buduću formu

Birate iz jedne
ili više tablica
ili upita

Prebacuje
1
samo jedno
polje

Prebacuje sva
polja tablice
ili upita

Slika 2-37 Dijalog čarobnjaka za izradu obrazaca

[5] Izaberite sva polja iz te tablice

40
[6] U sljedećem koraku čarobnjak vas pita kakav izgled da primjeni na vašu buduću formu Æ
nudi se nekoliko mogućnosti, ali vi za sada izaberite tabularni prikaz (Tabular)
[7] Dotjerivanje obrasca predefiniranim stilovima se vrši u sljedećem koraku (probajte mijenjati
stilove i izaberite koji vam se najviše sviđa)
[8] U posljednjem koraku obrascu dodjeljujete ime Æ Ob_vrsta_tel Æ Finish

2
3

Slika 2-38 Koraci u stvaranju obrazaca primjenom čarobnjak za obrasce

Sada nam preostaje kreirati i drugi obrazac na potpuno isti način, ali ovaj put iz upita
Up_svi_telefoni.

[9] Otvorite čarobnjak za izradu obrazaca


[10] U prvom koraku iz padajuće liste izaberite upit Up_svi_telefoni i sva polja iz tog upita

Drugi korak će vam se malo razlikovati od prethodnog iz razloga što čarobnjak na osnovu podataka
koje ste izabrali određuje način koji se njemu čini najprikladniji da podaci budu prikazani na
obrascu. To podrazumijeva i tip obrasca koji će predložiti. Razlog zbog kojeg čarobnjak nudi
ovakvo rješenje leži u činjenici da stvarate obrazac iz upita koji je nastao kao rezultat izdvajanja
podataka iz više tablica Æ Tab_osoba i Tab_telefon .

[11] Izaberite Obrazac s podobrascima, a način prikaza po tablici Tab_osoba


[12] Izgled podforme određujete u trećem koraku Æ izaberite tabularni prikaz
[13] Sljedeći korak je već poznati izbor stila obrasca (uzorak pozadine, vrsta fonta, boja slova …)

41
[14] U posljednjem upisujete naziv za obrazac i njegov podobrazac Æ Osnovne informacije i
telefon

Slika 2-39 Izbor načina prikaza podataka na budućem obrascu

Slika 2-40 Izrada forme s podformom upotrebom čarobnjaka za izradu formi

Sada bi u aktivnom dijelu prozora baze uz uključen prikaz objekata Forms trebali imati tri obrasca.
Kreirali ste dva, a pojavljuju vam se tri obrasca u aktivnom dijelu. Vjerojatno mislite da je riječ o
nekoj grešci, ali nije tako. Sjetite se samo da ste drugi obrazac kreirali kao obrazac s podobrascem,

42
a Access svaki podobrazac prikazuje odvojeno u aktivnom dijelu prozora i to je razlog zašto ih
vidite tri.

[15] Pokrenite obrasce Ob_vrste_tel i Osnovne informacije u korisničkom modu.

Nameće vam se ideja da bi drugi obrazac trebalo malo drugačije organizirati Æ potrebno ga je
otvoriti u razvojnom modu i napraviti željene zahvate:

[16] Prvo ćemo smanjiti veličinu polja koje prikazuje identifikacijski broj korisnika Æ napravite
klik na text box Id_kontakta Æ pojavit će vam se hvataljke kojima možete mijenjati
dimenzije na isti način kao što ste mijenjali npr. slikama u Word dokumentima

Oznaka text
boxa

Slika 2-41Promjena širine text boxu

[17] Premjestite text box s prezimenom na način da bude u ravnini s text boxom imena Æ kada
kliknete i držite pritisnutu tipku miša na željeni text box promijenit će vam se pokazivač
miša u oznaku ruke Æ odvucite text box na željenu poziciju

Slika 2-42 Promjena položaj text boxa na obrascu

Ukoliko vam se nisu vidjela neka slova u text boxovima ili njihovim nazivima (npr. umjesto Š
imate znak | ili slično) tada je samo potrebno promijeniti vrstu fonta.

[18] Smanjite širinu naziva text boxova za Ime i Prezime Æ pazite ne text box sam nego samo
njegov naziv
[19] Napravite desni klik mišem na text box Grad i iz skočnog izbornika izaberite Properties…
[20] Promijenite Font Name u Tahoma Æ isto ponovite sa svim text boxovima
[21] Povećajte širinu cijelog obrasca

Slika 2-43 Promjena širine obrasca

43
[22] Na sličan način povećajte veličinu podobrasca telefoni
[23] Spremite sve načinjene promijene

Slika 2-44 Promjena dimenzija podobrascu

Trake za pomicanje u podobrascu u ovom slučaju vam nisu potrebne, a osim toga navigacijski gumbi
u njemu mogu stvoriti pomutnju s navigacijskim gumbima glavnog obrasca. Da bi taj
problem riješili dovoljno je isključiti trake za pomicanje (scroll bars) podobrasca i njegove
navigacijske gumbe uz istovremeno osiguravanje automatske promijene dimenzija podobrasca.

[24] Otvorite obrazac Osnovne informacije u razvojnom modu

Kvadratić u gornjem lijevom kutu obrasca vam služi za mijenjanje svojstava obrasca /
podobrasca. Da biste došli do dijaloga za mijenjanje svojstava trebate na njemu napraviti brzi
dvoklik ili desni klik, pa iz skočnog izbornika izabrati Properties.

[25] Otvorite dijalog za promjenu svojstava podobrasca telefoni


[26] Promijenite svojstva Scroll Bars iz Both u Neither i Navigation Buttons iz Yes u No Æ na
ovaj način smo isključili navigacijsku traku, te horizontalnu i vertikalnu traku za pomicanje
[27] Ako vam nije uključena opcija automatske promijene veličine učinite to

44
[28] Spremite načinjene promjene i otvorite obrazac u korisničkom modu

1. Promijenite osnovne podatke za nekoliko osoba.


2. Promijenite broj telefona nekim osobama.
3. Promijenite vrstu telefona nekim osobama Æ npr. kućni u posao
4. Dodajte novi broj telefona za jednu nasumce izabranu osobu
5. Izbrišite jedan zapis Æ podatke za jednu osobu.
6. Razmislite na koji način još možete napraviti obrazac koji će vršiti istu funkciju – sjetite se da
se obrasci mogu izrađivati direktno i iz tablica

[29] Načinite obrazac primjenom čarobnjaka za obrasce iz navedene dvije tablice Æ iz tablice
Tab_osoba uzimate sva polja, a iz druge tablice izostavite samo polje Id_kontakta

Gotov obrazac bi vam trebao imati izgled kao na slici ispod:

Slika 2-45 Izgled obrasca za pregled, unos i promijenu kontakt informacija

Kako na vrijednost ID_telefona ni ne možete utjecati taj text box vam ne treba biti vidljiv na
obrascu. Ponovno se možemo poslužiti jednim trikom, a on se odnosi samo na promjenu svojstava
Visible iz Yes u No za text box i za njegovu oznaku (labelu). Potom napravite novi raspored ostalih
text boxova i njihovih oznaka.

45
1
2

Slika 2-46 Izgled gotovog obrasca

Sada slobodno možete dodavati nove telefonske brojeve, a da pri tom ne dobijete poruku o grešci.
Čitav niz interesantnih stvari vezanih uz izradu obrazaca još uvijek nas čeka. Prije nego što
krenemo dalje korisno je dati kratko objašnjenje pojedinih alata koje ćemo često ubuduće koristiti
pri "ručnoj" izradi obrazaca. Većina alata su uobičajeno smještena u plutajućoj alatnoj traci
Toolbox. Naravno da bi je mogli vidjeti trebate biti u modu izrade obrazaca (Design View).
Ukoliko vam traka s alatima nije uključena napravite desni klik mišem na područje pored trake s
padajućim izbornicima i iz skočnog izbornika izaberite Toolbox.

46
Slika 2-47 uključivanje alata za izradu obrazaca

Stvaranje text
Kreiranje fiksnog Stvaranje
Za automatsko boxa (tekstualno
teksta – labela Æ okvira (Framea)
Za selekciju pokretanje polje) Æ u njih je
za oznaku kojim se više
objekata na čarobnjaka pri moguće upisivati
tekstualnih polja, objekata
obrascu jednostavnim podatke ili
naziva obrazaca grupira po
radnjama mijenjati
ili kao napomene nekom pravilu
postojeće

Radio button – Check box – Combo box – Stvara listu –


gumb za odabir gumb za odabir padajući nepromijenjeni
Izrada
opcija koje se većeg broja kombinirani popis popis
gumba za
međusobno opcija vrijednosti uz vrijednosti bez
skretanje – on
isključuju (samo istovremeno (ne mogućnost izbora mogućnosti
/ off gumb
se jedna može isključuju jedna ponuđenih i dodavanja
odabrati) drugu) dodavanja novih novih

Stvaranje Prekid stranice


nepovezanog Æ kod
Za kreiranje Umetanje slike – okvira (Unbound Vezani okvir – prevelikih
akcijskih može biti i iz Frame) – za prikazuje podatke obrazaca koji se
gumbi i (npr. same baze prikaz objekata iz same baze ne mogu
Delete Record) podataka načinjenih u podataka prikazati samo
nekoj drugoj na jednom
aplikaciji ekranu

47
Obrasci s više Otvara popis
kartica Æ Stvaranje ostalih objekata
Crtanje
svaka kartica podobrasca na Crtanje linija na koje možete
pravokutnih
se može postojećem obrascu iskoristiti za
oblika na obrascu
sastojati od obrascu kreiranje
više objekata obrasca

S ovim bismo završili uvod u rad s MS Accessom. U primjeru koji slijedi veći dio će biti ponovljen,
a postepeno ćemo objasniti i neke nove stvari koje do sada nismo spominjali. Tu se prvenstveno
misli na izradu parametarskih upita, upotrebu macro naredbi, ručnu izradu obrazaca i izradu
izvješća koja uopće nisu obrađena. Drugim riječima, najzanimljivije tek slijedi!

48
3. PRIMJER – BANKA (uplate / isplate)

Želimo napraviti relacijsku bazu podataka koja omogućuje unos i pregled transakcija za neki
bankovni račun. Svaki korisnik banke može imati jedan ili više različitih računa. Riječ može biti o
tekućem računu, žiro, poslovnom, deviznom ili štednom računu. Tip računa odmah određuje
pripadne iznose kamata, te mogućnosti transakcija. Po statusu korisnik računa može biti poduzeće,
obrtnik, dioničko društvo ili pojedinac (građanin). Pored pregleda transakcija po postojećim
računima, nužno je osigurati mogućnost i kreiranja novih. Pojednostavljeni model baze podataka
prikazan je na slici ispod:

TRANSAKCIJE
evidencija stanja
KORISNICI

i transakcija

RAČUNI
BANKA
upit

informacije

Slika 3-1 Pojednostavljeni model baze podataka

Transakcije mogu biti uplate ili isplate. Sve transakcije se evidentiraju posebno, a za svaki račun
postoji informacija o trenutnom stanju računa – saldu. Ograničit ćemo se samo na nekoliko vrsta
transakcija:

A) UPLATE

a. Plaća
b. Uplata doznakom
c. Uplata na šalteru

B) ISPLATE

a. Isplata na šalteru
b. Isplata po računu br.
c. Bankomat (koji)
d. Naknada za izdane čekovne blankete
e. Naknada za vođenje tekućeg računa
f. Ček br.

49
Na osnovu svega rečenog možemo utvrditi da imamo sljedeće entitete:

† Korisnik
† Račun
† Vrsta računa
† Vrsta korisnika
† Transakcije

Prisjetimo se što je entitet. Entitet je stvarni ili idejni skup opisan nizom svojstava Î osoba, zgrada,
institucija, mjesto, dokument, …
Svaki entitet se u relacijskoj bazi podataka predstavlja tablicom, a njegova svojstva poljima tablice.
Vodite računa da dijagram entiteti veze realizirate tek na osnovu dobro poznatog modela poslovanja
korisnika baze, te definiranih informacijskih potreba i zahtjeva korisnika na svim nivoima. Prije
nego krenemo s realizacijom baze potrebno je nacrtati njezin model entiteti – veze:

Slika 3-2 Dijagram entiteti veze za bazu podataka transakcija

Prvo ćemo realizirati tablice, a potom ih na osnovu gornjeg dijagrama povezati. U tablici korisnik
naziv korisnika se upisuje samo za poduzeća, obrtnike i dionička društva. U tom slučaju upisuje se i
matični broj tvrtke. Za građanske račune upisuje se ime i prezime korisnika i njihov jedinstveni
matični broj. Ostali podaci iz te tablice su jasni.

50
[1] Kreirajte sljedeće tablice prema priloženim strukturama

tabKorisnici

Data Type Field Size Input mask Validation


Field Name (naziv Required Indexed
(tip (veličina (ulazna rule (pravilo
polja) (zahtjevano) (indeksirano)
podataka) polja) maska) provjere)

AutoNumb Long Yes(No


# id_korisnika - - -
er Integer Duplicates)
ime_korisnika Text 30 - - - -
prezime_korisnika Text 30 - - - -
naziv korisnika Text 40 - -
JMBG Text 13 - - Yes -
MBR Number Integer - - - -
mjesto Text 30 Yes - - -
adresa Text 40 Yes - - -
post broj Number Long Int Yes - - -
Yes
id_vrsta_korisnika Number Long Int Yes (Duplicates - -
OK)

tabVrstaKorisnika
Input Validation
Data Type Field Size
Field Name (naziv Required Indexed mask rule
(tip (veličina
polja) (zahtjevano) (indeksirano) (ulazna (pravilo
podataka) polja)
maska) provjere)
Long Yes (No
#id_vrsta_korisnika Number - - -
Integer Duplicates)
vrsta_korisnika Text 30 - - - -

tabVrstaRacuna
Field Size ili
Input mask Validation
Field Name (naziv Data Type Format Required Indexed
(ulazna rule (pravilo
polja) (tip podataka) (veličina polja (zahtjevano) (indeksirano)
maska) provjere)
ili oblik)
Long Yes (No
#id_vrsta_racuna Number - - -
Integer Duplicates)
vrsta_racuna Text 35 Yes - - -

51
tabRacuni
Field Size ili
Input mask Validation
Field Name (naziv Data Type (tip Format Required Indexed
(ulazna rule (pravilo
polja) podataka) (veličina polja (zahtjevano) (indeksirano)
maska) provjere)
ili oblik)
Yes (No
#broj_racuna Number Long Integer - - -
Duplicates)
Date and
datum otvaranja Short Date Yes - Yes -
Time
Yes
saldo Currency Standard - (Duplicates - -
OK)
Yes
id_korisnika Number Long Integer Yes (Duplicates - -
OK)
Yes
id_vrsta_racuna Number Long Integer Yes (Duplicates - -
OK)

tabTransakcije
Input mask Validation rule
Field Name (naziv Data Type (tip Field Size Required Indexed
(ulazna (pravilo
polja) podataka) (veličina polja) (zahtjevano) (indeksirano)
maska) provjere)
Yes (No
#id_transakcije AutoNumber Long Integer - - -
Duplicates)
opis_transakcije Text 45 - - - -

datum_transakcije Date/Time Short Date Yes


uplata Currency Standard - - - -
isplata Currency Standard - - - -
Yes
broj_racuna Number Long Integer Yes (Duplicates - -
OK)

[2] Klikom na ikonu Relationships s Access alatne trake kreirajte veze među tablicama na
osnovu dijagrama entiteti – veze (ER diagram); vodite računa o referencijalnom
integritetu

Svi podaci će se unositi i mijenjati preko obrazaca, tako da nema potrebe za pokretanjem tablica u
korisničkom modu. Krenimo redom. Prvo trebamo kreirati obrazac koji će nam služiti za unos
novih korisnika ili za kreiranje novih računa za već postojeće korisnike. U tom smislu kreirat ćemo
dva odvojena obrasca. Na jednom će se nalaziti svi podaci o korisniku iz tablice tabKorisnici, a na
drugom odgovarajuća polja iz tablice transakcija za unos prve uplate pri otvaranju računa.

52
Slika 3-3 Relacije u bazi

[3] Kreirajte upit iz tablica tabKorisnici (sva polja) i tabRacuni (sva polja)
[4] Spremite upit pod imenom upKorisniciRacuni
[5] Otvorite novi obrazac u razvojnom modu (Create form in Design view)
[6] Kliknite na gumb Properties Form Design alatne trake
[7] U otvorenom dijalogu pod karticom Data kao izvor (Record Source) izaberite prethodno
stvoreni upit upKorisniciRacuni
[8] Uključite listu polja (Field List) Æ View Æ Field List ili klikom na istoimenu ikonu sa
alatne trake Form Design Æ

Slika 3-4 Dijalog svojstava obrasca Æ izbor izvora podataka s kojim će se povezati obrazac

53
[9] Iz liste polja metodom Drag'n' Drop na površinu obrasca odvucite redom sva polja osim
polja id_korisnika iz tablice tabRacuni
[10] Prema potrebi povećajte veličinu obrasca, a raspored polja neka vam bude kao na slici
ispod

Slika 3-5 Početni izgled obrasca

Uočavate da vam oznake (Label) tekstualnih okvira (text box) nisu dobro razmještene, a ni
njihove veličine, pa čak i sami nazivi nisu prema korisničkim potrebama.

[11] Prvo smanjite text box u kojem će se nalaziti prikazan identifikacijski broj korisnika
[12] Promijenite njegovu oznaku (Label) u šifra korisnika: Æ najjednostavnije brzim
dvoklikom na postojeću oznaku i potom tekst mijenjate kao bilo koji tekst u Wordu
[13] Promijenite dimenziju toj oznaci i poravnajte je s ostalima

11. korak
13. korak
12. korak

[14] Promijenite oznake id_vrsta_korisnika u Vrsta korisnika: i id_vrsta_racuna u Vrsta


računa:

54
Veoma često je zgodno svakoj oznaci dati i svoje ime, a ne ostaviti ime koje Access automatski
dodjeljuje Æ to možete učiniti preko dijaloga Properties oznake:

Slika 3-6 Promjena naziva oznake

Umjesto da nam se prikazuje identifikacijski broj vrste korisnika i identifikacijski broj vrste računa
zgodnije je promijeniti način prikaza pripadnih tekstualnih okvira u combo box i vezati ih za
pripadne stupce u tablicama tabVrstaKorisnika i tabVrstaRačuna. Na taj način prikazivat će nam
se vrste korisnika (građani, obrtnici,…) i vrste računa (tekući, žiro,…). Postupak je prilično
analogan postupku promijene pogleda među tablicama, što smo već bili radili u prvoj vježbi.

[15] Napravite desni klik na tekstualni okvir u kojem piše id_vrsta_korisnika Æ izaberite
Change To Æ Combo Box
[16] Ponovno otvorite svojstva i poda karticom Data pod Row Source izaberite
tabVrstaKorisnika

Prebacite se na karticu Format i pod Column Count unesite 2, a pod Column Width 0;3 (Access
će sam dodati cm) Æ na ovaj način u kombiniranom okviru će se prikazivati samo drugi stupac iz
tablice u kojoj su navedene vrste korisnika, jer smo širinu prvog postavili na 0cm (stvaramo malu
varku Æ Access i dalje radi s identifikacijskim brojevima, koje skriva, a korisniku prikazuje samo
nazive koji su vezani za te identifikacijske brojeve)

55
Slika 3-7 promjena tekstualnog okvira u kombinirani okvir (combo box)

[17] Ponovite postupak s tekstualnim okvirom u kojem piše id_vrsta_racuna

Slika 3-8 Izbor izvora podataka za combo box i „prikrivanje“ prvog stupca pripadne tablice

[18] Spremite obrazac pod nazivom obNoviKorisnik_Račun

Ukoliko ste mijenjali pogled među tablicama tada vam ovi zahvati neće biti potrebni na
obrascima Æ automatski će se pojavljivati combo boxovi umjesto text boxova

56
Broj računa i stanje (saldo) ćemo istaknuti primjenom jednostavnih efekata.

[19] Desni klik na tekstualni okvir broj_racuna i iz pop up izbornika izaberite Special Effect Æ
efekt sa sjenom
[20] Ponovite isto i sa saldom

Nakon spremanja svih promjena zatvorite obrazac u razvojnom modu. Na redu je kreiranje drugog
obrasca koji će služiti za unos prve transakcije na račun.

[21] Otvorite novi obrazac u razvojnom modu


[22] Otvorite njegov dijalog svojstava i pod karticom Data pod Record Source izaberite
tablicu tabTransakcije
[23] Iz liste polja (Field List) povucite na obrazac sva polja izuzev polja isplata
[24] Spremite obrazac pod nazivom obPrvaTrans
[25] Od ova dva obrasca želimo načiniti jedan obrazac s podobrascem Æ glavni obrazac će
nam biti obNoviKorisnik_Račun, a podobrazac obPrvaTrans Æ otvorite obrazac koji
će predstavljati glavni obrazac u razvojnom modu
[26] Smanjite mu prikaz tako da se vidi i glavno prozor baze
[27] Pod Forms nađite obrazac koji treba predstavljati podobrazac i odvucite ga na površinu
glavnog obrasca

Samo odvučete i
obrazac postaje
podobrazac na
otvorenom obrascu
u razvojnom modu

Slika 3-9 Stvaranje podobrasca iz već postojećeg obrasca

Preostaje nam još definiranje polja po kojem su obrazac i podobrazac povezani. Kada su obrazac i
podobrazac kreirani na osnovu tablica tada ne postoji problem u definiranju veze među njima, jer je
ta veza određena relacijama među tablicama. U takvim slučajevima Access neće imati nikakvih

57
problema u određivanju vezanih polja na glavnom obrascu i podobrascu. Međutim, ukoliko je bilo
koji obrazac (glavni ili podobrazac ili čak oba) temeljen na upitima Access ne posjeduje eksplicitne
informacije o vezi među tim obrascima. U takvim slučajevima vezu je potrebno definirati "ručno".
Označite podobrazac Æ kliknete na njegov rub i kada se pojave hvataljke za promjenu dimenzija na
alatnoj traci Form Design kliknite na ikonu Properties. U kartici Data svojstava uočite polja Link
Child Fields i Link Master Fields. Kliknite na gumb s tri točkice pored bilo kojeg od ta dva
polja. U dijalogu koji se pojavi, ako to već nije ponuđeno postavite vezu po broju računa
(broj_racuna) kao na slici ispod.

2
1

Slika 3-10 povezivanje glavnog obrasca i podobrasca

Naposljetku, trebamo kreirati i kontrolni gumb kojim će se prva uplata postaviti na trenutni saldo
računa. Da bismo mogli kreirati akcijski gumb potrebno je poznavati neke osnove programa
pogonjenih događajima (Event Driven Programming). Ne trebate se obeshrabriti, jer nije riječ o
ničem kompliciranom.

3.1 Programi poNUHWDni događajima upotrebom Macro naredbi

Osnova ovih programa je da se oni izvršavaju nakon interakcije korisnika preko sučelja aplikacije
Æ obrasci, meniji, kontrolni gumbi i sl. Da bi kreirali aplikacije pogonjene događajima
programeri sastavljaju čitav niz manjih programa koje prikače na razne objekte aplikacije i za svaki
objekt odrede događaj koji ih okida (najčešći događaj je klik miša). Na ovaj način izvršavanje
aplikacije ovisi o tijeku izvršavanja manjih, upravljivih i lako održavajućih programa, a ne o tijeku
jednog velikog, nepreglednog i teško upravljivog programa. Kako događaji pridruženi objektima na
obrascima okidaju neku akciju veoma često se nazivaju okidači (triggers). Procedura koja se pri
tom izvršava može biti napisana u VBA (Visual Basic for Application) programskom jeziku, ali su

58
kao takve često podložne pravljenju grešaka od strane programera. Pogotovo u takvim slučajevima
dolazi do značajnih problema kada je potrebno poštivati konvenciju imenovanja u hijerarhiji baze.
Upravo iz tog razloga, čak i iskusniji programeri, pri implementaciji najčešćih okidača se okreću
Accessovom Macro jeziku. Riječ je o jeziku koji se sastoji od četrdesetak naredbi. Iako je riječ o
proceduralnom jeziku kao što je i VBA, naredbe su razumljive i lako upotrebljive. Kao poseban
dodatak jednostavnosti primjene macro naredbi je razvijeni macro editor koji pojednostavnjuje
specificiranje akcijskih argumenata (parametara).

Form Title

Izvodi se
PROCEDURA
Æ npr. ispisati
će se narudžba
DOGAĐAJ:

na klik miša

Text

Status bar

6OLND  SULPMHU GRJDđDMHP SRNUHWDQLK SURJUDPD

Da bismo kreirali okidač moramo postaviti i odgovoriti na dva osnovna pitanja:

1) Što će se dogoditi?
2) Kada se treba dogoditi?

Primjerice:

1) Što će se dogoditi? Æ zaprimit će se rezervacija sobe


2) Kada se treba dogoditi? Æ nakon klika na gumb Potvrdi rezervaciju

Kada ste jednom odgovorili na prvo pitanje (Što se treba dogoditi) trebate kreirati macro ili (VBA
proceduru) koja će osigurati izvršavanje potrebnih koraka. Nakon toga rješavate drugo pitanje i
pridjeljujete kreiranu proceduru određenom događaju na željenom objektu. Puno priče bez pravog
primjera ne može biti od koristi, pa ćemo kreiranje macroa pokazati na našem slučaju potvrde prve
transakcije. Dakle, naš odgovor na prvo pitanje je Æ potvrda prve transakcije (koja može biti samo
uplata), a na drugo Æ izvršava se nakon klika na gumb Potvrdi transakciju. To znači da na
glavnom obrascu trebamo kreirati kontrolni gumb kojem ćemo prikačiti pripadni macro. Ovaj put

59
ćemo prvo kreirati macro, a potom ga povezati s događajem pripadnog objekta Æ kontrolnog gumba
na obrascu obNoviKorisnik_Racun.

[29] Otvorite obrazac obNoviKorisnik_Racun u razvojnom modu i ostavite ga tako

[30] U prozoru baze kliknite na objekt Macros Æ potom na ikonu New na alatnoj
traci baze. Otvorit će vam se Macro editor kao na slici ispod.

Slika 3-12 Izgled Macro editora

[31] Iz padajućeg izbornika izabirete naredbu Æ u ovom slučaju SetValue


[32] Pod Comment upisujete komentar uz pojedinu naredbu Æ upišite Æ postavlja saldo na
vrijednost prve uplate

Trebate još definirati akcijske argumente. Da bi ih ispravno definirali potrebno je samo slijediti
upute u desnom okviru od argumenta. Klikom na svaki argument u tom području se prikažu
osnovne informacije o tom argumentu i načinu na koji se može popuniti njegova vrijednost.
Ukoliko vam upute nisu dovoljne pritiskom na funkcijsku tipku F1 dobit ćete dodatnu pomoć u vezi
vašeg problema. Međutim, ovdje je sve jasno Æ početni saldo (nalazi se na glavnom obrascu) koji
je inicijalno postavljen na nulu, nakon izvršenja prve uplate koja se upisuje u podobrascu, treba
poprimiti upravo tu vrijednost.

[33] Kliknite na gumb s tri točkice (Build button) pored argumenta Item Æ otvorit će vam
se Expression Builder

60
Određujemo naredbu za
Po potrebi upisujemo
akciju
komentar

Okvir s informacijama

Definiramo akcijske Build button


argumente koji određuju
rezultat akcije

Slika 3-13 Postavljanje naredbi akcija i njihovih argumenata u Macro editoru

[34] U Expression Builderu s lijeve strane nalazi vam se popis objekata Æ napravite brzi
dvoklik na Forms Æ pa na Loaded Forms kako bi pristupili trenutno otvorenim
obrascima (All Forms vam daje pristup svim obrascima)
[35] Dođite do obrasca obNoviKorisnik_Racuni i potom napravite brzi dvoklik na polje
saldo u središnjem okviru Æ potvrdite s OK Æ na ovaj način ste osigurali da će se nova
vrijednost postavljati u to polje
[36] Ponovite postupak s Expression, ali ovaj put dođite do podobrasca i izaberite polje
uplata Æ u glavnom okviru Expression Buildera pisat će vam sljedeći izraz:

Forms![obNoviKorisnik_Racun]![obPrvaTrans].Form![uplata]

[37] Potvrdite izbor i zatvorite Expression Builder

Česta je praksa da se nakon nekakve naredbe ispiše potvrda o uspješnosti njezinog izvođenja Æ
naredba MsgBox.

[38] Kliknite ispod naredbe SetValue i iz padajuće liste izaberite naredbu MsgBox
[39] U komentar upišite ispisuje potvrdnu poruku o uspješno izvršenoj transakciji
[40] Pod argument Message upisujete poruku koja će se prikazati korisniku Æ Transakcija
izvršena!
[41] Na kraju se stavlja naredba koja prekida izvršavanje macroa Æ StopMacro

Za ovu naredbu ne trebate definirati ni jedan argument, a također nema ni potrebe za dodatnim
komentarom.

[42] Spremite macro pod imenom macPrvaTrans

61
Naredbe se izvršavaju
od vrha prema dnu

Slika 3-14 Višestruke naredbe u Macro editoru

Slika 3-15 Spremanje macroa

Za snimljeni macro znamo što radi Æ postavlja saldo na vrijednost prve uplate, potom ispisuje
poruku o izvršenoj transakciji i na kraju prekida izvršavanje samog macroa. Još je potrebno
prikačiti taj macro na željeni objekt i definirati događaj koji ga okida. Macro ćemo pridružiti
kontrolnom gumbu koje ćemo načiniti na obrascu obNoviKorisnik_Racun, a okidat će se na klik
miša.

[43] Spomenuti obrazac vam je još uvijek otvoren u pozadini Æ klikom na njega učinite ga
aktivnim
[44] U alatnoj traci kliknite na ikonu za kreiranje kontrolnog gumba (akcijskog gumba)

[45] Ucrtajte gumb na željenom mjestu na obrascu


[46] Zatvorite čarobnjaka koji vam se pojavi klikom na gumb Cancel
[47] Desnim klikom na gumb otvorite njegov dijalog svojstava
[48] U kartici Format pod Caption upišite Potvrda transakcije Æ ovim ste odredili tekst
koji će biti ispisan na gumbu
[49] Prebacite se na karticu Event i izaberite događaj On click Æ iz padajuće liste izaberite
prethodno kreirani makro macPrvaTrans
[50] Zaključajte polje saldo kako ga korisnik ne bi mogao mijenjati
[51] Preko svojstava glavnog obrasca u kartici Data postavite Data Entry na Yes
[52] Spremite načinjene promijene
[53] Zatvorite dijalog svojstava i spremite načinjene promijene na obrascu (CTRL + S)

62
Za unos vrste korisnika i vrste računa nećemo kreirati obrasce, jer je riječ o unosima koji se vrše
jednom. Te unose ćemo obaviti direktno preko pripadnih tablica.

Slika 3-16 promjena naslova kontrolnog gumba i pridruživanje procedure gumbu na željeni događaj

[42] Tablicu tabVrstaKorisnika otvorite u korisničkom modu i unesite sljedeće vrijednosti:

a. Građanin (id = 100)


b. Poduzeće (id = 200)
c. Obrtnik (id = 300)
d. Dioničko društvo (id = 400)

[43] U tablicu tabVrstaRacuna:

a. Tekući (id = 4400)


b. Žiro (id = 5500)
c. Poslovni (id = 6600)
d. Devizni (id = 7700)
e. Štednja (id = 8800)

Skoro pa da smo i gotovi s prvim obrascem Æ još je nužno osigurati unos novih podataka u
podobrazac pri svakom otvaranju glavnog obrasca, isključiti navigacijske gumbe i trake za
pomicanje na njemu.

[44] Otvorite obrazac obNoviKorisnik_Racun u razvojnom načinu rada


[45] Otvorite svojstva podobrasca i u kartici Data promijenite Data Entry iz No u Yes

63
[46] Prebacite se na karticu Format i Scroll bars postavite na Neither, te isključite
navigacijske gumbe Æ Navigation Buttons Æ No

Slika 3-17 Promjena načina unosa, te isključivanje traka za pomicanje i navigacijske gumbe

[47] Unesite proizvoljne podatke za prvog korisnika i odmah za njega kreirajte drugi račun

3
1

64
Uočavate nedostatak ovog obrasca koji se javlja kada želimo otvoriti novi račun za već postojećeg
korisnika. Potrebno je ponoviti sve podatke za korisnika, a dodjeljuje mu se i dodatni
identifikacijski broj za svaki račun. Taj nedostatak ćemo otkoloniti izradom potpuno novog obrasca
koji će nam služiti za unos podataka o korisniku i kreiranje računa. Sam obrazac ćemo kreirati iz
tablica tabKorisnici i tabRacuni primjenom čarobnjaka.

[48] Otvorite čarobnjaka za izradu obrazaca


[49] Selektirajte sva polja iz tablice tabKorisnici, a iz tablice tabRacuni izostavite polja
saldo i id_korisnika
[50] Prihvatite ponuđeni izgled obrasca s podobrascem
[51] Za podobrazac izaberite tabularni izgled
[52] Glavnom obrascu dajte ime obPodaci, a podobrascu podRacuni
[53] Kliknite na radio button Modify the form's design
[54] Promijenite nazive pojedinih oznaka i na podobrascu isključite navigacijske gumbe tako
da vam obrazac izgleda približno kao na slici ispod

Slika 3-18 izgled gotovog obrasca

[55] Unesite podatke za nekoliko korisnika (desetak) Æ tekući računi neka počinju s 1000,
žiro s 20000, poslovni s 30000, devizni s 40000 i štednja s 50000
[56] Neka vam bar tri korisnika imaju po dva ili više računa

Kada imamo kreirane korisnike i račune možemo vršiti razne transakcije po tim računima.
Očigledno nam treba obrazac preko kojeg ćemo unositi transakcije na određeni račun. Kako je broj
računa poznat i automatski određuje tip korisničkog računa, potrebno je napraviti parametarski upit
po broju računa koji će izvlačiti podatke o korisnicima i njihovim računima.

65
3.2 Parametarski upiti

Parametarski upiti spadaju u skupinu dinamičkih upita. Kod te vrste upita kriterij za izbor zapisa
nije određen pri samom kreiranju upita, već je korisniku baze ostavljena mogućnost zadavanja
kriterija pri samom pokretanju upita. Kada se takav upit pokrene korisniku se javlja jedan ili više
dijaloških okvira u koje ovaj upisuje željene kriterije.
Za primjer se sjetite upita u kojem smo željeli izdvojiti brojeve mobitela osoba iz Zagreba. U
pripadna polja pod redak kriterija upisali smo "Zagreb" i "mob". Svatko je od vas uočio nedostatak
ovakvih upita Æ što da su nas zanimali brojevi mobitela osoba iz Splita ili kućni brojevi osoba iz
Zadra? Odmah se nameće i odgovor Æ trebali bi kreirati isto toliko novih upita koliko je novih
kriterija. Očigledno je riječ o nezgrapnom rješenju koje bi trebalo na neki način izbjeći. Upravo tu
uskaču parametarski upiti.

[1] Otvorite bazu podataka u kojoj se nalazi spomenuti upit (vježba br. 3)
[2] Pod polje grad u redak Criteria upišite [Upišite grad po kojem želite vršiti pretragu:]
[3] Pod polje vrsta telefona u retku Criteria upišite [Definirajte vrstu telefona:]

1 2

Zamijenite pisani stalni kriterij Nakon pokretanja upita upišite


s parametarskim kriterijem željenu vrijednost kriterija

Kako se u ovom slučaju ponaša Access kada mu stalnu vrijednost zamijenimo s promjenjivom
(varijablom)? Kada naiđe na takvu situaciju Access će pokušati vezati varijablu za neku vrijednost.
Pri tom će izvršiti sljedeće testove:

I. Prvo provjerava da li ime varijable predstavlja ime nekog polja ili proračunskog polja u
upitu. Ako da, onda pridjeljuje trenutnu vrijednost tog polja varijabli. U suprotnom ovaj test
ne daje nikakav rezultat.
II. Access pokušava razriješiti vrijednost parametra kao referencu na nešto u trenutnom
okruženju. Primjerice na vrijednost otvorenog obrasca. Ako ne postoji takva referenca ovaj
test ne prolazi.
III. Kao posljednji slučaj, Access pita korisnika da unese vrijednost parametra preko dijaloškog
prozora.

66
Spremite načinjene promjene u upitu i potom ga pokrenite. Access će od vas tražiti da upišete
vrijednosti za dva parametra – grad i vrstu telefona, upravo kako ste ih kreirali u razvojnom modu.
Puno uobičajenije rješenje od ovoga je da se koristi vrijednost s obrasca koja dalje određuje odziv
parametarskog upita. Pojednostavljeno kazano Access će u tom slučaju povući vrijednost parametra
direktno s otvorenog obrasca. Za ilustraciju ovog načina opet ćemo se poslužiti s postojećom
bazom.

[1] Otvorite bazu podataka načinjenu u vježbi 4 (obrasci)


[2] Kreirajte novi obrazac bez primjene čarobnjaka Æ Create form in Design view
[3] Alatom text box načinite jedan nevezani (Unbound) tekstualni okvir
[4] Naslovite ga Grad:
[5] Alatom combo box kreirajte jedan kombinirani okvir u kojem ćete sljedeći upute
čarobnjaka kreirati tri samostalna unosa Æ mob; kućni; posao

Upisujete
vrijednosti
za Combo
Box

Oznaka koju
će nositi
Combo Box

[6] Combo box nazovite Vrsta telefona


[7] Alatom za kontrolni gumb (Command Button) načinite jedan upravljački gumb na
obrascu
[8] Otvorit će vam se čarobnjak iz kojeg u prvom koraku izabirete kategoriju razno
(Miscellaneous) Æ potom pod akcijom izaberite pokreni upit (Run Query) Æ
upGradTel
[9] U sljedećem koraku umjesto slike izaberite tekst i upišite Pretraga
[10] Posljednji korak određuje naziv kontrolnog gumba kojeg će koristiti Access za
označavanje ovog gumba Æ upišite Com_1

Na ovaj način smo kreirali kontrolni gumb koji će pozivati željeni upit!

[11] Spremite obrazac pod nazivom obPretraga Æ ostavite otvoren ovaj obrazac

67
[12] Otvorite upit upGradTel u razvojnom modu
[13] Pod Criteria polja grad pozovite expression builder tako da napravite desni klik na tom
polju i iz skočnog izbornika izaberete Build

obrazac
Kursor postavite u redak
Criteria polja Grad Æ desnim
klikom pozovete pop up
izbornik Æ izaberite Build

Kreirate jednostavni obrazac i


2 ostavite ga otvorenog u
pozadini

upit

Slika 3-19 Povezivanje parametraskog upita s obrascem

Cilj nam je povezati parametarski kriterij s odgovarajućim objektima na obrascu obPretraga.


Takav upit ćemo pozivati preko kontrolnog gumba Pretraga. Nakon što kliknete na Build pojavit
će vam se graditelj izraza u kojem kroz nekoliko jednostavnih koraka dolazite do željenog rješenja.
S lijeve strane vam se nalaze objekti Æ svaki objekt koji na sebi ima znak plusa otvara se
dvoklikom, a ostali jednim klikom.

[14] Napravite brzi dvoklik na Forms Æ Loaded Forms (popis trenutno otvorenih obrazaca) i
All Forms (popis svih obrazaca u vašoj bazi)

68
Brzim
dvoklikom na
Forms
dobivate uvid
u sve obrasce u Kada ste
vašoj bazi gotovi kliknite
na gumb OK

Dok je željeni
obrazac u
pozadini
otvoren
kliknite na
Loaded Forms U središnjem
i izaberite ga okviru
napravite brzi
dvoklik na ime
polja koje će
određivati
kriterij

Slika 3-20 Upotreba Expression Buildera za određivanje objekta s obrasca koji će se koristiti kao parametarski
kriterij

[15] Izabrali ste objekt Grad s obrasca Æ sve vrijednosti koje na obrascu unesete u taj text
box predstavljat će kriterij pretrage po polju Grad u upitu upGradTel
[16] Ponovite postupak s poljem Vrsta_tel_broja kojeg ćete povezati s Combo boxom
Vrsta_tel na obrascu obPretraga
[17] Spremite načinjene promjene u upitu upGradTel
[18] Još bi bilo zgodno ukloniti navigacijske gumbe s obrasca Æ uklonite ih preko dijaloškog
prozora Properties obrasca Æ Navigation Buttons Æ No
[19] Pokrenite obrazac obPretraga i pod Grad upišite Šibenik, a pod vrsta telefona kućni
[20] Kliknite na gumb Pretraga

Ukoliko imate barem jedan od unosa koji zadovoljava postavljene kriterije dobit ćete rezultat sličan
ovome prikazanom na slici ispod:

69
Slika 3-21 Rezultat parametarskog upita dobiven preko obrasca

Uobičajeno ćemo parametarske upite označavati pupImeUpita Æ preimenujte upit upGradTel


koristeći ovu konvenciju. Nakon preimenovanja upita i ponovnog pokretanja istog obrasca za
pretragu nakon klika na gumb Pretraga pojavit će vam se poruka o grešci.

Slika 3-22 Poruka o pogrešci zbog referenciranja na nepostojeći objekt

Kako ste preimenovali upit upGradTel u pupGradTel taj kontrolni gumb upućuje na nepostojeći
objekt, te se iz tog razloga javlja greška. Problem je jednostavno riješiti preko svojstava kontrolnog gumba
Pretraga. Otvorite obrazac obPretraga u razvojnom modu i načinite brzi dvoklik na gumb
Pretraga. U dijalogu svojstava koji vam se otvori pod karticom Event nalazi se događaj On Click kojem
je pridijeljena procedura ([Event procedure]). Kliknite u to polje i pored će vam se
pokazati gumb s tri točkice.
Klikom na njega otvara se Visual Basic Editor i procedura koja se izvršava klikom na gumb
Pretraga. Nema potrebe da se previše zamarate s kodom, veće će vam na prvi pogled biti
razumljivo što treba promijeniti. Sigurno uočavate liniju u kojoj stoji:

stDocName = "upGradTel"

70
Jedino što trebate napraviti je promijeniti ime upita u novo ime pupGradTel Æ naziv opet ostaje
pod navodnicima. Spremite načinjene promijene i zatvorite Visual Basic Editor. Spremite i
promijene u obrascu. Nakon ponovnog pokretanja obrazac će opet dobro funkcionirati. Zatvorite
bazu.

Slika 3-23 Pridijeljena procedura kliku na kontrolno gume

Problem možete riješiti i na drugi način, bez mijenjanja procedure Æ dovoljno je


izbrisati postojeći gumb i čarobnjakom kreirati novi koje će upućivati na upit s
novim imenom

Vratimo se našem problemu s bankom. Sada imamo dovoljno znanja da kreiramo parametarski upit
koji će davati pregled podataka o korisniku i računu na osnovu unesenog broja računa.

[1] Otvorite novi upit u razvojnom modu


[2] Za njegovo kreiranje koristite tablice tabKorisnici i tabRacuni
[3] Uzmite sva polja iz tablice tabKorisnici, a iz tablice tabRacuni izostavite id_korisnika
[4] Pod Criteria polja broj_racuna upišite (stvaramo parametarski kriterij):

[Unesite broj računa:]

[5] Spremite upit pod nazivom pupPoBrojuRacuna

71
Slijedi kreiranje obrasca za unos transakcija na račun. Ponovno ćemo kreirati dva odvojena obrasca
od kojih ćemo postupkom kao i za prvi obrazac kreirati jedan obrazac s podobrascem. Cilj je dobiti
glavni obrazac koji će prikazivati informacije o korisniku računa br. ###### i same informacije o
tom računu (datum otvaranja, saldo, vrsta računa…), a na podobrascu trebamo biti u stanju unositi
nove transakcije. Svaka transakcija, bilo uplata ili isplata se posebno potvrđuje pripadnim
kontrolnim gumbom. Automatski svaka nova transakcija treba mijenjati stanje salda.

[6] Kreirajte novi obrazac iz parametarskog upita pupPoBrojuRacuna Æ bilo ručno ili
čarobnjakom
[7] Spremite obrazac pod nazivom obUnosTransakcija
[8] Kreirajte novi obrazac upotrebom svih polja iz tablice transakcija Æ koristite čarobnjaka,
a za tip obrasca izaberite Columnar
[9] Spremite obrazac pod nazivom podTransakcije
[10] Spojite ta dva obrasca u jedan na način da vam glavni obrazac bude
obUnosTransakcija, a podobrazac podTransakcije
[11] Povežite ih po polju broj_racuna
[12] Na podobrascu promijenite svojstvo Data Entry pod karticom Data iz No u Yes
[13] Promijenite neželjene oznake tekstualnih okvira ili kombiniranih okvira

U ovom dijelu obrazac bi vam trebao izgledati približno kao na slici ispod:

Kreirano alatom
Rectangle

Slika 3-24 Izgled obrasca obNovaTransakcija nakon nekoliko zahvata

Potrebno je još kreirati akcijski gumb kojim će se izvršiti transakcija na račun. Ovaj put macro
nećemo kreirati prije samog gumba već za vrijeme pozivanjem Macro Buildera.

72
[14] Ucrtajte akcijski gumb na željenom mjestu na glavnom obrascu
[15] Isključite čarobnjaka klikom na gumb Cancel
[16] Preko dijaloga Properties promijenite natpis (Caption) na gumbu u Potvrdi
transakciju
[17] Prebacite se na karticu Event i pod događajem On Click kliknite na gumb Build
button Æ u otvorenom dijalogu izaberite Macro Builder

Build button

Slika 3-25 Otvaranje Macro editora preko dijaloga svojstava akcijskog gumba

Ovim načinom prvo smo odgovorili na naše drugo pitanje Æ Kada će se dogoditi akcija vezana uz
okidač Æ na klik miša. Što će se tada dogoditi Æ naše prvo pitanje, ima sljedeći odgovor Æ
trenutno stanje salda će se uvećati za iznos uplate ili smanjiti za iznos isplate. To je matematički
jednostavno opisati:

saldo = saldo + uplata – isplata

Nakon promijene vrijednosti salda uzrokovane transakcijom, treba se ispisati poruka o uspješno
izvedenoj transakciji i potom zaustaviti izvođenje macroa. Već vam je sve poznato, tako da nakon
otvaranja Macro editora samostalno možete kreirati pripadni macro.

[18] Kreirajte macro koji će izvršavati prethodno opisanu akciju


[19] Spremite macro pod imenom macPotvrdaTransakcije
[20] Spremite promijene na obrascu
[21] Probajte unijeti jednu transakciju za broj računa koji sigurno postoji

Kreiranjem macroa kao i u prvom slučaju (SetValue; MsgBox; StopMacro) ovdje


će stvarati probleme, jer postoji mogućnost da se jedna te ista transakcija potvrdi
više puta Æ stvaramo krivi saldo. Mogućnost višestruke potvrde treba na neki
način eliminirati!

[22] Ponovite jednu te istu transakciju i uočite spomenutu pogrešku

73
Problem na koji smo naišli možemo riješiti uvođenjem uvjeta izvođenja pojedinih naredbi koje
sačinjavaju macro. Za to nam je potrebno na glavnom obrascu iznad kontrolnog gumba ucrtati
check box (kontrolnu kućicu) s pripadnim alatom . Njegova vrijednost je po defaultu
(predefinirano) postavljena na NO (neistinu) – nema kvačice. Kako to iskoristiti za rješavanje našeg
problema? Pa odgovor ide ovako nekako – kada je ta kontrolna kućica potvrđena ispisat će se
poruka Ova transakcija je već izvršena! i prestat će izvođenje macroa. U suprotom izvršit će se
naredbe kao i u prethodnom slučaju, s tim što ćemo dodati naredbu koja postavlja vrijednost
kontrolne kućice u istinu (YES) – stavlja kvačicu.

Transakcija izvršena:

NE
DA

SetValue
MsgBox (saldo = saldo +uplata
(Transakcija je vec - isplata)
izvršena!) MsgBox
StopMacro (Transakcija izvršena)
SetValue
(Yes za
kontrolnu kucicu)

Slika 3-26 Slijed izvođenja macroa macPotvrdaTransakcije

[23] Na obrascu obNovaTransakcija ucrtajte jedan check box


[24] Kao oznaku mu postavite Transakcija izvršena:
[25] Pod svojstvima u kartici Other u Name upišite Trans_izvrsena
[26] Zatvorite dijalog svojstava check boxa
[27] Ponovno otvorite Macro editor preko svojstava kontrolnog gumba Potvrdi transakciju
[28] Uključite stupac Conditions preko izbornika View

Slika 3-27 uključivanje stupca uvjeta u Macro editoru

[29] Iznad prve naredbe SetValue umetnite dva retka kao što bi ih umetnuli u Excel tablicu
[30] Umjesto postojeće naredbe StopMacro koja je trenutno posljednja postavite SetValue
[31] Kao argument Item postavite pozivom Expression Buidera check box Trans_izvrsena

74
Slika 3-28 Postavljanje check boxa Trans_izvrsena za argument naredbe SetValue

[32] Kako check box može poprimiti samo dvije vrijednosti Yes i No, to ćemo u Expression
upisati Yes Æ predefinirano je bilo na No
[33] U prvi prazni redak pod Condition upišite

[Forms]![obNovaTransakcija]![Trans_izvrsena]

[34] Pod Action izaberite MsgBox kojem ćete kao poruku upisati Ova transakcija je već
izvršena!, a kao tip staviti Warning!
[35] U retku ispod (drugi dodani) pod Condition stavite … Æ što podrazumijeva prenošenje
istog uvjeta kao za naredbu prije
[36] Kao naredbu izaberite StopMacro

Slika 3-29 macro macPotvrdaTransakcije

75
[37] Spremite promjene na macrou
[38] Isključite navigacijske gumbe i trake za pomicanje na glavnom obrascu
[39] Spremite načinjene promjene
[40] Testirajte obrazac Æ za svakog korisnika napravite nekoliko transakcija

Bilo bi zgodno na obrascu za unos podataka i otvranje računa kreirati akcijski gumb koje bi
odmah otvaralo obrazac za unos transakcija. Kreiranje tog akcijskog gumba ćemo "prepustiti"
čarobnjaku.

[41] Otvorite obrazac obPodaci u razvojnom načinu rada


[42] Ucrtajte kontrolni gumb na željenu poziciju
[43] Slijedite upute čarobnjaka prema donjim slikama

Biramo akciju
koju Biramo
dodjeljujemo obrazac kojeg
gumbu Æ želimo otvarati
otvori obrazac gumbom

Određujemo
način na koji
će se otvarati
obrazac 4
Biramo izgled
3 gumba Æ
postojeće slika
ili korisnički
tekst

76
[44] U posljednjem koraku će vas čarobnjak upitati da dodijelite ime kontrolnom gumbu Æ
Com_3
[45] Spremite načinjene promijene i testirajte obrazac

Dalje nas zanima mogućnost pregleda svih korisnika i njihovih računa – sjetite se da svaki korisnik
može imati veći broj računa; potom pregled stanja računa po broju računa uz pregled prometa za taj
račun sortiran po datumima u silaznom nizu. U tom smislu kreirat ćemo nekoliko upita.

[28] Kreirajte upit koji će davati pregled svih korisnika(identifikacijski broj, ime, prezime,
naziv, mjesto, adresa i poštanski broj) i njihovih računa (sa saldom za svaki račun,
datumom otvaranja, vrstom računa i brojem računa)
[29] Načinite sortiranje korisnika po identifikacijskom broju u uzlaznom nizu (Ascending)
[30] Spremite upit pod nazivom upSviRacuni
[31] Kreirajte upit koji će prikazivati sve transakcije za neki račun sortirane po datumima u
silaznom nizu
[32] Spremite taj upi pod nazivom upSveTransakcije

Rezultati oba upita treba da daju samo pregled korisnika i njihovih računa, tj.
transakcija bez mogućnosti utjecanja na njih Æ promijenite tip dobivenih zapisa iz
Dynaset u Snapshot. (vidi uvod u rad s MS Accessom str. 33)

Ponavljamo već poznatu priču Æ kreirat ćemo "ručno" dva obrasca koja ćemo potom povezati u
jedan obrazac s podobrascem. Za prvi obrazac ćemo upotrijebiti upit upSviRacuni, a za drugi
upSveTransakcije. Prvi obrazac nazovite obPregled, a drugi podSveTransakcije. Iz samih naziva
vam je jasno koji obrazac će imati ulogu glavnog obrasca, a koji podobrasca. Spojite obrasce u
jedan obrazac. Glavnom obrascu i podobrascu preko svojstava tip podataka promijenite iz Dynaset
u Snapshot.

Slika 3-30 Promijena tipa zapisa iz dinamičkog u nepromijenjivi (Snapshot)

77
Red je da malo "ušminkamo" dobiveni obrazac. Preko izbornika View uključite prikaz zaglavlja i
podnožja obrasca Æ Form Header / Footer.

Slika 3-31 uključivanje zaglavlja i podnožja obrascu

[34] Proširite zaglavlje glavnog obrasca


[35] Napravite desni klik mišem na površini tog zaglavlja i iz skočnog izbornika izaberite
Properties
[36] U kartici Format pod Back Color izaberite boju pozadine koju želite
[37] Alatom za oznake ucrtajte oznaku po sredini zaglavlja i napišite tekst PREGLED
TRANSAKCIJA NA RAČUNIMA
[38] Tekst i pozadinu oznake oblikujte po želji Æ oblikovanje ovaj put izvršite preko alatne
trake oblikovanja (oznake oblikujete slično tekst okvirima u Wordu)
[39] Desnim klikom na površinu područja Detail dobivate skočni izbornik iz kojeg ponovno
izabirete Properties Æ promijenite boju pozadine tog područja

Mijenjamo
boju
pozadine

78
[40] Ponovite isto i s podobrascem.
[41] Oznaku podobrasca povećajte i oblikujte po želji, a tekst podSveTransakcije
promijenite u Pregled prometa na računu br.
[42] Oznaku tekst okvira broj_racuna izbrišite Æ jednom kliknete na nju, pa "poznata" tipka
DELETE dolazi u akciju
[43] Pomaknite taj okvir u ravninu s oznakom podobrasca i oblikujte ga potpuno na isti način
[44] Potpuno smanjite podnožje obrasca
[45] Spremite promjene

Slika 3-32 izgled gotovog obrasca obPregled

[46] Promijenite izgled i ostalih obrazaca

79
3.3 Izvješća (Reports)

Kao što smo rekli na početku naše priče pri stvaranju baze podataka treba odrediti izlazne
informacije koje želimo dobiti. Ti izlazi se prikazuju na zaslonu monitora ili se ispisuju na papir.
Prikaz na zaslonu je najčešće u obliku forme kao što smo i vidjeli u našem zadnjem primjeru.
Forme se prema potrebi mogu ispisivati, ali najbolji način za prikaz izlaznih informacija je
primjenom izvješća – eng. Reports. Ovo pogotovo vrijedi u slučajevima kada informacije
pokrivaju više zapisa i kada je potreban nekakav sažetak. (ECDL)
Izvješća u biti predstavljaju oblik iznošenja informacija korisniku na njemu najprihvatljiviji i
najrazumljiviji način, koji je kao takav pogodan za ispis. U velikom broju slučajeva izvješća su
najvažniji dio neke aplikacije.
Sam postupak izrade izvješća je vrlo sličan izradi obrazaca. Iz tog razloga se nećemo previše
zadržavati na detaljima već ćemo kroz par konkretnih primjera pokazati osnovne radnje pri njihovoj
izradi.
Napravit ćemo izvješće koje nam daje ispis svih transakcija za nekog korisnika za sve njegove
račune, kao i prikaz salda za svaki račun. Prvo ćemo kreirati upit koji će izvlačiti željene
informacije.

[1] Kreirajte upit iz tablica tabKorisnici, tabRacuni i tabTransakcije


[2] U upit redom stavite sva polja iz tih tablica
[3] Pod kriterij polja id_korisnika iz tablice tabKorisnici upišite
tabRacuni.id_korisnika (kako bi izvukli sve račune koji pripadaju jednom
korisniku)
[4] Pod kriterij polja broj_racuna upišite tabTransakcije.broj_racuna (kako bi
izvukli transakcije na isti račun)
[5] Spremite upit pod imenom upSviPodaci

Izvješća ćemo izrađivati primjenom čarobnjaka i eventualno dobiveno rješenje modificirati u


razvojnom modu.

[6] Prebacite se u traci objekata na izvješća – Reports


[7] Napravite brzi dvoklik na Create report by using wizard
[8] U prvom koraku izaberite prethodno stvoreni upit upSviPodaci
[9] Odaberite sva polja osim polja id_korisnika iz tabRacuni i broj_racuna iz
tabTransakcije
[10] U drugom koraku susrećete se s dijaloškim prozorem u kojem se može mijenjati način
prikaza vaših podataka Æ u desnom okviru imate pregled općeg izgleda budućeg
izvješća Æ ostavite ponuđenu opciju
[11] Treći korak nudi dodatnu mogućnost grupiranja podataka po jednom ili više polja Æ ako
uključite dodatno grupiranje odmah ćete vidjeti promjenu na pregledu općeg izgleda
obrasca u desnom okviru Æ dodatno grupiranje nećemo vršiti Æ pređite na sljedeći
korak bez ikakvih zahvata u ovom koraku Æ Next

80
1. korak

2. korak

3. korak

Slika 3-33 Prva tri koraka izrade izvješća primjenom čarobnjaka

[12] Sljedeći dijalog nudi mogućnost sortiranja podataka po jednom ili više polja u uzlaznom
ili silaznom nizu Æ izaberite sortiranje po id_transakcije u uzlaznom nizu (Ascending)
Æ ako bi željeli vršiti sortiranje u silaznom nizu dovoljno je nakon izbora polja kliknuti
na gumb Ascending i ono će se promijeniti u Descending

81
Slika 3-34 određivanje sortiranja u izvješću po željenim poljima

[13] Dolazimo do klasičnog dijaloga za izbor izgleda izvješća, tj. način rasporeda elemenata
na stranici izvješća Æ izaberite Align Left 2 (inače kada radite izvješća u ovom koraku
isprobate sve izglede i na osnovu pregleda u lijevom okviru zaključite koji izgled najviše
odgovara prikazu vaših podataka)

Slika 3-35 izbor izgleda izvješća

82
Pod orijentacijom određujemo da li će stranica pri ispisu biti uspravna (Portrait) ili
položena (Landscape).
Opcija Adjust the field so all fields fit on a page osigurava da se sva polja na izvješću
stanu u širinu jedne stranice.

[14] Sljedeći korak Report Wizarda omogućava odabir stilova za budući izvještaj Æ nema
druge nego po pricipu probajte, pa izaberite što vam se svidi
[15] Završni korak čarobnjaka vezan je samo uz dodjeljivanje imena kreiranom izvješću
(radio buttons koja su vam na raspolaganju omogućuju pregled izgleda izvješća Preview
the report ili njegovo modificiranje u razvojnom modu Modify the report's design) Æ
izvješću dodijelite ime izPregledRačunaTransakcija

Slika 3-36 Izgled dijela izvješća dobivenog čarobnjakom za izradu izvješća

Očigledno niste zadovoljni dobivenim rješenjem, pa ćemo nekoliko zahvata trebati napraviti
"ručno" u razvojnom modu.

[16] Otvorite obrazac u razvojnom modu


[17] Izbrišite tekstualne okvire JMBG i MBR
[18] Promijenite veličinu slova svim tekstualnim okvirima i njihovim oznakama na 12pt
[19] Promijenite boju pozadine oznakama i tekst okvirima preko alatne trake oblikovanja

83
Veći broj elemenata na izvješću možete istovremeno selektirati držeći pritisnutu tipku
SHIFT pri njihovom označavanju.
Elementi se pomjeraju kao i na obrascima, a također na isti način im mijenjamo i
dimenzije.

[20] Promijenite boju slova svim oznakama i tekst okvirima po izboru


[21] Promijenite tekstove u oznakama koji nisu korisnički prilagođeni (npr.
id_vrsta_korisnika: u vrsta korisnika:

Nakon načinjenih promjena izvješće bi vam trebalo imati približno sljedeći izgled:

Slika 3-37 izgled gotovog izvješća

[22] Napravite izvješće koje će prikazivati podatke o korisnicima i njihovim računima Æ


koristite tablice tabKorisnici i tabRacuni
[23] Kao stil izaberite Bold
[24] Dodijelite mu ime izKorisniciRačuni

Kada su kreirani svi objekti baze (tablice, upiti, obrasci, izvješća,…) nužno je kreirati i glavni
izbornik aplikacije, koji se u Accessu često naziva razvodni obrazac ili razvodna ploča

84
(Switchboard). Na ovaj način korisnicima baze osiguravamo jednostavnije korištenje i snalaženje u
aplikaciji.

3.4 Izrada glavnog izbornika aplikacije

Kreiranje glavnog izbornika aplikacije uglavnom se vrši primjenom čarobnjaka koji se naziva
Switchboard Manager. Do njega dolazite preko izornika Tools Æ Database Utilities Æ
Switchboard Manager.

Slika 3-38 uključivanje čarobnjaka za izradu glavnog izbornika aplikacije

Otvorit će vam se sljedeći dijalog:

Slika 3-39 Izgled upravitelja glavnog izbornika

85
Close Æ zatvara dijaloški okvir
New… Æ za kreiranje nove stranice ili obrasca
Edit Æ uređivanje selektirane stranice
Delete Æ brisanje stranice
Make Default Æ proglašavanje stranice osnovnom – koja se prva pokreće

[1] Kliknite na New i u dijalogu koji vam se pojavi upišite ime Obrasci za novu stranicu
[2] Ponovite postupak, samo sada upišite Izvješća

Imamo tri stranice koje su za sada potpuno prazne Æ potrebno ih je urediti.

[3] Kliknite na Main Switchboard (Default) Æ Edit…


[4] Budući da se ta stranica prva pokreće dodat ćemo na nju dvije stavke Æ jednu koja će
služiti za otvaranje stranice za pristup obrascima, a drugu za otvaranje stranice kojom
pristupamo izvješćima Æ kliknite na gumb New u otvorenom dijalogu

Slika 3-40 Kreiranje nove stavke na polaznoj stranici glavnoj izbornika

[5] Ponovite postupak za drugu stranicu Izvješća


[6] Svaki glavni izbornik podrazumijeva da ima i gumb za izlaz iz aplikacije Æ kliknite na
New Æ kao tekst upišite Izlaz iz aplikacije, a pod naredbom odaberite Exit Application

Slika 3-41 kreiranje gumba za izlaz iz aplikacije na glavnom izborniku

86
[7] S Close se vratite na prethodni dijaloški okvir
[8] Označite stranicu Obrasci Æ Edit Æ New
[9] Pod Text upišite Unos novih korisnika, a pod Command izabeite Open Form in Add
mode Æ pod Form izaberite obrazac obPodaci
[10] Ponovite to isto samo pod tekstom upišite Otvaranje novih računa; Command je ovaj
put Open Form in Edit mode i izaberite opet istu formu

Slika 3-42 kreiranje gumba za otvaranje obrasca za unos novog korisnika i otvaranje novih računa

[11] Na isti način kreirajte gumb koje će otvarati obrazac obPregled za pregledavanje svih
transakcija po određenom računu

[12] Još je potrebno kreirati gumb koje će nas vraćati na glavnu stranicu:

87
[13] Vratite se na polazni dijalog klikom na gumb Close
[14] Kliknite na stranicu Izvješća Æ Edit Æ New

[15] Ponovno New kako bi kreirali gumb za ispis podataka o korisnicima i njihovim
računima Æ otvorili izvješće izKorisniciRačuni

[16] Opet kreirajte gumb za povratak kao i u prethodnom slučaju


[17] Zatvorite Switchboard Manager

Cijeli glavni izbornik možete napraviti i bez primjene SwitchBoard Managera kao i
bilo koji drugi izbornik kojeg ste do sada radili Æ najbolje "ručno"

Prebacite se pod Forms i uočite da ste dobili novi obrazac naziva Switchboard Æ riječ je upravo o
glavnom izborniku aplikacije kojeg ste načinili Switchboard Managerom. Njega sada možete
uređivati po želji kao i bilo koji drugi obrazac.
Dobro, glavni izbornik aplikacije smo izradili, ali to još uvijek nije dovoljno sve dok ne definiramo
tzv. inicijalne postavke kojima ćemo postaviti da upravo taj izbornik bude prvi kojeg će vidjeti
krajnji korisnik pri pokretanju aplikacije. Također je korisno da sam glavni prozor baze bude
skriven kako korisnik ne bi slučajno napravio promijene koje bi "srušile" aplikaciju ili dovele do
neželjenog funkcioniranja nekog njenog dijela. Pa krenimo i na taj korak.

[18] Izbornik Tools Æ Startup…


[19] U dijalogu za određivanje inicijalnih uvjeta pokretanja aplikacije pod Application Title:
upišite naziv aplikacije koji će se pojavljivati u gornjem lijevom kutu naslovne trake
Accessa Æ Banka – uplate / isplate

88
[20] Pod Form / Page izaberite naš glavni izbornik Switchboard (osiguravamo da se on prvi
pojavljuje)
[21] Isključite prikaz prozora baze Æ Display Database Window
[22] Onemogučite korisnika da vrši promijene na alatnim trakama i menijima Æ isključite
opciju Allow Toolbar / Menu Changes
[23] Isklučite opciju Use Access Special Keys
[24] Sve ostale postavke ostavite nepromijenjene
[25] Potvrdite promijene Æ OK

Slika 3-43 Izgled dijaloga za promijenu inicijalnih postavki aplikacije

Objasnit ćemo i ostale važnije opcije iz ovog dijaloga:


Menu bar Æ izbor dodatne trake s padajućim izbornicima koja bi se odmah pojavljivala pri
otvaranju aplikacije (potrebno je posebno kreirati)
Allow Full Menus zajedno s Allow Default Shortcut Menus Æ isključivanjem ovih opcija
onemogućavate prikaz svih izbornika
Allow Built – in Toolbars Æ onemogućavanjem ove opcije postići ćete da Access samo prikazuje
alatne trake koje ste vi kreirali, dok će sve ugrađene alatne trake biti isključene
Display Status Bar Æ isključivanje / uključivanje statusne trake
Application Icon Æ izbor slike ili ikone koja će se prikazivati u gornjem lijevom kutu naslovne
trake (trebate znati gdje je slika / ikona pohranjena, tj. putanju do nje)

Slika 3-44 Izgled glavnog izbornika aplikacije

89

You might also like