以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]父表与子表同步加载 ,in 语法非常慢!--已解决  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=42649)

--  作者:jnletao
--  发布时间:2013/11/18 12:05:00
--  [求助]父表与子表同步加载 ,in 语法非常慢!--已解决
由于要经常更新关联订单的相关所有表,所以 用in 语法代入很多订单号
OrderID IN (\'ACT201309-001\', \'ACT201309-002\', \'ACT201309-003\', \'ACT201309-004\', \'ACT201309-005\', \'ACT201309-006\', \'ACT201309-007\', \'ACT201309-008\',  \'ACT201309-009\', \'ACT201309-010\', \'ACT201309-011\', \'ACT201309-012\', \'ACT201309-013\', \'ACT201309-014\', \'ACT201309-015\', \'ACT201309-016\', \'ACT201309-017\',    \'ACT201309-018\', \'ACT201309-019\', \'ACT201309-020\', \'ACT201309-021\', \'ACT201309-023\', \'ACT201309-024\', \'ACT201309-025\', \'ACT201310-001\', \'ACT201310-002\',  \'ACT201310-003\', \'ACT201310-004\', \'ACT201310-005\', \'ACT201310-006\', \'ACT201310-007\', \'ACT201310-008\', \'ACT201310-009\', \'ACT201310-010\', \'ACT201310-011\',  \'ACT201310-012\', \'ACT201310-013\', \'ACT201310-014\', \'ACT201310-015\', \'ACT201310-016\', \'ACT201310-017\', \'ACT201310-018\', \'ACT201310-019\', \'ACT201310-020\',   \'ACT201310-021\', \'ACT201310-022\', \'ACT201310-023\', \'ACT201310-024\', \'ACT201310-025\', \'ACT201310-026\', \'ACT201310-027\', \'ACT201310-028\', \'ACT201310-029\',  \'ACT201310-030\', \'ACT201310-031\', \'ACT201310-032\', \'ACT201310-033\', \'ACT201310-034\', \'ACT201310-035\', \'ACT201310-036\', \'ACT201310-037\', \'ACT201310-038\', 
  \'ACT201310-039\', \'ACT201310-040\', \'ACT201310-041\', \'ACT201310-042\')

DataTables("子表").LoadFilter = "OrderID In (" & ids & ")"
……………


结果发现子表更新很慢,请问大家有什么好方法没有?
[此贴子已经被作者于2013-11-19 15:07:32编辑过]

--  作者:Bin
--  发布时间:2013/11/18 12:08:00
--  
1.你加载这么多个表,速度肯定不会很理想
3.检查是否网络问题导致加载慢


--  作者:jnletao
--  发布时间:2013/11/18 13:29:00
--  
刚才测试下时间
BagRegList表  2145条记录,  载入用时8秒
OrderProductProcess表   196条记录,  载入用时17秒

怎么记录少反而用时这么长?

Dim st As Date = Date.Now

DataTables("BagRegList").LoadFilter = "OrderID In (\'ACT201309-001\', \'ACT201309-002\', \'ACT201309-003\', \'ACT201309-004\', \'ACT201309-005\', \'ACT201309-006\', \'ACT201309-007\', \'ACT201309-008\', \'ACT201309-009\', \'ACT201309-010\', \'ACT201309-011\', \'ACT201309-012\', \'ACT201309-013\', \'ACT201309-014\', \'ACT201309-015\', \'ACT201309-016\', \'ACT201309-017\', \'ACT201309-018\', \'ACT201309-019\', \'ACT201309-020\', \'ACT201309-021\', \'ACT201309-023\', \'ACT201309-024\', \'ACT201309-025\', \'ACT201310-001\', \'ACT201310-002\', \'ACT201310-003\', \'ACT201310-004\', \'ACT201310-005\', \'ACT201310-006\', \'ACT201310-007\', \'ACT201310-008\', \'ACT201310-009\', \'ACT201310-010\', \'ACT201310-011\', \'ACT201310-012\', \'ACT201310-013\', \'ACT201310-014\', \'ACT201310-015\', \'ACT201310-016\', \'ACT201310-017\', \'ACT201310-018\', \'ACT201310-019\', \'ACT201310-020\', \'ACT201310-021\', \'ACT201310-022\', \'ACT201310-023\', \'ACT201310-024\', \'ACT201310-025\', \'ACT201310-026\', \'ACT201310-027\', \'ACT201310-028\', \'ACT201310-029\', \'ACT201310-030\', \'ACT201310-031\', \'ACT201310-032\', \'ACT201310-033\', \'ACT201310-034\', \'ACT201310-035\', \'ACT201310-036\', \'ACT201310-037\', \'ACT201310-038\', \'ACT201310-039\', \'ACT201310-040\', \'ACT201310-041\', \'ACT201310-042\')"
DataTables("BagRegList").Load()

MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")


--  作者:lihe60
--  发布时间:2013/11/18 13:55:00
--  
以下是引用jnletao在2013-11-18 12:05:00的发言:
由于要经常更新关联订单的相关所有表,所以 用in 语法代入很多订单号
OrderID IN (\'ACT201309-001\', \'ACT201309-002\', \'ACT201309-003\', \'ACT201309-004\', \'ACT201309-005\', \'ACT201309-006\', \'ACT201309-007\', \'ACT201309-008\',  \'ACT201309-009\', \'ACT201309-010\', \'ACT201309-011\', \'ACT201309-012\', \'ACT201309-013\', \'ACT201309-014\', \'ACT201309-015\', \'ACT201309-016\', \'ACT201309-017\',    \'ACT201309-018\', \'ACT201309-019\', \'ACT201309-020\', \'ACT201309-021\', \'ACT201309-023\', \'ACT201309-024\', \'ACT201309-025\', \'ACT201310-001\', \'ACT201310-002\',  \'ACT201310-003\', \'ACT201310-004\', \'ACT201310-005\', \'ACT201310-006\', \'ACT201310-007\', \'ACT201310-008\', \'ACT201310-009\', \'ACT201310-010\', \'ACT201310-011\',  \'ACT201310-012\', \'ACT201310-013\', \'ACT201310-014\', \'ACT201310-015\', \'ACT201310-016\', \'ACT201310-017\', \'ACT201310-018\', \'ACT201310-019\', \'ACT201310-020\',   \'ACT201310-021\', \'ACT201310-022\', \'ACT201310-023\', \'ACT201310-024\', \'ACT201310-025\', \'ACT201310-026\', \'ACT201310-027\', \'ACT201310-028\', \'ACT201310-029\',  \'ACT201310-030\', \'ACT201310-031\', \'ACT201310-032\', \'ACT201310-033\', \'ACT201310-034\', \'ACT201310-035\', \'ACT201310-036\', \'ACT201310-037\', \'ACT201310-038\', 
  \'ACT201310-039\', \'ACT201310-040\', \'ACT201310-041\', \'ACT201310-042\')

DataTables("子表").LoadFilter = "OrderID In (" & ids & ")"
……………


结果发现子表更新很慢,请问大家有什么好方法没有?
[此贴子已经被作者于2013-11-18 12:06:20编辑过]

不明白代码为什么这么长


--  作者:jnletao
--  发布时间:2013/11/18 13:59:00
--  
我代码里放的是变量,为了演示方便  才把变量内容写出来 的。

其实 我的的代码意图是  载入最近的60个订单及其相关的子表,它相关的子表有15个。

--  作者:Bin
--  发布时间:2013/11/18 15:00:00
--  
注译所有表事件 慢慢排查看看.

应急方案有

利用SQLCOMMAND查询出这个表.然后赋值给要加载的表

Tables("要加载的表名").DataSource =dt 

--  作者:pc005637
--  发布时间:2013/11/18 17:57:00
--  回复:(jnletao)[求助]父表与子表同步加载 ,in 语...
的确很慢,主要是在加载子表的过程,
因为是读取in()里面的值的过程慢,如果同步加载的子表多,更加慢。
试过在100M的局域网,主表加载超过2000条数据,就超时出错了。如果取消子表的同步加载,就秒开。
出错提示,好像是XXX逸出了。。应该是in()里面的参数太多了。

--  作者:e-png
--  发布时间:2013/11/18 18:17:00
--  

最好用 inner join ,飞快。。。。


--  作者:有点甜
--  发布时间:2013/11/18 20:38:00
--  
 首先第一个,in是肯定会慢的。同时你要看看你是否触发了其余的代码导致更慢 http://www.foxtable.com/help/topics/2218.htm

 你可以试试用大于>小于来加载子表,这样会快一些。比如 DataTables("子表").LoadFilter = "OrderID > \'ACT201309-001\'"

--  作者:jnletao
--  发布时间:2013/11/19 9:33:00
--  
字符串 也可以用 大于 小于吗?