本主題說明排序網際網路通訊協定 (儲存在) 中之 IP 位址 Access 程式。

簡介

如果您使用 IP 位址,您可能已經知道它並不像處理文字或數位一樣簡單。 這是因為 IP 位址實際上是由四個以 (.) 分隔的數值集合,其中每個值都是介於 0 到 255 之間的數位。 下表顯示任何排序次序之前的資料。

MachineID

員工

位置

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

在 Access 中排序 IP 位址是一項挑戰,因為 Access 並未提供儲存 IP 位址的特殊資料類型。 雖然 IP 位址只是數位的集合,但您無法將 IP 位址儲存在數值欄位中。 這是因為數值欄位只支援單一小數點 (.) ,而 IP 位址則包含三個 (.) 。 這表示您必須將位址儲存在文字欄位中。

由於您將 IP 位址儲存在文字欄位中,因此您無法使用 Access 中的內建排序按鈕,以有意義的方式排序位址。 排序按鈕會一直以字母順序排序文字欄位中的值,即使字元是數位也一樣。 換句話說,位址會先按第一位數排序,然後再按第二位數排序,以此類取代位址的數值。 下表顯示來自上一個資料表的位址,在 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

以 1 為起始的位址會顯示在以 2 為起始位址之前,以此類比。 下表以正確的遞增順序顯示位址。

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

為了更容易瞭解排序這些位址的步驟,您將 IP 位址分成四個數值部分。 位址必須按照第一部分排序,然後針對第一部分的每一個值排序,然後按第二部分排序,以此類比。 表格顯示不同欄中的每個部分,由於欄包含簡單的數值,因此可以按遞增順序從左至右排序欄,如下表所示。

PartI

PartII

Part進位

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

個別排序四個部分是排序 IP 位址的訣竅。 在以下步驟中,您建立查詢時,除了 IP 位址欄位外,還包含四個計算結果欄,其中每一欄都儲存部分位址值。 第一個計算結果欄會保留位址的第一個數位部分,第二個計算結果欄會保留位址的第二個數值部分,以此類比。 查詢會按照四個計算結果欄來排序記錄,而不是按 IPAddress 欄位排序記錄。

建立查詢

您將建立名為 Sorted IPAddresses 的選取查詢,以 IP 位址的遞增順序顯示記錄。 假設目前的資料庫有一個名為 MachineDetails 的資料表,其中包含名為 IPAddress 的文字欄位。

  1. 按一下 [建立 > 查詢設計。 

  2. 選取新增表格 (Access 2013) 中顯示表格,然後將機器詳細資料拖曳到設計檢視的上方區段。

  3. 將 MachineID 和 IPAddress 欄位拖曳到查詢設計格線。

  4. 您現在已準備好新增計算結果欄。 在右邊的第一個空白欄中,輸入運算式PartI:Val (Left ([IPAddress], (InStr (1,[IPAddress],"」。) 欄位) ) ) 中的) ) ) -1。 運算式會返回第一個期間 (.) 在 IPAddress 欄位中。

    現在,請查閱運算式。 由於您不知道位址的第一部分有多少位數,因此您可以使用 InStr 函數尋找第一個期間的位置。 減去 1 (以排除期間) 會返回第一部分中的位數。 接著,您可以使用此數位與 Left 函數,從 IPAddress 欄位從最左邊的字元開始解壓縮該字元。 最後,您可以呼叫 Val 函數,將 Left 函數所返回的字元轉換為數字。 最後一個步驟是必要的,因為基礎資料類型是文字。

  5. 按一下快速存取工具列上的儲存查詢。 在每個中間步驟之後,建議這麼做。

  6. 新增第二個位址部分的欄。 在 PartI 右邊的欄中,輸入PartII:Val (Mid ([IPAddress],InStr (1,[IPAddress],"」。) +1,InStr (InStr (1,[IPAddress],"」。) +1,[IPAddress],"」。) -InStr (1,[IPAddress],"」。) 欄位) ) 中的) ) -1。 運算式會返回位於 IPAddress 欄位中第一個和第二個句號之間的字元。

    再次檢查運算式。 由於您不知道位址第二部分有多少位數,或是第二部分起始位置 (因為您不知道第一部分是) 多久,所以您可以使用 InStr 函數尋找句點的位置。 接著,您可以使用 Mid 函數來抽選第一個期間之後但第二個期間之前的字元。 最後,您可以呼叫 Val 函數,將 Mid 函數所返回的字元轉換為數字。 最後一個步驟是必要的,因為基礎資料類型是文字。

  7. 新增第三個位址部分的欄。 在 PartII 右邊的欄中,輸入Part%。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。 運算式會返回位於 IPAddress 欄位中第二個和第三個句號之間的字元。

    再次檢查運算式。 因為您不知道位址的第三部分有多少位數,或是第三個部分的起始位置 (因為您不知道第一部分和第二部分是) 多久,所以您可以使用 InStr 函數尋找句點的位置。 接著,您可以使用 Mid 函數來抽選第二個期間之後但第三個期間之前的字元。 最後,您可以呼叫 Val 函數,將 Mid 函數所返回的字元轉換為數字。 最後一個步驟是必要的,因為基礎資料類型是文字。

  8. 新增第四個及最後一個位址部分的欄。 在 PartADS 右邊的欄中,輸入 PartIV:Val (Right ([IPAddress],Len ([IPAddress]) -InStr (InStr (InStr (1,[IPAddress],"」) +1,[IPAddress],"」。) +1,[IPAddress],"」。) ) ) 欄位列。 運算式會回到最後一個期間後的字元。

    再次檢查運算式。 關鍵在於找出第三個期間的位置,然後解壓縮其後的所有字元。 由於您不知道第三個週期的精確位置,因此您撥打 InStr 函數三次以尋找第三個期間的位置。 接著,使用 Len 函數來計算第四部分的位數。 然後,會與 Right 函數一起使用所返回的位數,從 IPAddress 欄位的右半部解壓縮該多個字元。 最後,您可以呼叫 Val 函數,將 Mid 函數所返回的字元轉換為數字。 最後一個步驟是必要的,因為基礎資料類型是文字。

  9. 將四 計算結果欄的排序列設為 遞增

    重要    IPAddress 欄的排序列必須保留空白。

    如果您想要根據其他域值排序,除了位址之外,將欄位放在所有四個計算結果欄的左側 或右側。 請勿在計算結果欄之間放置其他排序欄位。

  10. 下一個步驟是隱藏資料工作表中的四個計算結果欄。 但在您這麼做之前,請切換到資料工作表視圖,查看計算結果資料行中的運算式結果。 下表顯示您將在資料工作表視圖中看到的欄。

    MachineID

    IPAddress

    PartI

    PartII

    Part進位

    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. 切換回設計檢視,並清除所有四個計算結果欄 之顯示列中 的核取方塊。 這可防止計算結果欄顯示在資料工作表的視圖中。

  12. 或者,指定從查詢排除記錄的準則。

  13. 切換到資料工作表視圖,以排序次序查看記錄。 這些記錄會以 IP 位址的遞增順序正確排序。

排序 IP 位址的更多用途

在資料輸入期間驗證 IP 位址

如果您想要驗證位址而不撰寫程式碼,您可以將欄位的 InputMask屬性設定為#####;0;,以在有限範圍內執行此工作。",以及 ip 位址欄位的Format屬性來&&&&&&&&&&&&。

輸入遮罩有什麼功能? 當您開始在位址欄位中輸入時,輸入遮罩可防止在三個句號之間輸入數位和空格外的字元。 如果數值部分為雙位數數位,請保留第三位數空白,或改為輸入空格。 請注意,如果使用者輸入位址的一或多個部分,或只輸入空格而非數值,此輸入遮罩不會警告使用者。 例如,"345。 .3. " 會接受為有效的位址。

顯示格式有什麼功能? 當您完成輸入並離開欄位時,顯示格式會移除位址中的空格,並顯示數位和句點。 因此,如果您輸入「354.35 .2 .12」,位址會顯示為「354.35.2.12」。 請注意,如果您在位址內按一下,或按 F2 (以進入編輯模式) 選取位址時,空格會再次出現。

提示: 如果您想要複製位址,請移至上一欄或控制項,按 TAB 以選取格式化的位址,然後按一下 [ 複製。 這樣一來,您將不會複製包含空格的位址字串。

根據 IP 位址排序表單或報表的記錄

如果您需要建立以 IP 位址排序記錄的表單或報表,新物件會以如先前所述排序位址的查詢做為基礎,而不是以儲存位址的資料表為根據。

頁面頂端

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×