以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 跨表统计自动更新 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=144400) |
-- 作者:南山南 -- 发布时间:2019/12/19 7:51:00 -- 跨表统计自动更新 1、不能及时更新,修改了两三次数据才更新第一次,有时候就不更新,感觉不稳定,不知具体原因出现在哪里? 2、因为订单表每次更新都是整年更新,若要重置列更新感觉速度太慢,订单表一年大概有一万行左右,对于此问题老师给我点具体设计思路,我想了一个月,思想如以下代码,但是感觉不好,效率低下,大量重算速度慢。 订单表(备注:这里有三种日期,访客、订单、过来) DataColChanged事件写入如下代码: Select Case e.DataCol.Name Case "单数","预算利润","实际利润" Dim pr,pr1,pr2 As DataRow pr = DataTables("推广流水").Find("编号= \'" & e.DataRow("编号") & "\'") If pr IsNot Nothing Then DataTables("推广流水").DataCols("编号").RaiseDataColChanged(pr) End If pr1 = DataTables("公司流水").Find("日期= \'" & e.DataRow("订单日期") & "\'") If pr1 IsNot Nothing Then DataTables("公司流水").DataCols("日期").RaiseDataColChanged(pr1) End If pr2 = DataTables("公司流水").Find("日期= \'" & e.DataRow("过来日期") & "\'") If pr2 IsNot Nothing Then DataTables("公司流水").DataCols("日期").RaiseDataColChanged(pr2) End If End Select 公司流水表DataColChanged事件写入如下代码: If e.DataCol.Name = "日期" Then If e.NewValue Is Nothing Then e.DataRow("广告费")=Nothing e.DataRow("加v")=Nothing e.DataRow("人工成本")=Nothing e.DataRow("订单日期_单数")=Nothing e.DataRow("订单日期_预算利润")=Nothing e.DataRow("订单日期_实际利润")=Nothing e.DataRow("过来日期_单数")=Nothing e.DataRow("过来日期_预算利润")=Nothing e.DataRow("过来日期_实际利润")=Nothing e.DataRow("出团_订单日期_单数")=Nothing e.DataRow("出团_订单日期_预算利润")=Nothing e.DataRow("出团_订单日期_实际利润")=Nothing e.DataRow("待出团_过来日期_单数")=Nothing e.DataRow("待出团_过来日期_预算利润")=Nothing e.DataRow("待出团_过来日期_实际利润")=Nothing Else Dim Filter,Filter1,Filter2,Filter3,Filter4,Filter5,Filter6 As String Filter = "日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'" Filter1 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'" Filter2 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'" Filter3 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 出团=\'出团\'" Filter4 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 出团=\'待出团\'" Filter5 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 出团=\'出团\'" Filter6 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 出团=\'待出团\'" e.DataRow("广告费")=DataTables("广告费").SQLCompute("sum([消费])",Filter ) e.DataRow("现金")=DataTables("广告费").SQLCompute("sum([现金])",Filter ) e.DataRow("加v")=DataTables("加V").SQLCompute("sum([数量])",Filter ) e.DataRow("人工成本")=DataTables("分摊").SQLCompute("sum([人工成本])",Filter ) e.DataRow("订单日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter1 ) e.DataRow("订单日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter1 ) e.DataRow("订单日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter1 ) e.DataRow("过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter2 ) e.DataRow("过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter2 ) e.DataRow("过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter2 ) e.DataRow("出团_订单日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter3 ) e.DataRow("出团_订单日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter3 ) e.DataRow("出团_订单日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter3 ) e.DataRow("待出团_订单日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter4 ) e.DataRow("待出团_订单日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter4 ) e.DataRow("待出团_订单日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter4 ) e.DataRow("出团_过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter5 ) e.DataRow("出团_过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter5 ) e.DataRow("出团_过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter5 ) e.DataRow("待出团_过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter6 ) e.DataRow("待出团_过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter6 ) e.DataRow("待出团_过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter6 ) End If End If 推广流水表DataColChanged事件写入如下代码: If e.DataCol.Name = "编号" Then If e.NewValue Is Nothing Then e.DataRow("账户币")=Nothing e.DataRow("现金")=Nothing e.DataRow("加v")=Nothing e.DataRow("订单日期_单数")=Nothing e.DataRow("订单日期_预算利润")=Nothing e.DataRow("订单日期_实际利润")=Nothing e.DataRow("过来日期_单数")=Nothing e.DataRow("过来日期_预算利润")=Nothing e.DataRow("过来日期_实际利润")=Nothing e.DataRow("出团_订单日期_单数")=Nothing e.DataRow("出团_订单日期_预算利润")=Nothing e.DataRow("出团_订单日期_实际利润")=Nothing e.DataRow("待出团_过来日期_单数")=Nothing e.DataRow("待出团_过来日期_预算利润")=Nothing e.DataRow("待出团_过来日期_实际利润")=Nothing e.DataRow("运营") = Nothing e.DataRow("推广") = Nothing e.DataRow("路径") = Nothing Else Dim dr As DataRow dr = DataTables("ku").Find("[编码] = \'" & e.NewValue & "\'") If dr IsNot Nothing Then e.DataRow("运营") = dr("运营") e.DataRow("推广") = dr("平台") e.DataRow("路径") = dr("路径") End If Dim Filter,Filter1,Filter2,Filter3,Filter4,Filter5,Filter6 As String Filter = "日期 = #" & e.DataRow("日期") & "# And 编号= \'" & e.DataRow("编号") & "\'And 公司= \'" & e.DataRow("公司") & "\'" Filter1 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 编号= \'" & e.DataRow("编号") & "\'" Filter2 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 编号= \'" & e.DataRow("编号") & "\'" Filter3 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 出团=\'出团\'And 编号= \'" & e.DataRow("编号") & "\'" Filter4 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 出团=\'待出团\'And 编号= \'" & e.DataRow("编号") & "\'" Filter5 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 出团=\'出团\'And 编号= \'" & e.DataRow("编号") & "\'" Filter6 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= \'" & e.DataRow("公司") & "\'And 出团=\'待出团\'And 编号= \'" & e.DataRow("编号") & "\'" e.DataRow("账户币")=DataTables("广告费").SQLCompute("sum([消费])",Filter ) e.DataRow("现金")=DataTables("广告费").SQLCompute("sum([现金])",Filter ) e.DataRow("加v")=DataTables("加V").SQLCompute("sum([数量])",Filter ) e.DataRow("订单日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter1 ) e.DataRow("订单日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter1 ) e.DataRow("订单日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter1 ) e.DataRow("过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter2 ) e.DataRow("过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter2 ) e.DataRow("过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter2 ) e.DataRow("出团_过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter5 ) e.DataRow("出团_过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter5 ) e.DataRow("出团_过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter5 ) e.DataRow("待出团_过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter6 ) e.DataRow("待出团_过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter6 ) e.DataRow("待出团_过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter6 ) End If End If |
-- 作者:有点蓝 -- 发布时间:2019/12/19 8:42:00 -- 1、代码没有问题,不更新,是因为您限制了"单数","预算利润","实际利润"这3列数据有变动才会触发更新的操作。但是查询统计条件却还有公司、出团等等列,如果这些列没有数据,很明显统计不到的,也就是说"单数","预算利润","实际利润"这3列数据有变动之前,公司、出团这些列必须先要有数据。 |