BIZIT 11 - prvi dan

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)

Facebook komentari:
Računari i Galaksija
Tagovi: ,