MS Access中的条件验证规则

Zac*_*ack 5 ms-access

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

如果我想DeactivationDate强制要求当且仅当Status取消激活的值时,我该怎么做?

Han*_*sUp 3

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

相反,如果停用记录稍后更改状态...比如说变为活动...应该丢弃 DeactivationDate 吗?

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

IsNull([DeactivationDate])=IIf([Status]="Deactivated",False,True)
Run Code Online (Sandbox Code Playgroud)

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

虽然这是可能的,但我怀疑这有多大用处。用户应该通过表单编辑数据,这使您有机会在数据库引擎尝试保存数据之前强制执行验证要求...使用 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
Run Code Online (Sandbox Code Playgroud)