Foxtable(狐表)用户栏目专家坐堂 → 根据输入的内容自动查询表中的数据,数据量大怎么处理


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

主题:根据输入的内容自动查询表中的数据,数据量大怎么处理

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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
根据输入的内容自动查询表中的数据,数据量大怎么处理  发帖心情 Post By:2013/11/20 10:52:00 [显示全部帖子]

Dim txt As String = e.Form.Controls("txtMingcheng").Text
Dim tbl As Table = Tables("窗口产品销售_tblChanpin")
If txt = "" Then
    tbl.Filter = ""
Else
    txt = "'*" & txt & "*'"
    tbl.Filter = "product_name Like " & txt

End If

 

如果 Tables("窗口产品销售_tblChanpin")有几十万或者百万级别,需要吧数据全部调出来才能处理,怎么实现不全部调出来数据,但是又不影响使用功能

 

 

 

 


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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/11/20 11:11:00 [显示全部帖子]

bin,如果分页加载他也只是模糊查询的那个分页页面的数据,也不是全部的数据呀

 

除非不用表的tbl.Filter方式,而改成SQL的查询方式,只能TEXT输入完毕查询,而无法做到感应查询

[此贴子已经被作者于2013-11-20 11:16:33编辑过]

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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/11/20 12:20:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-11-20 11:49:00的发言:

 

1、设置好分页加载。

 

2、代码改为:

Dim txt As String = e.Form.Controls("txtMingcheng").Text
Dim tbl As DataTable = Tables("窗口产品销售_tblChanpin").DataTable
If txt = "" Then
     tbl.LoadFilter = ""
Else
    txt = "'*" & txt & "*'"
    tbl.LoadFilter = "product_name Like " & txt

End If

tbl.Loadtop = 1000  '假定每页1000行

tbl.Loadpage = 0

tbl.Load()

狐狸爸爸不行呀,还是检索的是当前分页的数据,

 你说的是每1000行分1页吗

 

[此贴子已经被作者于2013-11-20 12:20:17编辑过]

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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/11/20 12:49:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-11-20 12:32:00的发言:

1000行一页:

 

Dim txt As String = e.Form.Controls("txtMingcheng").Text
Dim tbl As DataTable = Tables("窗口产品销售_tblChanpin").DataTable
If txt = "" Then
     tbl.LoadFilter = ""
Else
    txt = "'*" & txt & "*'"
    tbl.LoadFilter = "product_name Like " & txt

End If

Tables("窗口产品销售_tblChanpin").Filter = “”

tbl.Loadtop = 1000  '假定每页1000行

tbl.Loadpage = 0

tbl.Load()

还是不行,这个方式连任何页都查不了,什么都查不了


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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/11/21 10:52:00 [显示全部帖子]

以下是引用有点甜在2013-11-20 20:29:00的发言:
 试试这样

Dim txt As String = e.Form.Controls("txtMingcheng").Text
Dim tbl As DataTable = Tables("窗口产品销售_tblChanpin").DataTable
If txt = "" Then
     tbl.LoadFilter = ""
Else
    txt = "'%" & txt & "%'"
    tbl.LoadFilter = "product_name Like " & txt
End If
Tables("窗口产品销售_tblChanpin").Filter = ""
tbl.Loadtop = 1000  '假定每页1000行
tbl.Loadpage = 0
tbl.Load()

 

 

有点甜和狐狸爸爸的都对,我是SQL的

另外有一个问题要咨询。

 

在帮助中我做了用Table控件模拟关联

有订单表tblsale和订单明细tblxiaoshoumingxi

 

Dim t_tblXiaoshoumingxi As Table = Tables("窗口产品销售_tblXiaoshoumingxi")
Dim t_tblSale As Table = Tables("窗口产品销售_tblSale")
With Tables("窗口产品销售_tblXiaoshoumingxi")
    If .Current Is Nothing Then
        t_tblSale.Filter =False
    Else
        t_tblSale.Filter = "sale_id= " & .Current("sale_id")
    End If
End With

 

现在订单表我用了狐狸爸爸的方法实现了动态加载,那下面的这个订单明细表怎么解决呢,我目前是吧订单明细表都加载上来,也能按照狐狸爸爸的这个方式来加载吗,试验了没弄出来,请指点一下

 

 


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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/11/22 10:52:00 [显示全部帖子]

bin,这个方式订单表和订单明细只是AFTERLOAD的时候用

If DataTables("订单").DataRows.Count = 0 Then '如果订单表没有数据
    DataTables(
"订单明细").LoadFilter = "订单ID Is Null" '不加载订单明细
Else
    Dim 
ids As String
    For Each 
dr As DataRow In DataTables("订单").DataRows
        
ids = ids & "," & dr("订单ID")
    Next
    
idsids.Trim(",")
    DataTables(
"订单明细").LoadFilter = "订单ID In (" & ids & ")"
End If
DataTables(
"订单明细").Load()

 

以下问题该怎么处理:

1、那么当订单分页的时候,是不是每个分页按钮下也要采用上面的代码

2、当进行模糊查询的时候,textchanged进行来订单的筛选,那这个时候对应的订单明细该怎么加载

 


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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/11/22 11:00:00 [显示全部帖子]

以下是引用Bin在2013-11-22 10:54:00的发言:
1.是的
2.如果是筛选父表关联的数据,直接筛选可以了! 如果要筛选所有数据,使用LoadFilter 然后再加载一遍吧

关于2,我要筛选订单数据,这个时候订单明细是和订单表表关联在一起的。

但是这个时候我的订单表是分页的,比如当第一页只加载了1000条和这1000条对应的明细。

我用狐狸爸爸的方法帅选了出来了订单表的数据,但是这个时候订单表明细没有,因为明细里只有订单表的第一页的1000条订单的对应的订单明细而不是全部明细

这个时候我还不能加载全部订单明细,因为数据量太大了。这个该怎么处理

 

[此贴子已经被作者于2013-11-22 11:01:40编辑过]

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


加好友 发短信
等级:四尾狐 帖子:884 积分:7061 威望:0 精华:0 注册:2013/3/5 8:42:00
  发帖心情 Post By:2013/11/22 11:35:00 [显示全部帖子]

以下是引用Bin在2013-11-22 11:09:00的发言:
同样的使用LoadFilter设置加载条件 筛选啊.

bin,说的完全正确,所有的问题都解决了。谢谢。

 

不过通过实践,我的XEON 4核CPU4G内存。SQL 2008 r2+WIN2008 r2,订单3万条,订单明细35万条。订单加载100条一分页,订单明细动态加载,都会比较慢,在1秒之内。单机情况下,局域网没有测试。看来当数据量大的时候,比如订单明细上百万或者更多的时候

父表与子表同步加载加载是个问题,谁有高见指点一下

 

 

 


 回到顶部