Sign in with Microsoft
Sign in or create an account.
Hello,
Select a different account.
You have multiple accounts
Choose the account you want to sign in with.

本主題說明 (儲存在 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 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 右側的欄中,輸入 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?

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

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

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?
By pressing submit, your feedback will be used to improve Microsoft products and services. Your IT admin will be able to collect this data. Privacy Statement.

Thank you for your feedback!

×