以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  跨表更新重复行问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=117853)

--  作者:purplebluesky
--  发布时间:2018/4/19 22:25:00
--  跨表更新重复行问题
 请问下 ,我有个关联表,父表的datachanged里写入了跨表跟新的代码,子表未设定,父表是以为采购合同号和子表做了关联。采购合同可能有多个,但是子表的订单跟进只有一个。
现在每次新增父表,子表都会新增行。  我在子表的datachanged里写入以销售合同号为基础筛选,如果有重复的则取消录入。但是老出错。。。是不是这个思路有问题还是代码有问题?
是不是关联的时候用采购合同号为基础的缘故?
父表: 
Select Case e.DataCol.name
    Case "采购合同号"
        Dim dr As DataRow = DataTables("订单跟进").Find(" 采购合同号= \'" & e.OldValue & "\'")
        If dr Is Nothing Then
            dr = DataTables("订单跟进").AddNew()
            dr("销售合同号") = e.DataRow("销售合同号")
            dr("客户") = e.DataRow("客户")
        Else
            dr("采购合同号") = e.DataRow("采购合同号")
        End If
    Case "客户","销售合同号"
        Dim dr As DataRow = DataTables("订单跟进").Find("采购合同号 = \'" & e.DataRow("采购合同号") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select

子表:
If e.DataCol.Name = "销售合同号" Then
    Dim dr As DataRow
    dr = e.DataTable.Find("销售合同号 = \'" & e.NewValue & "\'")
    If dr IsNot Nothing Then
    e.Cancel = True
    End If
End If

[此贴子已经被作者于2018/4/19 22:31:23编辑过]

--  作者:有点甜
--  发布时间:2018/4/19 22:53:00
--  
改成以【销售合同号】作关联。订单跟进和采购合同这个两个表不需要做关联吧?如果订单跟进只有一行,那它应该作为父表。
--  作者:purplebluesky
--  发布时间:2018/4/19 22:57:00
--  
 甜老师,我是以销售生产采购,采购再生成跟进。。。改成跟进为父表,整体结构会出问题么?
--  作者:有点甜
--  发布时间:2018/4/19 23:01:00
--  

跟进表是跟进销售单,还是跟进采购单。

 

如果是跟进销售单,采购单和跟进表没有任何联系。

 

如果是跟进采购单,那跟进表不可能只有一行数据。


--  作者:purplebluesky
--  发布时间:2018/4/19 23:10:00
--  
 跟进表是采集跟进销售,但是部分数据是来自于采购的。
--  作者:purplebluesky
--  发布时间:2018/4/19 23:18:00
--  
 我明白了。。思路想岔了之前。。谢谢!
--  作者:purplebluesky
--  发布时间:2018/4/23 22:48:00
--  
 甜老师,再请问下,我在表A新增行后,在表B也新增行,表C也新增行。。表B获取表A的   A,B,C   表C 或者表A的A,B,C,D。。并且在表A修改信息后自动更新。。
我在表A的datacolchanged中把跨表更新写了两次。。是不是有什么简单的方法。
以下是我写的代码,麻烦看下。。谢谢!
Select Case e.DataCol.name  
    Case "A"
        Dim dr As DataRow = DataTables("表B").Find(" A= \'" & e.OldValue & "\'")
        If dr Is Nothing Then
            dr = DataTables("表B").AddNew()
            dr("B") = e.DataRow("B")
            dr("C") = e.DataRow("C")
 Else
            dr("A") = e.DataRow("A")         
       End If
       
    Case "B","C"
        Dim dr As DataRow = DataTables("表B").Find(" A= \'" & e.OldValue & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If      
End Select

Select Case e.DataCol.name  
    Case "A"
        Dim dr As DataRow = DataTables("表C").Find(" A= \'" & e.OldValue & "\'")
        If dr Is Nothing Then
            dr = DataTables("表C").AddNew()
            dr("B") = e.DataRow("B")
            dr("C") = e.DataRow("C")
            dr("D") = e.DataRow("D")
      
 Else
            dr("A") = e.DataRow("A")         
       End If
       
    Case "B","C","D"
        Dim dr As DataRow = DataTables("表C").Find(" A= \'" & e.OldValue & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If      
End Select


--  作者:有点蓝
--  发布时间:2018/4/23 22:53:00
--  
就这样好了,可以改改,也差不了多少
--  作者:purplebluesky
--  发布时间:2018/4/23 22:59:00
--  
 OK。。谢谢老师!
--  作者:purplebluesky
--  发布时间:2018/4/23 23:23:00
--  
 蓝老师,再咨询下。。。我用刚才的代码,通过窗口输入的信息,表A信息全,可是表B和C就只有B能显示数据。C,D都不行。。但是直接在A表里直接修改数据,表B和表C又都能继承。