对 IP 地址排序

重要:  本文是由机器翻译的,请参阅免责声明。请在 此处 中查找本文的英文版本以便参考。

本主题介绍排序 Internet 协议 (IP) 地址Microsoft Office Access 2007数据库中存储的过程。

本文内容

简介

创建查询

更多用于排序的 IP 地址

简介

如果使用过 IP 地址,您可能已经知道使用它不如使用文本或数字那样简单。这是因为 IP 地址实际上是一组以句点 (.) 分隔的四个数值,每个值都是 0 到 255 的数字。下表显示了在应用任何排序次序之前的数据。

计算机 Id

Employee

位置

Ip 地址

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 的内置排序按钮以有意义的方式来对地址进行排序。排序按钮将始终按字母次序对文本字段中的值进行排序,即使字符是数字。换句话说,地址将按第一个数字排序,然后按第二个数字排序,如此等等,而不是按组成地址的数值来排序。下表显示了以字母次序按“IP 地址”字段对上表中的地址进行排序的结果。

计算机 Id

Ip 地址

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


启动与 2,等等的地址之前显示从 1 开始的地址。下表中正确升序顺序显示的地址。

计算机 Id

Ip 地址

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

PartIII

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 地址字段中,每列在其中存储的地址值的一部分的四个计算的列。第一个计算的列将保持地址数值的第一部分,第二个计算列将包含地址等的第二个数值部分。而不是按 ip 地址字段的记录进行排序,查询将记录排序通过四个计算列。

返回页首

创建查询

您将创建名为“已排序的 IP 地址”的选择查询,用于按 IP 地址的升序次序显示记录。假设当前数据库有一个名为 MachineDetails(计算机详细信息)的表,并且该表包括名为“IP 地址”的文本字段。

  1. “创建”选项卡上的“其他”组中,单击“查询设计”

  2. 显示表对话框中,在表格选项卡上,单击MachineDetails ,然后单击添加。关闭对话框。

  3. 将“计算机 ID”和“IP 地址”字段拖到查询设计网格。

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

    现在,检查表达式。由于您不知道多少位数组成地址的第一部分,您可以使用InStr函数来查找第一个期间的位置。减去 1 (排除句点) 返回的第一部分中的位数。然后使用此数字Left函数提取该数目的字符,从最左侧的字符,从 ip 地址字段。最后,调用Val函数将转换成数字Left函数返回的字符。此最后一步是必需的因为基础数据类型是文本。

  5. “快速访问工具栏”上单击“保存”以保存查询。最好在每个中间步骤之后这样做。

  6. 添加第二个地址部分的列。在“第 I 部分”右侧的列中,在“字段”行内键入 PartII: Val(Mid([IPAddress],InStr(1,[IPAddress],".")+1,InStr(InStr(1,[IPAddress],".")+1,[IPAddress],".")-InStr(1,[IPAddress],".")-1))。该表达式将返回“IP 地址”字段中位于第一和第二个句点之间的字符。

    再次检查表达式。您不知道多少位数组成地址的第二部分或第二部分具体从哪里开始 (因为没有多长时间的第一部分是),因为使用InStr函数来找到时间段的位置。然后使用Mid函数提取的字符,请按照第一个期间但位于第二个时间段。最后,您可以呼叫Val函数将转换成数字Mid函数返回的字符。此最后一步是必需的因为的基础数据类型是文本。

  7. 添加第三个地址部分的列。在“第 II 部分”右侧的列中,在“字段”行内键入 PartIII: 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))。该表达式将返回“IP 地址”字段中位于第二个和第三个句点之间的字符。

    再次检查表达式。您不知道多少位数组成地址的第三部分或第三部分具体从哪里开始 (因为您不知道多长时间的第一个和第二部分是),因为使用InStr函数来找到时间段的位置。然后使用Mid函数提取的字符后面的第二个期间但前面第三个时间段。最后,您可以呼叫Val函数将转换成数字Mid函数返回的字符。此最后一步是必需的因为基础数据类型是文本。

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

    再次检查表达式。密钥是查找第三个时间段的位置,然后提取其后的所有字符。由于您不知道完全第三个时间段所在的位置,请三次调用InStr函数来查找第三个时间段的位置。然后使用Len函数来计算第四部分的位数。返回的位数然后通过使用Right函数从右侧部分的 ip 地址字段中提取该数目的字符。最后,您可以呼叫Val函数将转换成数字Mid函数返回的字符。此最后一步是必需的因为基础数据类型是文本。

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

    重要   排序行中的 ip 地址列中必须保留为空。

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

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

计算机 Id

Ip 地址

PartI

PartII

PartIII

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

  1. 切换回设计视图,并清除所有四个计算列的“显示”行中的复选框。这样可以防止数据表视图中显示计算列。

  2. (可选)指定从查询中排除记录的条件。

  3. 切换到数据表视图,以查看按排序次序显示的记录。您将看到记录按 IP 地址的升序次序正确排序。

返回页首

排序后的 IP 地址的更多用途

在数据输入期间验证 IP 地址

如果您想要无需编写代码验证地址,则可以这样有限的程度通过设置输入掩码属性的字段拖动到#。 ## #。 # # #。 # # #; 0;""和到 IP 地址字段的格式属性& & & & & & & & & & & &

输入的掩码执行哪些操作?当您开始键入地址字段中,输入的掩码阻止您输入数字和三个付款期之间的空格以外的字符。如果数值部分是两位数,将第三个数字保留为空或键入空格。请注意,此输入的掩码不会警告用户如果用户跳过键入地址或类型仅空格,而不是一个数值的一个或多个部分。例如,"345。。3."为有效地址接受。

显示格式执行哪些操作?当您完成键入内容并将该字段时,显示格式删除地址中的空格,并显示只需数字和段。因此,如果您键入"354.35.2.12","354.35.2.12"显示的地址。请注意,如果您单击地址内部,或按 F2 (进入编辑模式下) 空格选择地址时,将重新出现。

提示: 如果您想要复制的地址,移动到上一列或控件,请按 TAB 以选择带格式的地址,然后单击复制。通过执行此操作,将不会复制包含空格的地址字符串。

按 IP 地址对窗体或报表中的记录排序

如果需要创建一个按 IP 地址对记录排序的窗体或报表,则新对象应当基于用上述地址排序方法所实现的查询,而不是基于存储地址的表。

返回页首

注意: 机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关 Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×