Ms access 如何使MS Access中的两个字段都是必需的?

Ms access 如何使MS Access中的两个字段都是必需的?,ms-access,required-field,Ms Access,Required Field,我是MS Access的新手,我有一个带有字段[name]和[company]的表单。我想让用户必须填写其中一项,但不一定同时填写这两项。他们可以填写[姓名]、[公司]或两者,但不能将两者都留空 如何实现这一点?您可以在vba中实现这一点: 创建在保存数据集之前运行的Eventhandler,并告诉它在不满足条件时取消更新: Private Sub Form_BeforeUpdate(Cancel As Integer) If (isnull(me!name) and isnull(me

我是MS Access的新手,我有一个带有字段[name]和[company]的表单。我想让用户必须填写其中一项,但不一定同时填写这两项。他们可以填写[姓名]、[公司]或两者,但不能将两者都留空


如何实现这一点?

您可以在vba中实现这一点:

创建在保存数据集之前运行的Eventhandler,并告诉它在不满足条件时取消更新:

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

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

转到表设计,在更改前单击创建数据宏,然后添加如下条件:


您可以使用VBA捕获错误号1来执行某些操作。正如Access所说,错误号是用户定义的,没有访问的意义。

或者简单地说:
如果为null(Me!Name+Me!Company),那么
这是可行的,但会产生一个问题:如果我开始输入新记录的数据,然后将其删除,Access不允许我移动到以前的记录,因为这两个字段都不包含任何内容。me.Undo将取消您对当前记录所做的所有操作,并允许您从新记录中退出。要么把它放在Cancel=true之后,要么(更好):为它创建一个新按钮。@Gustav我认为你不能添加(Null+String)。我在数据宏中尝试了
If IsNull([Name]+[Company])
,当两者都为null或其中一个为null时,返回TRUE,准确地说是。当然是有意的-避免有两个
IsNull
。我想这是口味的问题。@Jeppe我也认为你不应该给你的字段命名
name
,因为它在使用VBA时会带来一些麻烦。我记不清到底是什么了