以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于5列组合校对重复的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92809)

--  作者:benwong2013
--  发布时间:2016/11/14 8:47:00
--  关于5列组合校对重复的问题
比如A、B、C、D、E一共5列一起组合对新输入的内容进行重复性的判定,其中A和E为非空的,但BCD列有可能是为空的,之前写的代码只是针对5列为非空才能起到作用,请问有没有其它办法简单的;
Select Case e.DataCol.name
    Case "物料类别","物料名称","规格", "等级","单位","品牌"
        Dim dr As DataRow = e.DataRow
        Dim str As String = ""
        If e.DataCol.name = "物料名称" Then
            str = e.newvalue & "|" & dr("规格") & "|" & dr("等级") & "|" & dr("单位") & "|" & dr("品牌")
        ElseIf e.DataCol.name = "规格" Then
            str = dr("物料名称") & "|" & e.newvalue & "|" & dr("等级") & "|" & dr("单位")& "|" & dr("品牌")
        ElseIf e.DataCol.name = "等级" Then
            str = dr("物料名称") & "|" & dr("规格") & "|" & e.newvalue & "|" & dr("单位")& "|" & dr("品牌")
        ElseIf e.DataCol.name = "单位" Then
            str = dr("物料名称") & "|" & dr("规格") & "|"  & dr("等级") & "|" & e.newvalue & "|" & dr("品牌")
        ElseIf e.DataCol.name = "品牌" Then
            str = dr("物料名称") & "|" & dr("规格") & "|"  & dr("等级") & "|" & dr("单位") & "|"& e.newvalue
        End If
        dr = e.DataTable.Find("物料名称 + \'|\' + 规格 + \'|\' + 等级 + \'|\' + 单位 + \'|\' + 品牌 = \'" & str & "\'")
        If dr IsNot Nothing Then
            MessageBox.Show("此物料已经存在!")
            e.Cancel = True
        End If
End Select

--  作者:有点色
--  发布时间:2016/11/14 8:52:00
--  

dr = e.DataTable.Find("物料名称 + \'|\' + 规格 + \'|\' + 等级 + \'|\' + 单位 + \'|\' + 品牌 = \'" & str & "\'")

 

改成

 

dr = e.DataTable.Find("isnull(物料名称,\'\') + \'|\' + isnull(规格,\'\') + \'|\' + isnull(等级,\'\') + \'|\' + isnull(单位,\'\') + \'|\' + isnull(品牌,\'\') = \'" & str & "\'")