rsTarget!VehYear = Trim(Str(rsSource!VehYear))
当rsSource!VehYear为Null时,上面的行会生成“无效使用Null”运行时错误.如果我在上面的行中断并在“立即”窗格中键入以下内容:
?rsSource!VehYear
它输出Null.很好,这很有道理.接下来,我尝试重现错误:
?Str(rsSource!VehYear)
我得到“无效使用Null”错误.
但是,如果我在立即窗口中键入以下内容:
?Str(Null)
我没有收到错误.它只是输出Null.
如果我用Trim()而不是Str()重复相同的实验,一切正常. ?Trim(rsSource!VehYear)返回Null,修复(Null).没有运行时错误.
所以,我的问题是,当Str(Null)没有时,Str(rsSource!VehYear)怎么可能抛出“无效使用Null”错误,当我知道rsSource!VehYear等于Null时?
更新:如果我在立即窗口中键入以下内容,它按预期工作(没有错误发生):
?Str(rsSource!VehYear.Value)
这输出Null.现在,我知道rsSource!VehYear实际上是一个ADODB.Field实例,但Value是它的默认属性,因此Str应该在Value属性(Null)上运行.即使错误消息(“无效使用Null”)也表明Str正在接收Null参数,但是如何在一种情况下以不同的方式处理Null?
我唯一的猜测是Str()的内部实现以某种方式无法获取默认属性,并且“无效使用Null”错误发生的原因不同(除了参数之外的其他因素导致“无效使用Null”),也许当它试图从Field对象中检索默认属性时).
有没有人对这里发生的事情有更详细的技术解释?
简而言之:
?Str(rsSource!VehYear)
当rsSource!VehYear为Null时抛出“无效使用Null”错误,但是
?Str(rsSource!VehYear.Value)
返回Null.
但是,Trim(rsSource!VehYear)和Trim(rsSource!VehYear.Value)都返回Null.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。