2015-07-17 2 views
0
  • Использование Access 2010
  • Я знаю, что минимальное количество VB

У меня есть таблица с именем tblRawMaterials который содержит 2 важных полей: партномер и Диаметр.Изменение правила проверки в форме доступа на основе ввода пользователем?

Я пользуюсь формой, чтобы заполнить другую таблицу различной информацией. Важная информация являются: PartNumber и TensileStrength

В форме я позволить пользователю выбрать партномер из комбинированного окна с исходной строки tblRawMaterials. Затем они должны ввести прочность на растяжение в стандартное текстовое поле.

Мне нужно что-то в силу правила валидации, которое изменяет допустимый диапазон (в форме) для TensileStrength на основе диаметра номера детали, выбранного в поле со списком.

Например: Пользователь выбирает партномер 000001 с диаметром 2" . И приемлемой прочности на разрыв> 150 пользователь выбирает PartNumber 000002 с диаметром 6" и приемлемой прочности на разрыв составляет> 130

Я не могу использовать Cascading Combo Boxes, потому что пользователю нужно ввести десятичные данные в поле TensileStrength. Я попытался использовать DLookUp() в построителе выражений и создания макросов, но я продолжаю застревать. Спасибо за любую помощь.

+0

Нет, как бы поисковая таблица использовалась для решения проблемы? –

+0

Мне нужно, чтобы пользователь не входил в слишком низкую прочность на растяжение, поэтому я (возможно, неправильно) думал, что ограничение необходимо сделать в самой форме. У меня нет большого понимания таблиц поиска. –

+0

Я собирался жестко кодировать значения в правилах проверки формы. Единственные варианты: Diam. <2" = > 150 прочность, 2 "< Diam.<4" => 140 сила, диаметр> 4" = 130 прочность. Диаметр может быть любым десятичным числом между этими значениями. –

ответ

0

Попробуйте добавить еще один столбец в свой combobox для диаметра. Обязательно обновите количество столбцов и ширину столбцов соответственно. (для подсчета столбцов и 1; 0 для ширины)

Убедитесь, что текстовое поле TS отформатирован как General Number так Access может обрабатывать не числовых проблем.

Я бы не тратить свое время на AfterUpdate, Изменить и т.д. проверки событий для TS Textbox, так как они не могут ничего вводить в то время они сохранить запись.

Выполнение проверки перед тем, как ваш код попытается сохранить данные в другой таблице. Я бы предложил создать функцию проверки, которая возвращает логическое значение. Вы можете проверить нулевое значение TS в это время. Вы также можете обратиться к новому столбцу в поле со списком.

Function SaveTheRecord() As Long 

    If DataIsValid = False Then Exit Function 

    'Your current code to save record to the other table 

End Function 

Function DataIsValid() As Boolean 

    DataIsValid = False 'default to false so you can just jump out of the function if criteria is not met 

    If IsNull(txtTS) Then 
    MsgBox "Please Enter a valid Tensile Strength", vbExclamation, "Validation Error" 
    Exit Function 
    End If 

    'txtTS not null at this point 

    '1st senerio 
    If myCombo.Column(1) < 2 Then 'diameter < 2" (this is the new column for diameter) 
    If txtTS < 150 Then 
     MsgBox "Please enter a Tensile Strength that is >= 150", vbExclamation, "Validation Error" 
     Exit Function 
    End If 
    End If 

    'Check any other scenerios 

    DataIsValid = True 'if we've reached this point, then everyting must be ok 

End Function 

Вы можете создать ярлык рядом с текстовым полем TS информировать пользователя о limmitations диапазоне, так что они будут знать, прежде чем они пытаются сохранить. Вы можете сделать это в событии AfterUpdate для combobox. Это всего лишь общий пример, чтобы дать вам эту идею.

Private Sub myCombo_AfterUpdate() 
    Call ShowPartRange 
End Sub 

function ShowPartRange() as long 

    'if logics based on myCombo.Column(1) 
    lblRange.caption = "Must be > 150" 
    'etc 

End Function