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

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 jest w istą kolekcją czterech wartości liczbowych oddzielonych kropką (.), gdzie każda wartość jest liczbą z zakresem od 0 do 255. W poniższej tabeli przedstawiono dane przed zastosowaniem jakiejkolwiek kolejności sortowania.

MachineID

Pracownik

Lokalizacja

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 jest wyzwaniem, ponieważ program Access nie zapewnia specjalnego typu danych do przechowywania adresów IP. Chociaż adres IP to po prostu zbiór liczb, nie można przechowywać adresów IP w polu liczbowym. Jest tak, ponieważ 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.

Adresy IP są przechowywane w polu tekstowym, dlatego nie można używać wbudowanych przycisków sortowania w programie Access w celu posortowania adresów w zrozumiały sposób. Przyciski sortowania zawsze sortują wartości w polu tekstowym w kolejności alfabetycznej, nawet jeśli znaki są liczbami. Innymi słowy adresy są sortowane według pierwszej cyfry, następnie według drugiej cyfry i tak dalej, a nie według wartości liczbowych, które się na nie znajdują. W poniższej tabeli przedstawiono adresy z poprzedniej tabeli posortowane w kolejności alfabetycznej w polu IPAddress.

MachineID

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, które zaczynają się od 1, są wyświetlane przed adresami, które zaczynają się od 2 i tak dalej. W poniższej tabeli przedstawiono adresy w poprawnej kolejności rosnącej.

MachineID

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, rozbijasz adresy IP na cztery części liczbowe. Adresy należy posortować według pierwszej części, następnie dla każdej wartości w pierwszej części, następnie według drugiej i tak dalej. W tabeli przedstawiono poszczególne części 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 osobno to sztuczka przy sortowaniu adresów IP. W ramach procedury poniżej utworzysz zapytanie, które oprócz pola adresu IP będzie zawierało cztery kolumny obliczeniowe, w których każda kolumna przechowuje część wartości adresu. Pierwsza kolumna obliczeniowa będzie zawierać pierwszą numeryczną część adresu, druga kolumna obliczeniowa będzie zawierać drugą część liczbową adresu i tak dalej. Zamiast sortować rekordy według pola IPAddress, zapytanie posortuje rekordy według czterech kolumn obliczeniowych.

Tworzenie zapytania

Utworzysz zapytanie wybierające o nazwie Sortowane adresy IP, które wyświetla rekordy w kolejności rosnącej według 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ę > projektu zapytania. 

  2. Wybierz pozycję Dodaj tabele(pokaż tabelę w Access 2013 ) i przeciągnij pozycję Szczegóły komputera do górnej części widoku projektu.

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

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

    Teraz przejrzyj wyrażenie. Ponieważ nie wiesz, ile cyfr stanowi pierwsza część adresu, użyj funkcji InStr, aby znaleźć pozycję pierwszego okresu. Odejmowanie 1 (w celu wykluczenia okresu) zwraca liczbę cyfr w pierwszej części. Następnie należy użyć tej liczby z funkcją Left, aby wyodrębnić tę liczbę znaków z pola IPAddress, rozpoczynając od skrajnej lewej znaku. Na koniec należy wywołać funkcję Val, aby przekonwertować znaki zwrócone przez funkcję Left na liczbę. Ten ostatni krok jest niezbędny, ponieważ typem danych źródłowych jest Tekst.

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

  6. Dodaj kolumnę dla drugiej części adresu. W kolumnie po prawej stronie wartości PartII wpisz partii: Val(Mid([adres IPAddress],InStr(1;[ADRES.IP];". +1,InStr(InStr(1;[ADRES.IP];".") +1,[ADRES IPAddress];". -InStr(1;[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 wiesz, ile cyfr stanowi druga część adresu, ani dokładnie od miejsca, w którym zaczyna się druga część (ponieważ pierwsza część nie jest za długa), użyj funkcji InStr, aby znaleźć pozycje okresów. Następnie za pomocą funkcji Mid wyodrębnia się znaki następujące po pierwszym okresie, ale poprzedzające drugi okres. Na koniec należy wywołać funkcję Val, aby przekonwertować znaki zwrócone przez funkcję Mid na liczbę. Ten ostatni krok jest niezbędny, ponieważ typem danych źródłowych jest Tekst.

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

    Ponownie przejrzyj wyrażenie. Ponieważ nie wiesz, ile cyfr stanowi trzecia część adresu lub dokładnie od miejsca, w którym zaczyna się trzecia część (ponieważ nie wiesz, jak długo trwa pierwsza i druga część), użyj funkcji InStr, aby znaleźć pozycje okresów. Następnie za pomocą funkcji Mid wyodrębnia się znaki następujące po drugim okresie, ale poprzedzające trzeci okres. Na koniec należy wywołać funkcję Val, aby przekonwertować znaki zwrócone przez funkcję Mid na liczbę. Ten ostatni krok jest niezbędny, ponieważ typem danych źródłowych jest Tekst.

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

    Ponownie przejrzyj wyrażenie. Kluczową czynnością jest znalezienie lokalizacji trzeciego okresu, a następnie wyodrębnianie wszystkich znaków, które się po nim znajdują. Ponieważ nie wiesz dokładnie, gdzie znajduje się trzeci okres, możesz trzykrotnie wywołać funkcję InStr, aby znaleźć pozycję trzeciego okresu. Następnie za pomocą funkcji Len można obliczyć liczbę cyfr w czwartej części. Zwracana liczba cyfr jest następnie używana razem z funkcją Right w celu wyodrębnienia tej liczby znaków z prawej części pola IPAddress. Na koniec należy wywołać funkcję Val, aby przekonwertować znaki zwrócone przez funkcję Mid na liczbę. Ten ostatni krok jest niezbędny, ponieważ typem danych źródłowych jest Tekst.

  9. Ustaw wiersz sortowania wszystkich czterech kolumn obliczeniowych na wartość Rosnąco.

    Ważne    Wiersz sortowania kolumny IPAddress musi być pusty.

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

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

    MachineID

    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. Przełącz się z powrotem do widoku projektu i wyczyść pole wyboru w wierszu Pokazywanie 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 kolejności sortowania. Rekordy zostaną poprawnie posortowane w kolejności rosnącej według 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 zakresie, ustawiając właściwość InputMask pola na ###.###,###,####;0;". " oraz właściwość Format dla pola adresu IP, aby &&&&&&&&&&&&.

Do czego jest do tego celu maska wprowadzania? Podczas rozpoczynania wpisywania w polu adresu maska wprowadzania zapobiega wprowadzaniu znaków innych niż cyfry i spacje między trzema kropkami. 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 zaakceptowane jako prawidłowy adres.

Do czego jest używany format wyświetlania? Po zakończeniu wpisywania tekstu i opuszczeniu pola format wyświetlania usuwa spacje w adresie oraz wyświetla tylko liczby i kropki. Jeśli więc wpiszesz "354,35 ,2,12", adres zostanie wyświetlony jako "354.35.2.12". Pamiętaj, że jeśli klikniesz w adresie lub naciśniesz klawisz F2 (aby w tryb edycji) po wybraniu adresu, spacje zostaną ponownie wyeksjonowane.

Porada: Jeśli chcesz skopiować adres, przejdź do poprzedniej kolumny lub poprzedniej kontrolki, naciśnij klawisz TAB, aby wybrać sformatowany adres, a następnie kliknij przycisk Kopiuj. W ten sposób nie skopiujemy 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, utwórz nowy obiekt na podstawie zapytania, które sortuje adresy w sposób opisany wcześniej, a nie na tabeli, w której są przechowywane adresy.

Początek strony

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Jaka jest jakość tłumaczenia?
Co wpłynęło na Twoje wrażenia?

Dziękujemy za opinię!

×