Foxtable(狐表)用户栏目专家坐堂 → [求助]项目中数据多了,用了6年多的代码导致死机了


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

主题:[求助]项目中数据多了,用了6年多的代码导致死机了

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18440 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2021/7/14 17:22:00 [显示全部帖子]

不一定是这个问题。not in 本身效率就很低,如果数据很多的时候,有可能是执行的字符串太长导致的,就算是SQL语句,不论是in或not in 都执行不了。
可以考虑用一个查询表,再从这个表中遍历形成一个集合X,然后再string.join("|",x.toarray),把它赋给下拉框

个人认为就是not in的执行效率太低了。因为后面获取的字符串太长,not in的判断超时

可以考虑试一下这个:

设一个全局变量Z,maintablechanged事件中,如果切换到的新表是datatables("生产流程卡")时

dim dtscjh as datatable = datatables("生产计划")
dim dtsclc as datatable = datatables("生产流程卡")

dim hsx as new hashset(of string)
for each dr as datarow in dtsclc.sqlselect("项目状态 = '执行中'")
hsx.add(dr("生产计划主号"))
next

dim lsty as new list(of string)
for each dr as datarow in dtscjh.sqlselect("项目状态 = '执行中'")
if hsx.contains(dr("生产计划主号")) = false then 
lsty.add(dr("生产计划主号"))
end if 
next

Z = string.join("|",lsty.toarray())

提示一下:不论是SQLGetComboListString还是GetComboListString,数据量大的时候,效率远远低于遍历


然后在表的perpareedit事件中
if e.col.name = "生产计划主号" then 

e.table.Cols("生产计划主号").ComboList = Z

end if 

[此贴子已经被作者于2021/7/14 17:40:50编辑过]

 回到顶部