以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 跨表统计 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=178306) |
-- 作者:张飞 -- 发布时间:2022/6/28 23:24:00 -- 跨表统计 两个表:混凝土设计量,混凝土统计明细,混凝土设计量 的 实耗量列=混凝土统计明细 运输方量 列 统计之和, 表混凝土统计明细表DataColChanged事件代码: Select Case e.DataCol.Name
Case "运输方量" If e.NewValue <> e.OldValue Dim pr As DataRow Dim filter As String filter = "[拌合站] = \'" & e.DataRow("拌合站") & " \' And [施工日期] = \'" & e.DataRow("施工日期") & " \' And [工程名称] = \'" & e.DataRow("工程名称") & " \' And [分项工程] = \'" & e.DataRow("分项工程") & " \' And [施工部位] = \'" & e.DataRow("施工部位") & " \' And [强度等级] = \'" & e.DataRow("强度等级") & " \' And [劳务队名称] = \'" & e.DataRow("劳务队名称") & " \'" pr = DataTables("混凝土设计量").Find(filter) If pr IsNot Nothing Then DataTables("混凝土设计量").DataCols("工程名称").RaiseDataColChanged(pr) End If End If End Select。 为什么:混凝土设计量表 的 实耗量 列 数据统计要慢一拍(混凝土统计明细 运输方量 列 数据边2次,混凝土设计量表 的 实耗量 列 统计的是第一次变动的结果,总是慢一拍,不是同步变动) [此贴子已经被作者于2022/6/28 23:30:38编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/6/28 23:35:00 -- 去掉下面的判断代码 If e.NewValue <> e.OldValue
|
-- 作者:张飞 -- 发布时间:2022/6/28 23:38:00 -- 尝试了,有延迟,才加了个判断 |
-- 作者:有点蓝 -- 发布时间:2022/6/29 8:30:00 -- 混凝土设计量datacolchanged事件发上来看看 |
-- 作者:张飞 -- 发布时间:2022/6/29 9:09:00 -- Dim dr As DataRow = e.DataRow Select Case e.DataCol.Name Case "设计量","变更量1","变更量2","损耗系数","变更后设计量","应耗量","节超量_不含损耗","节超量_含损耗","节超率_不含损耗","节超率_含损耗" If dr.IsNull("设计量") And dr.IsNull("变更量1") And dr.IsNull("变更量2") Then dr("变更后设计量") = Nothing dr("应耗量") = Nothing dr("节超量_不含损耗") = Nothing dr("节超量_含损耗") = Nothing dr("节超率_不含损耗") = Nothing dr("节超率_含损耗") = Nothing Else dr("变更后设计量") = dr("设计量") + dr("变更量1") +dr("变更量2") dr("应耗量") = (dr("设计量") + dr("变更量1") + dr("变更量2")) * (1 + dr("损耗系数")) dr("节超量_含损耗") = (dr("设计量") + dr("变更量1") + dr("变更量2")) * (1 + dr("损耗系数")) - dr("实耗量") dr("节超量_不含损耗") = dr("设计量") + dr("变更量1") + dr("变更量2") - dr("实耗量") If dr("变更后设计量") = 0 Then dr("节超率_不含损耗") = 0 dr("节超率_含损耗") = 0 Else dr("节超率_不含损耗") = dr("节超量_不含损耗") / dr("变更后设计量") dr("节超率_含损耗") = dr("节超量_含损耗") / dr("变更后设计量") End If End If Case "拌合站","施工日期","工程名称","分项工程","施工部位","规格型号" If dr.IsNull("拌合站") OrElse dr.IsNull("施工日期") OrElse dr.IsNull("工程名称") OrElse dr.IsNull("分项工程") OrElse dr.IsNull("施工部位") Then dr("实耗量") = Nothing Else Dim filter As String filter = "[拌合站] = \'" & dr("拌合站") & " \' and [施工日期] = \'" & dr("施工日期") & " \' and [工程名称] = \'" & dr("工程名称") & " \' And [分项工程] = \'" & dr("分项工程") & " \' And [施工部位] = \'" & dr("施工部位") & " \' And [强度等级] = \'" & dr("强度等级") & " \' " dr("实耗量") = DataTables("混凝土出库明细").SQLCompute("Sum(运输方量)", Filter) End If End Select
|
-- 作者:张飞 -- 发布时间:2022/6/29 9:10:00 -- |
-- 作者:张飞 -- 发布时间:2022/6/29 9:25:00 -- Case "拌合站","施工日期","工程名称","分项工程","施工部位","规格型号" If dr.IsNull("拌合站") OrElse dr.IsNull("施工日期") OrElse dr.IsNull("工程名称") OrElse dr.IsNull("分项工程") OrElse dr.IsNull("施工部位") Then dr("实耗量") = Nothing Else Dim filter As String filter = "[拌合站] = \'" & dr("拌合站") & " \' and [施工日期] = \'" & dr("施工日期") & " \' and [工程名称] = \'" & dr("工程名称") & " \' And [分项工程] = \'" & dr("分项工程") & " \' And [施工部位] = \'" & dr("施工部位") & " \' And [强度等级] = \'" & dr("强度等级") & " \' " dr("实耗量") = DataTables("混凝土出库明细").SQLCompute("Sum(运输方量)", Filter) End If 这段若是统计后台数据该怎么修改
|
-- 作者:有点蓝 -- 发布时间:2022/6/29 9:26:00 -- SQLCompute只能统计已经保存的数据。混凝土统计明细里加个保存代码 Select Case e.DataCol.Name Case "运输方量" e.DataRow.save Dim pr As DataRow Dim filter As String filter = "[拌合站] = \'" & e.DataRow("拌合站") & " \' And [施工日期] = \'" & e.DataRow("施工日期") & " \' And [工程名称] = \'" & e.DataRow("工程名称") & " \' And [分项工程] = \'" & e.DataRow("分项工程") & " \' And [施工部位] = \'" & e.DataRow("施工部位") & " \' And [强度等级] = \'" & e.DataRow("强度等级") & " \' And [劳务队名称] = \'" & e.DataRow("劳务队名称") & " \'" pr = DataTables("混凝土设计量").Find(filter) If pr IsNot Nothing Then DataTables("混凝土设计量").DataCols("工程名称").RaiseDataColChanged(pr) End If End Select。 如果为了防止"混凝土设计量"对应的数据没有加载,还可以这样 Select Case e.DataCol.Name
Case "运输方量" e.DataRow.save Dim pr As DataRow Dim filter As String filter = "[拌合站] = \'" & e.DataRow("拌合站") & " \' And [施工日期] = \'" & e.DataRow("施工日期") & " \' And [工程名称] = \'" & e.DataRow("工程名称") & " \' And [分项工程] = \'" & e.DataRow("分项工程") & " \' And [施工部位] = \'" & e.DataRow("施工部位") & " \' And [强度等级] = \'" & e.DataRow("强度等级") & " \' And [劳务队名称] = \'" & e.DataRow("劳务队名称") & " \'" pr = DataTables("混凝土设计量").Find(filter) If pr IsNot Nothing Then DataTables("混凝土设计量").DataCols("工程名称").RaiseDataColChanged(pr) else dim drr as List(of datarow) = DataTables("混凝土设计量").appendload(filter) ‘追加数据’ if drr.count > 0 then DataTables("混凝土设计量").DataCols("工程名称").RaiseDataColChanged(drr(0)) end if End If End Select。 |
-- 作者:张飞 -- 发布时间:2022/6/29 9:35:00 -- 我在计划管理中加了这个: For Each dt As DataTable In DataTables If dt.Type = 1 OrElse dt.Type = 3 Then If dt.HasChanges Then dt.Save() End If End If Next
|
-- 作者:有点蓝 -- 发布时间:2022/6/29 9:43:00 -- 计划管理是按照指定的间隔才会执行的,而不是即时的。事件触发的时候,数据未必保存了,所以才会出现上面说的有延迟 |