Foxtable(狐表)用户栏目专家坐堂 → [求助] 关于跨表间统计问题


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

主题:[求助] 关于跨表间统计问题

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


加好友 发短信
等级:童狐 帖子:274 积分:2960 威望:0 精华:0 注册:2011/9/19 0:18:00
[求助] 关于跨表间统计问题  发帖心情 Post By:2016/8/31 11:31:00 [只看该作者]

学习教材中关于“跨表间统计”一节,其中有一段是这样的内容:

 

---------------------------------------------------------

假定有一个如下图所示的订单表:


此主题相关图片如下:订单.jpg
按此在新窗口浏览图片

 

我们希望新增这么一个表,在该表中输入一个产品名称,能够自动统计出该产品总的订购数量。
首先增加一个表,表的名称为“统计”,该表包括两列,分别是字符型的产品,和整数型的数量:


此主题相关图片如下:产品.jpg
按此在新窗口浏览图片

 

然后在该表的DataColChanged事件 中设置如下代码:

 

If e.DataCol.Name = "产品" Then
    e.DataRow("数量") = DataTables("订单").Compute("Sum(数量)","[产品] = '" & e.NewValue & "'")
End If

 

上面的代码能够自动统计所输入产品的销售数量。

---------------------------------------------------------

 

我现在的问题是,如果统计条件不单单“产品”,而是“产品”和“客户”,这个代码应该怎么改?当然在“统计”表中还要加一列“客户”。


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


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

上面的代码改为

Select Case e.DataCol.Name
    Case "产品","客户"
        e.DataRow("数量") = DataTables("订单").Compute("Sum(数量)","[产品] = '" & e.DataRow("产品") & "' and [客户]='" & e.DataRow("客户") & "'")
End Select

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


加好友 发短信
等级:童狐 帖子:274 积分:2960 威望:0 精华:0 注册:2011/9/19 0:18:00
  发帖心情 Post By:2016/8/31 15:27:00 [只看该作者]

按回复修改了代码,但出错,提示如下:

 


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

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


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

代码放在什么地方啊,帮助是放在DataColChanged事件哦

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


加好友 发短信
等级:童狐 帖子:274 积分:2960 威望:0 精华:0 注册:2011/9/19 0:18:00
  发帖心情 Post By:2016/8/31 15:44:00 [只看该作者]

放在“管理项目”>“项目属性”>“项目事件”>“MainTableChanged”

 

我的目的是当切换到某个表后就自动计算,不知哪里出错了?

 

全部代码如下:

 

If MainTable.Name = "料件消耗" Then '切换到表 "料件消耗" 时执行下面代码
    DataTables("料件消耗").DeleteFor("") '删除所有行
   
    Dim A() As String = {"成品货号","EXG_VERSION","IMG_NO","成品名称","料件名称","计量单位","DEC_CM"}
    Dim B() As String = {"成品货号","成品版本","料件序号","成品名称","料件名称","计量单位","净单耗"}
    For j As Integer = 0 To Tables("PRE_EMS3_CUS_CONSUME").Rows.count - 1
        Tables("PRE_EMS3_CUS_CONSUME").Position = j
        Dim dr As DataRow = DataTables("料件消耗").AddNew
        For i As Integer = 0 To A.Length - 1
            dr(B(i)) = Tables("PRE_EMS3_CUS_CONSUME").Current(A(i))
        Next
    Next
   
    Select Case e.DataCol.Name
        Case "成品货号","成品版本"
            e.DataRow("出货量") = DataTables("DECLARATION_DETAIL").Compute("Sum(QTY_1)","[GOODS_ID] = '" & e.DataRow("成品货号") & "' and [G_NO]='" & e.DataRow("成品版本") & "'")
    End Select
   
End If

 

第一步是将BOM表全部的产品BOM参数抄到“料件消耗”表,第二步是根据“成品货号”和“成品版本”统计表“DECLARATION_DETAIL” 的 QTY_1 的数量。

[此贴子已经被作者于2016/8/31 15:49:17编辑过]

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


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

2楼代码放到DataColChanged事件,不能放在MainTableChanged

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


加好友 发短信
等级:童狐 帖子:274 积分:2960 威望:0 精华:0 注册:2011/9/19 0:18:00
  发帖心情 Post By:2016/8/31 16:51:00 [只看该作者]

问题搞掂了,谢谢!

 回到顶部