以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]三个组合查重代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91635)

--  作者:benwong2013
--  发布时间:2016/10/15 11:19:00
--  [求助]三个组合查重代码
有三个列,分别为单位代码、仓库代码、物料编号,希望当这个列任何一列输入新数据的时候,将用三个组合成为一个组合对表进行查重,有重复将提示,两个组合我可以实现,三个的时候试了几次都有问题,请帮忙修正以下代码,谢谢!
Select Case e.DataCol.name
    Case "仓库代码","物料编号"
        Dim xh As String
        Dim gg As String
        If e.DataCol.Name= "仓库代码" Then
            xh = e.NewValue
            gg = e.DataRow("物料编号")
        Else
            gg = e.NewValue
            xh = e.DataRow("仓库代码")
        End If
        If xh > "" AndAlso gg  > "" Then 
            Dim dr As DataRow = e.DataRow
            If e.DataTable.Find("仓库代码 = \'" & xh & "\' And 物料编号 = \'" & gg & "\'") IsNot Nothing Then
                MessageBox.Show("已经存在相同物料!","提示")
                e.DataRow.Delete
            End If
        End If
End Select

--  作者:有点蓝
--  发布时间:2016/10/15 11:37:00
--  
代码改到DataColChanging事件

Select Case e.DataCol.name
    Case "仓库代码","物料编号","单位代码"
        Dim filter As String
        filter = "仓库代码" & IIF(e.DataRow.IsNull("仓库代码")," is null "," = \'" & e.DataRow("仓库代码") & "\'")
        filter &= "and 物料编号" & IIF(e.DataRow.IsNull("物料编号")," is null "," = \'" & e.DataRow("物料编号") & "\'")
        filter &= "and 单位代码" & IIF(e.DataRow.IsNull("单位代码")," is null "," = \'" & e.DataRow("单位代码") & "\'")
        If not filter.Contains("=") Then Return
        Dim dr As DataRow = e.DataRow
        If e.DataTable.Find(filter) IsNot Nothing Then
            MessageBox.Show("已经存在相同物料!","提示")
            e.Cancel = True
        End If
End Select