以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 加载条件 (http://foxtable.net/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 另外像上面第一步这种用法也会增加不少的内存使用
|