作为网站的开发者,在开发网的过程中,不仅要考虑程序的逻辑性和结构性,更重要的一个方面是要对自己的和程序的效率和执行时间了如指掌。最近因为需要写了一个数据列表的类,做了设定分页数和SQL的接口,但是分页的时候我就犹豫了,还是采用传统的Rs.CurrentPage来定位页码和数据起始端?如果数据量超过了10万条,那岂不是也要把所有的数据都提取出来?所以在思想以后,石头决定采用TOP的方式来提取指定条数的记录,就算数据量超过100万条,执行速度也会相当的快。看下面的函数:
Private Function ChangeSQLForList()
Return = Replace(Ucase(SQL),"SELECT","SELECT TOP "&PageSizes)
Table_1 = split(Ucase(SQL),"FROM")
Table_2 = split(Table_1(1)," ")
Table = Table_2(1)
if Instr(Return,"WHERE")>0 Then
Return = Replace(Return,"WHERE","WHERE ("&Table&".ID NOT IN(SELECT TOP "&PageSizes*(CurrentPage-1)&" "&Table&".ID FROM "&getBySplitM(Ucase(SQL),"FROM","ORDER BY")&" ORDER BY "&getBySplit(Ucase(SQL),"ORDER BY",2)&")) AND")
else
Return = Replace(Return,"ORDER BY","WHERE ("&Table&".ID NOT IN(SELECT TOP "&PageSizes*(CurrentPage-1)&" "&Table&".ID FROM "&getBySplitM(Ucase(SQL),"FROM","ORDER BY")&" ORDER BY "&getBySplit(Ucase(SQL),"ORDER BY",2)&"))" &" ORDER BY")
End if
ChangeSQLForList = Return
End Function
这个函数是用于转换接口处的SQL来查询设定的条数的记录,它的原理在于,取得上一页最后一条记录的ID,然后再采用SELECT TOP的方式来查询记录,在WHERE后面设定了ID大于上一页的最后一个ID。
原创文章转载请注明引自石头博客 http://www.stou.info/ 欢迎订阅石头博客。
路过`````````赞个````````````走人```````````
看不懂的我 路过一下吧 我在慢慢学习
很专业,看不懂,呵呵。
牛仔过来坐坐
赞个`````
石头,你VB写的不错啊:)
偶不会这个,但能看懂,呵呵
现在在学as3
还有这么一说? 记下了...
这个代码十分眼熟~~ 好像是我发布的哦
一点都看不懂哦
看不懂,顺便说一下,有一个广告留言?
以前用asp+access时候数据不大,没有用过这个,不过现在看起来,这个分页方案的前提是ID,但也有些没有自动编号的数据,就不适应了吧。
谢谢了。
赞个```.................