以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]初学者求教两段代码疑问  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=8989)

--  作者:ddlzq
--  发布时间:2011/1/11 16:39:00
--  [求助]初学者求教两段代码疑问

各位老师:为什么我写了两段代码,表面看执行效果一致,但只有代码一好用呢?写了内容就记录,清除内容记录消失,而代码二就不行呢?

初学者求教。

 

代码一(好用)如果部门主管填写审批意见,就记录审批人和审批时间,如果没有内容,审批记录为空

----------------------------------------

If e.DataCol.Name =  "审批内容_部门主管意见" Then
    If e.DataRow.IsNull("审批内容_部门主管意见") Then
        e.DataRow("审批内容_部门主管审批记录") = Nothing
    Else
       
        e.DataRow("审批内容_部门主管审批记录") = user.name & "\\" & Date.now
    End If
End If

‘---------------------------- 

代码二(不好用)如果部门主管填写过审批意见就记录审批人和审批时间,否则记录就为空

If e.DataCol.Name = "审批内容_部门主管意见" Then
If e.DataRow("审批内容_部门主管意见") IsNot Nothing Then
e.DataRow("审批内容_部门主管审批记录") = user.name & "\\" & Date.now
Else
e.DataRow("审批内容_部门主管审批记录") = Nothing
End If
End If


--  作者:blackzhu
--  发布时间:2011/1/11 16:59:00
--  
以下是引用ddlzq在2011-1-11 16:39:00的发言:

各位老师:为什么我写了两段代码,表面看执行效果一致,但只有代码一好用呢?写了内容就记录,清除内容记录消失,而代码二就不行呢?

初学者求教。

 

代码一(好用)如果部门主管填写审批意见,就记录审批人和审批时间,如果没有内容,审批记录为空

----------------------------------------

If e.DataCol.Name =  "审批内容_部门主管意见" Then
    If e.DataRow.IsNull("审批内容_部门主管意见") Then    这段代码是如果这个是空的话
        e.DataRow("审批内容_部门主管审批记录") = Nothing     这个为空值
    Else  否则
       
        e.DataRow("审批内容_部门主管审批记录") = user.name & "\\" & Date.now   填写次内容
    End If
End If

‘---------------------------- 

代码二(不好用)如果部门主管填写过审批意见就记录审批人和审批时间,否则记录就为空

If e.DataCol.Name = "审批内容_部门主管意见" Then  
If e.DataRow("审批内容_部门主管意见") IsNot Nothing Then    如果这个内容不是空值的话
e.DataRow("审批内容_部门主管审批记录") = user.name & "\\" & Date.now    就填写这个内容
Else   否则
e.DataRow("审批内容_部门主管审批记录") = Nothing    这个为空值.
End If
End If

     根据这个你自己修改代码顺序.关键是执行代码的顺序,先执行什么再执行什么.


--  作者:czy
--  发布时间:2011/1/11 17:03:00
--  
If e.NewValue IsNot Nothing Then
--  作者:ddlzq
--  发布时间:2011/1/11 19:55:00
--  

感谢楼上两位老师指导,我学习下...


--  作者:lmk
--  发布时间:2011/1/11 20:16:00
--  
好好琢磨一下Null的含意,Null严格来说是表示内容不确定的意思,是一种特殊意义上的空值,因此判断单元格是否有内容应该用:isnull(),而不能用is nothing 或isnot nothing,确实有点不好理解,只能记住规则啦。
--  作者:ddlzq
--  发布时间:2011/1/11 22:21:00
--  
谢谢楼上老师指点,待我好好测试研究下。
--  作者:狐狸爸爸
--  发布时间:2011/1/12 8:49:00
--  
切不可用 e.DataRow("列名") Is Nothing 来判断某列的值是否为空,因为对于数值列,如果值为空,e.DataRow("列名")返回的是0,如果是日期列,则返回#01/01/0001#,显然这都不是空值。
--  作者:ddlzq
--  发布时间:2011/1/12 8:55:00
--  
以下是引用狐狸爸爸在2011-1-12 8:49:00的发言:
切不可用 e.DataRow("列名") Is Nothing 来判断某列的值是否为空,因为对于数值列,如果值为空,e.DataRow("列名")返回的是0,如果是日期列,则返回#01/01/0001#,显然这都不是空值。

哦,原来如此啊...看来真要好好学习了,不然抄出来的代码总会不听话,呵呵,谢谢狐爸的一语点题。