Access – Dinamičko formatiranje izveštaja

Mogućnost sortiranja i grupisanja podataka čini Access‑ove izveštaje veoma korisnim. U poslovnom okruženju zadatak programera je da isti skup podataka prilagodi različitim korisnicima i njihovim potrebama – neki žele da vide izveštaj prodaje po regionima, neki po proizvodima, dok treći iste podatke posmatraju po zaposlenima. U ovom slučaju se čini da je najlakše da se napravi onoliko izveštaja koliko zahteva postoji. No, kako te izveštaje kasnije održavati i prilagođavati – ako se nešto promeni u strukturi baze, programer mora da promeni sve izveštaje.

Slika 1. Upit kojim se grupišu podaci različitih tabela
Slika 1. Upit kojim se grupišu podaci različitih tabela

Takva loša praksa se može pronaći u najvećem broju baza. Programerima je lakše da brzo urade posao tako što kopiraju postojeći objekat – upit, formu ili izveštaj, načine sitne izmene i sačuvaju objekat pod novim nazivom. U opisanom slučaju govorimo o tri izveštaja, a ako se zahteva različito sortiranje, onda o šest različitih izveštaja. Bolje reći: govorimo o jednom izveštaju gde se podaci prikazuju na šest različita načina.

U narednom primeru pokazaćemo kako se dinamički može formatirati jedan izveštaj tako da prikazuje podatke na različite načine i to upotrebom baze primera Northwind.

Slika 2. Jedan od mogućih načina prikaza podataka
Slika 2. Jedan od mogućih načina prikaza podataka

Formirajte upit kao na prvoj slici. On grupiše podatke iz šest tabela, koje se odnose na podatke prodaje po proizvodima, računima i zaposlenima. Od ovog upita se ili kreira drugi upit kojim se grupišu i sabiraju podaci, ili se on koristi kao izvor podataka za SQL strukturu koja će se programski formirati. U prvom slučaju, upit je prikazan na slici 2. Kada koristite ovakav pristup dinamičkog formatiranja izveštaja, napravićete onoliko upita koliko različitih načina prikazivanja želite da dobijete. Konkretni upit sumira podatke prodaje po nazivu proizvoda i zemlji isporuke.

Primetite da se koristi alias, pseudonaziv polja, Grupa:. Niz karaktera iza koje sledi dvotačka je naziv polja upita koji se prikazuje bez obzira na stvarni naziv polja. Alias naziv se može koristiti kod prikazivanja polja tabele pod drugim nazivom, ali se mora koristiti kod kalkulacija. Drugi upit možete, ali i ne morate sačuvati – ono što vam je potrebno je njegov SQL iskaz kojeg ćete kasnije programski generisati i modifikovati, a najlakši i najbrži način da dođete do ispravnog SQL iskaza je upravo kreiranjem upita. Pređite u njegov SQL pogled i iskopirajte iskaz (recimo) u Notepad.

Formirajte i izveštaj baziran na drugom upitu. Možete koristiti čarobnjaka za to – u tom slučaju na koraku za izbor grupisanja podataka iskoristite polje upita Grupa. Ako sami formirate izveštaj, na oknu Sorting and Grouping dodajte prvo polje Grupa (Group Header: Yes) i zatim ProductName. Izveštaj na ovom koraku možete prilagoditi govornom području (slika 3).

Slika 3. Formatiran izveštaj o prodaji
Slika 3. Formatiran izveštaj o prodaji

Do sada je postupak manje‑više potpuno isti kao i kod formiranje statičkog izveštaja. Sada ćete napraviti malu formu koje će korisniku ponuditi različite načine formatiranja izveštaja, a koja će se učitavati zajedno sa izveštajem. Predloženi oblik vidite takođe na slici 3, u uglu. Upotrebljena kontrola ListBox ima svojstvo RowSourceType postavljeno na Value List, gde je upisano (zajedno s navodnicima): „Zemlja“; „Kategorija“; „Zaposleni“; „{bez grupisanja}“. Isključite prikazivanje svih nepotrebnih kontrola – selektora zapisa, tastera za navigaciju, oba klizača, razdeonih linija… Postavite i osobine PopUp na Yes (objekat je uvek prikazan iznad ostalih objekata) i Border na Thin (veličina objekta ne može da se menja).

Trik za dinamičko formatiranje izveštaja se sastoji u tome da se pomoćnim objektom (formom) odabira način grupisanja izveštaja, ona zatim formira SQL iskaz na kojeg se izveštaj bazira, to smesti u javnu promenljivu i zatim zatvori i ponovo otvori isti izveštaj. Kako izveštaj grupiše podatke na polju pod alias nazivom Grupa, u SQL iskazu možete koristiti različita polja tabele za grupisanje podataka bez potrebe da menjate sam izveštaj.

Kontroli otvaranja i zatvaranje forme morate pridružiti i nešto logike – recimo, da se ona otvori po prvom otvaranju izveštaja, ali da se ne zatvori kada korisnik odabere drugi način prikaza podataka i, konačno, da se ona takođe zatvori po konačnom zatvaranju izveštaja.

Na slici 4 je dat program koji pokreće dinamički formatiran izveštaj. Prva sekcija je program izveštaja, druga sekcija je program forme. Ovaj savet može poslužiti kao osnova za dalje unapređenje programiranog izveštaja – neke od ideja su izmena naziva izveštaja po odabiru grupe, izmena načina sortiranja, dodavanje/uklanjanje grupa, čuvanje postavki prikaza tako da se po ponovnom učitavanju prikaže prethodno grupisanje/sortiranje…

Slika 4: VBA program za dinamičko formatiranje izveštaja

‑‑‑1‑‑‑

Public blnCloseForm As Boolean

Private Sub Report_Close()

If blnCloseForm Then

DoCmd.Close acForm,_

“frmSortOptions”

End If

End Sub

Private Sub Report_Open_

(Cancel As Integer)

If CurrentProject._

AllForms(“frmSortOptions”)._

IsLoaded = False Then

DoCmd.OpenForm _

“frmSortOptions”, acNormal,_

OpenArgs:=Me.Name

Else

Me.RecordSource = _

Forms(“frmSortOptions”)._

strNoviRecordSource

End If

blnCloseForm = True

End Sub

‑‑‑2‑‑‑

Public strNoviRecordSource _As String

Private Sub cmdPrikazi_Click()

Dim strSQL As String

If Len(Nz(lstGroup,””))>0 Then

strSQL=”SELECT ProductName,_

Sum(Quantity) AS Kol, ” & _

“Sum([Quantity]*[UnitPrice])_

AS Iznos, ” & Me.lstGroup &_

” AS Grupa ” & _

“FROM qrySales GROUP BY _

qrySales.ProductName, ” & _

Me.lstGroup

Else

strSQL = vbNullString

End If

If Len(strSQL) > 0 And _

Len(Me.OpenArgs) > 0 Then

Reports(Me.OpenArgs)._

blnCloseForm = False

strNoviRecordSource = strSQL

Application.Echo False

DoCmd.Close acReport,_

Me.OpenArgs

DoCmd.OpenReport _

Me.OpenArgs, acViewPreview

Application.Echo True

End If

End Sub

Slika 1. Upit kojim se grupišu podaci različitih tabela

Slika 2. Jedan od mogućih načina prikaza podataka

Slika 3. Formatiran izveštaj o prodaji

Ladislav Struharik

(Objavljeno u časopisu PC#198)

Brzo izdvajanje podataka – Access

Interfejs novijih verzija Access‑a okrenut je prema korisnicima skromnijeg iskustva. Loša strana takvog pristupa dolazi u kombinaciji sa urođenom radoznalošću – ako je nešto otvoreno, ljudi su skloni čačkanjem da pokvare stvar. Dobra strana (za korisnika) je da mu ređe treba programer za naizgled banalne stvari. Jedna od njih je brz način dolaska do odgovora – korisnik bi trebalo lako da sastavi upit kojim će izdvojiti, grupisati ili sumirati podatke.

AccessUpiti koje će pri tome koristiti spadaju u kategoriju esencijalnih alatki svake baze podataka. Oni pasivno sakupljaju i obrađuju podatke, što znači da nemaju mogućnost izmene ili brisanja podataka. Prepoznaju se po tome što odgovarajuća SQL komanda započinje iskazom SELECT. Klasičan upit će prikazati sve podatke koji postoje u tabeli, ako takav upit nije od koristi sve dok se u njega ne dodaju uslovi, kriterijumi, veze i druge SQL funkcije. Za najjednostavnije stvari upit čak i nije potreban: dovoljno je otvoriti tabelu i upotrebom alatki za sortiranje i filtriranje doći do traženih podataka.

Access‑ov čarobnjak nudi lak način za kreiranje dva napredna upita, jednog za pronalaženje dupliranih unosa i drugi za pronalazak neuparenih zapisa (unmached). Neuparen zapis je onaj koji postoji u jednoj tabeli, a ne postoji u drugoj. Recimo da postoji tabela studenata i tabela ocena određenog predmeta – ovakav upit može da prikaže listu studenata koji nisu izašli na ispit. Važna napomena za ovaj upit se odnosi na polja koja može da prikaže. Naime, u listu polja ne možete da uključite polja iz prve tabele (lista svih studenata) zato što se nijedan zapis iz te tabele ne prikazuje, prikazuju se samo zapisi iz druge tabele (ocene sa ispita).

Uvođenjem dodatnih kriterijuma filtriranja podataka korisnik se upoznaje sa logičkim operatorima AND (logičko „i“) i OR (logičko „ili“). Njih nije teško shvatiti sve do momenta kada se ukaže potreba za njihovim višestrukim kombinovanjem kada je važno upoznati prioritete i koristiti zagrade; u suprotnom upit neće prijaviti grešku, ali će vratiti podatke koje niste želeli. Rekli biste da je ponekad bolje nemati informaciju nego imati pogrešnu ili delimičnu tačnu (najgori slučaj).

Forme upita

‘1a

SELECT Okrug, Grad,

Count(Prezime) As BStudent

FROM tblStudenti

GROUP BY Okrug, Grad

‘1b

HAVING Okrug=”Severnobanatski”

AND Grad=”Kikinda”

‘1c

HAVING Okrug=”Severnobanatski”

AND Grad=”Kikinda” OR Grad=”Horgoš”

‘1d

HAVING Okrug=”Severnobanatski”

AND (Grad=”Kikinda” OR Grad=”Horgoš”)

Slika 2: Primer kombinovanja

AND i OR upita

Logički operator AND vraća vrednost tačno samo onda kada su svi uslovi ispunjeni („i jedan i drugi“, odnosno „svi“). Operator OR samo onda kada je bilo koji od uslova ispunjen („ili jedan ili drugi“, odnosno „bilo koji“). Pogledajmo na tri primera kako se različitom upotrebom i kombinacijom operatora dolazi do različitih rezultata. Upitom 1a ćemo prebrojati studente po gradovima i okruzima. Ove podatke možete dodatno filtrirati dopisivanjem iskaza 1b Prikazuje se ukupan broj studenata koji dolaze iz ovog okruga i ovog grada. Upit ćemo proširiti tako da ćemo u listu prikazati i one koji dolaze iz drugog mesta istog okruga (1c).

SQL upit koji Access generiše

SELECT ImePrezime, Okrug, Mesto

FROM tblStudenti

WHERE (((tblStudenti.Okrug)=”severnobanatski”)

AND ((tblStudenti.Mesto)=”Horgoš” Or (tblStudenti.Mesto)=”Kikinda”))

OR (((tblStudenti.Okrug)=”šumadijski”)

AND ((tblStudenti.Mesto)=”Aranđelovac” Or (tblStudenti.Mesto)=”Topola”));

Ovakav upit krije zamku i najčešće vraća polu(ne)tačne podatke. Zapravo, on radi baš ono što smo napisali – prikazuje broj studenata iz severnobatskog okruga koji dolaze iz Kikinde, ali i studente koji dolaze iz Horgoša bez obzira na to kom okrugu mesto pripada. Sve je u redu dok postoji samo jedno mesto pod tim nazivom, međutim poznati su primeri više mesta sa istim nazivom (u SAD postoji pet Beograda). Nalik matematičkim operacijama koje se nalaze u okviru zagrada i imaju prednost u računanju, deo upita unutar zagrada takođe ima zadatak da grupiše uslove. Ispravno napisan uslov dat je na slici 1d.

Operator OR se primenjuje nad zapisima dok se operator AND primenjuje nad poljima. Iz gornjeg primera vidite da smo operatorom OR zadali dva uslova nad poljem Grad. Operator AND se može samo jednom primeniti nad jednim poljem jer se u suprotnom nikada ne bi dobio nijedan rezultat, recimo da iskaz „i Beograd i Kikinda“ nema mnogo smisla, ali kombinovanje operatora AND nad različitim poljima i te kako ima smisla („i severnobatski i Kikinda“).

Grafički interfejs olakšava dizajniranje upita kojim se opisana zamka može izbeći. Na slici 2 dajemo primer višestrukog kombinovanja AND i OR logičkih operatora – oni se pišu ispod polja počev od reda Criteria pa ispod. Ako ste, ipak, navikli da pišete SQL, upit koji Access generiše dat je na slici 3.

Uređuje Vladislav Struharik

(Objavljeno u PC#190)

Višestruke liste za odabir podataka – Access

Verovatno ste se već susretali sa višestrukim listama podataka, gde odabirom jednog podatka dobijete popunjenu drugu listu, filtriranu prema odabranom podatku. Na primer, birali biste državu, zatim grad i na kraju ulicu – pojednostavljen izbor postoji na GPS uređajima. Kroz praktičan primer pokazaćemo kako da brzo dođete do takve forme.

Slika1U primeru ćemo kreirati tri tabele i tri liste podataka: države, gradovi i ulice. Važno je da svaka grupa podataka na neki način pripada hijerarhijski višoj grupi, kao što grad pripada državi, a ulica gradu. Grupa podataka najvišeg nivoa – u ovom slučaju lista država – nema polje koje beleži pripadnost nekoj od grupa podataka.

Slika2Kreirajte praznu formu i na nju postavite listu podataka, koju ćete urediti po želji. Iskopirajte je i dva puta nalepite na formu. Nazovite ih sleva nadesno: lstDrzave, lstGradovi, lstUlice, a u label kontrolu upišite: Države, Gradovi, Ulice. Prvo ćemo podesiti izvore podataka za sve tri, a kasnije ići unazad – programirati ponašanje lista. Odaberite listu država, otvorite okno osobina i na njemu odaberite Row Source. Kliknite na taster pa postavite u upit tabelu država i prevucite oba polja u mrežu, s tim da uključite sortiranje po nazivu grada. Čim zatvorite upit, videćete da osobina Row Source dobija SQL iskaz čiji ste grafički oblik maločas videli. Prvo (indeksno) polje korisnik ne treba da vidi. Recite programu da ova lista koristi dve kolone i da se vidi samo druga: ukucajte broj „2“ u osobinu Column Count (broj kolona) i „0cm;1cm“ u osobinu Column Widths (širine kolona).

Zatim odaberite listu gradova i ponovite postupak: dodajte u upit tabelu gradova, postavite sva tri polja na mrežu upita, sortirajte podatke po nazivu države i sada u Column Count upišite „3“ i za širinu kolona upišite „0cm;0cm;1cm“. Ako je jasno čemu služi nula (nulta širina tj. ne vidi se), pitanje je zašto 1 centimetar, kada je stvarna širina liste mnogo veća? Kada lista prikazuje samo jedan podatak, Access automatski koristi svu raspoloživu širinu liste. Osobina Row Source u ovom slučaju pamti SQL iskaz nalik na: SELECT tblDrzave.IDDrzava, tblDrzave.Drzava FROM tblDrzave ORDER BY tblDrzave.Drzava. Konačno, ponovite isti postupak za treću listu. SQL iskaz za treću listu treba da izgleda kao ovaj: SELECT tblUlice.IDUlica, tblUlice.IDGrad, tblUlice.Ulica FROM tblUlice ORDER BY tblUlice.Ulica. Forma treba da izgleda kao na slici 3.

Slika3Preostaje samo programiranje aplikacije. Kada se forma učita, liste gradova i ulica treba da budu prazne. Pri promeni grada, osvežava se lista ulica. Pri promeni države, osvežavaju se liste gradova i ulica. Logika je sasvim jednostavna. Obe liste načinite praznim po učitavanju forme programom na slici 4a.

Slika4Sada odaberite listu lstDrzave, pređite na karticu osobina i dodajte VBA program 4b u događaj AfterUpdate. Pazite na to da u SQL komandi filter WHERE mora da se piše ispred ORDER BY (prvo filter, a onda način sortiranja), a takođe pazite i na razmake. Odaberite zatim lstGradovi i iskoristite događaj AfterUpdate ovog polja. Iskoristite SQL iskaz kopiran u Notepad, prekopirajte ga u VBA i uredite prema slici 4c.

Slika5Da vidimo još kako ćete programski čitati podatke iz lista. U događaj AfterUpdate prenesite program sa slike 4d. Primetite da iz prve liste čitamo kolonu 1 (Column(1)). Ako biste izostavili ovaj parametar, program bi pročitao prvu kolonu, a to je ID polje. Brojanje kolona počinje od nule a ne od jedan, zato Column(1) čita zapravo drugu kolonu.

(Objavljeno u PC#194)

ACCESS – Brojevi i slova u istom polju

Ako pišete Microsoft Access aplikacije, znate da je upravo Access taj koji učitava bazu podataka, ali je korisnički interfejs prilagodljiv i pod potpunom je kontrolom vašeg programa. Za običnog korisnika tasteri, komande, meniji i riboni razvojnog okruženja su zbunjujući, nepotrebni, pa često i opasni. U verziji 2003 i ranijim postojao je sistem menija. Da biste osnovni Access‑ov interfejs zamenili svojim, najpre kreirate novi meni, postavite komande i zatim na ekranu za podešavanje startup okruženja odaberete novi meni.

Slika1Na osnovni Access‑ov meni kliknite desnim tasterom miša i odaberite Customize (na slici 1 obeleženo sa „a“). Zadajte naziv menija, recimo MojMeni („b“), zatim označite MojMeni i kliknite na Properties („c“). Osobinu Type promenite na Menu Bar. Isti dijalog se koristi za formiranje korisničkih toolbar‑ova i on se koristi kao unapred podešeni tip novog objekta. Podesite i ostale opcije prema slici – negde na ekranu dobićete plutajući meni koji se zove MojMeni. Prevucite ga ispod osnovnog Access‑ovog menija i dobićete prazan meni („d“).

Meni možete popuniti na tri načina – kopiranjem postojećih komandi, kreiranjem novih komandi ili postavljanjem komande za učitavanje forme, odnosno objekta. Najčešće se koriste postojeće komande ili VBA procedure napisane za konkretnu namenu. Za početak ćemo kreirati meni Aplikacija sa komandom Izlaz. Ako je vaše razvojno okruženje sa engleskim interfejsom, onda ćete, osim kopiranja postojeće komande, izmeniti njen naziv. Kliknite desnim tasterom na novi meni i odaberite Customize. Pređite na karticu Commands. U levoj listi povucite klizač skroz do dole i odaberite New Menu. Iz liste komandi videćete jedinu dostupnu – New Menu. Sada kliknite levim tasterom miša na New Menu i prevucite je na svoj meni. Otpustite taster tek kada ste postavili stavku novog menija na vaš meni („e“). Promenite naziv New Menu u Aplikacija: kliknite desnim tasterom miša na New Menu. U kontekstnom meniju prekucajte New Menu sa &Aplikacija. Karakter & kazuje programu koje slovo (ili broj) će biti prečica tastature, u ovom slučaju je to Alt+A jer se & nalazi ispred A. Vratite se na okno Customize, u levom oknu Categories odaberite File, iz desnog okna odaberite Exit (poslednja komanda u listi). Prevucite komandu na meni Aplikacija i sačekajte da se meni otvori, pa spustite komandu u njega. Sada kliknite desnim tasterom na Exit i promenite naziv u &Izlaz.

Po učitavanju baze Access će uvek prikazati osnovni meni, odnosno svaki onaj koji je uključen na oknu podešavanja. Za podešavanje izgleda početnog interfejsa zaduženo je okno Tools / Startup. Podesite Startup opcije prema slici 3 („i“). Upišite naziv aplikacije („Vaša aplikacija“) i isključite sve opcije prema slici.

Vaš meni odaberite u padajućoj listi Menu Bar. Polje Application Icon se odnosi na ikonu aplikacije – ako nije definisana korisnička, prikazuje se osnovna Access‑ova (ključ). Ikonu aplikacije možete odabrati klikom na taster Browse – pronađite na disku fajl sa ekstenzijom ICO. Predlažemo da prekopirate ikonu u folder gde se nalazi baza. U oknu opcija, u polju Application Icon upišite samo naziv ikone bez putanje (ne može Browse!). Ubuduće će Access učitavati ikonu iz foldera baze podataka, bez obzira na putanju.

Izgled interfejsa vaše aplikacije prilagođene korisniku je prikazan na slici 3 („j“). Primetićete da se ovaj meni sam učitava i da se svi Access objekti sakrivaju. Osnovni Access meni i interfejs možete ponovo dobiti samo kada tokom učitavanja držite pritisnut Shift.

Slika2Iz menija možete pokretati komande, makro naredbe, VBA procedure, ali možete i učitavati forme ili prikazivati izveštaje. Postavljanje komande za učitavanje forme ili izveštaja je nalik postavljanju opisane komande Exit – na oknu Customize odaberite All Forms (ili All Reports) i prevucite naziv forme (ili izveštaja) na meni. Makroe postavljate na isti način. VBA procedure možete postaviti u meni zaobilaznim putem – kreirajte makro koji komandom RunCode poziva VBA funkciju i zatim makro naredbu postavite u meni.

(Objavljeno u PC#193)

Auto-Complete forma

Mehanizam automatskog popunjavanja se odnosi na postupak kojim se, na osnovu nekoliko unetih karaktera, unos nadopunjava unapred poznatim podacima.

Većini korisnika je poznat ovaj mehanizam zahvaljujući ugrađenom čarobnjaku za kreiranje padajuće liste kojim se, na primer, pronalazi zapis na osnovu nekoliko unetih karaktera. „Samodopunjavajuće“ padajuće liste i pored ograničenja imaju veliku upotrebnu vrednost. Na sledećem primeru ćemo pokazati kako se bez programiranja može napraviti napredna auto‑complete funkcija.

Sličan primer postoji u bazi primera Northwind. Učitajte bazu, otvorite Orders formu i menjajte naziv kupca – primetićete da se i svi ostali podaci menjaju. Orders forma koristi program za popunjavanje polja adrese za isporuku robe (koja može biti različita od adrese kupca). Drugi način da se prikažu podaci vezani za identifikacioni (ID) broj je upotrebom potforme. Potforma bi u ovom slučaju prikazivala adresu i druge podatke vezane za kupca. Spomenimo i treći (neefikasan) način prikaza podataka – upotrebom autolookup upita.

Postoji još efikasniji način koji je primenljiv u određenim uslovima. Uslovi se sreću relativno često: potrebno je da se prikažu dodatni podaci o entitetu, oni već postoje u bazi podataka, prikazivaće se samo jedan entitet po zapisu i slično. Rešenje je zanimljivo jer dozvoljava istovremeni upis u dve tabele – tokom unosa podataka za fakturu možete ispraviti broj telefona kupca.

Za demonstraciju primera potrebne su dve tabele i relacije postavljene kao na slici 1. U primeru su korišćeni entiteti „Saradnik“ i „Ugovori“, međutim vi možete koristiti „Kupac“ i „Računi“. U tabeli tblUgovori polje IDSaradnik nije Lookup polje, već obično tekst polje. BrojUgovora (odnosno BrojRačuna) je indeksirano polje sa primarnim ključem, bez ponavljanja unosa. Drugim rečima, unos jedinstvenog podatka je obavezan.

Pošto ste formirali tabele, pređite na okno relacija (Relationships). Dodajte obe tabele u okno relacija i zatim dva puta kliknite na liniju koja spaja polja IDSaradnik. Uključite Enforce Referential Integrity; druge dve opcije nisu obavezne, što se vidi na slici 2.

Pređite na karticu upita i kreirajte novi upit. Dodajte obe tabele. Iz tabele sa strane 1 (tblSaradnici) dodajte sva polja osim IDSaradnik. Iz tabele sa strane „više“ dodajte sva polja. Za demonstraciju će poslužiti forma koju kreira čarobnjak. Obeležite upit i iz menija (sa ribona) odaberite taster AutoForm. Primetite da je na formi koju program kreira polje IDSaradnik polje za „slobodan unos“, međutim u njega možete upisati samo ID brojeve saradnika (odnosno kupaca). Pošto je ove šifre besmisleno pamtiti, ovo polje ćemo preraditi u auto‑lookup polje.

Pređite u režim izmene dizajna forme. Kliknite desnim tasterom na polje IDSaradnik. Iz kontekstnog menija odaberite Change To, pa zatim Combo Box. Otvorite karticu osobina ovog polja (Properties) i postavite sledeće osobine:

Row Source: tblSaradnici

Column Count: 2

Column Widths: 0; 1

Za izvor podataka polja zadali ste tabelu tblSaradnici. Iz tabele će se koristiti dve kolone, s tim da je prva sakrivena (širina = 0), dok se druga prikazuje (ime i prezime, odnosno naziv). Pod pretpostavkom da određeni unosi tabele tblSaradnici već postoje, unos podataka za saradnika se svodi na kucanje prvog ili prvih nekoliko slova imena. U ovom primeru će se polja Fiksni telefon i Mobilni telefon sama popunjavati po izboru saradnika.

Na formi je sada moguće dodavati nove ugovore, ali i promeniti brojeve telefona, pa čak i naziv saradnika, što naravno nije uvek poželjno. Olakšano je ažuiranje podataka spoljne tabele, ali se tu krije zamka: svaka ispravka nekih od podataka spoljne tabele se reflektuje na sve zapise tabele ugovora gde se saradnik kome su izmenjeni podaci nalazi. Iz tog razloga se ponekad podaci namerno „denormalizuju“, uz omogućavanje duplog unosa istih podataka.

(Objavljeno u PC#191)

Access – Brojevi i slova u istom polju

Numeričko polje tabele može imati neku vrednost, može biti prazno, ali može imati i vrednost nula. Prazno polje tipa Number zapravo ima vrednost Null, što nije isto što i 0 (nula).

Za čoveka je, doduše, 0 i prazno polje praktično isto, pa i u nekim programskim jezicima razlika ne postoji, ali Access razlikuju nulu i prazno polje, na pricipu „ima informacija / nema informacija“ – nula označava da informacija postoji.

Ovakve male konfuzije se obično ispravljaju tako što se za potrebe prikazivanja podataka na izveštajima praznim poljima dodeljuje vrednost nula, posebno kod izveštaja koji sadrže više kolona. Ako je previše praznih polja, onda postaje teško da se prate podaci po redovima. Tipična tabela sa početnim podacima data je na slici 1.

Prazno polje može da se prevede u polje sa vrednošću nula upotrebom upita ili pomoću formule na polju izveštaja. Prvi način se češće koristi zbog velike brzine izvršavanja upita. Kreirajte novi upit i dodajte vašu tabelu (ili više njih, ako ujedinjavate podatke). Prazno polje možete pretvoriti u vrednost 0 upotrebom funkcije NZ(polje) ili funkcije IIF(uslov, vrednost 1, vrednost 2). Na slici 2 je prikazan upit u režimu dizajna i izgled podataka pokretanjem upita (uokvireni deo).

Funkcija NZ() je zapravo svedeni oblik funkcije IIF(); u ovom slučaju obe rade istu stvar, ali s malom razlikom. Pogledajte ukvireni deo slike 2 tj. rezultat izvršavanja upita. U prvom i trećem polju brojevi su s leve strane polja, dok je u drugom polju broj s desne strane, što obično ukazuje da su prvo i treće polje formatirani za prikaz teksta, odnosno da funkcija NZ() pretvara broj u string. Preciznije rečeno, funkcija NZ() vraća nulu, string nulte dužine ili neku drugu vrednost kada ulazni parametar tipa Variant ima vrednost Null. U dokumentaciji funkcije ima i važna napomena: kada se ova funkcija koristi u upitu, a ne navede se izlazna vrednost, za uslov da je ulazna vrednost Null, ona uvek vraća string nulte dužine. Tu se negde krije savet: kada ovu funkciju koristite u upitu, obavezno navedite i vrednost koju će funkcija da vrata kada je ulazni podatak Null, da biste izbegli mešanje tipova podataka unutar kolone.

Druga funkcija IIF() sastoji se iz tri dela. Prvi je uslov koji se provera, drugi je vrednost koja se vraća kada je uslov ispunjen i treći je vrednost koja se vraća kada uslov nije ispunjen. Pošto je ulazna vrednost iskaz (logička provera uslova), tip podataka se ne menja, pa se u ovom slučaju izlazni tip podataka ne menja. Razlike nemaju značaja u ovom primeru, ali mogu imati značaja tamo gde je vrsta podataka bitna, tamo gde se ulazni i izlazni tipovi podataka razlikuju.

Primetite na slici 2 da se ispred obe funkcije nalazi najmanje jedna reč odvojena dvotačkom od funkcije. U ovom slučaju je to „Vrednost 1:“, što je naziv polja kakvo će se prikazivati na upitu i dalje gde se upit koristi. Ovaj naziv se naziva i alias. Pravilo kod pisanja ove dve, ali i većine ostalih funkcija, je da alias ne sme da ima isto ime kao polje tabele. Mi smo dodali razmak između „Vrednost“ i „1“, dok je naziv polja tabele „Vrednost1“.

Drugi, čest slučaj prikaza praznih polja na izveštajima, jeste upotrebom karaktera „‑“ umesto nule. Zadržava se urednost izveštaja, ali se ne odvlači pažnja na broj kao sa nulama, gde čitalac izveštaja mora da pročita nulu koja liči na osmicu. U funkcijama broj 0 zamenite karakterima „‑“ (s obaveznim navodnicima), tako da funkcije postanu: NZ([Vrednost1], “–”) i IIf(IsNull([Vrednost2]), “–”, [Vrednost2]). Umesto karaktera „‑“ možete napisati bilo koji željeni znak ili reč, npr. na engleskom govornom području se koristi „N/A“ (non‑available). Na slici 3 su prikazane obe varijante rezultujućeg izveštaja, pa odaberite onu koja vam više odgovara.

Uređuje Branislav Mihaljev

(Objavljeno u PC#192)

PC Press: broj 163 u prodaji od 29. januara

PCPress-163-cover

PCPress-163-content

Izdvajamo


FoRSiramo najbolje: TOP50 Web strana

PCPress-163-webtop50PC Press tim

Živ gašen ali neugašen YU domen je i ove godine sa nama, ali je sav Web život prešao u novi RS domen koji raste. Kvantitet ne donosi uvek i kvalitet, ali se među destina hiljada RS sajtova može naći mnogo korisnih informacija, a i lepih prizora. Mi smo po trinaesti put odabrali pedeset najboljih!

Intel na 32 nm

PCPress-163-IntelMiloš Stamenković

I pored hvalospeva Intel-ovoj Core ix arhitekturi, na tržištu još uvek preovlađuju Core 2 procesori. Možda će, nakon “prejakih” i7 i i5, umereni Core i3 ponuditi korisnicima razlog za korak unapred. Isprobali smo prve Intel-ove procesore proizvedene u 32 nm tehnologiji.

Video u plavoj rezoluciji

PCPress-163-BRBranislav Bubanja

Samostalni Blu-ray plejeri sa nama su još od 2006. godine, ali su postali atraktivna kupovina tek nedavno, kada su im dodate mrežne funkcije i bitno snižena cena. Vreme je za Blu-ray plejer, a mi ćemo vam pomoći da izaberete pravi.

Tri operativna sistema za džep

PCPress-163-pdaMarko Savković

Pred nama su reprezentativni uzorci pametnih telefona sa tri popularna operativna sistema, čiji su proizvođači BlackBerry i Acer. Gde prestaje biznis i počinje zabava?

Gigaset interfon

PCPress-163-gigaDejan Ristanović

Lepo je otvoriti ulazna vrata gostima ne napuštajući stan, ali bi još lepše bilo otvoriti ih bez ustajanja iz fotelje i šetnje do tastera u predsoblju. Gigaset HC450 obezbeđuje upravo to, integrišući interfon sa kućnim telefonskim sistemom.

Zeleni auto raznih boja

PCPress-163-toyotaBranko Nikitović

Čuli ste za Tojotu Prius, prvi “pravi i upotrebljivi” hibridni automobil? Seli smo u Prius nove generacije, unapređen u svakom pogledu – da li je konvencionalni automobil dobio naslednika?

Punoletni Access

PCPress-163-accessBranislav Mihaljev

Beta verzija paketa Microsoft Office 2010 uključuje i novi Access, od koga su korisnici mnogo očekivali. Da li smo dobili samo ispravke nesumnjivih slabosti verzije 2007 ili je Access, u svojoj 18. godini, načinio bitni korak unapred?

ZBrush: Digitalno vajarstvo

PCPress-163-zbrushStevan Josimović

Pixologic je ponovo obradovao korisnike besplatnim update-om ZBrush-a, najpopularnijeg digitalnog vajarskog alata na tržištu. Neki noviteti čak otimaju svetlo pod reflektorima korisničke zajednice…

Hardver


CES trendovi

Nada Veljković

Review

uređuje Voja Gašić

ecoRouteHD – GPS preuzima nadzor

Aleksandar Veljković

Mitsubishi: Vreme HD projektora

Aleksandar Veljković

LG: Proširivi medija centar

Branislav Bubanja

Genius grafičke table

Branislav Bubanja

PC PIX

uređuje Aleksandar Veljković

Canon G11

Aleksandar Veljković

Složene selekcije u Photoshop-u

Nenad Veljković

Pink strane

Ana Maksimović i Aleksandra Šakić

Softver


Idealna zaštita

Aleksandar Rakić

Solibri: Vrlo stvarna provera

Đorđe Grujić

Win7 – član biblioteke

Voja Gašić

Windows 7 i DPI skaliranje

Bojan Stojanović

Internet usluge za obradu slika

Mariana Perak

PC.Biz


Otvoreni kod i zarada

Marko Herman

Za sve klimatske uslove

Mladen Mijatović

Komunikacije


Analiza društvenih mreža

Nikola Stojanović

Rubrike


Vesti

Digitalni mister Hajd

Intervju: Milica Bajković, EUnet

Internet vodič

Access bajtovi

Office bajtovi

Odabrani bajtovi

Vedra strana

PC Press