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


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

主题:数据统计

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望: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
图片点击可在新窗口打开查看


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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望: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编辑过]

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/29 11:43:00 [显示全部帖子]

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

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望: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编辑过]

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望: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

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/29 14:39:00 [显示全部帖子]

测试了,红色部分添加进去后提示相同键,调试之后提示设备名称和材料编码重复了。但是不知道怎么改?

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)
    msgbox(dc.Caption & "--" & dc.Name)
    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 = dr("领用日期").day
    If dict.ContainsKey(cn) Then
        e.DataRow(dict(cn)) = dr("领用数量")
    End If
Next

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/29 21:58:00 [显示全部帖子]

请老师再帮忙看下,怎么改都不对

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/30 1:31:00 [显示全部帖子]

老师,改到现在不知道怎么改了?还是提示如图1的异常
Dim dict As New Dictionary(Of String, String)
For i As Integer = 1 To 31
       e.DataRow(i) = Nothing
    Dim dc As DataCol = e.DataTable.DataCols(i)
    dict(dc.Name) = format(e.DataRow(i), "yyyy-MM-dd")
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

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

[此贴子已经被作者于2023/7/30 1:42:01编辑过]

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/30 20:56:00 [显示全部帖子]

老师,在帮忙看看,谢谢
控件代码:
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("使用设备", GetType(String), 250)
dtb.AddDef("设备名称", GetType(String), 250)
dtb.AddDef("材料编码", GetType(String), 250)
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))
Do While d <= d2
    dtb.AddDef(format(d, "yyyy-MM-dd"), GetType(Date))
    d = d.adddays(1)
Loop
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
Tables("使用监控台_现存量").Sort = "使用设备"
表事件代码:
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 e.DataTable.datacols.Contains(cn) Then
        e.DataRow(cn) = dr("领用数量")
    End If
Next

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

[此贴子已经被作者于2023/7/30 21:12:45编辑过]

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


加好友 发短信
等级:二尾狐 帖子:501 积分:3485 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2023/7/30 22:08:00 [显示全部帖子]

改成的数字类型,测试时没错误提示了,但这个项目直接闪退了

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