Foxtable(狐表)用户栏目专家坐堂 → 判断空值


  共有2403人关注过本帖树形打印复制链接

主题:判断空值

帅哥哟,离线,有人找我吗?
yetle
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
判断空值  发帖心情 Post By:2018/10/22 17:55:00 [只看该作者]

如果在dt2找到物料基本信息_物料ID和物料配色同时相等的记录,则不生成新的行;没有相同记录,则生成新的行记录
物料配色有值的时候正常,但是,当物料配色为空的时候还是会生成新的行

 Dim dt2 As DataTable = DataTables("采购需求")
 Dim dt1 As DataTable = Tables("采购需求_table2").DataTable

  For Each drr As DataRow In dt1.DataRows
     Dim fdr As DataRow = dt2.Find("物料基本信息_物料ID = '" & drr("物料基本信息_物料ID") & "' And  [物料配色] = '" & drr("物料配色") & "' And [审核] = True ")
     If fdr IsNot Nothing Then
        If drr("采购应订数") <> fdr("采购应订数") Then
           fdr("采购应订数") = drr("采购应订数") 
           fdr("静需求数") = drr("静需求数")
           fdr("用量应订数") = drr("用量应订数")

           fdr("订料数") = drr("订料数")
        End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/22 18:07:00 [只看该作者]

  For Each drr As DataRow In dt1.DataRows
     Dim fdr As DataRow = dt2.Find("物料基本信息_物料ID = '" & drr("物料基本信息_物料ID") & "' And  [物料配色] = '" & drr("物料配色") & "' And [审核] = True ")
     If fdr Is Nothing Then
         fdr = dt2.addnew
         fdr("物料基本信息_物料ID") = drr("物料基本信息_物料ID")
         fdr("物料配色") = drr("物料配色")
     End If
        If drr("采购应订数") <> fdr("采购应订数") Then
           fdr("采购应订数") = drr("采购应订数") 
           fdr("静需求数") = drr("静需求数")
           fdr("用量应订数") = drr("用量应订数")
           fdr("订料数") = drr("订料数")
        End If

 回到顶部
帅哥哟,离线,有人找我吗?
yetle
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2018/10/23 9:45:00 [只看该作者]

本身是这么写的,前面楼上我没把后面的代码复制上来,不好意思,这段代码是对比更新用的,当物料配色有值的时候新增行和替换值都正常,当物料配色是空值的时候,能够新增行,但被对比的表本身存在相同的行记录,还是会再增加一行,所以当物料配色值为空的时候,find这个条件代码是无法匹配条件的。
  For Each drr As DataRow In dt1.DataRows
     Dim fdr As DataRow = dt2.Find("物料基本信息_物料ID = '" & drr("物料基本信息_物料ID") & "' And  [物料配色] = '" & drr("物料配色") & "' And [审核] = True ")
     If fdr IsNot Nothing Then
        If drr("采购应订数") <> fdr("采购应订数") Then
           fdr("采购应订数") = drr("采购应订数") 
           fdr("静需求数") = drr("静需求数")
           fdr("用量应订数") = drr("用量应订数")

           fdr("订料数") = drr("订料数")
        End If
 Tables("采购需求_table1").Filter = "[物供号] = "& v &" And [审核] = True "

 Else
    Dim dr1 As Row = Tables("采购需求_table1").AddNew
    dr1("物料基本信息_物料ID")=drr("物料基本信息_物料ID")
    dr1("物料基本信息_物料名称")=drr("物料基本信息_物料名称")
    dr1("物料基本信息_物料编码")=drr("物料基本信息_物料编码")
    dr1("物料基本信息_布封")=drr("物料基本信息_布封")
    dr1("静需求数")=drr("静需求数")
    dr1("采购应订数")=drr("采购应订数")
    dr1("采购应订数")=drr("采购应订数")
    dr1("订料数")=drr("订料数")
    dr1.Save()
End If
Next

 回到顶部
帅哥哟,离线,有人找我吗?
yetle
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2018/10/23 11:48:00 [只看该作者]

老师,这个空值的时候为什么判断会不对呢?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/23 12:04:00 [只看该作者]

 For Each drr As DataRow In dt1.DataRows
     Dim fdr As DataRow = dt2.Find("物料基本信息_物料ID = '" & drr("物料基本信息_物料ID") & "' And  [物料配色] = '" & drr("物料配色") & "' And [审核] = True ")

 

改成

 

 For Each drr As DataRow In dt1.select("物料基本信息_物料ID is not null and 物料配色 is not null")

     Dim fdr As DataRow = dt2.Find("物料基本信息_物料ID = '" & drr("物料基本信息_物料ID") & "' And  [物料配色] = '" & drr("物料配色") & "' And [审核] = True ")

 回到顶部
帅哥哟,离线,有人找我吗?
yetle
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2018/10/23 14:02:00 [只看该作者]

这样写不太妥,空值的物料配色也是需要生成一行记录的

实在不行,我将物料配色为空值的给赋值一个字母代替了,谢谢
[此贴子已经被作者于2018/10/23 14:52:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/23 15:00:00 [只看该作者]

Dim fdr As DataRow = dt2.Find("物料基本信息_物料ID = '" & drr("物料基本信息_物料ID") & "' And  [物料配色] = '" & drr("物料配色") & "' And [审核] = True ")

 

改成

 

Dim filter as string = "[审核] = True "

If drr("物料基本信息_物料ID") = nothing then

    filter = " and 物料基本信息_物料ID is null"

else

    filter = " and 物料基本信息_物料ID = '" & drr("物料基本信息_物料ID") & "'"

End If

If drr("物料配色") = nothing then

    filter = " and 物料配色 is null"

else

    filter = " and 物料配色 = '" & drr("物料配色") & "'"

End If

Dim fdr As DataRow = dt2.Find(filter)


 回到顶部