Ova tema opisuje proceduru za sortiranje internet protokola (IP) adresa uskladištenih u Pristup bazi podataka.
Uvod
Ako radite sa IP adresama, verovatno već znate da to nije tako jednostavno kao rad sa tekstom ili brojevima. To je zato što je IP adresa zapravo kolekcija četiri numeričke vrednosti razdvojene tačkom (.), gde je svaka vrednost broj između 0 i 255. Sledeća tabela prikazuje podatke pre primene bilo kog redosleda sortiranja.
ID mašine |
Zaposlenog |
Lokacija |
IP adresa |
---|---|---|---|
1 |
... |
... |
123.4.245.23 |
2 |
... |
... |
104.244.253.29 |
3 |
... |
... |
1.198.3.93 |
4 |
... |
... |
32.183.93.40 |
5 |
... |
... |
104.30.244.2 |
6 |
... |
... |
104.244.4.1 |
Sortiranje IP adresa u programu Access je izazov jer Access ne pruža poseban tip podataka za skladištenje IP adresa. Iako je IP adresa samo kolekcija brojeva, IP adrese ne možete da uskladištite u numeričko polje. To je zato što numeričko polje podržava samo jedan decimalni zarez (.), dok IP adresa sadrži tri tačke (.). To znači da adrese morate da uskladištite u tekstualno polje.
Pošto skladištite IP adrese u tekstualnom polju, ugrađenu dugmad za sortiranje ne možete da koristite u programu Access da biste sortirali adrese na smislen način. Dugmad za sortiranje uvek sortiraju vrednosti u tekstualnom polju abecednim redom, čak i ako su znakovi brojevi. Drugim rečima, adrese su sortirane po prvoj cifri, drugoj cifri i tako dalje, umesto po numeričkim vrednostima koje sačinjuju adresu. Sledeća tabela prikazuje adrese iz prethodne tabele sortirane abecednim redom u polju IPAddress.
ID mašine |
IP adresa |
---|---|
3 |
1.198.3.93 |
2 |
104.244.253.29 |
6 |
104.244.4.1 |
5 |
104.30.244.2 |
1 |
123.4.245.23 |
4 |
32.183.93.40 |
Adrese koje počinju brojem 1 prikazuju se pre adresa koje počinju sa 2 i tako dalje. Sledeća tabela prikazuje adrese ispravnim rastućim redosledom.
ID mašine |
IP adresa |
---|---|
3 |
1.198.3.93 |
4 |
32.183.93.40 |
5 |
104.30.244.2 |
6 |
104.244.4.1 |
2 |
104.244.253.29 |
1 |
123.4.245.23 |
Da biste lakše razumeli korake koji su uključeni u sortiranje ovih adresa, prelomite IP adrese na četiri numerička dela. Adrese moraju da budu sortirane po prvom delu, zatim za svaku vrednost u prvom delu, po drugom delu i tako dalje. Tabela prikazuje svaki deo u drugoj koloni i, pošto kolone drže jednostavne numeričke vrednosti, postaje moguće sortirati kolone sleva nadesno rastućim redosledom, kao što je prikazano u sledećoj tabeli.
PartI (PartI) |
Partiii (partii) |
Partiii (partii) |
PartIV |
---|---|---|---|
1 |
198 |
3 |
93 |
32 |
183 |
93 |
40 |
104 |
30 |
244 |
2 |
104 |
244 |
4 |
1 |
104 |
244 |
253 |
29 |
123 |
4 |
245 |
23 |
Sortiranje četiri dela zasebno je trik za sortiranje IP adresa. U proceduri koja sledi kreirate upit koji, pored polja IP adrese, uključuje četiri izračunate kolone u kojima svaka kolona skladišti deo vrednosti adrese. Prva izračunata kolona će sadržati prvi numerički deo adrese, druga izračunata kolona će sadržati drugi numerički deo adrese i tako dalje. Umesto da sortira zapise po polju IPAddress, upit će sortirati zapise po četiri izračunate kolone.
Pravljenje upita
Kreiraćete upit za izdvajanje pod imenom Sortirane IP adrese koje prikazuju zapise rastućim redosledom IP adresa. Pretpostavimo da trenutna baza podataka ima tabelu pod imenom "MachineDetails" koja uključuje tekstualno polje pod imenom "IPAddress".
-
Izaberite stavku > upita.
-
Izaberite stavku Dodaj tabele (Prikaži tabelu u programu Access) i prevucite stavku Detalji mašine u gornji odeljak prikaza dizajna.
-
Prevucite polja MachineID i IPAddress u koordinatnu mrežu za dizajn upita.
-
Sada ste spremni da dodate izračunate kolone. U prvoj praznoj koloni sa desne strane otkucajte izraz PartI: Val(Left([IPAddress],(InStr(1,[IPAddress],".") -1)) u redu Polje . Izraz daje znakove pre prvog perioda (.) u polju IPAddress.
Sada pregledajte izraz. Pošto ne znate koliko cifara sačinje prvi deo adrese, koristite funkciju InStr da biste pronašli poziciju prvog perioda. Oduzimanjem 1 (da bi se izuzimao period) vraća se broj cifara u prvom delu. Zatim koristite ovaj broj sa funkcijom Left za izdvajanje toliko znakova, počevši od krajnje levog znaka, iz polja IPAddress. Na kraju, pozivate funkciju Val da biste konvertovali znakove koje je vratila funkcija Left u broj. Ovaj poslednji korak je neophodan jer je osnovni tip podataka Tekst.
-
Sačuvajte upit tako što ćete kliknuti na dugme Sačuvaj na priručnoj traci. Preporučuje se da to uradite nakon svakog posrednog koraka.
-
Dodajte kolonu za drugi deo adrese. U koloni desno od stavke PartI otkucajte PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],".") +1,InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") -InStr(1,[IPAddress],".") -1)) u redu Polje . Izraz vraća znakove koji se nalaze između prvog i drugog perioda u polju IPAddress.
Ponovo pregledajte izraz. Pošto ne znate koliko cifara sačinje drugi deo adrese ili tačno gde počinje drugi deo (jer ne znate koliko dugo je prvi deo), koristite funkciju InStr da biste pronašli pozicije perioda. Zatim koristite funkciju Mid za izdvajanje znakova koji slede prvi period, ali pre drugog perioda. Na kraju, pozivate funkciju Val da biste konvertovali znakove koje je vratila funkcija Mid u broj. Ovaj poslednji korak je neophodan jer je osnovni tip podataka Tekst.
-
Dodajte kolonu za treći deo adrese. U koloni desno od stavke PartII otkucajte PartIII: Val(Mid([IPAddress],InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") +1,InStr(InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") +1,[IPAddress],".") -InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") -1)) u redu Polje . Izraz vraća znakove koji se nalaze između drugog i trećeg perioda u polju IPAddress.
Ponovo pregledajte izraz. Pošto ne znate koliko cifara sačinje treći deo adrese ili tačno gde počinje treći deo (jer ne znate koliko dugo su prvi i drugi delovi), koristite funkciju InStr da biste pronašli pozicije perioda. Zatim koristite funkciju Mid za izdvajanje znakova koji slede drugi period, ali pre trećeg perioda. Na kraju, pozivate funkciju Val da biste konvertovali znakove koje je vratila funkcija Mid u broj. Ovaj poslednji korak je neophodan jer je osnovni tip podataka Tekst.
-
Dodajte kolonu za četvrti i poslednji deo adrese. U koloni desno od stavke PartIII otkucajte PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") +1,[IPAddress],"."))) u redu Polje . Izraz daje znakove koji slede poslednji period.
Ponovo pregledajte izraz. Ključ je da pronađete lokaciju trećeg perioda, a zatim izdvojite sve znakove koji ga prate. Pošto ne znate tačno gde se nalazi treći period, funkciju InStr pozivate tri puta da biste pronašli poziciju trećeg perioda. Zatim koristite funkciju Len da biste izračunali broj cifara u četvrtom delu. Zatim se koristi broj dobijenih cifara sa funkcijom Right za izdvajanje toliko znakova iz desnog dela polja IPAddress. Na kraju, pozivate funkciju Val da biste konvertovali znakove koje je vratila funkcija Mid u broj. Ovaj poslednji korak je neophodan jer je osnovni tip podataka Tekst.
-
Postavite red Sortiranje svih četiri izračunate kolone na Rastući redosled.
Važno Red Sortiranje kolone "IPAddress" mora da bude prazan.
Ako želite da sortirate po drugim vrednostima polja, pored adresa, postavite polja sa leve ili desne strane svih četiri izračunate kolone. Nemojte da postavljate druga polja za sortiranje između izračunatih kolona.
-
Sledeći korak je da sakrijete četiri izračunate kolone iz lista sa podacima. Ali pre nego što to uradite, prebacite se na prikaz lista sa podacima da biste videli rezultat izraza u izračunatim kolonama. Sledeća tabela prikazuje kolone koje ćete videti u prikazu lista sa podacima.
ID mašine
IP adresa
PartI (PartI)
Partiii (partii)
Partiii (partii)
PartIV
3
1.198.3.93
1
198
3
93
4
32.183.93.40
32
183
93
40
5
104.30.244.2
104
30
244
2
6
104.244.4.1
104
244
4
1
2
104.244.253.29
104
244
253
29
1
123.4.245.23
123
4
245
23
-
Vratite se na prikaz dizajna i opozovite izbor u polju za potvrdu u redu Prikaži za sve četiri izračunate kolone. To sprečava prikazivanje izračunatih kolona u prikazu lista sa podacima.
-
Opcionalno navedite kriterijume za isključivanje zapisa iz upita.
-
Prebacite se na prikaz lista sa podacima da biste videli zapise sortiranim redosledom. Videćete zapise ispravno sortirane po rastućem redosledu IP adresa.
Više upotreba za sortirane IP adrese
Provera valjanosti IP adresa tokom unosa podataka
Ako želite da proverite valjanost adresa bez pisanja koda, to možete da uradite u ograničenoj meri tako što ćete postaviti svojstvo InputMask polja na ###.#.##.##.##.###; 0;" " i svojstvo Format polja IP adrese za &&&&&&&&&&&&.
Šta radi maska unosa? Kada počnete da kucate u polju adrese, maska unosa vas sprečava da unesete znakove koji nisu brojevi i razmaci između tri perioda. Ako je numerički deo dvocifreni broj, ostavite treću cifru praznu ili otkucajte razmak. Imajte na umu da ova maska unosa ne upozorava korisnika ako preskoči kucanje nekih delova adrese ili ako otkuca samo razmake umesto numeričke vrednosti. Na primer, "345. .3. " bi bilo prihvaćeno kao važeća adresa.
Šta radi format prikaza? Kada završite sa kucanjem i napustite polje, format prikaza uklanja razmake na adresi i prikazuje samo brojeve i tačke. Dakle, ako ste otkucali "354.35 .2 .12", adresa se prikazuje kao "354.35.2.12". Imajte na umu da ako kliknete unutar adrese ili pritisnete taster F2 (da biste ušli u režim uređivanja) kada je adresa izabrana, razmaci će se ponovo pojaviti.
Savet: Ako želite da kopirate adresu, premestite se na prethodnu kolonu ili kontrolu, pritisnite taster TAB da biste izabrali oblikovanu adresu, a zatim kliknite na dugme Kopiraj. Na taj način ne kopirate nisku adrese koja sadrži razmake.
Sortiranje zapisa u obrascu ili izveštaju po IP adresama
Ako treba da kreirate obrazac ili izveštaj u kojem su zapisi sortirani po IP adresama, zasnivate novi objekat na upitu koji sortira adrese kao što je prethodno opisano, umesto na tabeli koja skladišti adrese.