Foxtable(狐表)用户栏目专家坐堂 → 跨表统计


  共有4931人关注过本帖树形打印复制链接

主题:跨表统计

帅哥哟,离线,有人找我吗?
张飞
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:51 积分:491 威望:0 精华:0 注册:2018/1/30 14:13:00
跨表统计  发帖心情 Post By: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105869 积分:538402 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/28 23:35:00 [只看该作者]

去掉下面的判断代码

If e.NewValue <> e.OldValue

 回到顶部
帅哥哟,离线,有人找我吗?
张飞
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:51 积分:491 威望:0 精华:0 注册:2018/1/30 14:13:00
  发帖心情 Post By:2022/6/28 23:38:00 [只看该作者]

尝试了,有延迟,才加了个判断


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105869 积分:538402 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/29 8:30:00 [只看该作者]

混凝土设计量datacolchanged事件发上来看看

 回到顶部
帅哥哟,离线,有人找我吗?
张飞
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:51 积分:491 威望:0 精华:0 注册:2018/1/30 14:13:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
张飞
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:51 积分:491 威望:0 精华:0 注册:2018/1/30 14:13:00
  发帖心情 Post By:2022/6/29 9:10:00 [只看该作者]

图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
张飞
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:51 积分:491 威望:0 精华:0 注册:2018/1/30 14:13:00
  发帖心情 Post By: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

这段若是统计后台数据该怎么修改

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105869 积分:538402 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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。

 回到顶部
帅哥哟,离线,有人找我吗?
张飞
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:51 积分:491 威望:0 精华:0 注册:2018/1/30 14:13:00
  发帖心情 Post By: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  

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105869 积分:538402 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/29 9:43:00 [只看该作者]

计划管理是按照指定的间隔才会执行的,而不是即时的。事件触发的时候,数据未必保存了,所以才会出现上面说的有延迟

 回到顶部
总数 12 1 2 下一页