本文说明如何使用表字段和窗体控件中的有效性规则和验证文本。有效性规则是限制表字段中的输入或窗体中的控件(例如文本框)的一种方法。验证文本要求您提供消息,以帮助输入无效数据的用户。
输入数据时,Access 检查输入是否违反有效性规则,如果违反,则不接受输入,Access 将显示一条消息。
Access 提供多种方法限制输入:
数据类型 表中的每个字段中具有限制用户可以输入的数据类型。例如,包含日期/时间字段只接受日期和时间、 货币字段接受仅货币数据,依此类推。
字段属性 某些字段属性限制数据输入。例如,字段的字段大小属性会限制输入通过限制的数据量。
您还可以使用有效性规则属性要求特定值和验证文本属性,以提醒用户任何错误。例如,例如输入规则> 100 和 < 1000年在有效性规则属性强制用户输入 100 和 1000 之间的值。如规则[EndDate] > = [StartDate]强制用户输入一个日期的结束日期或之后开始日期。输入文本,如"输入 100 和 1000 之间的值"或"输入的结束日期或之后的开始日期"中验证文本属性告诉用户,当他们进行了误操作,以及如何修复错误。
输入掩码 您可以使用输入的掩码通过强制用户以特定方式输入值验证数据。例如,输入的掩码可以强制用户欧洲格式,如 2007.04.14 输入日期。
可以单独使用这些验证数据方法或互相结合使用。数据类型不可选,提供大部分最基本的数据验证类型。
可以创建两种基本类型的有效性规则:
字段验证规则 使用字段验证规则检查时,将该字段的字段中输入的值。例如,假设您有一个日期字段中,并且您输入> = #01/01/2010年 #该字段的有效性规则属性中。该规则现在要求用户输入或 2010 年 1 月 1 日之后的日期。如果您输入早于 2010 年的日期,然后尝试将焦点放在另一个字段,Access 会阻止您离开当前字段,直到解决的问题。
记录有效性规则 使用记录有效性规则来控制何时可以保存记录 (在表格中的行)。与字段验证规则,不同记录验证规则引用同一表中的其他字段。当您需要检查对这些值在另一个字段中的值时,您可以创建记录有效性规则。例如,假设您的业务要求您提供 30 天内的产品,并且,如果您不在该时间内提供的您必须向您的客户退款的购买价格的一部分。您可以定义记录有效性规则,如[要求日期] < = [订购日期] + 30以确保用户不会输入发货日期太久 (要求日期字段中的值)。
可以在哪些位置使用有效性规则
可以为表字段和窗体上的控件定义有效性规则。如果为表定义规则,则这些规则在您导入数据时适用。若要向表中添加有效性规则,请打开表并使用功能区的“字段”选项卡中的命令。若要向窗体中添加有效性规则,请在布局视图中打开该窗体,然后向各个控件的属性添加规则。
有效性规则可以包含表达式-返回单个值的函数。您可以使用表达式执行计算、 操作字符或测试数据。有效性规则表达式测试数据。例如,表达式可以检查的一系列值,如"东京"或者"莫斯科"或者"巴黎"或者"赫尔辛基"之一。表达式还可以执行的数学运算。例如,表达式< 100强制用户输入小于 100 的值。表达式([订购日期]-[发货日期])计算的经过订单时间和发货之间的天数。
可以添加字段验证规则和/或记录有效性规则。字段验证规则检查字段的输入,并在焦点离开字段时应用。记录有效性规则检查一个或多个字段的输入,并在焦点离开记录时应用。记录有效性规则通常会比较两个或多个字段的值。
注释: 以下字段类型不支持有效性规则:
自动编号
OLE 对象
附件
ReplicationID
选择要验证的字段。
在“字段”选项卡上的“字段验证”组中,单击“验证”,然后单击“字段验证规则”。
使用表达式生成器创建规则。
选择需要无效输入消息的字段。字段应该已拥有有效性规则。
在“字段”选项卡上的“字段验证”组中,单击“验证”,然后单击“字段验证消息”。
输入相应的消息。例如,如果验证规则是> 10,消息可能是",请输入一个值,这是小于 10。
打开要验证记录的表。
在“字段”选项卡上的“字段验证”组中,单击“验证”,然后单击“记录有效性规则”。
使用表达式生成器创建规则。
打开需要无效输入消息的表。该表应该已拥有记录有效性规则。
在“字段”选项卡上的“字段验证”组中,单击“验证”,然后单击“记录验证消息”。
输入相应的消息。例如,如果验证规则是[StartDate] < [EndDate],消息可能是"StartDate 必须之前结束日期"。
如果向现有表添加有效性规则,您可能希望测试规则,以查看是否有任何现有数据无效。
注意: 以下过程仅适用于桌面数据库表。
打开希望在设计视图中测试的表。
在“设计”选项卡上的“工具”组中,单击“测试有效性规则”。
单击“是”关闭警告消息并启动测试。
如果系统提示您保存表,请单击“是”。
在执行操作时,可能会看到其他各种警告消息。阅读每条消息中的说明,然后根据需要单击“是”或“否”完成或停止测试。
验证数据输入到该控件,并帮助用户输入无效数据,您可以使用有效性规则属性和窗体控件的有效性文本属性。
提示: 如果使用功能区中的一个“窗体”命令自动从表中创建窗体,则窗体中相应的控件将继承基础表中的任何字段的有效性。
控件可以拥有不同于表字段的有效性规则,控件可以绑定到该不同的有效性规则。如果希望窗体比表有更多限制,这非常有用。先应用窗体规则,然后应用表规则。如果表比窗体限制更多,则为表字段定义的规则优先。如果规则互斥,则根本无法输入任何数据。
例如,假设您将以下规则应用到表中的日期字段:
< #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([姓氏]), | “姓氏”字段中的数据必须大写。 |
>=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)”下,选择“此数据库”。