在SQL 中,许多刚接触它的朋友都知道 Top 修饰关键字的作用;例如:select TOP 1 * from table1 --这样就实现从Table1表返回只有一条记录的记录集那么分页优化的最终目的就是避免产生过大的记录集,通过TOP 即可完全控制;现在查询表应该是 select Top 20 自动编号,标题,内容,时间 from 内容表。
但现在还有个问题,就是如何定位,Top 不可能自动给我们定位输出某个页,这就设计到了where 从句,根据一个特定条件输出正确的内容;注意:记录的 order by 排序是非常重要的,这个决定了这个算法的成败;
dim strSQL,i,endID,isBeginPage
const Cnt_PageSize = 20 '定义每页记录的大小
'通过检查浏览器传递的Page 参数的值来判断是否为进入下一页的操作
isBeginPage = isEmpty(request("Page")) or request("Page")="" or request("Page")<>"next"
'这里是分页的核心
if isBeginPage then '如果是起始页
'查询=列出分类编码等于参数flbm 的记录,按倒序排列,并只列出前 Cnt_PageSize 笔 (Cnt_PageSize是常量定义,比如20)
strSQL = "select TOP " & Cnt_pageSize & " 自动编号,标题,内容,时间 from 内容表 where 分类编码= '" & TRIM(SQLEncode(request("flbm"))) & "' order by 自动编号 desc"
else '如果不是起始页
if request("Page")="next" then '这里这样写是为了加强代码的表现,如果参数为next ,则表示取下页内容
'查询=列出分类编码等于参数flbm的记录并且要小于自动编号endID (endID也是参数),并倒序排列,并只列出前 Cnt_PageSize 笔 (Cnt_PageSize是常量定义,比如20)
strSQL = "select TOP " & Cnt_pageSize & " 自动编号,标题,内容,时间 from 内容表 where 分类编码= '" & TRIM(SQLEncode(request("flbm"))) & "' and 自动编号<" & request("endID") & " order by 自动编号 desc"
End if
end if
'打开数据连接执行SQL 并建立记录集
set rs = Cnn.Execute(strSQL)
if not rs.Eof then '这里写入判断是否为Eof 可以不要,但是,在这里却有它的特殊意义
call TableTitle '这里是自写的函数,用于建立表格标记
call beginTr '这里是建立表格tr标记
for i=0 to rs.fields.Count-1 '遍历记录集字段
call AddCol(rs(i).name) '输出字段名
Next
call endTr
while not rs.eof '循环记录集内容,并输出
call beginTr
for i=0 to rs.fields.Count-1
call AddRow(ASPEncode(rs(i).value))
Next
call endTr
endID = rs("自动编号") '这里保存每次输出的自动编号值
rs.MoveNext
Wend
call TableBottom '到此为止,就简单的将记录集内容全部输出
'这里输出翻页标记,vbaIIF 是自写函数
原型为 <I>function</I> vbaIIF(a,b,c)
if a then
vbaIIF =b
else
vbaIIF =c
end if
end <I>function</I>