ValidationRule 属性

expandtri全部显示

使用 ValidationRule 属性可以指定对输入到记录、字段或控件中的数据的要求。当输入的数据违反了 ValidationRule 的设置时,可以使用 ValidationText 属性指定将显示给用户的消息。

注释  当复选框选项按钮切换按钮类型的控件选项组中时,ValidationRuleValidationText 属性不能应用于这些控件,而只适用于选项组本身。

说明

对于 ValidationRule 属性,输入表达式,对于 ValidationText 属性设置,输入文本。ValidationRule 属性设置的最大长度是 2048 个字符。ValidationText 属性设置的最大长度则是 255 个字符。

对于控件,可以将 ValidationRule 属性设置为任何有效的表达式。对于字段和记录的有效性规则,表达式中不能包含用户定义的函数、域聚合函数聚合函数Eval 函数、CurrentUser 方法,另外也不能包含对窗体、查询或表的引用。此外,字段的有效性规则不能包含对其他字段的引用。对于记录,表达式则可以包含对该表中字段的引用。

使用以下方法可以设置 ValidationRuleValidationText 属性:

?表“设计”视图的“字段属性”节(对字段的有效性规则而言)。
?在表“设计”视图中单击“视图”菜单上的“属性”命令所显示的表的属性表(对记录的有效性规则而言)。

?窗体中控件的属性表

?Visual Basic。在 Visual Basic 中,应使用字符串表达式来设置这些属性。

对于表字段及记录,也可以在 Visual Basic 中使用 DAO ValidationRule 属性来设置这些属性。

Microsoft Access 将根据字段的数据类型,自动检查数据的有效性。例如,Microsoft Access 在数值字段中不允许有文本。使用 ValidationRule 属性可以更详细地设置规则。

如果只设置了 ValidationRule 属性但没有设置 ValidationText 属性,当违反了有效性规则时,Microsoft Access 将显示标准的错误消息。如果设置了 ValidationText 属性,所输入的文本将作为错误消息显示。

例如,在添加新职员记录时,可以通过设置 ValidationRule 属性来要求雇员的“开始日期”字段的值处于公司的成立日期到当前日期之间。如果输入的日期不在这个范围内,可以显示 ValidationText 属性设置的消息:“开始日期不正确。”

如果控件是通过从字段列表中拖动字段的方式创建的,虽然字段的有效性规则没有在属性表上控件的 ValidationRule 属性框中显示,但仍然保持有效,因为与字段绑定的控件将继承该字段的有效性规则。

控件、字段及记录的有效性规则的应用方式如下:

?在编辑数据并且焦点离开字段或控件时,将应用字段和控件所设置的有效性规则。
?在移动到其他记录时,将应用记录的有效性规则。
?如果一个字段及一个与该字段绑定的控件都创建了有效性规则,在编辑数据并且焦点离开控件时将同时应用这两个有效性规则。

下表包含了 ValidationRule 以及 ValidationText 属性的表达式示例:

ValidationRule 属性

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