以文本方式查看主题 - 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又都能继承。 |