以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]统计问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=77884) |
-- 作者:陈卫 -- 发布时间:2015/11/27 9:12:00 -- [求助]统计问题 专家您好:我在“在制品统计表”中的表事件datacolchanged中编写如下代码,统计“生产安排表”表中的数据: Select Case e.DataCol.Name Case "执行合同编号","日期" Dim dc As DataRow = e.DataRow Dim filter1 As String If e.DataCol.name = "产品去向" Then \'判断一个列名为"产品去向"的列 If e.DataRow.IsNull(DataTables("生产安排表").DataCols("产品去向")) Then \'如果在"生产安排表"的"产品去向"列不是空值 If e.DataRow(DataTables("生产安排表").DataCols("产品去向"))="锻造" Then ‘如果在"生产安排表"的"产品去向"列等于"锻造" filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'下料\'" Dim s1 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'杆体探伤\'" Dim s2 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'双曲线矫直机\'" Dim s3 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) dc("下料矫直转出_锻造转入_根") = s1+s2+s3 End If End If End If end Select 运行后没有输出结果,问题出在哪里?
|
-- 作者:Hyphen -- 发布时间:2015/11/27 9:27:00 -- 1. If e.DataCol.name = "产品去向" Then 条件判断永远为假,因为前面已经Case "执行合同编号","日期"
2. e.DataRow.IsNull 只能判断事件所在的表,也就是制品统计表的值,不能去判断其它表的值
不明白楼上统计的条件是什么,可以这样试试 Select Case e.DataCol.Name |
-- 作者:陈卫 -- 发布时间:2015/11/27 9:39:00 -- 谢谢二楼专家,问题解决了。看来跨表判断不能在本表中用e.DataRow.IsNull ,我还有类似的判断,也只能用上面的方法了。 |
-- 作者:陈卫 -- 发布时间:2015/11/27 10:55:00 -- 请教专家,与刚才的问题类似,我在“在制品统计表”中的表事件datacolchanged中编写如下代码,统计“生产安排表”表中的数据: Select Case e.DataCol.Name Case "执行合同编号","日期" Dim dc As DataRow = e.DataRow Dim filter1 As String filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'机加%\' and 贸易性质_内贸 = false" \'机加类设备干的产品如果不是内贸的 Dim c1 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) dc("机加转出_摆差转入_根") = c1 filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'机加%\' and 级别 = \'HY\'" ‘机加类设备干的产品如果级别是“HY”的 Dim c2 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) dc("机加转出_高频转入_根") = c2 filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'机加%\' and 贸易性质_内贸 = true and 级别 <> \'HY\'" ’ 机加类设备干的产品如果既不是外贸,级别又不是“HY”的 Dim c3 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) dc("机加转出_浸漆转入_根") = c3 End Select 运行后没有输出结果,问题出在哪里? [此贴子已经被作者于2015/11/27 10:56:58编辑过]
|
-- 作者:大红袍 -- 发布时间:2015/11/27 11:08:00 -- 加入msgbox弹出c1、c2、c3的值,看是否正确。
你要修改编号或日期才会触发datacolchanged事件的啊。 |
-- 作者:陈卫 -- 发布时间:2015/11/27 11:35:00 -- 加入msgbox,弹出的窗口,没有数据。表和编码如下: 在制品表没法传了,另传 Select Case e.DataCol.Name Case "执行合同编号","日期" Dim dc As DataRow = e.DataRow Dim filter1 As String filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'机加%\' and 贸易性质_内贸 = false" Dim c1 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) MessageBox.Show(c1) dc("机加转出_摆差转入_根") = c1 filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'机加%\' and 级别 = \'HY\'" Dim c2 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) MessageBox.Show(c2) dc("机加转出_高频转入_根") = c2 filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'机加%\' and 贸易性质_内贸 = true and 级别 <> \'HY\'" Dim c3 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 ) MessageBox.Show(c3) dc("机加转出_浸漆转入_根") = c3 End Select |
-- 作者:陈卫 -- 发布时间:2015/11/27 11:42:00 -- 这是在制品表 |
-- 作者:大红袍 -- 发布时间:2015/11/27 11:49:00 -- 重置列
http://www.foxtable.com/help/topics/1587.htm
[此贴子已经被作者于2015/11/27 11:49:09编辑过]
|
-- 作者:陈卫 -- 发布时间:2015/11/27 11:51:00 -- 找到问题了,搞错了一个字符,不是"机加%",是“车床%”。没问题了 |