以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  判断空值  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=126490)

--  作者:yetle
--  发布时间: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

--  作者:有点甜
--  发布时间: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
--  发布时间: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
--  发布时间:2018/10/23 11:48:00
--  
老师,这个空值的时候为什么判断会不对呢?
--  作者:有点甜
--  发布时间: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
--  发布时间:2018/10/23 14:02:00
--  
这样写不太妥,空值的物料配色也是需要生成一行记录的

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

--  作者:有点甜
--  发布时间: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)