Описание
Задает или возвращает значение, определяющее режим проверки поля
на соответствие заданным условиям на значение объекта Field при указании
значения свойства Value объекта (только в рабочей области Microsoft
Jet).
Значение
Задаваемое или возвращаемое значение является выражением типа
Boolean, которое может иметь одно из следующих значений.
True Условие на значение, заданное в свойстве ValidationRule объекта Field, проверяются при задании значения свойства Value объекта. False (По умолчанию). Проверка на соответствие условиям откладывается до тех пор, пока запись не будет обновлена.
Только объекты Field в объектах Recordset поддерживают свойство
ValidateOnSet как доступное для чтения/записи.
Замечания
Полезно задавать для свойства ValidateOnSet значение
True при работе с записями, содержащими большие поля Memo.
Ожидание вызова метода Update для проверки данных на соответствие
условиям на значение может привести к значительным потерям времени при записи
содержимого полей Memo в базу данных, если окажется, что эти данные не
принимаются из-за нарушения условий на значение в другом поле.
Пример
Следующая программа использует свойство ValidateOnSet для
демонстрации перехвата ошибок при вводе данных. Для выполнения данной процедуры
требуется функция ValidateData.
Sub ValidateOnSetX()
Dim dbsNorthwind As Database
Dim fldDays As Field
Dim rstEmployees As Recordset
Set dbsNorthwind = OpenDatabase("Борей.mdb")
' Создает и добавляет новый объект Field
' в семейство Fields таблицы "Сотрудники".
Set fldDays = dbsNorthwind.TableDefs!Сотрудники.CreateField( "Отгулы", dbInteger, 2)
fldDays.ValidationRule = "BETWEEN 1 AND 20"
fldDays.ValidationText = "Допускаются числа от 1 до 20!"
dbsNorthwind.TableDefs!Сотрудники.Fields.Append fldDays
Set rstEmployees = dbsNorthwind.OpenRecordset("Сотрудники")
With rstEmployees
Do While True
' Добавляет новую запись.
.AddNew
' Принимает данные от пользователя для трех полей.
' Проверяет, что данные не противоречат условиям
' для любого из полей.
If ValidateData(!Имя, "Введите имя.") = False Then Exit Do
If ValidateData(!Фамилия, "Введите фамилию.") = False Then Exit Do
If ValidateData(!Отгулы, "Введите число отгулов.") = False Then Exit Do
.Update
.Bookmark = .LastModified
Debug.Print !Имя & " " & !Фамилия & " - " & "Отгулы = " & !Отгулы
' Удаляет новую запись, созданную только для демонстрации.
.Delete
Exit Do
Loop
' Отменяет вызов метода AddNew, если хотя бы одно
' из условий было нарушено.
If .EditMode <> dbEditNone Then .CancelUpdate
.Close
End With
' Удаляет новое поле, созданное только для демонстрации.
dbsNorthwind.TableDefs!Сотрудники.Fields.Delete fldDays.Name
dbsNorthwind.Close
End Sub
Function ValidateData(fldTemp As Field, strMessage As String) As Boolean
Dim strInput As String
Dim errLoop As Error
ValidateData = True
' Свойство ValidateOnSet доступно для чтения/записи
' только для объектов Field в объектах Recordset.
fldTemp.ValidateOnSet = True
Do While True
strInput = InputBox(strMessage)
If strInput = "" Then Exit Do
' Перехват ошибок при задании значений полей.
On Error GoTo Err_Data
If fldTemp.Type = dbInteger Then
fldTemp = Val(strInput)
Else
fldTemp = strInput
End If
On Error GoTo 0
If Not IsNull(fldTemp) Then Exit Do
Loop
If strInput = "" Then ValidateData = False
Exit Function
Err_Data:
If DBEngine.Errors.Count > 0 Then
' Отображает семейство Errors. Свойство Description
' последнего объекта Error получит значение свойства
' ValidationText соответствующего поля.
For Each errLoop In DBEngine.Errors
MsgBox "Код ошибки: " & errLoop.Number & vbCr & errLoop.Description
Next errLoop
End If
Resume Next
End Function