使用验证规则输入数据时,可以在 Access 桌面数据库中审查或验证数据。 表达式生成器有助于正确地对规则进行格式设置。 可在表格设计或表格数据表视图设置验证规则。 Access 中有三种类型的验证规则:
1. 字段验证规则 可以使用字段验证规则指定所有有效字段值必须满足的条件。 不需要将当前字段指定为规则的一部分,除非将在函数中使用该字段。 要在字段中输入的对字符类型的限制可能通过输入掩码会更容易实现。 例如,日期字段可能具有一个禁止使用过去日期值的验证规则。
快速示例:
禁止过去日期值:>=Date ()
一般接受的电子邮件格式:是 Null 还是 ( (类似于“*?@?*???*“) and (不像 ”*[ ,;]*“) )
小于或等于 5 的数字:<=5
Currency 字段不能为负数:>=0
限制字符串中的字符长度:Len ([StringFieldName]) <100
2. 记录验证规则 可以使用记录验证规则指定所有有效记录必须满足的条件。 可以使用记录验证规则比较不同字段间的值。 例如,拥有两个日期字段的记录可能要求一个字段值始终位于另一字段值的前面(例如,“开始日期”在“结束日期”之前)。
快速示例:
确保结束日期不早于开始日期:[结束日期]>=[开始日期]
输入在订单日期之后不超过 30 天的所需日期:[RequiredDate]<=[OrderDate]+30
3. 窗体上的验证 您可以使用窗体上控件的 “验证规则” 属性来指定该控件输入的所有值必须满足的条件。 “验证规则”控件属性的工作方式类似于字段验证规则。 如果规则只特定于该表单而不是该表格,则无论在何处使用,通常都会使用表单验证规则而非字段验证规则。
本文内容
概述
本文说明如何使用表字段和窗体控件中的有效性规则和验证文本。 有效性规则是限制表字段中的输入或窗体中的控件(例如文本框)的一种方法。 验证文本要求您提供消息,以帮助输入无效数据的用户。
输入数据时,Access 检查输入是否违反有效性规则,如果违反,则不接受输入,Access 将显示一条消息。
Access 提供多种方法限制输入:
-
数据类型 每个表字段都具有一个数据类型,用于限制用户输入的内容。 例如,“日期/时间”字段只接受日期和时间,“货币”字段只接受货币数据,以此类推。
-
字段属性 某些字段属性会限制数据输入。 例如,字段的“字段大小”属性通过限制数据量来限制输入。
还可以使用“有效性规则”属性要求特定的值,以及使用“验证文本”属性来提醒用户存在错误。 例如,在“有效性规则”属性中输入 >100 And <1000 等规则会强制用户输入 100 到 1,000 之间的值。 诸如 [结束日期]>=[开始日期] 等规则强制用户输入不早于开始日期的结束日期。 在“验证文本”属性中输入“输入 100 到 1,000 之间的值”或“输入不早于开始日期的结束日期”等文本会在用户出错时通知用户并说明如何修复错误。
-
输入掩码 可以使用输入掩码强制用户以特定方式输入值,从而输入有效数据。 例如,输入掩码可以强制用户以欧洲格式输入日期,例如 2007.04.14。
可以单独使用这些验证数据方法或互相结合使用。 数据类型不可选,提供大部分最基本的数据验证类型。
有关数据类型、字段大小和输入掩码的详细信息,请参阅数据类型和字段属性简介一文。
有效性规则的类型
可以创建两种基本类型的有效性规则:
-
字段有效性规则 在离开字段时使用字段有效性规则检查在该字段中输入的值。 例如,假设具有“日期”字段,并且你在该字段的“有效性规则”属性中输入 >=#01/01/2010#。 该规则现在要求用户输入 2010 年 1 月 1 或之后的日期。 如果输入的日期早于 2010 年,然后你试着将焦点放在另一个字段,Access 会阻止你离开当前字段,除非解决该问题。
-
记录有效性规则 使用记录有效性规则控制能够保存记录(表中的行)的时间。 与字段有效性规则不同,记录有效性规则会引用同一表中的其他字段。 当你需要将一个字段的值对照另一个字段中的值进行检查时,可以创建记录有效性规则。 例如,假设你的公司要求你在 30 天内发货,如果未在该时间内发货,则必须向客户退还部分购买价格。 你可以定义记录有效性规则(例如 [RequiredDate]<=[OrderDate]+30)以确保不会输入过晚的发货日期(RequiredDate 字段中的值)。
如果有效性规则的语法看上去很晦涩,请参阅可以在有效性规则中使用哪些内容一节,了解对语法的说明以及一些有效性规则示例。
可以在哪些位置使用有效性规则
可以为表字段和窗体上的控件定义有效性规则。 如果为表定义规则,则这些规则在您导入数据时适用。 若要向表添加验证规则,请打开表并使用功能区“ 表字段 ”选项卡上的命令。 若要向窗体中添加有效性规则,请在布局视图中打开该窗体,然后向各个控件的属性添加规则。
向表中添加有效性规则部分中的步骤说明了如何向表字段中添加有效性规则。 本文后面的向窗体上的控件添加有效性规则部分中的步骤说明了如何向各个控件中的属性添加规则。
可以在有效性规则中使用哪些内容
有效性规则可以包含表达式 - 返回单个值的函数。 可以使用表达式执行计算、操作字符或测试数据。 有效性规则表达式测试数据。 例如,表达式可以检查一系列值中的某个值,如 "东京" Or "莫斯科" Or "巴黎" Or "赫尔辛基"。 表达式还可以执行数学运算。 例如,表达式 <100 强制用户输入小于 100 的值。 表达式 ([订购日期] - [发货日期]) 计算在下订单与发货之间所经过的天数。
有关表达式的详细信息,请参阅构建表达式一文。
向表添加有效性规则
可以添加字段验证规则和/或记录有效性规则。 字段验证规则检查字段的输入,并在焦点离开字段时应用。 记录有效性规则检查一个或多个字段的输入,并在焦点离开记录时应用。 记录有效性规则通常会比较两个或多个字段的值。
注意: 以下字段类型不支持有效性规则:
-
自动编号
-
OLE 对象
-
附件
-
ReplicationID
创建字段验证规则
-
选择要验证的字段。
-
在“ 表字段 ”选项卡上的“ 字段验证 ”组中,单击“ 验证”,然后单击“ 字段验证规则”。
-
使用表达式生成器创建规则。 有关使用表达式生成器的详细信息,请参阅使用表达式生成器一文。
创建消息显示无效字段输入
-
选择需要无效输入消息的字段。 字段应该已拥有有效性规则。
-
在“ 表字段 ”选项卡上的“ 字段验证 ”组中,单击“ 验证”,然后单击“ 字段验证消息”。
-
输入相应的消息。 例如,如果验证规则为 >10,消息可能是“输入小于 10 的值”。
有关字段有效性规则和消息的一些示例,请参阅“有效性规则参考”部分。
创建记录有效性规则
-
打开要验证记录的表。
-
在“ 表字段” 选项卡上的“ 字段验证 ”组中,单击“ 验证”,然后单击“ 验证规则”。
-
使用表达式生成器创建规则。 有关使用表达式生成器的详细信息,请参阅使用表达式生成器一文。
创建消息显示无效记录输入
-
打开需要无效输入消息的表。 该表应该已拥有记录有效性规则。
-
在“ 表字段 ”选项卡上的“ 字段验证 ”组中,单击“ 验证”,然后单击“ 验证消息”。
-
输入相应的消息。 例如,如果验证规则为 [StartDate]<[EndDate],则消息可能是 “StartDate 必须位于 EndDate 之前”。
根据新的有效性规则来测试现有数据
如果向现有表添加有效性规则,您可能希望测试规则,以查看是否有任何现有数据无效。
-
打开希望在设计视图中测试的表。
在“ 表设计 ”选项卡上的“ 工具” 组中,单击“ 测试验证规则”。
-
单击“是”关闭警告消息并启动测试。
-
如果系统提示您保存表,请单击“是”。
-
在执行操作时,可能会看到其他各种警告消息。 阅读每条消息中的说明,然后根据需要单击“是”或“否”完成或停止测试。
向窗体中的控件添加有效性规则
可以使用窗体控件的“有效性规则”属性和“验证文本”属性验证输入到该控件的数据并帮助输入无效数据的用户。
提示: 如果使用功能区中的一个“窗体”命令自动从表中创建窗体,则窗体中相应的控件将继承基础表中的任何字段的有效性。
控件可以拥有不同于表字段的有效性规则,控件可以绑定到该不同的有效性规则。 如果希望窗体比表有更多限制,这非常有用。 先应用窗体规则,然后应用表规则。 如果表比窗体限制更多,则为表字段定义的规则优先。 如果规则互斥,则根本无法输入任何数据。
例如,假设您将以下规则应用到表中的日期字段:
<#01/01/2010#
但是,然后您对绑定到该日期字段的窗体控件应用了该规则:
>=#01/01/2010#
现在,日期字段要求 2010 年之前的值,但是窗体控件要求 2010 年之后的日期,因此您根本无法输入任何数据。
创建控件的有效性规则
-
右键单击要更改的窗体,然后单击“布局视图”。
-
右键单击要更改的控件,然后单击“属性”打开该控件的属性表。
-
单击“全部”选项卡,然后在“验证规则”属性框中输入验证规则。
提示: 单击“生成”按钮启动表达式生成器。
有关使用表达式生成器的详细信息,请参阅使用表达式生成器一文。
-
在“验证文本”属性框中输入消息。
有效性规则参考
有效性规则使用 Access 表达式语法。 有关表达式的详细信息,请参阅表达式简介一文。
有效性规则和验证文本示例
有效性规则 |
验证文本 |
---|---|
<>0 |
输入非零值。 |
>=0 |
值不得小于零。 - 或 - 必须输入正数。 |
0 或 >100 |
值必须为 0 或者大于 100。 |
0 到 1 之间 |
输入带百分号的值。 (用于将数值存储为百分比的字段)。 |
<#01/01/2007# |
输入 2007 年之前的日期。 |
>=#01/01/2007# AND <#01/01/2008# |
必须输入 2007 年的日期。 |
<Date() |
出生日期不能是将来的日期。 |
StrComp(UCase([姓氏]), [LastName],0) = 0 |
“姓氏”字段中的数据必须大写。 |
>=Int(Now()) |
输入当天的日期。 |
M 或 F |
输入 M(代表男性)或 F(代表女性)。 |
LIKE "[A-Z]*@[A-Z].com" 或 "[A-Z]*@[A-Z].net" 或 "[A-Z]*@[A-Z].org" |
输入有效的 .com、.net 或 .org 电子邮件地址。 |
[要求日期]<=[订购日期]+30 |
输入在订单日期之后的 30 天内的要求日期。 |
[结束日期]>=[开始日期] |
输入不早于开始日期的结束日期。 |
常见有效性规则运算符的语法示例
运算符 |
函数 |
示例 |
---|---|---|
NOT |
测试相反值。 在除 IS NOT NULL 之外的任何比较运算符之前使用。 |
NOT > 10(与 <=10 相同)。 |
IN |
测试值是否等于列表中的现有成员。 比较值必须是括在圆括号中的逗号分隔列表。 |
IN ("东京","巴黎","莫斯科") |
BETWEEN |
测试值范围。 必须使用两个比较值(低和高), 并且必须使用 AND 分隔符来分隔这两个值 。 |
BETWEEN 100 AND 1000(与 >=100 AND <=1000 相同) |
LIKE |
匹配文本和备注字段中的模式字符串。 |
LIKE "Geo*" |
IS NOT NULL |
强制用户在字段中输入值。 此设置与将“必填”字段属性设置为“是”具有相同的效果。 但是,如果启用了“必填”属性但用户没有输入值,则 Access 会显示令人稍感不快的错误消息。 通常,如果使用 IS NOT NULL 并在“验证文本”属性中输入友好的消息,则您的数据库会更易于使用。 |
IS NOT NULL |
AND |
指定有效性规则的所有部分必须为真。 |
>= #01/01/2007# AND <=#03/06/2008# 注意: 您还可以使用 AND 来组合有效性规则。 例如:NOT "UK" AND LIKE "U*"。 |
或者 |
指定有效性规则部分并非所有部分必须为真。 |
一月 OR 二月 |
< |
小于。 |
|
<= |
小于或等于。 |
|
> |
大于。 |
|
>= |
大于或等于。 |
|
= |
等于。 |
|
<> |
不等于。 |
在有效性规则中使用通配符
在有效性规则中可使用通配符。 请记住,Access 支持两个通配符字符集:ANSI-89 和 ANSI-92。 这两种标准使用不同的通配符字符集。
默认情况下,所有 .accdb 和 .mdb 文件都使用 ANSI-89 标准。
可以执行下列步骤将数据库的 ANSI 标准更改为 ANSI-92:
-
在“文件”选项卡上,单击“选项”。
-
在“Access 选项”对话框中,单击“对象设计器”。
-
在“查询设计”部分的“SQL Server 兼容语法(ANSI-92)”下,选择“此数据库”。
有关使用通配符以及 SQL 的 ANSI 标准的详细信息,请参阅 Access 通配符参考一文。