Описание
Задает или возвращает значение, определяющее режим проверки поля на соответствие заданным условиям на значение объекта Field при указании значения свойства Value объекта (только в рабочей области Microsoft Jet).
Значение
Задаваемое или возвращаемое значение является выражением типа Boolean, которое может иметь одно из следующих значений:
Только объекты 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