Sortere IP-adresser

I dette emne kan du få mere at vide om fremgangsmåden for sortering af IP-adresser (Internet Protocol), som er lagret i en Microsoft Office Access 2007-database.

Denne artikel indeholder

Introduktion

Oprette forespørgslen

Flere anvendelser af sorterede IP-adresser

Introduktion

Hvis du arbejder med IP-adresser, ved du sikkert allerede, at det ikke er så ligetil som at arbejde med tekst eller tal. Dette skyldes, at en IP-adresse i virkeligheden er en samling af fire numeriske værdier, som er adskilt af punktum (.), hvor hver værdi er et tal mellem 0 og 255. Nedenstående tabel viser data, før der er anvendt en sorteringsrækkefølge.

ComputerId

Medarbejder

Placering

IPAdresse

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 af IP-adresser i Access er en udfordring, da Access ikke har en speciel datatype til lagring af IP-adresser. Selvom IP-adresser blot er en samling tal, kan du ikke lagre IP-adresser i et numerisk felt. Dette skyldes, at et numerisk felt kun understøtter et enkelt decimalpunkt (.), mens en IP-adresse indeholder tre punktummer (.). Det betyder, at du skal lagre adresserne i et tekstfelt.

Da du lagrer IP-adresser i et tekstfelt, kan du ikke bruge de indbyggede sorteringsknapper i Access til at sortere adresserne på en meningsfuld måde. Sorteringsknapperne bruges altid til at sortere værdier i et tekstfelt i alfabetisk rækkefølge, også selvom tegnene er tal. Med andre ord sorteres adresserne efter det første ciffer, derefter efter det andet ciffer osv. i stedet for efter de numeriske værdier, som adressen består af. Nedenstående tabel viser adresserne fra den forrige tabel sorteret i alfabetisk rækkefølge i feltet IPAdresse.

ComputerId

IPAdresse

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


De adresser, som begynder med 1, vises før de adresser, der begynder med 2, osv. Nedenstående tabel viser adresserne i den korrekte stigende rækkefølge.

ComputerId

IPAdresse

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


Det er nemmere at forstå de trin, der udføres ved sortering af adresserne, hvis du bryder IP-adresserne op i fire numeriske dele. Adresserne skal sorteres efter den første del, derefter efter værdien i den første del, derefter efter den anden del osv. Tabellen viser de enkelte dele i hver sin kolonne, og da kolonnerne indeholder enkle numeriske værdier, er det muligt at sortere kolonnerne fra venstre mod højre i stigende rækkefølge, som vist i nedenstående tabel.

DelI

DelII

DelIII

DelIV

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 af de fire dele særskilt er fidusen ved sortering af IP-adresser. I nedenstående fremgangsmåde opretter du en forespørgsel, der, ud over IP-adressefeltet, omfatter fire beregnede kolonner, hvor der i hver kolonne lagres en del af adresseværdierne. Den første beregnede kolonne indeholder den første numeriske del af adressen, den anden beregnede kolonne indeholder den anden numeriske del af adressen osv. I stedet for at sortere posterne efter feltet IPAdresse, sorteres posterne efter de fire beregnede kolonner.

Toppen af siden

Oprette forespørgslen

Du skal oprette en udvælgelsesforespørgsel med navnet Sorterede IP-adresser, der viser IP-adresseposterne i stigende rækkefølge. Lad os antage, at den aktuelle database har en tabel med navnet ComputerOplysninger, der indeholder et tekstfelt med navnet IPAdresse.

  1. Klik på Forespørgselsdesign i gruppen Andet på fanen Opret.

  2. Klik på ComputerDetaljer i dialogboksen Vis tabel under fanen Tabeller, og klik derefter på Tilføj. Luk dialogboksen.

  3. Træk felterne ComputerId og IPAdresse til forespørgselsdesigngitteret.

  4. Du kan nu tilføje de beregnede kolonner. Skriv udtrykket DelI: Val(Venstre([IPAdresse],(InStr(1,[IPAdresse],".")-1))) i rækken Felt i den første tomme kolonne i højre side. Udtrykket returnerer de tegn, der står foran det første punktum (.) i feltet IPAdresse.

    Gennemse derefter udtrykket. Da du ikke ved, hvor mange cifre den første del af adressen består af, skal du bruge funktionen InStr til at finde placeringen af det første punktum. Hvis du fratrækker 1 (for at udelade punktummet), returneres antallet af cifre i den første del. Derefter bruger du dette tal sammen med funktionen Left til at udtrække så mange tegn, idet du starter fra tegnet længst til venstre, fra feltet IPAdresse. Til sidst bruger du funktionen Val til at konvertere de tegn, der returneres ved hjælp af funktionen Left, til et tal. Det sidste trin er nødvendigt, fordi den underliggende datatype er Tekst.

  5. Gem forespørgslen ved at klikke på GemVærktøjslinjen Hurtig adgang. Det er en god idé at gøre dette efter hvert trin.

  6. Tilføj kolonnen for den anden adressedel. I kolonnen til højre for DelI skal du skrive DelII: Val(Mid([IPAdresse],InStr(1,[IPAdresse],".")+1,InStr(InStr(1,[IPAdresse],".")+1,[IPAdresse],".")-InStr(1,[IPAdresse],".")-1)) i rækken Felt. Udtrykket returnerer de tegn, der er placeret mellem det første og det andet punktum i feltet IPAdresse.

    Gennemse udtrykket igen. Da du ikke ved, hvor mange cifre den anden del af adressen består af, eller nøjagtigt hvor den anden del starter (fordi du ikke ved, hvor lang den første del er), bruger du funktionen InStr til at finde ud af, hvor punktummerne er placeret. Derefter bruger du funktionen Mid til at udtrække de tegn, som følger efter det første punktum, men som står foran det andet punktum. Til sidst kalder du funktionen Val for at konvertere de tegn, der returneres med funktionen Mid i et tal. Det sidste trin er nødvendigt, fordi den underliggende datatype er Tekst.

  7. Tilføj kolonnen for den tredje adressedel. I kolonnen til højre for DelII skal du skrive DelIII: Val(Mid([IPAdresse],InStr(InStr(1,[IPAdresse],".")+1,[IPAdresse],".")+1,InStr(InStr(InStr(1,[IPAdresse],".")+1,[IPAdresse],".")+1,[IPAdresse],".")-InStr(InStr(1,[IPAdresse],".")+1,[IPAdresse],".")-1)) i rækken Felt. Udtrykket returnerer de tegn, der er placeret mellem det andet og det tredje punktum i feltet IPAdresse.

    Gennemse derefter udtrykket. Da du ikke ved, hvor mange cifre den tredje adressedel består af, eller nøjagtigt hvor den tredje del starter (fordi du ikke ved, hvor lang den første og den anden del er), bruger du funktionen InStr til at finde punktummernes placering. Derefter bruger du funktionen Mid til at udtrække de tegn, der følger efter det andet punktum, men som står foran det tredje punktum. Til sidst kalder du funktionen Val for at konvertere de tegn, der blev returneret med funktionen Mid, til et tal. Det sidste trin er nødvendigt, fordi den underliggende datatype er Tekst.

  8. Tilføj kolonnen for den fjerde og sidste adressedel. I kolonnen til højre for DelIII skal du skrive DelIV: Val(Højre([IPAdresse],Len([IPAdresse])-InStr(InStr(InStr(1,[IPAdresse],".")+1,[IPAdresse],".")+1,[IPAdresse],"."))) i rækken Felt. Udtrykket returnerer de tegn, der følger efter det sidste punktum.

    Gennemse derefter udtrykket. Du skal finde placeringen af det tredje punktum og derefter udtrække alle de tegn, der følger efter det. Da du ikke ved præcist, hvor det tredje punktum er placeret, kalder du funktionen InStr tre gange for at finde placeringen af det tredje punktum. Derefter bruger du funktionen Len til at beregne antallet af cifre i den fjerde del. Det antal cifre, der returneres, anvendes derefter sammen med funktionen Right til at udtrække så mange tegn fra den højre del af feltet IPAdresse. Til sidst kalder du funktionen Val for at konvertere de tegn, der returneres ved hjælp af funktionen Mid, til et tal. Det sidste trin er nødvendigt, da den underliggende datatype er Tekst.

  9. Indstil rækken Sorter for alle fire beregnede kolonner til Stigende.

    Vigtigt!    Rækken Sorter i kolonnen IPAdresse skal være tomt.

    Hvis du vil sortere efter andre feltværdier ud over adresserne, skal du placere felterne enten til venstre eller højre for alle fire beregnede kolonner. Placer ikke de andre sorteringsfelter mellem de beregnede kolonner.

  10. Derefter skal du skjule de fire beregnede kolonner fra dataarket. Men inden du gør det, skal du skifte til dataarkvisning for at se resultatet af udtrykkene i de beregnede kolonner. Nedenstående tabel viser de kolonner, der vises i dataarkvisning.

ComputerId

IPAdresse

DelI

DelII

DelIII

DelIV

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

  1. Gå tilbage til designvisning, og fjern markeringen i afkrydsningsfeltet i rækken Vis for alle fire beregnede kolonner. Dette forhindrer, at de beregnede kolonner vises i dataarkvisning.

  2. Du kan eventuelt angive kriterier for udelukkelse af poster fra forespørgslen.

  3. Skift til dataarkvisning for at se posterne i sorteringsrækkefølge. IP-adresseposterne vises korrekt i stigende rækkefølge.

Toppen af siden

Flere anvendelser af sorterede IP-adresser

Validere IP-adresser under dataindtastning

Hvis du vil validere adresser uden at skrive kode, kan du gøre det i begrænset omfang ved at angive egenskaben InputMaske for feltet til ###.###.###.###;0;" " og egenskaben Formater for IP-adressefeltet til &&&&&&&&&&&&

Hvad gør inputmasken? Når du begynder at skrive i adressefeltet, forhindrer inputmasken dig i at indtaste andre tegn end tal og mellemrum mellem de tre punktummer. Hvis en numerisk del er et dobbeltcifret tal, skal det tredje ciffer være tomt eller indeholde et mellemrum. Denne inputmaske advarer ikke brugeren, hvis han undlader at skrive en eller flere dele af adressen eller kun skriver mellemrum i stedet for en numerisk værdi. F.eks. vil "345. .3. " blive accepteret som en gyldig adresse.

Hvad gør visningsformatet? Når du er færdig med at skrive og forlader feltet, fjerner visningsformatet mellemrummene i adressen og viser kun tallene og punktummerne. Hvis du har skrevet "354.35 .2 .12 ", vises adressen derfor som "354.35.2.12". Hvis du klikker inde i adressen eller trykker på F2 (for at skifte til redigeringstilstand), når adressen vælges, vises mellemrummene igen.

Tip: Hvis du vil kopiere en adresse, skal du gå til den forrige kolonne eller det forrige kontrolelement, trykke på TAB for at vælge den formaterede adresse og derefter klikke på Kopier. På denne måde kopieres den adressestreng, der indeholder mellemrum, ikke.

Sortere poster i en formular eller rapport efter IP-adresser

Hvis du skal oprette en formular eller en rapport, hvori posterne sorteres efter IP-adresser, skal du basere det nye objekt på en forespørgsel, der sorterer adresser som beskrevet tidligere, i stedet for på den tabel, hvor adresserne er lagret.

Toppen af siden

Del Facebook Facebook Twitter Twitter Mail Mail

Var disse oplysninger nyttige?

Fantastisk! Har du mere feedback?

Hvordan kan vi forbedre det?

Tak for din feedback!

×