2017-10-20 147 views
-1

我正在循环记录集中的行并根据当前行中的字段值分配我的变量值。我不断收到一个错误记录集空值在空值检查中未被检测到

无效使用空

的调试时,我发现这个问题是在下面的行

TurnoverPTD = rsPeriod.Fields(0) 

为了解决这个问题,我把它改成下面

If rsPeriod.Fields(0) = Null Then 
    TurnoverPTD = 0 
Else 
    TurnoverPTD = rsPeriod.Fields(0) 
End If 

但是,我仍然得到同样的错误。在调试时,将光标悬停在工具提示的顶部,显示rsPeriod.Fields(0) = Null,但是我不确定这是否只是表明这是代码行的内容?

我该怎么检查Null,为什么我的方法不工作?

回答

3

有类似IsDBNull一个方法mthod存在VB.NET

方法IsNull采用参数(rsPeriod.Fields(0))并返回一个布尔值。

您可以在您的If声明中使用此方法,如下所示。

If IsNull(rsPeriod.Fields(0)) Then 
    TurnoverPTD = 0 
Else 
    TurnoverPTD = rsPeriod.Fields(0) 
End If 

这是更好地使用这个,而不是If x = Null如代码,IsNull是检查如果值为空或不是。使用=运算符意味着它会尝试比较值 - 但是您无法以这种方式将值与Null进行比较。

因此,当比较RecordSet字段时,这是最好的方法。

-1

将其更改为:

If rsPeriod.Fields(0) Is Nothing Then 
    TurnoverPTD = 0 
Else 
    TurnoverPTD = rsPeriod.Fields(0) 
End If 
+0

尽管'rsPeriod.Fields(0)Nothing'工具提示仍然存在,但我仍然收到与此代码相同的错误,所以该值肯定为空。 – Harambe

0

我会使用:

If IsNull(rsPeriod.Fields(0).Value) Then 

不要依赖于默认属性,而且也没有必要来测试是否True = True