以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  统计数据不准  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=174966)

--  作者:nuoyan89
--  发布时间:2022/2/13 21:01:00
--  统计数据不准

老师,以下代码写在表事件里的(表事件代码1),根据条件在工序跟踪表中引用如图2,条件都满足,但是加工数量不统计如图1,有些统计了确老是少几个?表事件代码2里的代码也不起作用,请帮忙看看
表事件代码1:
If e.DataCol.Name  = "成品编码" OrElse e.DataCol.Name = "生产批次" OrElse e.DataCol.Name = "加工工序" OrElse e.DataCol.Name = "加工次数" OrElse e.DataCol.Name = "使用设备" OrElse e.DataCol.Name = "加工工序"   OrElse e.DataCol.Name = "配刀单号"   OrElse e.DataCol.Name = "实际领刀日期"  Then
    Dim Filter As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\' and [加工工序] = \'" & e.DataRow("加工工序")    & "\' and [加工次数] = \'" & e.DataRow("加工次数") & "\' and [使用设备] = \'" & e.DataRow("使用设备")& "\' and [配刀单号] = \'" & e.DataRow("配刀单号")& "\'and [扫描日期] < =\'" & e.DataRow("还刀日期")& "\'and [扫描日期] >= \'" & e.DataRow("实际领刀日期") & "\'"
    e.DataRow("加工数量") = DataTables("工序跟踪表").SQLCompute("Sum(合格品)", Filter)
End If
事件表代码2
Select Case e.DataCol.Name
    Case "生产批次","使用设备","加工次数","加工工序","配刀单号","还刀日期"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("生产批次") OrElse dr.IsNull("使用设备") OrElse dr.IsNull("加工次数") OrElse dr.IsNull("加工工序")  OrElse dr.IsNull("配刀单号") OrElse dr.IsNull("还刀日期") Then
            Dim filter As String
            filter = "生产批次 = \'" & dr("生产批次") & "\' And 使用设备 = \'" & dr("使用设备") & "\' and 加工工序 = \'" & dr("加工工序") & "\' and 加工次数 = \'" & dr("加工次数") & "\' and 配刀单号 = \'" & dr("配刀单号") & "\' and 扫描日期 = \'" & dr("还刀日期")& "\'"
            pr = DataTables("工序跟踪表").SQLFind(filter)
            If pr IsNot Nothing Then
                dr("还刀人员") = pr("姓名")
            End If
        End If
End Select


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

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



--  作者:有点蓝
--  发布时间:2022/2/13 21:22:00
--  
这些条件列不能有空值,sql添加条件后是不会计算条件是空值的列的。
--  作者:nuoyan89
--  发布时间:2022/2/13 21:26:00
--  
我检查了没有空值,我把项目重启后这个可以算了,但在点击另一条记录时又出现这种情况了,项目又重启又可以了,继续点击又出现记录不准
--  作者:有点蓝
--  发布时间:2022/2/13 21:30:00
--  
如果是指(表事件代码1),如果没有空值,那么就是哟数据没有保存,SQLCompute只能统计已保存的数据

如果是指(表事件代码2)肯定100%有空值。

--  作者:程兴刚
--  发布时间:2022/2/14 0:17:00
--  
DataTables("工序跟踪表").save()
If e.DataCol.Name = "成品编码" OrElse e.DataCol.Name = "生产批次" OrElse e.DataCol.Name = "加工工序" OrElse e.DataCol.Name = "加工次数" OrElse e.DataCol.Name = "使用设备" OrElse e.DataCol.Name = "加工工序" OrElse e.DataCol.Name = "配刀单号" OrElse e.DataCol.Name = "实际领刀日期" Then
    Dim Filter As String = "[成品编码] = \'" & e.DataRow("成品编码") & "\' and [生产批次] = \'" & e.DataRow("生产批次") & "\' and [加工工序] = \'" & e.DataRow("加工工序") & "\' and [加工次数] = \'" & e.DataRow("加工次数") & "\' and [使用设备] = \'" & e.DataRow("使用设备")& "\' and [配刀单号] = \'" & e.DataRow("配刀单号")& "\'and [扫描日期] < =\'" & e.DataRow("还刀日期")& "\'and [扫描日期] >= \'" & e.DataRow("实际领刀日期") & "\'"
    e.DataRow("加工数量") = DataTables("工序跟踪表").SQLCompute("Sum(合格品)", Filter)
     e.datarow.save()
End If
事件表代码2
Select Case e.DataCol.Name
    Case "生产批次","使用设备","加工次数","加工工序","配刀单号","还刀日期"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("生产批次") OrElse dr.IsNull("使用设备") OrElse dr.IsNull("加工次数") OrElse dr.IsNull("加工工序") OrElse dr.IsNull("配刀单号") OrElse dr.IsNull("还刀日期") Then
            Dim filter As String
            filter = "生产批次 = \'" & dr("生产批次") & "\' And 使用设备 = \'" & dr("使用设备") & "\' and 加工工序 = \'" & dr("加工工序") & "\' and 加工次数 = \'" & dr("加工次数") & "\' and 配刀单号 = \'" & dr("配刀单号") & "\' and 扫描日期 = \'" & dr("还刀日期")& "\'"
            pr = DataTables("工序跟踪表").SQLFind(filter)
            If pr IsNot Nothing Then
                dr("还刀人员") = pr("姓名")
                 dr.save()
            End If
        End If
End Select


您的问题就是该保存的没保存就在后台查找数据,此时您看到的符合的条件值在后台并不一定符合!

--  作者:nuoyan89
--  发布时间:2022/2/14 9:54:00
--  
请帮忙再看看,打开窗口表后,选中配刀单号,点击刷新,谢谢!加工数量我在原有的窗口表中还是计算不出来,数据都是用的和《管理项目2》中的数据一样的
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.rar

[此贴子已经被作者于2022/2/14 9:55:37编辑过]

--  作者:有点蓝
--  发布时间:2022/2/14 10:24:00
--  
项目数据源设置有问题,无法测试。

其次点击刷新后怎么看结果?什么数据有问题?

另外无法理解下面判断的用途是什么?既然数据没有空值,下面代码又是判断有空值才会进入if里!!

If dr.IsNull("生产批次") OrElse dr.IsNull("使用设备") OrElse dr.IsNull("加工次数") OrElse dr.IsNull("加工工序") OrElse dr.IsNull("配刀单号") OrElse dr.IsNull("还刀日期") Then

--  作者:nuoyan89
--  发布时间:2022/2/14 16:56:00
--  
我把代码全部改了,还是不行。现在的状况是原有项目重启,按照改了的代码依然不行,又把原有的窗口表放在新项目测试代码没有问题,原有的项目还是不行,数据源没有变,请帮忙看看
--  作者:有点蓝
--  发布时间:2022/2/14 17:05:00
--  
代码看不出有问题。连接不到数据源,无法测试

如果新项目测试没有问题,旧项目有问题,自己比较一下,肯定有不同的地方。检查是不是有其它什么代码影响了

--  作者:nuoyan89
--  发布时间:2022/2/14 17:10:00
--  
老师,现在新的也不行了,不统计了,新的项目里没有其他的代码