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


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

主题:数据统计

美女呀,离线,留言给我吧!
nuoyan89
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
数据统计  发帖心情 Post By:2023/7/29 10:07:00 [只看该作者]

老师,我的窗口表是用以下“生产临时表的代码”的代码生成的临时表如图2,我想把生产排产表中按照:使用设备、成品编码、月份、生产日期、领用数量等汇总后,把值显示到窗口表中,但是表事件的代码提示异常,如图1,请帮忙看看,谢谢
生成临时表的代码:
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("使用设备", GetType(String), 250)
dtb.AddDef("设备名称", GetType(String), 250)
dtb.AddDef("最小量", GetType(Double), 32)
dtb.AddDef("最大量", GetType(Double), 32)
dtb.AddDef("领用总量", GetType(Double), 32)
dtb.Build()
Dim s As String = e.form.controls("月份1").Text
Dim d As Date = CDate(s.Insert(4, "-") & "-01")
Dim d2 As Date = New Date(d.Year, d.Month, Date.DaysInMonth(d.Year, d.Month))
For i As Integer = d.Day To d2.Day
    dtb.AddDef(i, GetType(Date))
Next
DataTables("使用监控台_现存量").DataCols.Add("使用设备", GetType(String), 100)
DataTables("使用监控台_现存量").DataCols.Add("设备名称", GetType(String), 200)
Tables("使用监控台_现存量").DataSource = dtb.BuildDataSource()
Dim Cols1() As String = {"使用设备", "设备名称"}
Dim Cols2() As String = {"使用设备", "设备名称"}
For Each dr1 As DataRow In DataTables("设备状态表").sqlSelect("[使用设备] like '%A%' and [使用状态] = '使用中'")
    Dim dr2 As DataRow = DataTables("使用监控台_现存量").AddNew()
    For i As Integer = 0 To Cols1.Length - 1
        dr2(Cols2(i)) = dr1(Cols1(i))
    Next
Next
表事件:
If e.DataCol.Name = "使用设备" Then
    Dim s As String = e.form.controls("月份1").Text
    Dim d As Date = CDate(s.Insert(4, "-") & "-01")
    Dim d2 As Date = New Date(d.Year, d.Month, Date.DaysInMonth(d.Year, d.Month))
    Dim dict As New Dictionary(Of String, String)
    For i As Integer = d.Day To d2.Day
        e.DataRow(i) = Nothing
        Dim dc As DataCol = e.DataTable.DataCols(i)
        dict.Add(dc.Caption, dc.Name)
    Next
    Dim b As New SQLGroupTableBuilder("统计表1", "油类切消液明细")
    b.C
    b.Groups.AddDef("使用设备")
    b.Groups.AddDef("材料编码")
    b.Groups.AddDef("领用日期", DateGroupEnum.None)
    b.Totals.AddDef("领用数量")
    b.Filter = "使用设备 = '" & e.DataRow("使用设备") & "'"
    Dim dt As DataTable = b.Build(True)
    For Each dr As DataRow In dt.DataRows
        Dim cn As String = format(dr("领用日期"), "yyyy-MM-dd")
        If dict.ContainsKey(cn) Then
            e.DataRow(dict(cn)) = dr("领用数量")
        End If
    Next
End If

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看


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


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

字典添加了重复的键,调试

    For i As Integer = d.Day To d2.Day
        e.DataRow(i) = Nothing
        Dim dc As DataCol = e.DataTable.DataCols(i)
msgbox(dc.Caption & "--" & dc.Name)
        dict.Add(dc.Caption, dc.Name)
    Next
[此贴子已经被作者于2023/7/29 10:10:54编辑过]

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/29 11:07:00 [只看该作者]

老师,已找到原因,但是结果没有,如图1(但要求和的表里是有值的,如图2)

If e.DataCol.Name = "使用设备" Then
    Dim s As String = e.form.controls("月份1").Text
    Dim d As Date = CDate(s.Insert(4, "-") & "-01")
    Dim d2 As Date = New Date(d.Year, d.Month, Date.DaysInMonth(d.Year, d.Month))
    Dim dict As New Dictionary(Of String, String)
    Dim b As New SQLGroupTableBuilder("统计表1", "油类切消液明细")
    b.C
    b.Groups.AddDef("使用设备")
    b.Groups.AddDef("材料编码")
    b.Groups.AddDef("领用日期", DateGroupEnum.None)
    b.Totals.AddDef("领用数量")
    b.Filter = "使用设备 = '" & e.DataRow("使用设备") & "'"
    Dim dt As DataTable = b.Build(True)
    For Each dr As DataRow In dt.DataRows
        Dim cn As String = format(dr("领用日期"), "yyyy-MM-dd")
        If dict.ContainsKey(cn) Then
            e.DataRow(dict(cn)) = dr("领用数量")
        End If
    Next
End If

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

[此贴子已经被作者于2023/7/29 11:08:27编辑过]

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


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

还是要继续2楼的调试,看看msgbox(dc.Caption & "--" & dc.Name)弹出的列标题是什么

下面的列标题又是什么?
    For Each dr As DataRow In dt.DataRows
        Dim cn As String = format(dr("领用日期"), "yyyy-MM-dd")
msgbox(cn)
        If dict.ContainsKey(cn) Then
            e.DataRow(dict(cn)) = dr("领用数量")
        End If
    Next

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/29 11:43:00 [只看该作者]

应该是临时表的日期(只显示”日“)和要统计的那个领用日期格式不一样(年、月、日)

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


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

自己想办法改为一样

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/29 11:48:00 [只看该作者]

格式化日期的昨天就开始在研究,还是没研究得了,我把被汇总的那个领用日期也改成天,如代码2,也不行
代码1:
Dim s As String = e.form.controls("月份1").Text
Dim d As Date = CDate(s.Insert(4, "-") & "-01")
Dim d2 As Date = New Date(d.Year, d.Month, Date.DaysInMonth(d.Year, d.Month))
For i As Integer = d.Day To d2.Day
    dtb.AddDef(i, GetType(Date))
Next
代码2:
    For Each dr As DataRow In dt.DataRows
        Dim cn As String = format(dr("领用日期"), "d")
[此贴子已经被作者于2023/7/29 12:56:18编辑过]

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


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

还是基础没学好

方法1、

For i As Integer = d.Day To d2.Day
    dtb.AddDef(format(new date(d.year,d.month,i), "yyyy_MM_dd"), GetType(Date))
Next
……
    For Each dr As DataRow In dt.DataRows
        Dim cn As String = format(dr("领用日期"), "yyyy_MM_dd")

2、

do while d <=  d2
    dtb.AddDef(format(d, "yyyy_MM_dd"), GetType(Date))
d=d.adddays(1)
loop
……
    For Each dr As DataRow In dt.DataRows
        Dim cn As String = format(dr("领用日期"), "yyyy_MM_dd")

3、
    For Each dr As DataRow In dt.DataRows
        Dim cn As String = dr("领用日期").day

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:524 积分:3642 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/29 14:17:00 [只看该作者]

是的,目前还是处于比较单一的逻辑关系,老师,变更之后临时表已按照年、月、日显示了,但是对应的值还是没有按照日期进行显示汇总(问题如3楼)。谢谢

图片点击可在新窗口打开查看此主题相关图片如下:3.jpg
图片点击可在新窗口打开查看

求和的代码:
Dim s As String = e.form.controls("月份1").Text
Dim d As Date = CDate(s.Insert(4, "-") & "-01")
Dim d2 As Date = New Date(d.Year, d.Month, Date.DaysInMonth(d.Year, d.Month))
Dim dict As New Dictionary(Of String, String)
Dim b As New SQLGroupTableBuilder("统计表1", "油类切消液明细")
b.C
b.Groups.AddDef("使用设备")
b.Groups.AddDef("材料编码")
b.Groups.AddDef("领用日期", DateGroupEnum.None)
b.Totals.AddDef("领用数量")
b.Filter = "使用设备 = '" & e.DataRow("使用设备") & "'"
Dim dt As DataTable = b.Build(True)
For Each dr As DataRow In dt.DataRows
    Dim cn As String = format(dr("领用日期"), "yyyy-MM-dd")
    If dict.ContainsKey(cn) Then
        e.DataRow(dict(cn)) = dr("领用数量")
    End If
Next

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


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

调试方法前面都有,自行调试

 回到顶部
总数 38 1 2 3 4 下一页