Foxtable(狐表)用户栏目专家坐堂 → [求助]SQLGroupTableBuilder中关于用时的统计-9-14更新问题


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

主题:[求助]SQLGroupTableBuilder中关于用时的统计-9-14更新问题

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]SQLGroupTableBuilder中关于用时的统计-9-14更新问题  发帖心情 Post By:2016/9/13 11:08:00 [只看该作者]

老师,在SQLGroupTableBuilder生成的表中,我要加个应作业分钟与作业率字段
应作业分钟的值应该为:窗口中二个日期相减的分钟数
作业率为 实际作业分钟 / 应作业分钟
请老师帮忙做下,谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.foxdb


[此贴子已经被作者于2016/9/14 10:58:37编辑过]

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


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

Dim d1 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker1")
Dim d2 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker2")
Dim m As Integer
If d1.Value IsNot Nothing AndAlso d2.Value IsNot Nothing Then
    m = (d2.Value - d1.Value).TotalMinutes
End If

Dim t As Table = e.Form.Controls("Table1").Table

Dim b As New SQLGroupTableBuilder("统计表1","工序合并表")

b.AddTable("工序合并表","牌号","密度表","牌号") '添加统计表
b.Groups.AddDef("工序") '根据订单表产品ID分组
b.Totals.AddExp("长度","重量 / 厚度 / 宽度 / 密度 * 1000")
b.Totals.AddDef("作业分钟","实际作业分钟")
t.datasource = b.BuildDataSource

t.DataTable.DataCols.Add("应作业分钟",Gettype(Integer))
t.DataTable.ReplaceFor("应作业分钟",m)
t.DataTable.DataCols.Add("作业率",Gettype(Double),"实际作业分钟/应作业分钟")
t.DataTable.DataCols("作业率").SetFormat("00%")

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2016/9/14 10:58:00 [只看该作者]

老师,现在遇到二个问题:
1、项目文件中存在这个情况,工序合并表中有个牌号,但密度表中没有录入这个牌号对应的密度,造成统计错误,如何提示用户这种情况以便更新密度表
2、作业米数是根据牌号的物理数据公式算出来的,但存在一种情况,这个牌号的物料在机组上由于某种原因上机后没有生产,直接又下机了,但要记录在案,在工序合并表中的记录体现为这条生产记录的作业分钟数为零,如何加入判断,判断条件为当作业分钟数为0时,作业米数也为0,否则作业米数就用公式求得。

Dim b As New SQLGroupTableBuilder("统计表1","工序合并表")
b.C
b.AddTable("工序合并表","牌号","密度表","牌号") '添加统计表
b.Groups.AddDef("工序","机组") '根据订单表产品ID分组
b.Filter = ft
b.Totals.AddExp("作业米数","重量 / 厚度 / 宽度 / 密度 * 1000")
b.Totals.AddDef("作业分钟数","实际作业分钟")
t.datasource = b.BuildDataSource

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


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

Dim count As Integer = DataTables("工序合并表").SQLCompute("count(牌号)","牌号 not in (se lect 牌号 from {密度表})") 'se lect的空格去掉
If count  > 0 Then
    msgbox("密度表的牌号不完整")
End If

Dim d1 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker1")
Dim d2 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker2")
Dim m As Integer
If d1.Value IsNot Nothing AndAlso d2.Value IsNot Nothing Then
    m = (d2.Value - d1.Value).TotalMinutes
End If

Dim t As Table = e.Form.Controls("Table1").Table

Dim b As New SQLGroupTableBuilder("统计表1","工序合并表")

b.AddTable("工序合并表","牌号","密度表","牌号") '添加统计表
b.Groups.AddDef("工序") '根据订单表产品ID分组
b.Totals.AddExp("长度","iif(作业分钟=0,0,重量 / 厚度 / 宽度 / 密度 * 1000)")
b.Totals.AddDef("作业分钟","实际作业分钟")
t.datasource = b.BuildDataSource

t.DataTable.DataCols.Add("应作业分钟",Gettype(Integer))
t.DataTable.ReplaceFor("应作业分钟",m)
t.DataTable.DataCols.Add("作业率",Gettype(Double),"实际作业分钟/应作业分钟")
t.DataTable.DataCols("作业率").SetFormat("00%")

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2016/9/14 11:41:00 [只看该作者]

b.Totals.AddExp("长度","iif(作业分钟=0,0,重量 / 厚度 / 宽度 / 密度 * 1000)")  这句提示 “=” 附近有语法错误,

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


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

测试没有问题,sql数据库改为

b.Totals.AddExp("长度","(Case  when 作业分钟 = 0 then 0 else 重量 / 厚度 / 宽度 / 密度 * 1000 end)")  

 回到顶部