以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于空值的理解  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=63754)

--  作者:无我是天机
--  发布时间:2015/1/28 9:14:00
--  [求助]关于空值的理解
在帮助文档里面有这么一段示例

示例五

如果要允许修改订单号,但禁止删除订单号,也就是说订单号列内容不允许为空,可以将DataColChanging事件代码设置为:

If e.DataCol.Name = "订单号" Then
    If
 e.NewValue Is Nothing Then
        MessageBox.Show(
"订单号不允许为空!")
        e.Cancel = 
True
    End
 If
End
 
If

前面提到DataColChanging事件触发的时候,新的值还没有写入表中,所以如果要判断新的值是否为空,只能用e.NewValue Is Nothing
如果要判断旧值是否为空,则既可用:e.OldValue Is Nothing,也可用IsNull方法判断: e.DataRow.IsNull("列名")。
切不可用 e.DataRow("列名") Is Nothing 来判断旧值是否为空,因为对于数值列,如果值为空,e.DataRow("列名")返回的是0,如果是日期列,则返回#01/01/0001#,显然这都不是空值。


我疑惑的地方是:为什么e.OldValue Is Nothinge.DataRow.IsNull("列名")可以,而e.DataRow("列名") Is Nothing却不行,区别到底在哪儿?请高手们不吝赐教!


--  作者:Bin
--  发布时间:2015/1/28 9:18:00
--  
语法就是这样,你无需纠结它.



--  作者:有点甜
--  发布时间:2015/1/28 9:19:00
--  

Nothing 的意思是 不存在。IsNull判断的是 1、 是否存在;2、是否为空值(默认值)


--  作者:无我是天机
--  发布时间:2015/1/28 12:40:00
--  
谢谢,明白了