访问-在一系列其他字段之间更新字段

时间:2019-01-04 22:57:01

标签: ms-access sql-update

我在表格中有一个IP地址列表。我最近决定按IP地址划分它们的名称(我现在无法给出更好的名称-它们的组织单位?无论如何,无论在这里还是在那里)。

我想要做的是更新IP地址范围的划分。例如,我想更新IP地址192.168.1.10-192.168.1.50来划分Local。我知道是这样的,我只是想不通:

UPDATE [IP Address Range]
SET [IP Address Range].Division = Local
WHERE [IP Address Range].[IP Addresses] >192.168.1.10 <192.168.1.50

我在正确的轨道上吗?

1 个答案:

答案 0 :(得分:2)

由于IP地址是用字符串表示的,所以将对包含字符串的ASCII字符代码进行任何比较,除非将IP地址的所有部分都填充为三个前导零的字符,否则将返回不希望的结果。 new_values)。

使用填充,可以进行字符串比较,因为可以将字符与每个字符串中相同位置的字符进行比较,并且数字字符的ASCII字符代码是连续的,并且随着数字值的增加而增加。

将字符串解释为当前出现的格式(即不带填充零)的数值范围时,需要编写一个函数来解析以句点分隔的字符串的每个部分,并比较每个部分的数值。

实现此目的的一种方法是将IPv4地址表示的4个字节转换为32位整数(不幸的是,由于VBA不支持32位无符号整数,因此必须使用Double表示),然后只需使用标准关系运算符比较两个数值即可。

这是一个简单的例子:

old_values

(不幸的是,VBA也没有按位移位运算符,否则它会更短)

"192.168.001.050"Function IPValue(IPAddr As String) As Double Dim byt Dim fac As Long: fac = 16777216 For Each byt In Split(IPAddr, ".") IPValue = IPValue + fac * byt fac = fac / 256 Next byt End Function 的范围变为:

192.168.1.10
192.168.1.50

在公共模块中定义函数后,您可以按以下方式在SQL语句中使用:

?IPValue("192.168.1.10")
 3232235786