使用 ValidationText 屬性可以指定當(dāng)輸入的數(shù)據(jù)違反了記錄、字段或控件的 ValidationRule 設(shè)置時,向用戶顯示的消息。String 型,可讀寫。
expression.ValidationText
expression 必需。返回“應(yīng)用于”列表中的一個對象的表達(dá)式。
當(dāng)復(fù)選框、選項(xiàng)按鈕或切換按鈕類型的控件在選項(xiàng)組中時,ValidationRule 和 ValidationText 屬性不能應(yīng)用于這些控件,而只適用于選項(xiàng)組本身。
對于 ValidationRule 屬性,輸入表達(dá)式,對于 ValidationText 屬性設(shè)置,輸入文本。ValidationRule 屬性設(shè)置的最大長度是 2048 個字符。ValidationText 屬性設(shè)置的最大長度則是 255 個字符。
對于控件,可以將 ValidationRule 屬性設(shè)置為任何有效的表達(dá)式。對于字段和記錄的有效性規(guī)則,表達(dá)式中不能包含用戶定義的函數(shù)、域聚合函數(shù)或聚合函數(shù)、Eval 函數(shù)、CurrentUser 方法,另外也不能包含對窗體、查詢或表的引用。此外,字段的有效性規(guī)則不能包含對其他字段的引用。對于記錄,表達(dá)式則可以包含對該表中字段的引用。
使用以下方法可以設(shè)置 ValidationRule 和 ValidationText 屬性:
? | 表“設(shè)計(jì)”視圖的“字段屬性”節(jié)(對字段的有效性規(guī)則而言)。 |
? | 在表“設(shè)計(jì)”視圖中單擊“視圖”菜單中的“屬性”命令所顯示的表的屬性表(對記錄的有效性規(guī)則而言)。 |
? | 窗體中控件的屬性表。 |
? | 宏或 Visual Basic。在 Visual Basic 中,應(yīng)使用字符串表達(dá)式來設(shè)置這些屬性。 |
對于表字段及記錄,也可以在 Visual Basic 中使用 DAO ValidationRule 屬性來設(shè)置這些屬性。
Microsoft Access 將根據(jù)字段的數(shù)據(jù)類型,自動檢查數(shù)據(jù)的有效性。例如,Microsoft Access 在數(shù)值字段中不允許有文本。使用 ValidationRule 屬性可以更詳細(xì)地設(shè)置規(guī)則。
如果只設(shè)置了 ValidationRule 屬性但沒有設(shè)置 ValidationText 屬性,當(dāng)違反了有效性規(guī)則時,Microsoft Access 將顯示標(biāo)準(zhǔn)的錯誤消息。如果設(shè)置了 ValidationText 屬性,所輸入的文本將作為錯誤消息顯示。
例如,在添加新職員記錄時,可以通過設(shè)置 ValidationRule 屬性來要求雇員的“開始日期”字段的值都在公司的成立日期到當(dāng)前日期之間。如果輸入的日期不在這個范圍內(nèi),可以顯示 ValidationText 屬性設(shè)置的消息:“開始日期不正確?!?/span>
如果控件是通過從字段列表中拖動字段的方式創(chuàng)建的,雖然字段的有效性規(guī)則沒有在屬性表上控件的 ValidationRule 屬性框中顯示,但仍然保持有效,因?yàn)榕c字段綁定的控件將繼承該字段的有效性規(guī)則。
控件、字段及記錄的有效性規(guī)則的應(yīng)用方式如下:
? | 在編輯數(shù)據(jù)并且焦點(diǎn)離開字段或控件時,將應(yīng)用字段和控件所設(shè)置的有效性規(guī)則。 |
? | 在移動到其他記錄時,將應(yīng)用記錄的有效性規(guī)則。 |
? | 如果一個字段及一個與該字段綁定的控件都創(chuàng)建了有效性規(guī)則,在編輯數(shù)據(jù)并且焦點(diǎn)離開控件時將同時應(yīng)用這兩個有效性規(guī)則。 |
下表包含了 ValidationRule 以及 ValidationText 屬性的表達(dá)式示例:
ValidationText 屬性 |
|
<> 0 |
輸入項(xiàng)必須是非零值。 |
> 1000 Or Is Null |
輸入項(xiàng)必須為空值或大于 1000。 |
Like "A????" |
輸入項(xiàng)必須是 5 個字符并以字母 A 為打頭。 |
>= #1/1/96# And <#1/1/97# |
輸入項(xiàng)必須是 1996 年中的日期。 |
DLookup("客戶ID", "客戶", "客戶ID = Forms!客戶!客戶ID") Is Null |
輸入項(xiàng)必須是唯一的“客戶ID”(域聚合函數(shù)只允許在窗體級的有效性中使用)。 |
如果為某個字段創(chuàng)建有效性規(guī)則,Microsoft Access 通常不允許 Null 值存儲在該字段中。如果要使用 Null 值,必須將 “Is Null” 添加到有效性規(guī)則中,如“<> 8 Or Is Null”,并確保 Required 屬性已經(jīng)設(shè)置為“否”。
在非 Microsoft Access(例如,dBASE、Paradox 或 SQL Server)創(chuàng)建的表中,不能為其字段或記錄設(shè)置有效性規(guī)則。對于這些類型的表,只能為控件創(chuàng)建有效性規(guī)則。
下面的示例為某個字段創(chuàng)建了一個有效性規(guī)則,只允許輸入大于 65 的數(shù)值。如果輸入了一個小于 65 的數(shù)字,將顯示一條消息。這些屬性是通過 SetFieldValidation 函數(shù)設(shè)置的。
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 函數(shù)來設(shè)置記錄級的有效性規(guī)則,以確?!敖Y(jié)束日期”字段中的值比“開始日期”字段中的值晚。
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