簡體   English   中英

在IP中選擇第三個和第四個八位位組,並為其分配主機名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM