Applies ToMicrosoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

本主题介绍对存储在 Access 数据库中的 ip) 地址 (Internet 协议进行排序的过程。

简介

如果你使用 IP 地址,你可能已经知道它不像使用文本或数字那么简单。 这是因为 IP 地址实际上是由句点 (.) 分隔的四个数值的集合,其中每个值都是 0 到 255 之间的数字。 下表显示了应用任何排序顺序之前的数据。

MachineID

Employee

位置

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

第三部分

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) 中 显示表 ”,然后将 “计算机详细信息” 拖动到“设计视图”的上部。

  3. 将 MachineID 和 IPAddress 字段拖动到查询设计网格。

  4. 现在可以添加计算列了。 在右侧的第一个空白列中,键入表达式 PartI: Val (Left ([IPAddress], (InStr (1,[IPAddress]“。”字段行中的 ) -1) ) ) 。 表达式返回第一个句点 (.) 之前的字符 在“IPAddress”字段中。

    现在,查看表达式。 由于您不知道地址的第一部分有多少位数,因此使用 InStr 函数查找第一个句点的位置。 减去 1 (以排除时间段) 返回第一部分中的位数。 然后,将此数字与 Left 函数一起使用,从 IPAddress 字段提取从最左侧字符开始的多个字符。 最后,调用 Val 函数,将 Left 函数返回的字符转换为数字。 最后一步是必需的,因为基础数据类型为 Text。

  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 函数返回的字符转换为数字。 最后一步是必需的,因为基础数据类型为 Text。

  7. 为第三个地址部分添加 列。 在 PartII 右侧的列中,键入 Part III: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 函数返回的字符转换为数字。 最后一步是必需的,因为基础数据类型为 Text。

  8. 添加第四个和最后一个地址部分的 列。 在 Part III 右侧的列中,键入 PartIV:Val (Right ([IPAddress],Len ([IPAddress]) -InStr (InStr (InStr (1,[IPAddress]“。”) +1,[IPAddress],“.) +1,[IPAddress],“.”字段 行中的 ) ) ) 。 表达式返回上一句点后面的字符。

    同样,请查看表达式。 关键是查找第三个句点的位置,然后提取其后的所有字符。 由于你不知道第三个周期的确切位置,因此调用 InStr 函数三次以查找第三个句点的位置。 然后,使用 Len 函数计算第四部分的位数。 然后,返回的位数与 Right 函数一起使用,以从 IPAddress 字段的右侧部分提取多个字符。 最后,调用 Val 函数,将 Mid 函数返回的字符转换为数字。 最后一步是必需的,因为基础数据类型为 Text。

  9. 将所有四个计算列的 “排序 ”行设置为 “升序”。

    重要提示    “IPAddress”列的 “排序” 行必须留空。

    如果要按其他字段值排序,除了地址,请将字段放在 所有四个计算列的左侧或右侧。 不要在计算列之间放置其他排序字段。

  10. 下一步是在数据表中隐藏四个计算列。 但在执行此操作之前,请切换到数据表视图以查看计算列中表达式的结果。 下表显示了将在“数据表”视图中看到的列。

    MachineID

    IPAddress

    PartI

    PartII

    第三部分

    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 地址对记录进行排序的窗体或报表,请将新对象基于按前面所述对地址进行排序的查询,而不是基于存储地址的表。

返回页首

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。