当前位置: 首页 > 图文教程 > 网络编程 > ASP > asp的通用数据分页类

ASP
Access 2000 数据库 80 万记录通用快速分页类
Microsoft JET Database Engine 错误 ''80004005'' 未指定的错误的完美解决方法
收藏的ASP常用的函数集
asp分页的一个类
ASP开发网页牢记注意事项
ASP下操作Excel技术总结分析
ASP数据岛操作类
ASP经典分页类
asp论坛在线人数统计研究
ASP调用SQL SERVER存储程序
asp输出bmp
ASP连接数据库的全能代码
ASP面向对象编程探讨及比较
web文件管理器的后续开发
一小偷类!!有兴趣的可以看看
利用ASP实现事务处理的方法
大数量查询分页显示 微软的解决办法
如何把ASP编写成DLL
asp实现树型结构
超级ASP大分页_我的类容我做主

ASP 中的 asp的通用数据分页类


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 20 ::
收藏到网摘: n/a

(原创)<!--#include file="Conn.asp" -->
通用数据分页类
通用分页类,以后写分页显示数据时就轻松多啦.直接调用此类,然后再Execute即可以取得当前页的所有数据.
此类所做的工作是只取得当前页的数据,和总页数和总记录数等等数据.
ASP代码:
<%
'/*****************************分页显示类**************************
'/* 作者:哇哇鱼
'/* 日期:2004年11月18日
'/* 作用:取得某一页的数据并返回给外部
'/* 说明示例:
'/* Dim MyPage=New PageClass
'/* MyPage.Conn=Conn '设置连接对象
'/* MyPage.PageSize=20 '设置一页显示多少条数据 (默认为10条)
'/* MyPage.CurPage=2 '设置当前要显示的页码
'/*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'/* MyPage.TableName="Member" '设置表名
'/* MyPage.Fields="ID,MemberName,MemberPass" '设置显示字段列表
'/* MyPage.Condition="ID>100" '设置查询条件
'/* MyPage.OrderBy="ID DESC" '设置排序条件(一定要设置该属性)
'/* Set PageRs=MyPage.Execute '返回当前第2页的数据(RecordSet对象),如果出错则返回Nothing值
'/*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'/*'以上的定义也可以用以下的方法:ExecuteBy("表名","字段列表","查询条件","排序条件")
'/* Set PageRs=MyPage.ExecuteBy("Member","ID,MemberName,MemberPass","ID>100","ID DESC")
'/*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'/* PageCount=MyPage.PageCount '返回页码总数
'/* RecordCount=MyPage.RecordCount '返回记录总数
'/* NextPage=MyPage.NextPage '返回下页的页码
'/* PrePage=MyPage.PrePage '返回上一页的页码
'/*****************************************************************
Class PageClass
Private Connection '连接数据库的外部Connection对象
Private Rs
Private List_Fields
Private Table_Name
Private Query_Where
Private OrderBy_SQL '字段排序语句部分
Private Page_Count '返回当前查询的记录页总数
Private Page_Size '设置一页显示多少条的记录
Private Cur_Page '设置当前的页码
Private Record_Count '返回当前查询的记录总数
'/****************设置Connection对象****************************
Public Property Let Conn(ByRef ObjConn)
Set Connection=ObjConn
End Property
Public Property Get Conn()
Set Conn=Connection
End Property
'/****************End******************************************
'/****************设置查询SQL语句*******************************
''查询显示字段
Public Property Let Fields(ByVal Value)
List_Fields=Value
End Property
Public Property Get Fields()
Fields=List_Fields
End Property
''查询表名
Public Property Let TableName(ByVal Value)
Table_Name=Value
End Property
Public Property Get TableName()
TableName=Table_Name
End Property
''查询条件
Public Property Let Condition(ByVal Value)
Query_Where=Value
End Property
Public Property Get Condition()
Condition=Query_Where
End Property
''*****************排序部分********************************************
''Value 语不用写上Order By 。如: [object].OrderBy="ID Desc,PostTime Asc"
Public Property Let OrderBy(ByVal Value)
OrderBy_SQL=Value
End Property
Public Property Get OrderBy()
OrderBy=OrderBy_SQL
End Property
'/****************End******************************************
'/****************返回当前查询结果的总页数***********************
Public Property Get PageCount()
PageCount=Page_Count
End Property
Public Property Get RecordCount()
RecordCount=Record_Count
End Property
Public Property Get NextPage()
If Cur_Page<Page_Count Then
NextPage=Cur_Page+1
Else
NextPage=Page_Count
End If
End Property
Public Property Get PrePage()
If Cur_Page>1 Then
PrePage=Cur_Page-1
Else
PrePage=Cur_Page
End If
End Property
'/****************End******************************************
'/****************设置一页显示的记录数***************************
Public Property Let PageSize(ByVal Value)
If Not IsNumeric(Value) Or Value="" Then
Value=10
Else
Value=Cint(Value)
End If
If Value<1 Then Value=10
Page_Size=Value
End Property
Public Property Get PageSize()
PageSize=Page_Size
End Property
''设置当前的页码数**************************
Public Property Let Page(ByVal Value)
If Not IsNumeric(Value) Or Value="" Then
Value=1
Else
Value=CLng(Value)
End If
If Value<1 Then Value=1
Cur_Page=Value
End Property
Public Property Get Page()
Page=Cur_Page
End Property
'/****************End******************************************
Private Sub Class_Initialize
'初始化RecordSet对象
Page_Size=10 '默认一页为10条数据
CurPage=1 '默认当前为第一页
Record_Count=0
Page_Count=0
End Sub
Private Sub Class_Terminate
Call CloseRecordSet
End Sub
'/***关闭数据库的连接*******
Private Sub CloseRecordSet
On Error Resume Next
If IsObject(Rs) Then
Rs.Close
Set Rs=Nothing
End If
On Error Goto 0
End Sub
'/**********执行查询返回对应页码的数据***********************************************
Public Function ExecuteBy(ByVal oTableName,ByVal oFields,ByVal oCondition,ByVal oOrderBy)
Table_Name=oTableName
List_Fields=oFields
Query_Where=oCondtion
OrderBy_SQL=oOrderBy
Set ExecuteBy=Execute()
End Function
'查询并返回当前CurPage的页码记录
Public Function Execute()
Call CloseRecordSet
On Error Resume Next
Dim TSQL,TopMod,sWhere
If Not IsObject(Connection) Or Table_Name="" Or OrderBy_SQL="" Then
Set Execute=Nothing
Record_Count=0
Page_Count=0
Exit Function
End If
If Trim(Query_Where)<>"" Then
sWhere="Where "&Query_Where
Else
sWhere=""
End If
TSQL="Select Count(*) From ["&Table_Name&"] "&sWhere
Record_Count=Connection.Execute(TSQL)(0) '获取记录总数
If Err Then
Err.Clear
Set Execute=Nothing
Record_Count=0
Page_Count=0
Exit Function
End If
If Record_Count<1 Then
Set Execute=Nothing
Record_Count=0
Page_Count=0
Exit Function
End If
'取得页的总数
If Record_Count Mod Page_Size <>0 Then
TopMod=Record_Count Mod Page_Size
Page_Count=Fix(Record_Count/Page_Size)+1
If Cur_Page<Page_Count Then
TopMod=Page_Size
End If
Else
TopMod=Page_Size
Page_Count=Fix(Record_Count/Page_Size)
End If
If Cur_Page>Page_Count Then Cur_Page=Page_Count
If Cur_Page<1 Then Cur_Page=1
If Trim(List_Fields)="" Then List_Fields="*"
TSQL="Select * From (Select Top "&TopMod&" * From (Select Top "&(Cur_Page*Page_Size)&" "&List_Fields&" From ["&Table_Name&"] "&sWhere&" Order By "&OrderBy_SQL&") Order By "&TransformOrder(OrderBy_SQL)&")Order By "&OrderBy_SQL
Set Rs=Connection.Execute(TSQL)
If Err Then
Err.Clear
Set Execute=Nothing
Record_Count=0
Page_Count=0
Exit Function
End If
Set Execute=Rs
End Function
'转换OrderBy的顺序 ASC->DESC DESC->ASC
Private Function TransformOrder(ByVal Value)
If Value="" Then
TransformOrder=""
Exit Function
End If
Dim OrderArray,i,Result,ByString,Fields,InPos
OrderArray=Split(Value,",") '分解每个字段值
For i=0 To Ubound(OrderArray)
If OrderArray(i)<>"" Then
InPos=InStrRev(Trim(OrderArray(i))," ") '找出排序的顺序
If InPos<1 Then '如果找不到则是ASC排序
ByString="ASC"
Fields=OrderArray(i)+" "
Else
ByString=Trim(Mid(OrderArray(i),InPos+1))
Fields=Left(OrderArray(i),InPos)
If ByString<>"" Then
ByString=UCase(ByString)
Else
ByString="ASC"
End If
End If
''转换排序
If ByString="ASC" Then
ByString="DESC"
Else
ByString="ASC"
End If
Result=Result+Fields+ByString+","
End If
Next
If Result<>"" Then Result=Left(Result,Len(Result)-1)
TransformOrder=Result
End Function
End Class

'示例代码:
Sub Show_List
Dim Page,PageRs
Page=Request("Page")
Dim MyPage
Set MyPage=New PageClass
MyPage.Conn=Conn
MyPage.PageSize=20
MyPage.Page=Page
MyPage.TableName="table1"
MyPage.Fields="*"
MyPage.OrderBy="ID Asc"
Set PageRs=MyPage.Execute
'Set PageRs=MyPage.ExecuteBy("table1","*","","ID Asc")
If PageRs Is Nothing Then Exit Sub
Do Until PageRs.Eof
Response.Write " <tr bgcolor=""#FDFDFD"" style=""cursor:hand"" onmouseover=""this.style.background='#F3F3F3'"" onmouseout=""this.style.background='#FDFDFD'"">"
Response.Write " <td height=""20""><div align=""center"">"&PageRs("ID")&"</div></td>"
Response.Write " <td>"&PageRs("aaaa")&"</td>"
Response.Write " <td><a href="""&PageRs("bbbb")&"""><font color='#000000'>"&PageRs("bbbb")&"</font></a></td>"
Response.Write " <td>"&PageRs("cccc")&"</td>"
Response.Write " </tr>"
PageRs.MoveNext
Loop
PageRs.Close
PageCount=MyPage.PageCount
Page=MyPage.Page '取得当前正确的页码数
NextPage=MyPage.NextPage
PrePage=MyPage.PrePage
Set PageRs=Nothing
Set MyPage=Nothing
End Sub
Show_List
%>