以文本方式查看主题 - 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) |