以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何实现只对当前表的副表禁止重复?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=187152)

--  作者:lin98
--  发布时间:2023/6/26 17:13:00
--  如何实现只对当前表的副表禁止重复?
Select Case e.DataCol.name
    Case "编号", "数量", "日期"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("编号") = False AndAlso dr.IsNull("数量") = False AndAlso dr.IsNull("日期") = False Then
            If e.DataTable.Compute("Count([_Identify])", "编号 = \'" & dr("编号") & "\' And 数量 = \'" & dr("数量") & "\'And 日期 = \'" & dr("日期") & "\'") > 1 Then
           
                MessageBox.Show("已经存在相同型号和规格的行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
                e.DataRow(e.DataCol.Name) = e.OldValue 
            End If
        End If
End Select

Dim nma() As String = {"编号", "型号", "规格"} \'
Dim nmb() As String = {"编号", "型号", "规格"} \'
For Each r As Row In Tables("导入窗口_产品表").GetCheckedRows \'
     If DataTables("表C").Find("编号 = \'" & r("编号") & "\' And 型号 = \'" & r("型号") & "\'And 规格 = \'" & r("规格") & "\'") Is Nothing Then \'

        Dim dr As Row = Tables("表C").AddNew \'
        For i As Integer = 0 To nma.Length - 1
            dr(nmb(i)) = r(nma(i))
        Next
    Else
        MessageBox.Show("已经存在相同型号和规格的行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
        
    End If
    
Next

执行


执行上面的代码,是正表禁止重复,无法禁止副表复复,这样造成系统不能正常使用,

--  作者:有点蓝
--  发布时间:2023/6/26 17:32:00
--  
对副本肯定也有效。除非数据没有全部加载
--  作者:lin98
--  发布时间:2023/6/26 17:51:00
--  
产品表与订单明细

订单明细引用产品表,只能引用一次,不在引用,否则,报错,
实际应用中,订单明细引用产品,是在窗口的订单明细禁止重复,防止同一单有不会有重复,造成数据混乱,但数据库中的订单明细、狐表上的的订单明细是正表允许重复,因订单明细有订单单号,数量来做区别,但是从产品表的产品信息引入订单明细,产品表没单明细有订单单号,数量来做区别,所以执行上面代码,它就能一种产品只引用,不能再引用

--  作者:lin98
--  发布时间:2023/6/26 18:02:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:不重复.zip


上传实例,用窗口按键是不能再从产品表引用产品,造成后续不能正常,产品表在实际运行是经常被引用,请帮助处理,表C是强制手动做的正确,如何用按键也能实现?

--  作者:有点蓝
--  发布时间:2023/6/26 20:18:00
--  
无法理解上面描述的意思,请举例具体操作步骤说明一下,什么地方有问题。