U ovoj se temi opisuje postupak sortiranja ip adresa (Internet Protocol) pohranjenih u bazi podataka Access podataka.
Uvod
Ako radite s IP adresama, vjerojatno već znate da to nije tako jednostavno kao rad s tekstom ili brojevima. To je zato što je IP adresa zapravo zbirka četiri brojčane vrijednosti odvojene točkom (.), pri čemu je svaka vrijednost broj između 0 i 255. U sljedećoj su tablici prikazani podaci prije nego što se primijeni bilo koji redoslijed sortiranja.
ID stroja |
Zaposlenik |
Mjesto |
IPAddress |
---|---|---|---|
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 izazov je jer Access ne nudi posebnu vrstu podataka za pohranu IP adresa. Iako je IP adresa samo zbirka brojeva, IP adrese ne možete pohraniti u numeričko polje. To je zato što numeričko polje podržava samo jedan decimalni zarez (.), dok IP adresa sadrži tri točke (.). To znači da adrese morate pohraniti u tekstno polje.
Budući da IP adrese pohranjujete u tekstno polje, ugrađene gumbe za sortiranje u programu Access ne možete koristiti za sortiranje adresa na smislen način. Gumbi za sortiranje uvijek sortirati vrijednosti u tekstnom polju abecednim redoslijedom, čak i ako su znakovi brojevi. Drugim riječima, adrese se sortiraju prema prvoj znamenki, zatim po drugoj znamenki i tako dalje, umjesto prema numeričkim vrijednostima koje čine adresu. U sljedećoj su tablici prikazane adrese iz prethodne tablice sortirane abecednim redoslijedom u polju IPAddress.
ID stroja |
IPAddress |
---|---|
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 započinju s 1 prikazuju se prije adresa koje počinju s 2 i tako dalje. U sljedećoj su tablici adrese prikazane ispravnim uzlaznim redoslijedom.
ID stroja |
IPAddress |
---|---|
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 razumjeli korake za sortiranje tih adresa, IP adrese razlomite u četiri brojčana dijela. Adrese se moraju sortirati prema prvom dijelu, a zatim za svaku vrijednost u prvom dijelu, zatim po drugom dijelu i tako dalje. Tablica prikazuje svaki dio u drugom stupcu i, budući da stupci drže jednostavne numeričke vrijednosti, stupce je moguće sortirati slijeva nadesno uzlaznim redoslijedom, kao što je prikazano u sljedećoj tablici.
DioI |
PartII |
PartiII |
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 |
Zasebno sortiranje četiriju dijelova trik je u sortiranju IP adresa. U postupku koji slijedi stvarate upit koji, uz polje IP adrese, obuhvaća i četiri izračunata stupca u kojima svaki stupac pohranjuje dio vrijednosti adrese. Prvi izračunati stupac će sadržavati prvi numerički dio adrese, drugi izračunati stupac će sadržavati drugi numerički dio adrese i tako dalje. Umjesto sortiranja zapisa po polju IPAddress upit će sortirati zapise prema četiri izračunata stupca.
Stvaranje upita
Stvorit ćete upit odabiranja pod nazivom Sortirana IPAddresses koja zapise prikazuje uzlaznim redoslijedom IP adresa. Pretpostavimo da trenutna baza podataka sadrži tablicu s nazivom MachineDetails koja obuhvaća tekstno polje ipaddress.
-
Kliknite Stvori > dizajna upita.
-
Odaberite Dodaj tablice (Prikaži tablicu u programu Access) i povucite pojedinosti o računalu u gornji dio prikaza dizajna.
-
Povucite polja MachineID i IPAddress u rešetku dizajna upita.
-
Sada ste spremni dodati izračunate stupce. U prvi prazni stupac s desne strane upišite izraz PartI: Val(Left([IPAddress],(InStr(1;[IPAddress],".") -1))) u retku Polje. Izraz vraća znakove koji prethode prvom razdoblju (.) u polju IPAddress.
Sada pregledajte izraz. Budući da ne znate koliko znamenki čine prvi dio adrese, koristite funkciju InStr da biste pronašli položaj prvog razdoblja. Oduzimanje 1 (za izuzimanje razdoblja) vraća broj znamenki u prvom dijelu. Taj broj zatim koristite s funkcijom Left da biste izdvojili mnogo znakova, počevši od krajnjeg lijevog znaka, iz polja IPAddress. Naposljetku, funkciju Val pozivate da biste znakove koje je funkcija Left vratila pretvorila u broj. Ovaj je zadnji korak potreban jer je temeljna vrsta podataka Tekst.
-
Spremite upit klikom na Spremi na alatnoj traci za brzi pristup. To je dobro učiniti nakon svakog posredni korak.
-
Dodajte stupac za drugi dio adrese. U stupac desno od PartI upišite PartII: Val(Mid([IPAddress],InStr(1;[IPAddress],".") +1,InStr(InStr(1;[IPAddress],".") +1,[IPAddress],".") -InStr(1;[IPAddress],".") -1)) u retku Polje. Izraz vraća znakove koji se nalaze između prvog i drugog razdoblja u polju IPAddress.
Ponovno pregledajte izraz. Budući da ne znate koliko znamenki čine drugi dio adrese ili točno gdje počinje drugi dio (jer ne znate koliko je dugačak prvi dio), koristite funkciju InStr da biste pronašli položaje razdoblja. Zatim pomoću funkcije Mid izdvojite znakove koji slijede nakon prvog razdoblja, ali prije drugog razdoblja. Naposljetku, funkciju Val pozivate da biste znakove koje vraća funkcija Mid pretvorili u broj. Ovaj je zadnji korak potreban jer je temeljna vrsta podataka Tekst.
-
Dodajte stupac za treći dio adrese. U stupac desno od partII upišite 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 retku Polje. Izraz vraća znakove koji se nalaze između druge i treće točke u polju IPAddress.
Ponovno pregledajte izraz. Budući da ne znate koliko znamenki čine treći dio adrese ili točno gdje počinje treći dio (jer ne znate koliko su dugi prvi i drugi dijelovi), koristite funkciju InStr da biste pronašli položaje razdoblja. Zatim pomoću funkcije Mid izdvojite znakove koji slijede nakon drugog razdoblja, ali prije trećeg razdoblja. Naposljetku, funkciju Val pozivate da biste znakove koje vraća funkcija Mid pretvorili u broj. Ovaj je zadnji korak potreban jer je temeljna vrsta podataka Tekst.
-
Dodajte stupac četvrtog i završnog dijela adrese. U stupac desno od partIII upišite PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(1;[IPAddress],".") +1,[IPAddress],".") +1,[IPAddress],"."))) u retku Polje. Izraz vraća znakove koji slijede nakon zadnjeg razdoblja.
Ponovno pregledajte izraz. Ključ je pronaći lokaciju trećeg razdoblja, a zatim izdvojiti sve znakove koji slijede. Budući da ne znate točno gdje se nalazi treće razdoblje, funkciju InStr pozivate tri puta da biste pronašli položaj trećeg razdoblja. Zatim pomoću funkcije Len izračunavate broj znamenki u četvrtom dijelu. Broj vraćenih znamenki zatim se koristi s funkcijom Right za izdvajanje mnogo znakova iz desnog dijela polja IPAddress. Naposljetku, funkciju Val pozivate da biste znakove koje vraća funkcija Mid pretvorili u broj. Ovaj je zadnji korak potreban jer je temeljna vrsta podataka Tekst.
-
Postavite redak Sortiraj svih četiri izračunata stupca na Uzlazno.
Važno Redak Sortiranje stupca IPAddress mora ostati prazan.
Ako želite sortirati po drugim vrijednostima polja, osim adresa, postavite polja lijevo ili desno od sva četiri izračunata stupca. Nemojte s mjesta na izračunate stupce s drugim poljima sortiranja.
-
Sljedeći je korak sakrivanje četiri izračunata stupca iz podatkovne tablice. No prije toga prijeđite u prikaz podatkovne tablice da biste vidjeli rezultat izraza u izračunatim stupcima. U sljedećoj su tablici prikazani stupci koje ćete vidjeti u prikazu podatkovne tablice.
ID stroja
IPAddress
DioI
PartII
PartiII
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 u prikaz dizajna i poništite potvrdni okvir u retku Prikaži sva četiri izračunata stupca. Time se sprječava prikaz izračunatih stupaca u prikazu podatkovne tablice.
-
Ako želite, navedite kriterije za izuzimanje zapisa iz upita.
-
Prijeđite u prikaz podatkovne tablice da biste vidjeli zapise sortiranim redoslijedom. Zapisi će se pravilno sortirati uzlaznim redoslijedom IP adresa.
Dodatna namjena za sortirane IP adrese
Provjera VALJANOSTI IP adresa tijekom unosa podataka
Ako želite provjeriti valjanost adresa bez pisanja koda, to možete učiniti u ograničenoj mjeri tako da svojstvo InputMask polja postavite na ###.###.###.###; 0;" " i svojstvo Format polja IP adresa za &&&&&&&&&&&&.
Što radi maska za unos? Kada započnete upisivati u polje adrese, maska za unos onemogućuje unos znakova koji nisu brojevi i razmaci između tri točke. Ako je numerički dio dvoznamenkasti broj, ostavite treću znamenku praznom ili upišite razmak. Imajte na umu da ova maska za unos ne upozorava korisnika ako preskoči upisivanje jednog ili više dijelova adrese ili ako umjesto brojčane vrijednosti upišete samo razmake. Na primjer, "345. .3. " će biti prihvaćen kao valjana adresa.
Kako funkcionira oblik prikaza? Kada završite s unosom i napustite polje, oblik prikaza uklanja razmake u adresi i prikazuje samo brojeve i točke. Dakle, ako ste upisali "354.35 .2.12", adresa će se prikazati kao "354.35.2.12". Imajte na umu da ako kliknete unutar adrese ili pritisnete F2 (da biste ušli u način uređivanja) kada je adresa odabrana, razmaci će se ponovno pojaviti.
Savjet: Ako želite kopirati adresu, pomaknite se na prethodni stupac ili kontrolu, pritisnite tabulator da biste odabrali oblikovanu adresu, a zatim kliknite Kopiraj. Time nećete kopirati niz adresa koji sadrži razmake.
Sortiranje zapisa u obrascu ili izvješću prema IP adresama
Ako morate stvoriti obrazac ili izvješće u kojem se zapisi sortiraju prema IP adresama, novi objekt temeljite na upitu koji sortira adrese na prethodno opisan način, a ne na tablici u kojoj se pohranjuju adrese.