MS Access中的条件验证规则

时间:2011-05-20 14:41:45

标签: ms-access

我在MS-Access中有一个表 - 我们称之为tComputers。该表中的两个字段标题为Status - 具有Active,Storage,Deactivated和DeactivationDate选项。

当且仅当DeactivationDate的值已取消激活时,我才强制要Status,我该怎么做?

3 个答案:

答案 0 :(得分:3)

如果你想在表级强制执行此操作,我相信你运气不好。如果您使用的是Access 2010,则可以对数据宏执行某些操作。 编辑:我已经纠正了。虽然我个人从未使用过这个功能(更喜欢在表单级别处理验证更复杂的验证),但绝对可以:Validation Rules

如果您的用户只是通过绑定表单更新数据,您可以在Form_BeforeUpdate事件中执行验证。然后,如果Status ='Deactivated'且DeactivationDate为Null,则设置Cancel = True将阻止保存更改。显然,您需要显示一个消息框或以其他方式指示无法保存表单的原因。

答案 1 :(得分:3)

如果我想强制使用DeactivationDate当且仅当状态值为Deactivated时,我该怎么做?

相反,如果一个Deactivated记录稍后更改状态...说成为活动...是否应该丢弃DeactivationDate?

我认为您可以使用表级验证规则来完成此操作。使用TComputers在设计视图中,打开属性表并将其用作验证规则属性:

IsNull([DeactivationDate])=IIf([Status]="Deactivated",False,True)

找出您希望用户在违反验证规则时看到的消息,并将其作为验证文本属性放入。默认消息不太可能对他们有任何意义。

尽管有可能,但我怀疑这是多么有用。用户应该通过表单编辑数据,这使您有机会在数据库之前强制执行验证要求 引擎甚至尝试保存数据...使用Form_BeforeUpdate事件为@ mwolfe02描述。

修改:这是Form_BeforeUpdate的大纲。它假定您有一个名为cboStatus的组合绑定到Status字段,并且一个名为txtRetireDate的文本框绑定到RetireDate字段。

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim strMsg As String
    Select Case Me.cboStatus
    Case "Deactivated"
        If IsNull(Me.txtRetireDate) Then
            strMsg = "RetireDate is required for Status = Deactivated"
            MsgBox strMsg
            Me.txtRetireDate.SetFocus
            Cancel = True
        End If
    Case "Active", "Storage"
        '* what should happen here? *'
    Case Else
        '* what should happen here? *'
    End Select
End Sub

答案 2 :(得分:0)

如果您使用表单输入数据,则可以使用VBA验证表单条目。在按下按钮以保存数据,您可以检查状态的值是否已取消激活,如果是,则可以要求DeactivationDate具有值。否则,将不会保存数据。

在表格设计窗口中做你想做的事情,我不知道怎么做。