以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- compute 问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189085) |
-- 作者:edisontsui -- 发布时间:2023/11/9 16:36:00 -- compute 问题 For i1 As Integer = 0 To n1 Dim r1 As Row = CurrentTable.Rows(i1) Dim max As String = CurrentTable.DataTable.Compute("Max(同套行序)", "施耐德票号与数量 = \'" & r1("施耐德票号与数量") & "\' And 订单号 = \'" & r1("订单号") & "\' and 票号 = \'" & r1("票号") & "\' and [_Identify] <> " & r1("_Identify")) If max > "" Then \'如果存在最大号 r1("同套行序") = max + 1 Else r1("同套行序") = 1 End If Next 上面的红色代码会把隐藏的数据行都去找一遍,找出最大的“同套行序”。请问要怎么样才能做到只计算筛选出的那部分数据行,而不是把隐藏的数据行都进行计算呢?谢谢。
|
-- 作者:有点蓝 -- 发布时间:2023/11/9 16:47:00 -- Dim max As String = CurrentTable.Compute("Max(同套行序)",....... |
-- 作者:程兴刚 -- 发布时间:2023/11/9 16:54:00 -- …施耐德piao号与数量 = " & r1("施耐德piao号与数量") & " And… 注意数值列比较值两边还多了单引号
|
-- 作者:edisontsui -- 发布时间:2023/11/9 19:21:00 -- 关于2楼答案:我改了之后,运行起来,还是很慢,而我如过加载少一点数据(比如几十行数据),那很快就运行完毕;如果加载了几千行,哪怕只筛选几十行数据来运行,那也很慢才出结果,几乎卡死了。那是不是说,2楼的代码还是会把所有加载出来的数据都进行计算了呢? |
-- 作者:有点蓝 -- 发布时间:2023/11/9 20:39:00 -- 自己看统计结果是否正确就知道了 datatable.compute是按已加载的全部数据做统计 至于慢的问题做个例子发上来测试一下
|
-- 作者:edisontsui -- 发布时间:2023/11/10 8:50:00 -- \'Dim phs() As String = DataTables("弯头开料单").GetComboListString("票号年月日订单号制造产品号", Tables("弯头开料单").filter).Split("|") \'For ph As Integer = 0 To phs.length - 1 \' Dim Filter As String = "[票号年月日订单号制造产品号] =\'" & phs(ph) & "\'" \' Dim drs As List(Of DataRow) = DataTables("弯头开料单").Select(Filter) \' Dim ln As Integer = 1 \' For Each dr As DataRow In drs \' dr("同套行序") = ln \' ln = ln + 1 \' Next \'Next For i1 As Integer = 0 To n1 Dim r1 As Row = CurrentTable.Rows(i1) Dim max As String = Tables("弯头开料单").Compute("Max(同套行序)", "票号年月日订单号制造产品号 = \'" & r1("票号年月日订单号制造产品号") & "\' and [_Identify] <> " & r1("_Identify")) If max > "" Then \'如果存在最大号 r1("同套行序") = max + 1 Else r1("同套行序") = 1 End If Next 上面两种方法我都试了,好像都是跟加载数据的多少有关。理论上来说,哪个方法会比较快点呢?
|
-- 作者:edisontsui -- 发布时间:2023/11/10 8:54:00 -- 理论上来说,上面两个方法处理的都是加载后筛选后的数据吧? |
-- 作者:有点蓝 -- 发布时间:2023/11/10 9:09:00 -- 绝对不可能都一样,不要使用好像这种字眼,请认真测试 table.compute是按加载后已筛选的数据做统计 datatable.compute是按已加载的全部数据做统计 |
-- 作者:edisontsui -- 发布时间:2023/11/10 10:07:00 -- 针对6楼的2段代码,用 select(filter) 和用 compute("max") 比较,哪个运行效率会比较高? |
-- 作者:有点蓝 -- 发布时间:2023/11/10 10:12:00 -- compute 效率会比较高 |