以文本方式查看主题

-  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
    Case "执行合同编号","日期"
        Dim dc As DataRow = e.DataRow
       
        Dim filter1 As String
       
        filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'下料\' and 产品去向 = \'锻造\'"
        Dim s1 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 )
        filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'杆体探伤\' and 产品去向 = \'锻造\'""
        Dim s2 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 )
        filter1 = "执行合同编号 = \'" & dc("执行合同编号") & "\' And 日期 = \'" & dc("日期") & "\' and 工位 like \'双曲线矫直机\' and 产品去向 = \'锻造\'""
        Dim s3 = DataTables("生产安排表").Compute("SUM(实际完成数量)",filter1 )
        dc("下料矫直转出_锻造转入_根") = s1+s2+s3
       
End Select


--  作者:陈卫
--  发布时间: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,弹出的窗口,没有数据。表和编码如下:
生产安排表:
图片点击可在新窗口打开查看此主题相关图片如下:11122.bmp
图片点击可在新窗口打开查看
在制品表没法传了,另传
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
--  

这是在制品表


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


--  作者:大红袍
--  发布时间: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
--  
找到问题了,搞错了一个字符,不是"机加%",是“车床%”。没问题了