IsNull 总是 returns 假

IsNull always returns false

我使用 MS Access 作为 SQL Server 2012 的前端,在将更新传递到服务器之前测试字段中的空值,并向用户显示有用的消息。

我在 BeforeUpdate 事件中使用 If IsNull 以及一些奇特的重复检查,它在一个字段上工作正常。然而,当为另一个变量实现相同的代码时,IsNull 总是评估为 false。

我试过删除所有有用的代码,只使用 IsNull 和消息框:

If IsNull(Me.M_RN) Then
    MsgBox "null!"
Else
    MsgBox "Not null!"
End If

此代码总是 returns "Not null!"。如果我反转它并使用 :

If not IsNull(Me.M_RN) Then
    MsgBox "Not null!"
Else
    MsgBox "null!"
End If

每次还是returns"Not null!"。我还尝试了其他事件状态,例如ChangeKeyUpDirty。无论事件如何,IsNull 都会返回 false。

这些字段的表单对象具有相同的属性。我能看到的唯一区别是工作变量采用 numeric(18,0) 格式且未索引,而非工作变量采用 int 格式并具有唯一索引。

如果删除所有代码,我会在更新时收到 You tried to assign the Null value to a variable that is not a Variant data type 错误。

我认为您的这部分信息很重要;

the non-working variable is in int format and has a unique index.

如果它有唯一索引,那么我敢肯定您无论如何都无法分配空值。您是否在 table 中设置了默认值?

问题是基于 SQL 后端 table 上的 not null 设置。在 BeforeUpdate 事件之前,Access 正在检查它从该限制派生的验证规则

然后弹出 You tried to assign the Null value to a variable that is not a Variant data type 错误,这显然阻止了 BeforeUpdate 事件的触发。

删除 not null 限制允许代码运行,同时保留唯一索引。

使用 Form_Error 无法绕过它,即使 Response 设置为 acDataErrContinue。在那种情况下,它会弹出一个关于验证规则的实际运行时错误,阻止更改试图将字段设置回 .OldValue.

的行上的值