MS Access 验证规则未在子表单中触发
MS Access validation rules not firing in subform
我有一个数据网格,它是另一个表单中的子表单。我需要验证输入到此数据网格子表单中的项目,但我很难弄清楚如何验证。
每当我在论坛和 Microsoft 的帮助站点上读到此内容时,他们都会建议您在 table 级别使用 Required 和 Validation 规则。但是因为这些都是链接的 table,Access 告诉我这些无法保存/不适用于我的情况。当我保存这些设置时,当我重新打开 table 设计视图时,它们会重置为默认值。
另一个似乎最重要的建议是在实际数据网格上放置验证规则。看起来很简单,但我无法让它们开火。
在我的 FromDate 列中,我输入了验证规则 Is Not Null
和验证文本 Can't be blank
。我也试过 Not IsNull([FromDate])
和 IsNull([FromDate])=0
但所有这些都没有任何反应。 MS Access 让我可以跳过字段,不输入任何内容,然后继续。
简而言之,验证规则似乎没有触发。
1- 我应该通过其数据网格 属性 sheet 验证规则来验证数据网格吗?
2- 如果是这样,我如何让验证真正触发并进行验证?
3- 如果我应该以编程方式进行所有验证,我该如何获取数据网格的内容/遍历每个新行?
下图:左:子窗体/
右:数据中我的列的属性sheet
下面的图片:左:链接的 table 消息说我无法编辑 table 属性
使用表单的 Before Update 事件检查 FromDate 是否为 Null。
为Null时,通知用户并取消更新(Cancel = True
)。
保留文本框的现有验证规则。如果用户试图从文本框中删除一个值(而不是延迟通知,直到 Access 尝试保存整个记录),这将给用户立即反馈。
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strPrompt As String
If IsNull(Me!FromDate.Value) Then
strPrompt = "FromDate can't be blank"
MsgBox strPrompt, vbInformation + vbOKOnly, "Missing Value"
Me!FromDate.SetFocus
Cancel = True
End If
End Sub
测试一下您是否也需要在表单的 Before Insert 事件中使用相同的策略。如果这样做,将该代码移至单独的过程并从 Before Insert 和 Before Update 调用它。
我有一个数据网格,它是另一个表单中的子表单。我需要验证输入到此数据网格子表单中的项目,但我很难弄清楚如何验证。
每当我在论坛和 Microsoft 的帮助站点上读到此内容时,他们都会建议您在 table 级别使用 Required 和 Validation 规则。但是因为这些都是链接的 table,Access 告诉我这些无法保存/不适用于我的情况。当我保存这些设置时,当我重新打开 table 设计视图时,它们会重置为默认值。
另一个似乎最重要的建议是在实际数据网格上放置验证规则。看起来很简单,但我无法让它们开火。
在我的 FromDate 列中,我输入了验证规则 Is Not Null
和验证文本 Can't be blank
。我也试过 Not IsNull([FromDate])
和 IsNull([FromDate])=0
但所有这些都没有任何反应。 MS Access 让我可以跳过字段,不输入任何内容,然后继续。
简而言之,验证规则似乎没有触发。
1- 我应该通过其数据网格 属性 sheet 验证规则来验证数据网格吗?
2- 如果是这样,我如何让验证真正触发并进行验证?
3- 如果我应该以编程方式进行所有验证,我该如何获取数据网格的内容/遍历每个新行?
下图:左:子窗体/ 右:数据中我的列的属性sheet
下面的图片:左:链接的 table 消息说我无法编辑 table 属性
使用表单的 Before Update 事件检查 FromDate 是否为 Null。
为Null时,通知用户并取消更新(Cancel = True
)。
保留文本框的现有验证规则。如果用户试图从文本框中删除一个值(而不是延迟通知,直到 Access 尝试保存整个记录),这将给用户立即反馈。
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strPrompt As String
If IsNull(Me!FromDate.Value) Then
strPrompt = "FromDate can't be blank"
MsgBox strPrompt, vbInformation + vbOKOnly, "Missing Value"
Me!FromDate.SetFocus
Cancel = True
End If
End Sub
测试一下您是否也需要在表单的 Before Insert 事件中使用相同的策略。如果这样做,将该代码移至单独的过程并从 Before Insert 和 Before Update 调用它。