Foxtable(狐表)用户栏目专家坐堂 → 求助,查询处理器用尽了堆栈空间!


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

主题:求助,查询处理器用尽了堆栈空间!

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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
求助,查询处理器用尽了堆栈空间!  发帖心情 Post By:2015/11/30 12:07:00 [显示全部帖子]

有如下代码,在进行查询时会出现查询处理器用尽了堆栈空间的问题,请问应如何做才可以?

 

Dim t As Table = Tables("销售订单查询")

If t.Rows.Count > 0 Then
    Dim ids As String
    For Each r As Row In t.Rows
       
        ids = ids & ",'" & r("sheet_lot") & "'"
    Next
    ids= ids.Trim(",")
   
   
    DataTables("装箱表查询").LoadFilter = "sheet_lot In (" & ids & ")"
    DataTables("装箱表查询").Load()
   
Else
   
    Messagebox.Show("订单表中不存在相关的查询数据!,如有疑问,请与管理员联系","提示",MessageBoxButtons.OK, MessageBoxIcon.Information)
End If

 

 

 

错误信息如下:

 

.NET Framework 版本:2.0.50727.3655
Foxtable 版本:2014.11.11.1
错误所在事件:加载[装箱表查询]失败!
详细错误信息:
内部查询处理器错误: 在查询优化过程中,查询处理器用尽了堆栈空间。


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2015/11/30 13:04:00 [显示全部帖子]

应该行是有点多,但客人要求一次性查出这些数据,总要想一个办法吧?

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2015/11/30 13:52:00 [显示全部帖子]

按条件查了一下,Tables("销售订单查询") 行数为9000多行,请教各位有没好点的办法?


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2015/11/30 13:54:00 [显示全部帖子]

按理来说,9000多行应不算很多吧!

 


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2015/11/30 15:04:00 [显示全部帖子]

出现查询表或临时表不能AppendLoad错误提示!

 

是不是查询表不能用AppendLoad?

 


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2015/11/30 15:41:00 [显示全部帖子]

呃,想了一个办法,很简单的,可以了,请问这样会有什么问题吗?

 

代码如下:

 

Dim t As Table = Tables("销售订单查询")


If t.Rows.Count > 0 Then

 

DataTables("销售订单查询").LoadChildren("装箱表查询", "sheet_lot", "osal_sheet_lot")


Else
   
    Messagebox.Show("订单表中不存在相关的查询数据!,如有疑问,请与管理员联系","提示",MessageBoxButtons.OK, MessageBoxIcon.Information)
End If


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2015/11/30 15:56:00 [显示全部帖子]

可以查得出来,且目前还未发现有什么错误,不知以后会不会发现有问题。

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2015/11/30 17:21:00 [显示全部帖子]

以下是引用jspta在2015/11/30 16:39:00的发言:
你这个应该是有一定条件的吧,按照这个写查询表语句,专门给这个是要,而不是用IN这种条件语句。
具体需求跟结构可以发出来才好优化。一般用IN少量查询就行了

我的想法是:根据用户的查询条件先从订单查询表中查找出所需的的订单,然后,根据查出的订单查询表中相关的订单批号再列出相关的装箱表数据给用户。

 

原本用IN的方法,但可能用户有时查得的订单数据较多,所以用IN的方法再去查装箱表的数据就不行,少的就应该没问题,所以唯有用现在“LoadChildren”这个方法了。

[此贴子已经被作者于2015/11/30 17:23:51编辑过]

 回到顶部