以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于重置列  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=187519)

--  作者:wymoonwalker
--  发布时间:2023/7/23 18:03:00
--  关于重置列
 请教老师个问题。
我做了一张汇总表A,其中多列需要引用其他7个表的数据。不考虑建立关联表,于是通过代码跨表引用数据自动输入。
因为数据提供表的数量较多,且每张表都有5000行左右,项目打开全部加载压力较大。于是又学习了后台处理,初始不加载这7张表,代码从find改为SQLfind。
可是这7张表的数据每天更新,自从改成SQLfind后,重置列的时间不知道为什么特别长,系统都有点卡顿了。
请问老师,这种情况我应该怎么处理更高效一些?


--  作者:有点蓝
--  发布时间:2023/7/24 9:21:00
--  
在写完代码后可以重置一次列。之后不应该再做任何重置列操作。

把所有表的代码都发上来看看

--  作者:wymoonwalker
--  发布时间:2023/7/24 10:26:00
--  
If e.DataCol.Name = "合同编号" Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("技术勘察文件登记表").SQLFind("工程编号 = \'" & e.DataRow("合同编号") & "\'")
    If dr IsNot Nothing  Then\'如果找到, 则设置各列内容
        e.DataRow("报告审批") = dr("审批")
        e.DataRow("报告LOG") = dr("Log")
    End If
End If
If e.DataCol.Name = "合同编号" Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("技术地基检测物探登记表").SQLFind("工程编号 = \'" & e.DataRow("合同编号") & "\'")
    If dr IsNot Nothing Then\'如果找到, 则设置各列内容
        e.DataRow("报告审批") = dr("审批")
        e.DataRow("报告LOG") = dr("Log")
    End If
End If
If e.DataCol.Name = "合同编号" Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("技术监测测量登记表").SQLFind("工程编号 = \'" & e.DataRow("合同编号") & "\'")
    If dr IsNot Nothing Then\'如果找到, 则设置各列内容
        e.DataRow("报告审批") = dr("审批")
        e.DataRow("报告LOG") = dr("Log")
    End If
End If
If e.DataCol.Name = "合同编号" Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("技术地质勘查登记表").SQLFind("工程编号 = \'" & e.DataRow("合同编号") & "\'")
    If dr IsNot Nothing Then\'如果找到, 则设置各列内容
        e.DataRow("报告审批") = dr("审批")
        e.DataRow("报告LOG") = dr("Log")
    End If
End If
If e.DataCol.Name = "合同编号" Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("技术设计文件登记表").SQLFind("工程编号 = \'" & e.DataRow("合同编号") & "\'")
    If dr IsNot Nothing Then\'如果找到, 则设置各列内容
        e.DataRow("报告审批") = dr("审批")
        e.DataRow("报告LOG") = dr("Log")
    End If
End If
If e.DataCol.Name = "合同编号" Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("技术施工组织设计登记表").SQLFind("工程编号 = \'" & e.DataRow("合同编号") & "\'")
    If dr IsNot Nothing Then\'如果找到, 则设置各列内容
        e.DataRow("报告审批") = dr("审批")
        e.DataRow("报告LOG") = dr("Log")
    End If
End If
If e.DataCol.Name = "合同编号" Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("技术水环灾文件登记表").SQLFind("工程编号 = \'" & e.DataRow("合同编号") & "\'")
    If dr IsNot Nothing Then\'如果找到, 则设置各列内容
        e.DataRow("报告审批") = dr("审批")
        e.DataRow("报告LOG") = dr("Log")
    End If
End If
If e.DataCol.Name = "合同编号" Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("合同台帐2019").SQLFind("合同编号 = \'" & e.DataRow("合同编号") & "\'")
    If dr IsNot Nothing Then\'如果找到, 则设置各列内容
        e.DataRow("施工状态") = dr("施工状态")
        e.DataRow("合同额") = dr("合同额")
        e.DataRow("签订合同") = dr("审批")
        e.DataRow("合同LOG") = dr("Log")
    End If
End If
--  作者:wymoonwalker
--  发布时间:2023/7/24 10:30:00
--  
写完代码后重置列是有效的,但是各种登记表是每天更新的,如果不每天重置的话,这个汇总表数据怎么同步过来呢?现在的设置是不加载这些登记表,在汇总表上用重置的方法更新,缺点是重置耗时太长了。


--  作者:有点蓝
--  发布时间:2023/7/24 10:32:00
--  
这些代码都是哪个表的?
--  作者:wymoonwalker
--  发布时间:2023/7/24 16:18:00
--  
 是在汇总表A里的,表属性datacolchanged


--  作者:有点蓝
--  发布时间:2023/7/24 16:28:00
--  
在其它表里写代码同步更新汇总表的数据,就不需要重置列了:http://www.foxtable.com/webhelp/topics/1453.htm

如果汇总表只是简单的汇总,不需要手工修改,建议改为查询表,直接从其它表取数据:http://www.foxtable.com/webhelp/topics/2322.htm,这种不需要事件代码了

--  作者:wymoonwalker
--  发布时间:2023/7/25 10:44:00
--  
 谢谢老师!我试试自动更新。汇总表有些列还是需要手工录入的,只能跨表引用了。
查询表也很好用,但不能编辑,如果有在生成查询表的基础上还可以增加列编辑列的操作就更方便了。