以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]代码生成统计表出错(除数为0)(已解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=10825)

--  作者:yyzlxc
--  发布时间:2011/6/25 15:34:00
--  [求助]代码生成统计表出错(除数为0)(已解决)

在代码生成的统计表添加一列表达式统计列:计算人均加工费

Dim b As New SQLGroupTableBuilder("统计表1","日报源表")
b.Groups.AddDef("日期", DateGroupEnum.None) \'添加日期列用于分组
b.Groups.AddDef("单位") \'根据单位分组
b.Totals.AddDef("加工费") \'添加加工费列用于统计
b.Totals.AddDef("投工") \'添加投工列用于统计
b.Totals.AddExp("人均","[加工费]/[投工]")\'添加人均列用于计算人均加工费
b.Build \'生成统计表
MainTable = Tables("统计表1") \'打开生成的统计表
With Tables("统计表1")
    .Position = .Rows.Count - 1
End With

运行出错,如何修改代码,解决除数为0的出错。

 

 


图片点击可在新窗口打开查看此主题相关图片如下:a.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-6-25 22:43:50编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/6/25 15:38:00
--  
b.Totals.AddExp("人均", "iif(投工 = 0, Null, 加工费/投工)")
--  作者:yyzlxc
--  发布时间:2011/6/25 16:25:00
--  

谢谢狐爸的指点,出错的问题解决了,但是没有达到要求。

1、2010/1/2,单位1-2加工费4570元,投工155人,人均应该为29.48元,但结果为129.81元。

原因:在源表增加一列,分别计算出人均值,然后在统计表中进行累加,产生错误结果。

2、因为SQLGroupTableBuilder为后台数据分组统计,所以在统计表反映的是全部数据的统计结果,如何实现按登录用户只能看到自己的数据,而不是全部数据。

3、能否在GroupTableBuilder中添加一列表达式统计列,请指教。

 

 


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

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

--  作者:狐狸爸爸
--  发布时间:2011/6/25 16:31:00
--  
2、SqlGroupTableBuilder也可以设置条件的,有filter属性
3、可以增加表达式列:
 
Dim b As New SQLGroupTableBuilder("统计表1","日报源表")
b.Groups.AddDef("日期", DateGroupEnum.None) \'添加日期列用于分组
b.Groups.AddDef("单位") \'根据单位分组
b.Totals.AddDef("加工费") \'添加加工费列用于统计
b.Totals.AddDef("投工") \'添加投工列用于统计
b.Totals.AddExp("人均","[加工费]/[投工]")\'添加人均列用于计算人均加工费
b.Build \'生成统计表
DataTables("统计表1").DataCols.Add("列名",  GetType(Double), “表达式")
MainTable = Tables("统计表1") \'打开生成的统计表
With Tables("统计表1")
     .Position = .Rows.Count - 1
End With

--  作者:yyzlxc
--  发布时间:2011/6/25 20:41:00
--  

上传文件,还是请狐爸给看看,如何达到上述要求。

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:生产日报b.zip


--  作者:hhbb
--  发布时间:2011/6/25 21:40:00
--  
Dim b As New SQLGroupTableBuilder("统计表1","日报源表")
b.Groups.AddDef("日期", DateGroupEnum.None) \'添加日期列用于分组
b.Groups.AddDef("单位") \'根据单位分组
b.Totals.AddDef("加工费") \'添加加工费列用于统计
b.Totals.AddDef("投工") \'添加投工列用于统计
\'添加人均列用于计算人均加工费
b.Build \'生成统计表

Dim t As Table = Tables("统计表1")
MainTable = t \'打开生成的统计表
t.Position = t.Rows.Count - 1
t.DataTable.DataCols.Add("人均", Gettype(Double), "iif(投工=0,null,加工费/投工)")

--  作者:yyzlxc
--  发布时间:2011/6/25 22:16:00
--  

谢谢hhbb老师的指教!!从数据计算的正确性已达到要求,但是要求在统计表上只显示登录用户的资料,还请指教。再次感谢hhbb老师的热情帮助!!


--  作者:hhbb
--  发布时间:2011/6/25 22:32:00
--  
Dim b As New GroupTableBuilder("统计表1",DataTables("日报源表"))
b.Groups.AddDef("日期", DateGroupEnum.None) \'添加日期列用于分组
b.Groups.AddDef("单位") \'根据单位分组
b.Totals.AddDef("加工费") \'添加加工费列用于统计
b.Totals.AddDef("投工") \'添加投工列用于统计
b.Build \'生成统计表
Dim t As Table = Tables("统计表1")
t.DataTable.DataCols.Add("人均", Gettype(Double),"iif(投工=0,null,加工费/投工)")

MainTable = t \'打开生成的统计表
t.Position = t.Rows.Count - 1

--  作者:hhbb
--  发布时间:2011/6/25 22:32:00
--  
Dim b As New GroupTableBuilder("统计表1",DataTables("日报源表"))
b.Groups.AddDef("日期", DateGroupEnum.None) \'添加日期列用于分组
b.Groups.AddDef("单位") \'根据单位分组
b.Totals.AddDef("加工费") \'添加加工费列用于统计
b.Totals.AddDef("投工") \'添加投工列用于统计
b.Build \'生成统计表
Dim t As Table = Tables("统计表1")
t.DataTable.DataCols.Add("人均", Gettype(Double),"iif(投工=0,null,加工费/投工)")

MainTable = t \'打开生成的统计表
t.Position = t.Rows.Count - 1

--  作者:yyzlxc
--  发布时间:2011/6/25 22:43:00
--  
谢谢hhbb老师,问题全部解决,还要好好消化,再次真诚感谢hhbb老师及给我帮助的狐友。