使用 ValidationRule 属性可以指定对输入到记录、字段或控件中的数据的要求。当输入的数据违反了 ValidationRule 的设置时,可以使用 ValidationText 属性指定将显示给用户的消息。
注释 当复选框、选项按钮或切换按钮类型的控件在选项组中时,ValidationRule 和 ValidationText 属性不能应用于这些控件,而只适用于选项组本身。
对于 ValidationRule 属性,输入表达式,对于 ValidationText 属性设置,输入文本。ValidationRule 属性设置的最大长度是 2048 个字符。ValidationText 属性设置的最大长度则是 255 个字符。
对于控件,可以将 ValidationRule 属性设置为任何有效的表达式。对于字段和记录的有效性规则,表达式中不能包含用户定义的函数、域聚合函数或聚合函数、Eval 函数、CurrentUser 方法,另外也不能包含对窗体、查询或表的引用。此外,字段的有效性规则不能包含对其他字段的引用。对于记录,表达式则可以包含对该表中字段的引用。
使用以下方法可以设置 ValidationRule 和 ValidationText 属性:
? | 表“设计”视图的“字段属性”节(对字段的有效性规则而言)。 |
? | 在表“设计”视图中单击“视图”菜单上的“属性”命令所显示的表的属性表(对记录的有效性规则而言)。 |
? | 窗体中控件的属性表。 |
? | 宏或 Visual Basic。在 Visual Basic 中,应使用字符串表达式来设置这些属性。 |
对于表字段及记录,也可以在 Visual Basic 中使用 DAO ValidationRule 属性来设置这些属性。
Microsoft Access 将根据字段的数据类型,自动检查数据的有效性。例如,Microsoft Access 在数值字段中不允许有文本。使用 ValidationRule 属性可以更详细地设置规则。
如果只设置了 ValidationRule 属性但没有设置 ValidationText 属性,当违反了有效性规则时,Microsoft Access 将显示标准的错误消息。如果设置了 ValidationText 属性,所输入的文本将作为错误消息显示。
例如,在添加新职员记录时,可以通过设置 ValidationRule 属性来要求雇员的“开始日期”字段的值处于公司的成立日期到当前日期之间。如果输入的日期不在这个范围内,可以显示 ValidationText 属性设置的消息:“开始日期不正确。”
如果控件是通过从字段列表中拖动字段的方式创建的,虽然字段的有效性规则没有在属性表上控件的 ValidationRule 属性框中显示,但仍然保持有效,因为与字段绑定的控件将继承该字段的有效性规则。
控件、字段及记录的有效性规则的应用方式如下:
? | 在编辑数据并且焦点离开字段或控件时,将应用字段和控件所设置的有效性规则。 |
? | 在移动到其他记录时,将应用记录的有效性规则。 |
? | 如果一个字段及一个与该字段绑定的控件都创建了有效性规则,在编辑数据并且焦点离开控件时将同时应用这两个有效性规则。 |
下表包含了 ValidationRule 以及 ValidationText 属性的表达式示例:
ValidationText 属性 |
|
<> 0 |
输入项必须是非零值。 |
> 1000 Or Is Null |
输入项必须为空值或大于 1000。 |
Like "A????" |
输入项必须是 5 个字符并以字母 A 为打头。 |
>= #1/1/96# And <#1/1/97# |
输入项必须是 1996 年中的日期。 |
DLookup("客户ID", "客户", "客户ID = Forms!客户!客户ID") Is Null |
输入项必须是唯一的“客户ID”(域聚合函数只允许在窗体级的有效性中使用)。 |
如果为某个字段创建有效性规则,Microsoft Access 通常不允许 Null 值存储在该字段中。如果要使用 Null 值,必须将“Is Null”添加到有效性规则中,如“<> 8 Or Is Null”,并确保 Required 属性已经设置为“否”。
在非 Microsoft Access(例如,dBASE、Paradox 或 SQL Server)创建的表中,不能为其字段或记录设置有效性规则。对于这些类型的表,只能为控件创建有效性规则。
下面的示例为某个字段创建了一个有效性规则,只允许输入大于 65 的数值。如果输入了一个小于 65 的数字,将显示一条消息。这些属性是通过 SetFieldValidation 函数设置的。
Dim strTblName As String, strFldName As String
Dim strValidRule As String
Dim strValidText As String, intX As Integer
strTblName = "Customers"
strFldName = "Age"
strValidRule = ">= 65"
strValidText = "Enter a number greater than or equal to 65."
intX = SetFieldValidation(strTblName, strFldName, _
strValidRule, strValidText)
Function SetFieldValidation(strTblName As String, _
strFldName As String, strValidRule As String, _
strValidText As String) As Integer
Dim dbs As Database, tdf As TableDef, fld As Field
Set dbs = CurrentDb
Set tdf = dbs.TableDefs(strTblName)
Set fld = tdf.Fields(strFldName)
fld.ValidationRule = strValidRule
fld.ValidationText = strValidText
End Function
下一个示例使用 SetTableValidation 函数来设置记录级的有效性规则,以确保“结束日期”字段中的值比“开始日期”字段中的值晚。
Dim strTblName As String, strValidRule As String
Dim strValidText As String
Dim intX As Integer
strTblName = "Employees"
strValidRule = "EndDate > StartDate"
strValidText = "Enter an EndDate that is later than the StartDate."
intX = SetTableValidation(strTblName, strValidRule, strValidText)
Function SetTableValidation(strTblName As String, _
strValidRule As String, strValidText As String) _
As Integer
Dim dbs As Database, tdf As TableDef
Set dbs = CurrentDb
Set tdf = dbs.TableDefs(strTblName)
tdf.ValidationRule = strValidRule
tdf.ValidationText = strValidText
End Function