【问题标题】:How to make either of two fields required in MS Access?如何使 MS Access 中需要两个字段中的任何一个?
【发布时间】:2015-12-07 09:21:31
【问题描述】:

我是 MS Access 的新手,我有一个包含 [name] 和 [company] 字段的表单。我想让用户填写其中任何一个,但不一定都填写。他们可以填写 [name]、[company] 或两者都填写,但不能将两者都留空。

我如何做到这一点?

【问题讨论】:

    标签: ms-access required-field


    【解决方案1】:

    您可以在 vba 中执行此操作:

    创建一个在保存数据集之前运行的事件处理程序,并告诉它在不满足您的条件时取消更新:

    Private Sub Form_BeforeUpdate(Cancel As Integer)
        If (isnull(me!name) and isnull(me.company) then
            msgBox "Give me more !"
            Cancel = True
        End If
    End Sub
    

    【讨论】:

    • 或者简单地说:If IsNull(Me!Name + Me!Company) Then
    • 这可行,但会产生一个问题:如果我开始为新记录输入数据然后删除它,Access 不会让我移动到以前的记录,因为这两个字段都不包含任何内容。
    • Me.Undo 取消您对当前记录所做的所有操作,并让您退出新记录。要么把它放在 Cancel=true 之后,要么(更好):为它创建一个新按钮。
    • @Gustav 我不认为你可以添加(Null + String)。我在数据宏中尝试过If IsNull([Name] + [Company]),当两者都为 Null 或其中之一为 Null 时返回 TRUE
    • 是的,完全正确。当然是有意的——避免有两个IsNull。我猜是口味问题。
    【解决方案2】:

    在这种情况下,我建议使用 数据宏(如果您使用的是 Access 2010 或更高版本)。 VBA 的优势在于数据宏在引擎级别运行,因此如果您有多个包含这些字段的表单,您不必将 VBA 复制到每个表单。这也消除了开始输入数据然后删除它们的问题。

    进入表格设计,点击Create Data Macros > Before Change并添加If这样的条件:

    您可以使用 VBA 捕获错误号 1 来做一些事情。正如 Access 所说,错误号是用户定义的,对 Access 没有任何意义。

    【讨论】:

    • @Jeppe 我也认为你不应该将你的字段命名为Name,因为它在使用 VBA 时会带来一些麻烦。我不记得到底是什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2017-04-22
    • 1970-01-01
    • 2019-06-12
    • 2014-02-20
    相关资源
    最近更新 更多