以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]SQLGetComboListString执行效率问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85333)

--  作者:huangfanzi
--  发布时间:2016/5/23 15:04:00
--  [求助]SQLGetComboListString执行效率问题
下面代码一开始用好好的,但数据多了后,就不能用了,表现为:过了好长时间窗口终于弹出来了,但月份的下拉框中没有内容,做了个试验,删除掉一些数据后,又能正常执行了,我感觉是执行效率上出了问题,有何办法替代这条语句功能?谢谢老师!


窗口:AfterLoad事件

e.Form.Controls("CheckedComboBox_月份").Combolist = _dt工序合并表.SQLGetComboListString("月份","起始时间 >= \'2016-1-1 00:00:00\' And [记录标记1] not in (\'" & DataTables("成本核算主表B").SQLGetComboListString("工序记录标记").Replace("|", "\',\'") & "\')","起始时间")
--  作者:大红袍
--  发布时间:2016/5/23 15:06:00
--  

和这个语句无关,但是not in这样查询的话,肯定是很慢的

 

如果要用到两个表的数据,请使用连接查询得到合并的表 http://www.foxtable.com/help/topics/2473.htm

 

[此贴子已经被作者于2016/5/23 15:06:34编辑过]

--  作者:huangfanzi
--  发布时间:2016/5/23 15:17:00
--  
查询慢点可以接受,可为什么就查不到了呢?
--  作者:大红袍
--  发布时间:2016/5/23 15:27:00
--  

 如果sql语句过长,比如你的字符已经超过了4000个,就有可能报错导致查找失败的。

 

 建议,你还是用2楼的inner join把表数据连接一下。


--  作者:huangfanzi
--  发布时间:2016/5/23 15:47:00
--  
老师,这个inner join不理解应该如何用到我现的情况,我说个例子,麻烦老师帮我写下语句
有二表
表1为销售报表,内容如下:

编号 品名 销售单价
1      A  10
2      B   9
3      C   8

表2为结算报表,要从表1中提取数据写入,但已经存在的不允许再写入,内容如下:
编号 品名 销售单价 销售折价 实际售价
1      A       10        1          9
2      B        9          2         7

现在做了个查询窗口,有个查询按钮,查询出数据后通过另一个按钮代码一条一条把查到的数据写入到表2,查询代码为:
Tables(e.Form.Name & "_Table1").Fill("S elect 编号,品名,销售单价 From {表A} Where  [编号] not In (\'" & DataTables("表B").SQLGetComboListString("编号").Replace("|", "\',\'") & "\') ","ShcsErpSql",True)

执行完上面代码后,窗口中的table中应该就只显示编号为3的数据。
上面的执行过程在数据不多时一切正常,现在几个月下来,数据多了,就开始出问题了。
这面这类模块在我目前用的项目中普遍存在,请老师给个代码例子,万分感谢!

[此贴子已经被作者于2016/5/23 15:49:44编辑过]

--  作者:大红袍
--  发布时间:2016/5/23 15:52:00
--  
Select 编号,品名,销售单价 F rom {表A} as a left join {表B} as b on a.编号 = b.编号 where b.编号 is null