MS Access验证规则未在子窗体中触发

时间:2015-06-09 18:13:39

标签: vba validation ms-access access-vba ms-access-2013

我有一个datagrid,它是另一个表单中的子表单。我需要验证输入到此数据网格子表单中的项目,但我很难搞清楚如何。

每当我在论坛和Microsoft的帮助网站上阅读此内容时,他们都建议您在表级使用必需和验证规则。但由于这些都是链接表,Access告诉我这些不能保存/不适用于我的情况。当我保存这些设置时,当我重新打开表设计视图时,它们会重置为默认值。

另一个似乎最重要的建议是在实际数据网格上加入验证规则。看起来很简单,但我无法解雇它们。

在我的FromDate列中,我将验证规则Is Not Null和验证文本Can't be blank放在一起。我也尝试了Not IsNull([FromDate])IsNull([FromDate])=0,但所有这些都没有发生任何相同的结果。 MS Access允许我跳过字段,不输入任何内容,然后继续。

简单地说,验证规则似乎没有被解雇。

1-我应该通过其datagrid属性表验证规则验证数据网格吗?

2-如果是这样,我如何进行验证才能实际开火并进行验证?

3-如果我应该以编程方式进行所有验证,我该如何获取datagrid的内容/迭代每个新行?

下面的图片:左:子表单/ right:数据表中列的属性

The subform enter image description here

下面的图片: left:链表消息说我无法编辑表格属性

enter image description here

1 个答案:

答案 0 :(得分:1)

使用表单的更新前事件来检查 FromDate 是否为空。

如果为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 中调用它。