根据用户输入更改Access表单中的验证规则?

时间:2015-07-17 16:50:35

标签: ms-access access-vba ms-access-2010

  • 使用Access 2010
  • 我知道最少量的VB

我有一个名为 tblRawMaterials 的表,其中包含两个重要字段: PartNumber Diameter

我正在使用表单填写包含各种信息的不同表格。重要信息是: PartNumber TensileStrength

在表单中,我允许用户从包含行源 tblRawMaterials 的组合框中选择 PartNumber 。然后他们必须将拉伸强度输入标准文本框。

我需要验证规则的效果,它会根据组合框中选择的部件号的直径更改 TensileStrength 的可接受范围(在表单中)。

例如:用户选择 PartNumber 000001,直径为2"并且可接受的拉伸强度> 150。用户选择 PartNumber 000002,直径为6"并且可接受的拉伸强度> 130

我无法使用级联组合框,因为用户需要在 TensileStrength 框中输入十进制数据。我已尝试在表达式构建器中使用DLookUp()并创建宏,但我一直陷入困境。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

尝试在组合框中添加另一列直径。 请务必相应地更新列数和列宽。 ( 1 用于列数, 1; 0 用于宽度)

确保TS文本框的格式为常规编号,以便Access可以处理非数字问题。

我不会在TS文本框的 AfterUpdate 更改等事件验证上浪费我的时间,因为他们在保存时不会输入任何内容记录。

在代码尝试将数据保存到不同的表之前进行验证。我建议创建一个返回布尔值的验证函数。您可以在那时检查TS null值。您也可以参考组合框中的新列。

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文本框旁边创建一个标签,以告知用户范围限制,以便他们在尝试保存之前知道。你可以在组合框的AfterUpdate事件上做到这一点。这只是一个给你这个想法的一般例子。

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