我正在使用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!”每次。我还尝试了其他事件状态,例如Change
,KeyUp
和Dirty
。无论事件如何,IsNull
都会返回false。
这些字段的Form对象具有相同的属性。我能看到的唯一区别是工作变量是numeric(18,0)
格式而没有索引,而非工作变量是int
格式并且有唯一索引。
如果删除所有代码,我会在更新时遇到You tried to assign the Null value to a variable that is not a Variant data type
错误。
答案 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
的行上的值。