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

本主題說明 (儲存在 Access 資料庫中的IP) 位址排序因特網通訊協議的程式。

簡介

如果您使用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

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

分別排序四個部分是排序 IP 位址背後的訣竅。 在接下來的程式中,您會建立一個查詢,除了IP位址欄位之外,還包含四個計算結果列,其中每一欄會儲存位址值的一部分。 第一個計算結果列會保留位址的第一個數值部分,第二個計算結果欄會保留位址的第二個數值部分,依此類推。 查詢會依據四個計算結果列來排序記錄,而不是依IPAddress字段排序記錄。

建立查詢

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

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

  2. 選取 [新增數據表 (在 Access 中 顯示數據表 ]) 並將 [ 計算機詳細數據 ] 拖曳到 [設計視圖] 的上方區段。

  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 右側的欄中,輸入 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) ) 。 表達式會傳回IPAddress字段中第二個和第三個週期之間的字元。

    再次檢閱表達式。 由於您不知道位址第三部分有多少位數,或確切的第三部分是從哪裡開始 (,因為您不知道第一部分和第二部分) 多久,因此您可以使用 InStr 函數來尋找期間的位置。 接著,您使用 Mid 函數來擷取第二個句點後面但第三個句點之前的字元。 最後,您呼叫 Val 函數,將 Mid 函數傳回的字元轉換為數位。 最後一個步驟是必要的,因為基礎數據類型是 [文字]。

  8. 新增第四個及最後一個位址部分的欄。 在 PartIII 右側的欄中,輸入 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

    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. 切換回 [設計視圖],並清除 [ 顯示 所有四個計算結果列的列] 中的複選框。 這可防止計算結果列顯示在 [數據工作表檢視] 中。

  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?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。