Foxtable(狐表)用户栏目专家坐堂 → 加载条件


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

主题:加载条件

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


加好友 发短信
等级:童狐 帖子:297 积分:2187 威望:0 精华:0 注册:2023/1/11 7:15:00
加载条件  发帖心情 Post By: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

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

谢谢!
 

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
另外像上面第一步这种用法也会增加不少的内存使用

 回到顶部