Access - Eliminacija praznih polja u izveštajima (I deo)
24.01.2002
Zamislimo da imamo sledeću situaciju: kreirali smo jednostavnu bazu podataka (samo jednu tabelu) koja čuva podatke o našim kontaktima, sa uobičajenim poljima: ime, adresa, grad, poštanski broj, broj telefona, e-mail, država, itd. Pri tom u tabeli neki od slogova (kontakata) neće biti potpuni, tj. neka polja će ostati prazna; na primer, nemaju sva lica e-mail adresu. Na osnovu ove tabele kontakata kreirali bismo izveštaj koji bi ovako izgledao:
Ime: Prezime: Adresa: Telefon: E-mail: Međutim, prilikom štampanja izveštaja, tj. spiska kontakata sa pripadajućim podacima, zbog kontakata koji nemaju sva polja popunjena, u izveštaju će se naći dosta praznih sekcija koje će narušiti izgled dokumenta i bespotrebno povećati broj strana za štampanje. Pitanje je kako izbaciti prazna polja (polja bez podataka) iz izveštaja i uštedeti prostor? Prazna polja u izveštajima najjednostavnije možete izbaciti podešavanjem osobine Can Shrink svakog text-boxa na Yes. Ali, tada se morate uveriti da se tekst-polja ne preklapaju. Kada potvrdimo osobinu Can Shrink, ukazujemo Accessu da "skupi" (umanji) kontrolu kada u njoj nisu prisutni podaci, i tako ukloni prazan prostor. Međutim, cela linija mora biti prazna. Ovo znači da ukoliko imate tri kontrole u liniji, sve tri moraju biti prazne da bi se automatski uklonio prazan prostor. Umesto ove tehnike možete izgraditi funkciju koja će uklanjati ove prazne linije. Kreiranje takve jedne funkcije objasnićemo u narednim redovima. Da bi linija u izveštaju bila uklonjena, ona mora biti totalno prazna, što može biti problem kada na primer, u liniji preostanu zarez ili neki drugi karakter za separaciju polja. U ovakvim situacijama morate detektovati da li data linija poseduje podatke i sprečiti ubacivanje nepotrebnih razdvajajućih oznaka. Ovo možete odraditi korišćenjem IIf (Immediate If) funkcije. Na primer, neka je sledeći programski kod sadržaj osobine Control Source nekog tekst-polja na izveštaju: =Trim([Grad] & IIf(IsNull([Pokrajina] Or [Pokrajina]=""), " ", ", " & [Pokrajina] & " ") & [Postanski broj])
Access - Eliminacija praznih polja u izveštajima (II deo)
25.01.2002
Ovim tekst-poljem u jednu liniju smeštamo sadržaj polja [Grad], [Pokrajina] i [Postanski broj]. Ukoliko postoji podatak o pokrajini datog kontakta, pre samog naziva pokrajine ubacuju se zarez i space karakter, a nakon naziva pokrajine dolazi još jedan space karakter. Ukoliko pak, ovaj podatak o pokrajini nije prisutan, nakon učitavanja podatka [Grad] ubacuje se samo prazan karakter. Funkcijom IIf ubacujemo zarez samo onda kada je to potrebno, i stoga osiguravamo praznu liniju ukoliko su sva tri polja prazna. Nešto složenije rešenje predstavlja korišćenje VBA programskog koda i kreiranje funkcije "KreirajLinije", koju ćemo detaljnije objasniti. Pri korišćenju ove funkcije biće vam potrebna samo jedna text-box kontrola u koju ćemo smestiti sva polja. Zato će izvor podataka za ovo
polje biti:
=Trim(KreirajLinije([Adresa], [Grad] & IIf(IsNull([Pokrajina]) Or [Pokrajina]="", " ", ", " & [Pokrajina] & " ") & [Postanski broj], [Drzava])) Kao što vidite, argument funkcije KreirajLinije() predstavljaju podaci iz pet polja baze podataka, tj. pet stringova (niz stringova), a sama funkcija izgleda ovako: Public Function KreirajLinije(ParamArray varLinije()) Dim intX As Integer, strRezultat As String For intX = 0 To UBound(varLinije) If Not IsNull(varLinije(intX)) And varLinije(intX) <> "" Then strRezultat = strRezultat & varLinije(intX) & vbCrLf End If Next KreirajLinije = strReturn End Function Funkcija KreirajLinije() automatski vrši konstrukciju linije za svaki od argumenata (polja sloga), i pri tome ignoriše prazna i null polja. Ovim se vrši uklanjanje praznih linija ukoliko podatak u nekom polju nedostaje. Na primer, ukoliko nema adrese, neće ni biti linije sa adresom u izveštaju, a linije koje slede (Grad-Pokrajina-Postanski broj-Drzava) automatski će se pomeriti za jednu liniju gore.