以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助,查询处理器用尽了堆栈空间!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=77998)

--  作者:yankunhao
--  发布时间: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
错误所在事件:加载[装箱表查询]失败!
详细错误信息:
内部查询处理器错误: 在查询优化过程中,查询处理器用尽了堆栈空间。


--  作者:大红袍
--  发布时间:2015/11/30 12:15:00
--  

ids的值过多,是不是你的 Tables("销售订单查询") 行数太多?太多了就没办法了。

 

尽量少加载一些行吧。


--  作者:yankunhao
--  发布时间:2015/11/30 13:04:00
--  
应该行是有点多,但客人要求一次性查出这些数据,总要想一个办法吧?
--  作者:yankunhao
--  发布时间:2015/11/30 13:52:00
--  

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


--  作者:yankunhao
--  发布时间:2015/11/30 13:54:00
--  

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

 


--  作者:大红袍
--  发布时间:2015/11/30 14:26:00
--  

分开几次加载

 

DataTables("表B").loadfilter = "1=2"
DataTables("表B").load

Dim t As Table = Tables("表A")
Dim ids As String
For i As Integer = 1 To t.rows.count
    Dim r As Row = t.rows(i-1)
    ids = ids & ",\'" & r("第二列") & "\'"
    If i Mod 1000 = 0 Then
        ids= ids.Trim(",")
        DataTables("表B").RemoveFor("第二列 In (" & ids & ")")
        DataTables("表B").AppendLoad("第二列 In (" & ids & ")", False)
        ids = ""
    End If
Next
ids= ids.Trim(",")
DataTables("表B").RemoveFor("第二列 In (" & ids & ")")
DataTables("表B").AppendLoad("第二列 In (" & ids & ")", False)
ids = ""


--  作者:yankunhao
--  发布时间:2015/11/30 15:04:00
--  

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

 

是不是查询表不能用AppendLoad?

 


--  作者:大红袍
--  发布时间:2015/11/30 15:23:00
--  

呃,查询表不能用。没办法。

 

你分页处理吧。


--  作者:大红袍
--  发布时间:2015/11/30 15:24:00
--  
你还不如,把所有都加载出来,然后把查询表的数据删除呢。
--  作者:yankunhao
--  发布时间: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