IsNull始终返回false

时间:2017-03-08 22:46:16

标签: sql-server vba ms-access sql-server-2012 ms-access-2010

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

我在If IsNull事件中使用BeforeUpdate以及一些花哨的重复检查,使其适用于一个字段。但是,当为另一个变量实现相同的代码时,IsNull总是评估为false。

我尝试删除所有有用的代码,只使用带有消息框的IsNull

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

此代码始终返回“Not null!”。如果我将其反转并使用:

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

它仍然返回“Not null!”每次。我还尝试了其他事件状态,例如ChangeKeyUpDirty。无论事件如何,IsNull都会返回false。

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

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

2 个答案:

答案 0 :(得分:1)

我认为这部分信息至关重要;

  

非工作变量采用int格式,并且具有唯一索引。

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

答案 1 :(得分:0)

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

然后弹出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的行上的值。