不一定是这个问题。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编辑过]