繁体   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