以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  加载条件  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=192037)

--  作者:creastzh
--  发布时间:2024/5/25 7:20:00
--  加载条件
老师, 我有一个问题:如何设置最简筛选条件,要求是从100万行数据中筛选大约满足要求的3万行数据的条件. 问题来源是这样的:
生产中每次投产产品均发放一个工单(WO), 每个产品加工有约10~15项工序, 多年来工单发放数已经达到了10万个, 这样总工序数即超过100万行, 某工单(WO)只要有一个工序未完工,该工单未完工, 当前大约有1500~2000个工单当前未完成, 我设置了2个表,分别为工单表WOrkOrderStatus, 工序表SecondarySchedule, 现在要用工单表中未完成的工单加载工序表,我设定的条件是:
1)  获取WOrkOrderStatus中未完成工单号字符串组合 WOs:
Dim WOs As String = DataTables("WOrkOrderStatus").GetComboListString("WO", "WOStatus<>\'C\'").Replace("|", "\',\'")
If WOs > "" Then
    WOs = "(\'" & WOs & "\')"
End If

2) 在SecondarySchedule中使用下面的条件加载:
Dim FL as string ="WO in " & WOs
datatables("SecondarySchedule").LoadFilter=FL
datatables("SecondarySchedule").Load

问题:
通常运行正常,但偶然会出现 内存溢出的问题从而导致自动化运行终止, 所以我想知道是否还有其它更合适的方式. 

谢谢!
 

--  作者:有点蓝
--  发布时间:2024/5/25 9:27:00
--  
不需要第一步,直接这样加载即可,前提是2个表都在同一个数据源。

datatables("SecondarySchedule").LoadFilter="WO in (select WO from {WOrkOrderStatus} where WOStatus<>\'C\')"
datatables("SecondarySchedule").Load

上面的用法少了第一步也会少用了很多内存,效率也会提高很多

内存溢出一般是整个项目加载的数据过多导致的,不仅仅是这个表的问题,比如有很多表,每个表都加载好几万的数据。考虑做分页:http://www.foxtable.com/webhelp/topics/2269.htm
另外像上面第一步这种用法也会增加不少的内存使用