Applies ToAccess dla Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

W tym temacie opisano procedurę sortowania adresów IP przechowywanych w bazie danych Access.

Wprowadzenie

Jeśli pracujesz z adresami IP, prawdopodobnie wiesz już, że nie jest to tak proste, jak praca z tekstem lub liczbami. Jest to spowodowane tym, że adres IP to zbiór czterech wartości liczbowych rozdzielonych kropką (.), gdzie każda wartość to liczba z przedziału od 0 do 255. W poniższej tabeli przedstawiono dane przed zastosowaniem jakiejkolwiek kolejności sortowania.

Identyfikator maszyny

Pracownik

Lokalizacja

Adres 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

Sortowanie adresów IP w programie Access stanowi wyzwanie, ponieważ program Access nie udostępnia specjalnego typu danych do przechowywania adresów IP. Chociaż adres IP to tylko zbiór liczb, nie można przechowywać adresów IP w polu liczbowym. Jest tak dlatego, że pole liczbowe obsługuje tylko jeden separator dziesiętny (.), natomiast adres IP zawiera trzy kropki (.). Oznacza to, że adresy należy przechowywać w polu tekstowym.

Ponieważ adresy IP są przechowywane w polu tekstowym, nie można używać wbudowanych przycisków sortowania w programie Access do sortowania adresów w zrozumiały sposób. Przyciski sortowania zawsze sortują wartości w polu tekstowym w kolejności alfabetycznej, nawet jeśli są to liczby. Innymi słowy, adresy są sortowane według pierwszej cyfry, następnie według drugiej cyfry itd., zamiast wartości liczbowych tworzących adres. W poniższej tabeli przedstawiono adresy z poprzedniej tabeli posortowane w kolejności alfabetycznej w polu Adres IPAddress.

Identyfikator maszyny

Adres 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

Adresy zaczynające się od 1 są wyświetlane przed adresami rozpoczynającymi się od 2 itd. W poniższej tabeli przedstawiono adresy w odpowiedniej kolejności rosnącej.

Identyfikator maszyny

Adres 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

Aby ułatwić zrozumienie czynności związanych z sortowaniem tych adresów, podziel adresy IP na cztery części liczbowe. Adresy muszą być sortowane według pierwszej części, następnie dla każdej wartości w pierwszej części, następnie według drugiej części i tak dalej. W tabeli każda część jest wyświetlana w innej kolumnie, a ponieważ kolumny zawierają proste wartości liczbowe, można sortować kolumny od lewej do prawej w kolejności rosnącej, jak pokazano w poniższej tabeli.

Parti

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

Sortowanie czterech części oddzielnie to sztuczka podczas sortowania adresów IP. W poniższej procedurze tworzy się zapytanie, które oprócz pola adresu IP zawiera cztery kolumny obliczeniowe, w których każda kolumna przechowuje część wartości adresu. Pierwsza kolumna obliczeniowa będzie zawierać pierwszą część numeryczną adresu, druga kolumna obliczeniowa będzie zawierać drugą część numeryczną adresu itd. Zamiast sortować rekordy według pola IPAddress, zapytanie posortuje rekordy według czterech kolumn obliczeniowych.

Tworzenie zapytania

Utworzysz zapytanie wybierające o nazwie Sortowane identyfikatory IPAddresses, które wyświetla rekordy w rosnącej kolejności adresów IP. Załóżmy, że bieżąca baza danych zawiera tabelę o nazwie MachineDetails zawierającą pole tekstowe o nazwie IPAddress.

  1. Kliknij pozycję Utwórz > projekt zapytania

  2. Wybierz pozycję Dodaj tabele (Pokaż tabelę w programie Access) i przeciągnij pozycję Szczegóły maszyny do górnej sekcji widoku projektu.

  3. Przeciągnij pola MachineID i IPAddress do siatki projektu zapytania.

  4. Teraz możesz dodać kolumny obliczeniowe. W pierwszej pustej kolumnie po prawej stronie wpisz wyrażenie PartI: Val(Left([IPAddress],(InStr(1;[IPAddress],".") -1))) w wierszu Pole . Wyrażenie zwraca znaki poprzedzające pierwszy okres (.) w polu IpAddress (Adres IPAddress).

    Teraz przejrzyj wyrażenie. Ponieważ nie wiadomo, ile cyfr stanowi pierwszą część adresu, należy użyć funkcji InStr w celu znalezienia pozycji pierwszego okresu. Odejmowanie 1 (aby wykluczyć okres) zwraca liczbę cyfr w pierwszej części. Następnie użyj tego numeru z funkcją Lewy , aby wyodrębnić tyle znaków, rozpoczynając od skrajnego znaku po lewej stronie, z pola IPAddress. Na koniec należy wywołać funkcję Val , aby przekonwertować znaki zwracane przez funkcję Lewy na liczbę. Ten ostatni krok jest konieczny, ponieważ podstawowy typ danych to Tekst.

  5. Zapisz zapytanie, klikając pozycję Zapisz na pasku narzędzi Szybki dostęp. Warto to zrobić po każdym etapie pośrednim.

  6. Dodaj kolumnę dla drugiej części adresu. W kolumnie po prawej stronie części PartI wpisz PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],".") +1;InStr(InStr(1;[adres IPAddress]".") +1,[adres IPAddress]".") -InStr(1;[adres IPAddress]".") -1)) w wierszu Pole . Wyrażenie zwraca znaki znajdujące się między pierwszym i drugim okresem w polu ipaddress.

    Ponownie przejrzyj wyrażenie. Ponieważ nie wiadomo, ile cyfr składa się z drugiej części adresu lub dokładnie od miejsca rozpoczęcia drugiej części (ponieważ nie jest to czas, przez jaki trwa pierwsza część), funkcja InStr służy do znajdowania pozycji okresów. Następnie użyj funkcji Mid w celu wyodrębnienia znaków, które następują po pierwszym kropki, ale poprzedzają drugi kropka. Na koniec należy wywołać funkcję Val , aby przekonwertować znaki zwracane przez funkcję Mid na liczbę. Ten ostatni krok jest konieczny, ponieważ podstawowy typ danych to Tekst.

  7. Dodaj kolumnę trzeciego adresu. W kolumnie po prawej stronie części PartII wpisz PartIII: Val(Mid([IPAddress],InStr(InStr(1,[IPAddress],".") +1,[adres IPAddress]".") +1;InStr(InStr(InStr(1;[adres IPAddress]".") +1,[adres IPAddress]".") +1,[adres IPAddress]".") -InStr(InStr(1;[adres IPAddress]".") +1,[adres IPAddress]".") -1)) w wierszu Pole . Wyrażenie zwraca znaki znajdujące się między drugim a trzecim okresem w polu ipaddress.

    Ponownie przejrzyj wyrażenie. Ponieważ nie wiadomo, ile cyfr składa się z trzeciej części adresu lub dokładnie od miejsca rozpoczęcia trzeciej części (ponieważ nie wiadomo, jak długo trwa pierwsza i druga część), należy użyć funkcji InStr do znalezienia pozycji okresów. Następnie użyj funkcji Mid w celu wyodrębnienia znaków, które następują po drugim kropki, ale poprzedzają trzeci okres. Na koniec należy wywołać funkcję Val , aby przekonwertować znaki zwracane przez funkcję Mid na liczbę. Ten ostatni krok jest konieczny, ponieważ podstawowy typ danych to Tekst.

  8. Dodaj kolumnę dla czwartej i ostatniej części adresu. W kolumnie po prawej stronie części PartIII wpisz PartIV: Val(Right([IPAddress];Len([IPAddress])-InStr(InStr(InStr(1;[IPAddress],".") +1,[adres IPAddress]".") +1;[adres IPAddress]"."))) w wierszu Pole . Wyrażenie zwraca znaki, które następują po ostatnim okresie.

    Ponownie przejrzyj wyrażenie. Kluczem jest znalezienie lokalizacji trzeciego kropki, a następnie wyodrębnienie wszystkich znaków, które na nim następują. Ponieważ nie wiesz dokładnie, gdzie znajduje się trzeci okres, funkcja InStr jest wywoływana trzy razy w celu znalezienia pozycji trzeciego okresu. Następnie należy użyć funkcji do obliczenia liczby cyfr w czwartej części. Zwracana liczba cyfr jest następnie używana z funkcją Right w celu wyodrębnienia wielu znaków z prawej części pola IPAddress. Na koniec należy wywołać funkcję Val , aby przekonwertować znaki zwracane przez funkcję Mid na liczbę. Ten ostatni krok jest konieczny, ponieważ podstawowy typ danych to Tekst.

  9. Ustaw dla wiersza Sortuj dla wszystkich czterech kolumn obliczeniowych wartość Rosnąco.

    Ważne    Wiersz Sortuj kolumny adresów IPAddress musi pozostać pusty.

    Jeśli chcesz sortować według innych wartości pól, oprócz adresów, umieść pola po lewej lub prawej stronie wszystkich czterech kolumn obliczeniowych. Nie umieszczaj innych pól sortowania między kolumnami obliczeniowmi.

  10. Następnym krokiem jest ukrycie czterech kolumn obliczeniowych w arkuszu danych. Zanim to zrobisz, przełącz się do widoku arkusza danych, aby zobaczyć wynik wyrażeń w kolumnach obliczeniowych. W poniższej tabeli przedstawiono kolumny, które będą widoczne w widoku arkusza danych.

    Identyfikator maszyny

    Adres IPAddress

    Parti

    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

  11. Powróć do widoku projektu i wyczyść pole wyboru w wierszu Pokaż wszystkich czterech kolumn obliczeniowych. Zapobiega to wyświetlaniu kolumn obliczeniowych w widoku arkusza danych.

  12. Opcjonalnie określ kryteria wykluczania rekordów z zapytania.

  13. Przełącz się do widoku arkusza danych, aby wyświetlić rekordy w posortowanej kolejności. Rekordy zostaną poprawnie posortowane w kolejności rosnącej względem adresów IP.

Więcej zastosowań posortowanych adresów IP

Sprawdzanie poprawności adresów IP podczas wprowadzania danych

Jeśli chcesz sprawdzić poprawność adresów bez pisania kodu, możesz to zrobić w ograniczonym stopniu, ustawiając właściwość InputMask pola na ###.##.#.###.######; 0;" " i właściwość Format pola adresu IP do &&&&&&&&&&&&.

Do czego służy maska wprowadzania? Podczas rozpoczynania wpisywania w polu adresu maska wprowadzania zapobiega wprowadzaniu znaków innych niż liczby i spacje między trzema okresami. Jeśli część liczbowa jest liczbą dwucyfrową, pozostaw trzecią cyfrę pustą lub wpisz spację. Ta maska wprowadzania nie ostrzega użytkownika, jeśli pominie wpisanie co najmniej jednej części adresu lub wpisze tylko spacje zamiast wartości liczbowej. Na przykład "345. .3. " zostanie zaakceptowany jako prawidłowy adres.

Do czego służy format wyświetlania? Po zakończeniu wpisywania i opuszczeniu pola format wyświetlania usuwa spacje w adresie i wyświetla tylko liczby i kropki. Dlatego po wpisaniu ciągu "354.35 .2 .12" adres zostanie wyświetlony jako "354.35.2.12". Pamiętaj, że jeśli klikniesz wewnątrz adresu lub naciśniesz F2 (aby przejść do trybu edycji), gdy adres jest zaznaczony, spacje pojawią się ponownie.

Porada: Jeśli chcesz skopiować adres, przejdź do poprzedniej kolumny lub poprzedniej kontrolki, naciśnij TAB, aby zaznaczyć sformatowany adres, a następnie kliknij pozycję Kopiuj. W ten sposób nie będzie kopiować ciągu adresu zawierającego spacje.

Sortowanie rekordów w formularzu lub raporcie według adresów IP

Jeśli chcesz utworzyć formularz lub raport, w którym rekordy są sortowane według adresów IP, oparcie nowego obiektu na zapytaniu sortowanym w sposób opisany wcześniej, a nie na tabeli przechowującej adresy.

Początek strony

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.