以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助...重新生成关联表及关联子表的方式  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189305)

--  作者:victor_lin33
--  发布时间:2023/11/23 12:46:00
--  求助...重新生成关联表及关联子表的方式
蓝老师:
我有一BPM流程管理项目...每张表都有"本单编号"  "来源单号"
要让A表新增时按其发放部门自动生成B C的对应资料这一步我搞定了....

当A表原笔资料修改发放部门  要同步修正原关联B表及C表我搞不定  跟您求救下...

A表为父表 关联 "文管收发台账"
>  (A表  "本单编号")→(文管收发台账  "来源单号")

"文管收发台账" 关联 "文件收发子档"
> (文管收发台账  "本单编号")→(文件收发子档  "来源单号")


我现在的代码如下:
A表代码 (DataColChanged 事件)
Case "会办抄送" \'此列为多值列-勾选发放部门
        If dr.IsNull("会办抄送") = False Then \'如果已经勾选
            If dr.GetChildRows("文管收发台账").Count = 0 Then \'而且无对应文管发放单
                Dim cr As DataRow = DataTables("文管收发台账").AddNew() \'生成关联文管发放
                cr("来源单号") = dr("本单编号")
                cr("文件名称") = dr("使用单据")
                cr("抄送对象") = dr("会办抄送")
                cr("标的项目") = dr("项目名称")
                cr("风险评估") = dr("风险评估")
                cr("内容摘要") = dr("申作内容")
                cr("编制部门") = dr("项目负责人")
                cr("BOM说明") = dr("BOM说明")
            End If
        End If


文管收发台账 代码(DataColChanged 事件)
Case "抄送对象"
        If e.DataRow.GetChildRows("文件收发子档").Count = 0 Then
            For Each s As String In e.DataRow("抄送对象").split("、")
                Dim r As Row = Tables("文管收发台账.文件收发子档").addnew
                r("抄送部门") = s
                r("来源单号") = ar("本单编号")
            Next
        End if
 

实在很小白   看了帮助档与论坛 学习3天了也没能搞定 只能跟您求救...

--  作者:victor_lin33
--  发布时间:2023/11/23 12:52:00
--  
另外 我关联太多 打开项目耗时 (因为有28张来源A表要 关联到文件收发记录)
能怎样优化吗? 就是不要用每张表和"文管收发台账" 关联 应该怎样做?

谢谢!


--  作者:有点蓝
--  发布时间:2023/11/23 13:34:00
--  
代码执行有什么地方有问题?
--  作者:victor_lin33
--  发布时间:2023/11/23 14:20:00
--  
代码没问题
就是没达到要的功能
当A表原笔资料修改发放部门  没法同步修正 关联B表及C表
--  作者:有点蓝
--  发布时间:2023/11/23 14:36:00
--  
调试

A表代码 (DataColChanged 事件)
Case "会办抄送" \'此列为多值列-勾选发放部门
msgbox(dr("会办抄送"))
        If dr.IsNull("会办抄送") = False Then \'如果已经勾选
msgbox("Count =" & dr.GetChildRows("文管收发台账").Count )
            If dr.GetChildRows("文管收发台账").Count = 0 Then \'而且无对应文管发放单
                Dim cr As DataRow = DataTables("文管收发台账").AddNew() \'生成关联文管发放
                cr("来源单号") = dr("本单编号")
                cr("文件名称") = dr("使用单据")
                cr("抄送对象") = dr("会办抄送")
msgbox("抄送对象=" & cr("抄送对象") )
                cr("标的项目") = dr("项目名称")
                cr("风险评估") = dr("风险评估")
                cr("内容摘要") = dr("申作内容")
                cr("编制部门") = dr("项目负责人")
                cr("BOM说明") = dr("BOM说明")
            End If
        End If


文管收发台账 代码(DataColChanged 事件)
Case "抄送对象"
msgbox("文件收发子档Count =" & e.DataRow.GetChildRows("文件收发子档").Count  )
        If e.DataRow.GetChildRows("文件收发子档").Count = 0 Then
            For Each s As String In e.DataRow("抄送对象").split("、")
msgbox("s=" & s )
                Dim r As Row = Tables("文管收发台账.文件收发子档").addnew
                r("抄送部门") = s
                r("来源单号") = ar("本单编号")
            Next
        End if

--  作者:victor_lin33
--  发布时间:2023/11/24 19:47:00
--  
蓝老师: 搞定了的最后代码...分享给看帖的人

A表

Case "会办抄送" \'此列为多值列-勾选发放部门
        msgbox(ar("会办抄送"))
        If ar.IsNull("会办抄送") = False Then \'如果已经勾选
            If ar.GetChildRows("文管收发台账").Count = 0 Then \'而且无对应文管发放单
                Dim cr As DataRow = DataTables("文管收发台账").AddNew() \'生成关联文管发放单
                cr("来源单号") = ar("本单编号")
                cr("文件名称") = ar("使用单据")
                cr("抄送对象") = ar("会办抄送")
                cr("标的项目") = ar("项目名称")
                cr("风险评估") = ar("风险评估")
                cr("内容摘要") = ar("策划目的")
                cr("编制部门") = ar("项目负责人")
                cr("BOM说明") = ar("BOM说明")
            Else \'如果已有文管发放单 但修改发放部门
                msgbox(ar("会办抄送"))
                Dim cr As DataRow = DataTables("文管收发台账").Find("来源单号=\'" & ar("本单编号") & "\'")\'查找对应文管发放单
                cr("抄送对象") = ar("会办抄送")\'修改发放部门
            End If
        End If


B表代码 
Case "抄送对象"
        \'msgbox("文件收发子档Count =" & e.DataRow.GetChildRows("文件收发子档").Count)
        DataTables("文件收发子档").DeleteFor("来源单号=\'" & ar("本单编号") & "\'")
        If e.DataRow.GetChildRows("文件收发子档").Count = 0 Then
            For Each s As String In e.DataRow("抄送对象").split("、")
                \'msgbox("s=" & s)
                Dim r As Row = Tables("文管收发台账.文件收发子档").addnew
                r("抄送部门") = s
                r("来源单号") = ar("本单编号")
            Next
        End If