原文页类的代码如下:
<script language="vbscript" runat="server">
'----------------------------------------
' 数据库分页类 for sqlserver.
' 作者: Robin_Zhang (eway365@tom.com)
' 请保留此信息,谢谢。
'----------------------------------------
class splitpage
public curr_page '//当前页码
public istart '//分页开始的记录位置
public iend '//分页结束的记录位置
public countpage '//页数
public conn '//数据库连接对像
public perpagecount '//每页显示的记录个数
public countrecord '//总记录数
public tablename '//表或视图名称
public key '//主键
public condition '//查询条件
public orderby '//排序条件
public sql_count '//求总记录数的sql语句
public sql_search '//查询sql语句
public split_record '//得到的分页记录集
public url '//当前页面的url
public bar1 '//翻页条
public bar2 '//翻页条
public solitude_sql '传送单独的sql语句
'//-------------------private 内部方法集合-----------------------
'得到查询的记录数,总页数,sql语句,得到当前页数
private sub getCountRecord()
if isnull(solitude_sql) or isempty(solitude_sql) then
sql = "select count("& key &") as totalvalue from "& tablename & condition
else
sql = "select count(*) as totalvalue from ("&solitude_sql&") temptablea"
end if
' response.write "<hr>"&sql
' response.end
set rs = conn.execute(sql)
countrecord = rs("totalvalue")
rs.close
set rs=nothing
sql_count = sql
countpage = abs(int(-(countrecord/perpagecount)))
if curr_page < 1 then curr_page = 1
if curr_page >countpage then curr_page = countpage
end sub
'根据当前页码和每页显示的个数算出起始位置
private sub count_istart()
istart = clng((curr_page-1) * perpagecount)
if istart > clng(countrecord) then istart = clng(countrecord)
if istart < 0 then istart = 0
end sub
'根据当前页码和每页显示的个数算出结束位置
private sub count_iend()
iend = clng(istart + perpagecount)
if iend > clng(countrecord) then iend = clng(countrecord)
end sub
private function get_record()
if isnull(solitude_sql) or isempty(solitude_sql) then
sql = "select * from "& tablename &" where "& key &" not in (select top "& istart &" "& key &" from "& tablename & condition & orderby &") and "& key &" in (select top "& iend &" "& key &" from "& tablename & condition & orderby & ")" & orderby
else
sql = "select * from ("& solitude_sql &")a where "& key &" not in (select top "& istart &" "& key &" from ("& solitude_sql &")b"& condition & orderby &") and "& key &" in (select top "& iend &" "& key &" from ("& solitude_sql &")c"& condition & orderby & ")" & orderby
end if
'response.write sql
sql_search = sql
set get_record = conn.execute(sql)
end function
private sub get_url()
url = Request.ServerVariables("url") & "?" & Request.ServerVariables("query_string")
pos = InStrRev(url,"&page")-1
if pos > 0 then
url = mid(url,1,pos)
end if
if Request.ServerVariables("query_string") = "" then
url = Request.ServerVariables("url") & "?1=1"
end if
end sub
private function get_bar_gb2312()
bar1 = "目前为第 "& curr_page &"页 共计 "& countpage &" 页 共有 "& countrecord &" 笔资料"
a1 = "<a href='"& url &"&page=1'>首页</a> "
a2 = "<a href='"& url &"&page="& curr_page-1 &"'>上页</a> "
a3 = "<a href='"& url &"&page="& curr_page+1 &"'>下页</a> "
a4 = "<a href='"& url &"&page="& countpage &"'>末页</a> "
curr_page = clng(curr_page)
if curr_page <=1 then
a1 = "首页 "
a2 = "上页 "
end if
if curr_page >= clng(countpage) then
a3 = "下页 "
a4 = "末页 "
end if
bar2 = a1 & a2 & a3 & a4
end function
private function get_bar_big5()
end function
'//---------------------public 供外部调用--------------------------
'存取一条sql
public sub set_solitude_sql(sql)
solitude_sql = sql
end sub
'取得数据库连接的方法
public sub setConn(o)
set conn = o
end sub
'设定每页显示记录的个数
public sub setPerpagecount(o)
perpagecount = o
end sub
'设定查询的表名或视图名称
public sub setTablename(atablename)
tablename = atablename
end sub
'设定主键
public sub setKey(akey)
key = akey
end sub
'设定查询条件
public sub setCondition(acondition)
condition = " " & acondition
end sub
'设定排序依据
public sub setOrderby(aorderby)
orderby = " " & aorderby
end sub
'设定当前页码
public sub setCurr_page(o)
if o <> "" then
curr_page = clng(o)
else
curr_page = 1
end if
end sub
public sub execute()
call getCountRecord()
call count_istart()
call count_iend()
call get_url()
set split_record = get_record()
call get_bar_gb2312()
end sub
end class
</script>
以前的语句中有一个not in和一个in
select * from table_name where id not in (select top 100 id from table_name order by id desc) and id in (select top 200 id from table_name order by id desc) order by id desc
考验到in会遍历整张表.所以做以下修改...
select top 10 * from table_name where id>(select max (id) from (select top ((页码-1)*10) id from table_name order by id) as table_temp) order by id