Foxtable(狐表)用户栏目专家坐堂 → 除数为0计算结果出现错误提示


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

主题:除数为0计算结果出现错误提示

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40785 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2009/11/6 0:36:00 [显示全部帖子]

b.Exprs.Adddef("料蛋比","iif(IsNull([种蛋数],0) = 0,0,IsNull([耗料],0)/IsNull([种蛋数],0))",AggregateEnum.Average)
[此贴子已经被作者于2009-11-6 3:02:44编辑过]

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40785 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2009/11/6 17:29:00 [显示全部帖子]

不用试了,应该是贺老师在这里支持的表达式不全造成,建议改进:

目前出现错误的原因是b.Exprs.Adddef()的表达式不支持iif()和isnull()判断。


必须支持这样的写法:

b.Exprs.Adddef("料蛋比","iif(IsNull([种蛋数],0) = 0,0,IsNull([耗料],0)/IsNull([种蛋数],0))",AggregateEnum.Average)

理由:没有iif()判断,[种蛋数]为零出错,因为计算机不允许0做除数
        没有isnull()判断,种蛋数从来没有输入过数据时出错。

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40785 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2009/11/6 21:10:00 [显示全部帖子]

那就暂时有办法变通解决了:


表ADataColChanged事件代码:

if e.datacol.name = "种蛋数"
    if e.datarow("种蛋数") = 0
        e.datarow("种蛋数") = nothing
    end if
end if '清除种蛋数列零值,避免用户输入0


按钮内代码依然保持原代码:

Dim b As New SQLGroupTableBuilder("统计表1","表A")
b.Groups.AddDef("栏舍")
b.Exprs.Adddef("料蛋比","[耗料量]/[种蛋数]",AggregateEnum.Average)
b.build
Tables("窗口1_Table1").DataSource = DataTables("统计表1")

[此贴子已经被作者于2009-11-6 21:18:51编辑过]

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40785 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2009/11/6 21:16:00 [显示全部帖子]

最好将按钮公式改为这样:

DataTables("表A").Load() '同步表,避免新增行未保存造成统计数据不全!
Dim b As New SQLGroupTableBuilder("统计表1","表A")
b.Groups.AddDef("栏舍")
b.Exprs.Adddef("料蛋比","[耗料量]/[种蛋数]",AggregateEnum.Average)
b.build
Tables("窗口1_Table1").DataSource = DataTables("统计表1")

[此贴子已经被作者于2009-11-6 21:19:55编辑过]

 回到顶部