[英]Pick the 3rd and 4th octet in an IP and assign it a hostname
在MS Access中,我試圖按IP的第3個和第4個八位位組對IP進行排序,然后在它們各自的列中將它們分類為[IpAddress]和[HostName]。 第三個八位位組將鏈接到服務器機架。 例如1,22或121,第4個八位位組將鏈接到其在機架中的位置。 例如s1,s22或s121。 因此,將從列表和查詢中對IP進行排序,以根據IP構建HostName。 我如何/應該去做這個。 我對MS訪問不是很有經驗。 我嘗試使用iif語句,但是無法獲得所需的結果。 我希望HostName遵循以下命名法:121s1。 感謝您的所有幫助。
SELECT IIf(query1.Ipaddress Like '*.*.3.#', "1003s'#'", 22) AS HostName
FROM Query1;
這是我要使用的行。 但是,它只會產生帶有引號1003a'#'的輸出。 如果我周圍沒有“”,它將在查詢表達式IIf(query1.Ipaddress like' 。. 3。#',1003a'#',22)中返回“語法錯誤(缺少運算符)。帶有引號確切的說是引號(1003a'#')。22只是一個占位符,因此我可以在訪問中回復一個答案。也許這將對我所要求的有所幫助。
正如@WEI_DBA在對該問題的評論中所建議的那樣,請考慮更改IP地址的存儲方式。 代替單個字符串
IpAddress
----------
10.0.121.1
10.0.12.34
您可以將它們存儲為四個單獨的整數
IpOctet1 IpOctet2 IpOctet3 IpOctet4
-------- -------- -------- --------
10 0 121 1
10 0 12 34
然后,您可以簡單地將HostName導出為
IpOctet3 & "s" & IpOctet4
如果您希望將舊的表示形式用於顯示目的,則可以使用
IpOctet1 & "." & IpOctet2 & "." & IpOctet3 & "." & IpOctet4
將4個新的Integer
列添加到表中后,可以使用VBA代碼填充它們,如下所示:
Option Compare Database
Option Explicit
Sub SplitIpAddresses()
Dim cdb As DAO.Database
Set cdb = CurrentDb
Dim rst As DAO.Recordset
Set rst = cdb.OpenRecordset("SELECT * FROM Table1 WHERE IpAddress IS NOT NULL", dbOpenDynaset)
Do While Not rst.EOF
Dim octets As Variant
octets = Split(rst!IpAddress, ".")
rst.Edit
rst!IpOctet1 = octets(0)
rst!IpOctet2 = octets(1)
rst!IpOctet3 = octets(2)
rst!IpOctet4 = octets(3)
rst.Update
rst.MoveNext
Loop
rst.Close
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.