Dette emnet beskriver fremgangsmåten for sortering av IP-adresser (Internet Protocol) som er lagret i en Access-database.
Innføring
Hvis du arbeider med IP-adresser, vet du sannsynligvis allerede at det ikke er like enkelt som å arbeide med tekst eller tall. Dette er fordi en IP-adresse egentlig er en samling av fire numeriske verdier atskilt med et punktum (.), der hver verdi er et tall mellom 0 og 255. Tabellen nedenfor viser data før en sorteringsrekkefølge brukes.
MachineID |
Arbeidstaker |
Plassering |
IP-adresse |
---|---|---|---|
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 |
Sortering av IP-adresser i Access er en utfordring fordi Access ikke inneholder en spesiell datatype for lagring av IP-adresser. Selv om en IP-adresse bare er en samling med numre, kan du ikke lagre en IP-adresse i et numerisk felt. Dette er fordi et numerisk felt bare støtter ett enkelt desimaltegn (.), mens en IP-adresse inneholder tre punktum (.). Dette betyr at du må lagre adressene i et tekstfelt.
Fordi du lagrer IP-adresser i et tekstfelt, kan du ikke bruke de innebygde sorteringsknappene i Access til å sortere adressene på en meningsfull måte. Sorteringsknappene sorterer alltid verdier i et tekstfelt i alfabetisk rekkefølge, selv om tegnene er tall. Adressene sorteres med andre ord etter det første sifferet, deretter etter det andre sifferet og så videre, i stedet for de numeriske verdiene som utgjør adressen. Tabellen nedenfor viser adressene fra den forrige tabellen sortert i alfabetisk rekkefølge i IPAddress-feltet.
MachineID |
IP-adresse |
---|---|
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 |
Adressene som begynner med 1, vises før adressene som begynner med 2 og så videre. Tabellen nedenfor viser adressene i riktig stigende rekkefølge.
MachineID |
IP-adresse |
---|---|
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 |
Hvis du vil gjøre det enklere å forstå trinnene som er involvert i sortering av disse adressene, deler du IP-adressene inn i fire numeriske deler. Adressene må sorteres etter den første delen, deretter for hver verdi i den første delen, deretter etter den andre delen og så videre. Tabellen viser hver del i en annen kolonne, og fordi kolonnene inneholder enkle numeriske verdier, blir det mulig å sortere kolonnene fra venstre mot høyre i stigende rekkefølge, som vist i tabellen nedenfor.
DelI |
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 |
Sortering av de fire delene separat er trikset bak sortering av IP-adresser. I fremgangsmåten nedenfor oppretter du en spørring som, i tillegg til IP-adressefeltet, inneholder fire beregnede kolonner der hver kolonne lagrer en del av adresseverdiene. Den første beregnede kolonnen vil inneholde den første numeriske delen av adressen, den andre beregnede kolonnen vil inneholde den andre numeriske delen av adressen, og så videre. I stedet for å sortere postene etter IPAddress-feltet, sorterer spørringen postene etter de fire beregnede kolonnene.
Opprette spørringen
Du oppretter en utvalgsspørring kalt Sorterte IPAddresses som viser postene i stigende rekkefølge av IP-adresser. Anta at gjeldende database har en tabell kalt MachineDetails som inneholder et tekstfelt kalt IPAddress.
-
Klikk Opprett > spørringsutforming.
-
Velg Legg til tabeller (Vis tabell i Access), og dra Maskindetaljer til den øvre delen av utformingsvisning.
-
Dra feltene MachineID og IPAddress til utformingsrutenettet for spørringen.
-
Du er nå klar til å legge til de beregnede kolonnene. I den første tomme kolonnen til høyre skriver du inn uttrykket PartI: Val(Left([IPAddress],(InStr(1,[IPAddress],".") -1))) i Felt-raden. Uttrykket returnerer tegnene foran den første perioden (.) i IPAddress-feltet.
Se gjennom uttrykket. Fordi du ikke vet hvor mange sifre som utgjør den første delen av adressen, bruker du InStr-funksjonen til å finne posisjonen til den første perioden. Å trekke fra 1 (for å utelate perioden) returnerer antall sifre i den første delen. Deretter bruker du dette tallet med Venstre-funksjonen til å trekke ut så mange tegn som starter fra tegnet lengst til venstre, fra IPAddress-feltet. Til slutt kaller du Val-funksjonen for å konvertere tegnene som returneres av Venstre-funksjonen , til et tall. Dette siste trinnet er nødvendig fordi den underliggende datatypen er Tekst.
-
Lagre spørringen ved å klikke Lagre på verktøylinjen for hurtigtilgang. Det er lurt å gjøre dette etter hvert mellomtrinn.
-
Legg til kolonnen for den andre adressedelen. I kolonnen til høyre for PartI skriver du inn PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],".") +1,InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") -InStr(1,[IPAddress],".") -1)) i Felt-raden. Uttrykket returnerer tegnene som er plassert mellom første og andre periode i IPAddress-feltet.
Se gjennom uttrykket på nytt. Fordi du ikke vet hvor mange sifre som utgjør den andre delen av adressen eller nøyaktig hvor den andre delen starter (fordi du ikke vet hvor lenge den første delen er), bruker du InStr-funksjonen til å finne posisjonene til periodene. Deretter bruker du Mid-funksjonen til å trekke ut tegnene som følger den første perioden, men foran den andre perioden. Til slutt kaller du Val-funksjonen for å konvertere tegnene som returneres av Mid-funksjonen , til et tall. Dette siste trinnet er nødvendig fordi den underliggende datatypen er Tekst.
-
Legg til kolonnen for den tredje adressedelen. I kolonnen til høyre for PartII skriver du inn 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)) i Felt-raden. Uttrykket returnerer tegnene som er plassert mellom andre og tredje periode i IPAddress-feltet.
Se gjennom uttrykket på nytt. Fordi du ikke vet hvor mange sifre som utgjør den tredje delen av adressen eller nøyaktig hvor den tredje delen starter (fordi du ikke vet hvor lenge den første og andre delen er), bruker du InStr-funksjonen til å finne posisjonene til periodene. Deretter bruker du Mid-funksjonen til å trekke ut tegnene som følger den andre perioden, men før den tredje perioden. Til slutt kaller du Val-funksjonen for å konvertere tegnene som returneres av Mid-funksjonen , til et tall. Dette siste trinnet er nødvendig fordi den underliggende datatypen er Tekst.
-
Legg til kolonnen for den fjerde og siste adressedelen. I kolonnen til høyre for PartIII skriver du inn PartIV: Val(Right([IPAddress],Len([IPAddress])-InStr(InStr(InStr(1,[IPAddress],".") +1,[IPAddress],".") +1,[IPAddress],"."))) i Felt-raden . Uttrykket returnerer tegnene som følger den siste perioden.
Se gjennom uttrykket på nytt. Nøkkelen er å finne plasseringen av den tredje perioden og deretter trekke ut alle tegnene som følger den. Fordi du ikke vet nøyaktig hvor den tredje perioden er plassert, kaller du InStr-funksjonen tre ganger for å finne posisjonen til den tredje perioden. Deretter bruker du Len-funksjonen til å beregne antall sifre i den fjerde delen. Antallet sifre som returneres, brukes deretter med Høyre-funksjonen til å trekke ut så mange tegn fra høyre del av IPAddress-feltet. Til slutt kaller du Val-funksjonen for å konvertere tegnene som returneres av Mid-funksjonen , til et tall. Dette siste trinnet er nødvendig fordi den underliggende datatypen er Tekst.
-
Angi Sorter-raden for alle de fire beregnede kolonnene til Stigende.
Viktig Sorteringsraden i IPAddress-kolonnen må stå tom.
Hvis du vil sortere etter andre feltverdier, plasserer du feltene til venstre eller høyre for alle de fire beregnede kolonnene i tillegg til adressene. Ikke plasser de andre sorteringsfeltene mellom de beregnede kolonnene.
-
Det neste trinnet er å skjule de fire beregnede kolonnene fra dataarket. Men før du gjør dette, bytter du til dataarkvisning for å se resultatet av uttrykkene i de beregnede kolonnene. Tabellen nedenfor viser kolonnene du ser i dataarkvisning.
MachineID
IP-adresse
DelI
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
-
Bytt tilbake til utformingsvisning, og fjern merket i avmerkingsboksen i Vis-raden i alle de fire beregnede kolonnene. Dette hindrer at de beregnede kolonnene vises i dataarkvisning.
-
Du kan eventuelt angi vilkår for å utelate poster fra spørringen.
-
Bytt til dataarkvisning for å se postene i sortert rekkefølge. Du vil se postene riktig sortert i stigende rekkefølge av IP-adressene.
Flere bruksområder for sorterte IP-adresser
Validere IP-adresser under dataregistrering
Hvis du vil validere adresser uten å skrive kode, kan du i begrenset grad gjøre dette ved å angi inndatamaskeegenskapen for feltet til ###.##.##.###; 0;" " og formategenskapen for IP-adressefeltet som skal&&&&&&&&&&&&.
Hva gjør inndatamasken? Når du begynner å skrive i adressefeltet, hindrer inndatamasken deg i å skrive inn andre tegn enn tall og mellomrom mellom de tre periodene. Hvis en numerisk del er et tosifret tall, lar du det tredje sifferet stå tomt eller skriver inn et mellomrom i stedet. Vær oppmerksom på at denne inndatamasken ikke advarer brukeren hvis han hopper over å skrive inn én eller flere deler av adressen, eller skriver bare inn mellomrom i stedet for en numerisk verdi. For eksempel «345. .3. " vil bli godtatt som en gyldig adresse.
Hva gjør visningsformatet? Når du er ferdig med å skrive inn og forlate feltet, fjerner visningsformatet mellomrommene i adressen og viser bare tallene og periodene. Så hvis du skrev inn «354.35 .2 .12 «, vises adressen som «354.35.2.12». Vær oppmerksom på at hvis du klikker i adressen, eller trykker F2 (for å gå inn i redigeringsmodus) når adressen er valgt, vises mellomrommene på nytt.
Tips!: Hvis du vil kopiere en adresse, går du til forrige kolonne eller kontroll, trykker TAB for å velge den formaterte adressen, og klikker deretter Kopier. Når du gjør dette, kopierer du ikke adressestrengen som inneholder mellomrom.
Sortere poster i et skjema eller en rapport etter IP-adresser
Hvis du trenger å opprette et skjema eller en rapport der postene er sortert etter IP-adresser, baserer du det nye objektet på en spørring som sorterer adresser som tidligere beskrevet, i stedet for i tabellen som lagrer adressene.