再谈空值

我们已经知道,空值是用Nothing表示的。 例如需要删除订单表某行客户列的内容,可以:

Tables("订单").Rows(1)("客户") = Nothing

DataTables("订单").DataRows(1)("客户") = Nothing

如果要判断某一列的内容为空,可以:

If Tables("订单").Rows(1).IsNull("客户") Then
 
'代码
End If

If DataTables("订单").DataRows(1).IsNull("客户") Then
  '代码

End If

你也许会感到奇怪,为什么要用IsNull判断,而不能用下面的方法判断呢:

If Tables("订单").Rows(1)("客户") Is Nothing Then
  '代码

End If

这是因为即使某列的值为空,其返回的值也不会是Nothing。
在某列内容为空的时候,会根据不同的列类型,返回不同的值,规则如下:

字符列:""
数值列:0
逻辑列:False
日期列:#0001-01-01 0:00:00#

很多方法,例如Compute、Find、DeleteFor、Select,都可以使用表达式来作为执行条件,那么表达式中如何针对空值和非空值来设置条件呢?
我们还是举例说明,例如删除表A中第一列内容为空的行:

DataTables("表A").DeleteFor("第一列 Is Null")

再例如,计算订购数量大于500,且发货日期为空的行数:

Dim Count As Integer
Count =
DataTables("订单").Compute("Count(编号)","数量> 500 And 发货日期 Is Null"
)
Output.Show(Count)

如果要表示非空,可以加上Not关键词,例如要得到订单表中折扣不为空的行数:

Dim Val As Integer
Val =
DataTables("订单").Compute("Count(产品编号)","折扣 Is Not Null")


本页地址:http://www.foxtable.com/webhelp/topics/1516.htm