如果用ASP在页面上实现大量数据的显示(可以使用分页)

birdwings 2008-11-20 10:42:09
平时页面加载时如果显示几百条千条数据没什么问题,但如果要一个页面显示几千条甚至上万条的记录时明显会超时,出来的也超慢..一般解决此类大数据是无非是使用分页,即把记录集通过select抽到一个rs里,再利用rs.pagesize,rs.pagecount,rs.absolutepage等来回避在页面上同时抽出并显示所有的数据..
但是我现在的情况是,抽不到一个rs里.
我显示时要先作些处理,把从各个表中抽出来的东西放到一个数组中,然后再显示,举例:
连数据库我用的COM+组件.
我要先从netmdm_hardupdate_record表(硬件变更表)中抽出 dm_nodename(节点),再拿着节点去各个表中抽其它数据,有的抽出来还要处理,要用到的数据边抽边塞到数组里.这样我就无法用rs.XX来直接实现分页了.在几千条上万条数据时,运算时间和显示时间都很长,直接超时,甚至是超时无法显示.这个问题如何解决???

set sys=server.CreateObject("Sys_BaseCom.OAAccess")
strSql = "select dm_nodename,dm_updatedate,changething,changefront,changebehind from netmdm_hardupdate_record where dm_updatedate <='"&search_end&"' and dm_updatedate >='"&search_start&"'"
Set dbrs = sys.Query(strSql)
If dbrs.recordcount <> 0 Then
i=0
reDim pcArray(dbrs.recordcount-1,8)
While Not dbrs.eof
sql_userinventry = "select dm_itemname,dm_systeminf from netmdm_userinventry where dm_nodename='"&dbrs(0)&"'"
Set dbrs_userinventry = sys.Query(sql_userinventry)
If Not dbrs_userinventry.eof Then
While Not dbrs_userinventry.eof
Select Case dbrs_userinventry(0)
Case "PC编号"
pcArray(i,0) = dbrs_userinventry(1)
Case "姓名"
pcArray(i,2) = dbrs_userinventry(1)
Case "部门"
pcArray(i,3) = dbrs_userinventry(1)
Case "位置"
pcArray(i,4) = dbrs_userinventry(1)
End Select
dbrs_userinventry.movenext
wend
End If

sql_hostname = "select dm_systeminf from netmdm_inventry where dm_sysinfname =0x19 and dm_nodename='"&dbrs(0)&"'"
Set dbrs_hostname = sys.Query(sql_hostname)
If Not dbrs_hostname.eof Then
pcArray(i,1) = dbrs_hostname(0)
End if

pcArray(i,5) = left(dbrs(1),10)
pcArray(i,6) = dbrs(2)

If pcArray(i,6) = "CPU" Then
sql_cpu1 = "select Description from CPU_dic where Code ='"&dbrs(3)&"'"
Set dbrs_cpu1 = sys.Query(sql_cpu1)
If Not dbrs_cpu1.eof Then
pcArray(i,7) = dbrs_cpu1(0)
End if
sql_cpu2 = "select Description from CPU_dic where Code ='"&dbrs(4)&"'"
Set dbrs_cpu2 = sys.Query(sql_cpu2)
If Not dbrs_cpu2.eof Then
pcArray(i,8) = dbrs_cpu2(0)
End if
Else
If pcArray(i,6) = "内存" or pcArray(i,6) = "硬盘" Then
If dbrs(3) <> "" Then
pcArray(i,7) = CInt(Int(dbrs(3))/1024) & "G"
Else
pcArray(i,7) = ""
End If
If dbrs(4) <> "" Then
pcArray(i,8) = CInt(Int(dbrs(4))/1024) & "G"
Else
pcArray(i,8) = ""
End If
Else
pcArray(i,7) = dbrs(3)
pcArray(i,8) = dbrs(4)
End If
End if
i = i + 1
dbrs.movenext
Wend
Else
response.write "无硬件变更信息,页面运行终止!"
response.end
End If
...全文
181 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sy_binbin 2008-11-20
  • 打赏
  • 举报
回复
大数据量的存储过程

还要在表里建立索引
ma_helly 2008-11-20
  • 打赏
  • 举报
回复
用存储过程
yanniu008 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 littlelam 的回复:]
要用 存储过程 分页
你可以BAIDU GOOGLE一下
[/Quote]
支持 用PROCEDURE
littlelam 2008-11-20
  • 打赏
  • 举报
回复
要用 存储过程 分页
你可以BAIDU GOOGLE一下
seavohing 2008-11-20
  • 打赏
  • 举报
回复
这个是你的数据库设计的极不合理,数据库不是单纯存放数据用的,要根据应用来定,你可以为你的这个应用再设置1个或多个表,调整你的应用。

如果想暂时解决你的这个问题,也不是没有办法,可以用union。然后再借助存储过程分页,就可以解决。但性能决定你的数据库软硬件以及索引的设置情况。

好了
bhd1896 2008-11-20
  • 打赏
  • 举报
回复
ajax
不耐烦 2008-11-20
  • 打赏
  • 举报
回复
有很多高效分页 百万数据 就300毫秒左右
搜索‘叶子分页类’
birdwings 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 seavohing 的回复:]
那就把语句用union改写,然后用存储过程分页,在各个表上按where子句建相应的索引.
[/Quote]
然后用存储过程分页,在各个表上按where子句建相应的索引??

我不太明白,怎么用存储过程分页呀.这位大哥能否举出一例,给予提示.
seavohing 2008-11-20
  • 打赏
  • 举报
回复
那就把语句用union改写,然后用存储过程分页,在各个表上按where子句建相应的索引.
birdwings 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 seavohing 的回复:]
这个是你的数据库设计的极不合理,数据库不是单纯存放数据用的,要根据应用来定,你可以为你的这个应用再设置1个或多个表,调整你的应用。

如果想暂时解决你的这个问题,也不是没有办法,可以用union。然后再借助存储过程分页,就可以解决。但性能决定你的数据库软硬件以及索引的设置情况。

好了
[/Quote]

这个没办法,我的数据库是我们产品的数据库,我不能修改..我只能在这库里加点表...
1. 所有SQL语句都放在不同的XML檔中(一个业务类使用一个XML檔),该档可用工具维护。大大节省开发及维护时间。2. 当数据库结构改变时,只需修改SQL配置文件(用DBMap工具维护),而不用改代码(如果结构改变影响到页面,当然也要改页面,如在查询SQL中多加一个字段,而这个字段需要在页面显示,当然要在页面中加上显示该字段的列,又如一个表增加了一个字段,而该字段需要在页面上输入,这时也要修改页面,增加输入该字段值的列,除此之外不需要修改其它代码)。3.没有用代码来自动生成SQL语句(除新增、修改外),而是手工编写SQL语句(然后用DBMap工具维护SQL配置文件),可以对SQL语句进行最大优化。4.支持任何形式的SQL语句,包括存储过程。可以在SQL语句中使用数据库的任何函数(如果使用某个数据库的专用函数,在更换数据库系统时会带来麻烦)。5.支持动态查询,可任意指定查询条件,且查询条件个数不确定。支持数据分页(需存储过程支持)。6. 支持数据缓存功能,可为每个SQL语句分别设定是否使用缓存、缓存类别(依赖数据库、绝对时间、相对时间),缓存时间。7.支持所有数据库,理论上与数据库系统无关(如果不使用数据库的专用功能时),可任意更换数据库系统。8.支持同时连接多个数据库,这些数据库甚至是不同的数据库系统。9.支持多国语言,可方便开发多国语言系统。10.支持系统参数及讯息设定,可灵活设定系统参数,可自己定义显示信息。11.支持错误日志功能,可设定是否使用日志、是否将日志email给指定的人员(如测试员,开发人员等)12.最大特点是简单,使用方便,没有其它DAL那种复杂的配置及使用,如果你正在找一个使用简单,能节省大量时间的数据库访问层,这个也许就是你要找的。13.该类库仅仅是把对数据库操作的常用代码封装而已,并没有真正意义的ORM,充其量只算半个ORM,程序还是“依赖”数据表的字段(实际应用时,数据表的字段名很少改变)。关于这个问题很难说得清楚,只有真正用时才会体会到,呵呵…,这个就不多说了,有兴趣的朋友可以试用一下,有问题请直接联系我(e865@163.com)。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧