Foxtable(狐表)用户栏目专家坐堂 → compute 问题


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

主题:compute 问题

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


加好友 发短信
等级:七尾狐 帖子:1536 积分:9956 威望:0 精华:0 注册:2014/12/18 16:12:00
compute 问题  发帖心情 Post By:2023/11/9 16:36:00 [只看该作者]

For i1 As Integer = 0 To n1
     Dim r1 As Row = CurrentTable.Rows(i1)
     Dim max As String = CurrentTable.DataTable.Compute("Max(同套行序)", "施耐德piao号与数量 = '" & r1("施耐德piao号与数量") & "' And 订单号 = '" & r1("订单号") & "'  and piao号 = '" & r1("piao号") & "'  and [_Identify] <> " & r1("_Identify"))
     If max > "" Then '如果存在最大号
           r1("同套行序") = max + 1
     Else
           r1("同套行序") = 1 
     End If
Next

上面的红色代码会把隐藏的数据行都去找一遍,找出最大的“同套行序”。请问要怎么样才能做到只计算筛选出的那部分数据行,而不是把隐藏的数据行都进行计算呢?谢谢。

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


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

Dim max As String = CurrentTable.Compute("Max(同套行序)",.......

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7249 积分:40704 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2023/11/9 16:54:00 [只看该作者]

…施耐德piao号与数量 = " & r1("施耐德piao号与数量") & " And…
注意数值列比较值两边还多了单引号

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


加好友 发短信
等级:七尾狐 帖子:1536 积分:9956 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/11/9 19:21:00 [只看该作者]

关于2楼答案:我改了之后,运行起来,还是很慢,而我如过加载少一点数据(比如几十行数据),那很快就运行完毕;如果加载了几千行,哪怕只筛选几十行数据来运行,那也很慢才出结果,几乎卡死了。那是不是说,2楼的代码还是会把所有加载出来的数据都进行计算了呢?

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


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

自己看统计结果是否正确就知道了

table.compute是按加载后已筛选的数据做统计:http://www.foxtable.com/webhelp/topics/0548.htm
datatable.compute是按已加载的全部数据做统计

至于慢的问题做个例子发上来测试一下

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


加好友 发短信
等级:七尾狐 帖子:1536 积分:9956 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/11/10 8:50:00 [只看该作者]

                        'Dim phs() As String = DataTables("弯头开料单").GetComboListString("piao号年月日订单号制造产品号", Tables("弯头开料单").filter).Split("|")
                        'For ph As Integer = 0 To phs.length - 1
                        '    Dim Filter As String = "[piao号年月日订单号制造产品号] ='" & 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(同套行序)", "piao号年月日订单号制造产品号 = '" & r1("piao号年月日订单号制造产品号") & "' and [_Identify] <> " & r1("_Identify"))
                            If max > "" Then '如果存在最大号
                                r1("同套行序") = max + 1
                            Else
                                r1("同套行序") = 1 
                            End If
                        Next 

上面两种方法我都试了,好像都是跟加载数据的多少有关。理论上来说,哪个方法会比较快点呢?

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


加好友 发短信
等级:七尾狐 帖子:1536 积分:9956 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/11/10 8:54:00 [只看该作者]

理论上来说,上面两个方法处理的都是加载后筛选后的数据吧?

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


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

绝对不可能都一样,不要使用好像这种字眼,请认真测试

table.compute是按加载后已筛选的数据做统计
datatable.compute是按已加载的全部数据做统计


此主题相关图片如下:1.png
按此在新窗口浏览图片


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


加好友 发短信
等级:七尾狐 帖子:1536 积分:9956 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/11/10 10:07:00 [只看该作者]

针对6楼的2段代码,用 select(filter) 和用 compute("max") 比较,哪个运行效率会比较高?

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


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

compute 效率会比较高

 回到顶部
总数 11 1 2 下一页