当前位置: 首页 > 图文教程 > 网络编程 > ASP > 查询翻页优化

ASP
asp生成三维饼图的函数
ASP下的简洁的多重查询的方法与函数 真不错
发一个ASP的ADODB类代码
A利用ASP小偷和Google实现在线翻译功能的代码
ASP类型网站结合动网论坛会员的方法
Asp下实现多表单域无组件文件上传的实例
asp制作中常用到的函数库集合
易心asp分页类 v1.0
asp中xmlhttp组件发包
检测是否为数字类型的asp代码
可以获得文件的文件名的asp函数
用asp实现访问远程计算机上MDB access数据库文件的方法
用ASP实现写IIS日志的代码
asp在IE浏览器中下载服务端上的各类文件的实现方法
asp汉字中文图片验证码的实现代码
asp WAP获取手机终端信息的一段代码
asp取得数组中的最大值的方法
用asp实现的截取指定格式字符串的代码
asp jmail发邮件 详细解析
ASP编程中连接数据库和数据库操作的常用代码

ASP 中的 查询翻页优化


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

复制代码 代码如下:

<SCRIPT language=VBSCRIPT RUNAT=SERVER>
'//---- COCOON_自定义类_翻页优化代码 ----//'
Class cc_db_Pager
'--------------------------------
' COCOON Db_Pager 类 (Ver: 1.02)
' 作者: Sunrise_Chen ([email protected])
' 请保留此信息,谢谢。
'
' 2003/06 修正一个错误,描述:如果ID不唯一,将产生多条重复记录的错误。
' 2003.5
'--------------------------------
'//-------------------- 定义变量 --------------------//'
Private sTableName '//表名
Private sSqlString '//自定义Sql语句
Private aCondition() '//查询条件(数组)
Private sCondition '//查询条件(字符串)
Private iPage '//当前页码
Private iPageSize '//每页记录数
Private iPageCount '//总页数
Private iRecCount '//当前查询条件下的记录数
Private iTotalRecCount '//总记录数
Private sFields '//输出的字段名
Private sOrderBy '//排序字符串
Private sSql '//当前的查询语句
Private sPkey '//主键
Private oConn '//连接对象
Private iDefPageSize '//默认每页显示的记录数
Private sProjectName '/项目名
Private sVersion '/版本号
Private bShowError '//是否显示错误信息
'//-------------------- 事件、方法 --------------------//'
'//类初始化事件
Private Sub Class_Initialize()
ReDim aCondition(-1)
iPage = 1
iRecCount = Null
iTotalRecCount = Null
iPageCount = Null
bShowError = True
iPageSize = 10
sFields = "*"
sPkey = "ID"
sCondition = ""
sOrderBy = ""
sSqlString = ""
sProjectName = "COCOON 类系列 数据库翻页优化"
sVersion = "1.02"
End Sub
'//类结束事件
Private Sub Class_Terminate()
Set oConn = Nothing
End Sub
'//错误处理
Public Sub doError(s)
Dim sTmp
sTmp = CLng(Rnd() * 100)
Response.write( "<DIV STYLE='WIDTH:760;font-size:9pt;cursor:hand'>" )
Response.write( "<LABEL ONCLICK='ERRORDIV"&sTmp&".style.display=(ERRORDIV"&sTmp&".style.display==""""?""none"":"""")'>" )
Response.write( "<SPAN STYLE='BACKGROUND-COLOR:#CCCC00;COLOR:WHITE;'>〖 CC_db_Pager 提示信息 〗</SPAN><BR></LABEL>" )
Response.write( "<DIV ID='ERRORDIV"&sTmp&"' STYLE='DISPLAY:NONE;WIDTH:100%;" )
Response.write( "BORDER: 1PX SOLID #CCCC00;PADDING:5;overflow:hidden;text-overflow:ellipsis;'><NOBR>" )
Response.write( "<SPAN STYLE='COLOR:RED'>Description</SPAN>: " & s & "<BR>" )
Response.write( "<SPAN STYLE='COLOR:RED'>Provider</SPAN>: " & sProjectName )
Response.write( " <SPAN STYLE='COLOR:RED'>Version</SPAN>: " & sVersion & "<BR>" )
Response.write( "</NOBR></DIV></DIV><BR>" )
End Sub
'//产生分页的SQL语句
Public Function getSql()
Dim iStart, iEnd
Call makeCondition()
iStart = ( iPage - 1 ) * iPageSize
iEnd = iStart + iPageSize
getSql = " SELECT DISTINCT " & sFields & " FROM ["&sTableName&"] " _
& " WHERE ["&sPKey&"] NOT IN ( " _
& " SELECT TOP "&iStart&" ["&sPKey&"] FROM ["&sTableName&"] " & sCondition & " " & sOrderBy & " " _
& " )" _
& " AND ["&sPKey&"] IN ( " _
& " SELECT TOP "&iEnd&" ["&sPKey&"] FROM ["&sTableName&"] " & sCondition & " " & sOrderBy & " " _
& " )" _
& " " & sOrderBy & " "
End Function
'//产生条件字符串
Private Sub makeCondition()
If UBound(aCondition)>=0 Then
sCondition = " WHERE " & Join(aCondition, " AND ")
End If
End Sub
'//计算总记录数(带条件)
Private Sub CaculateRecCount()
On Error Resume Next
Dim oRs
Call makeCondition()
Set oRs = oConn.Execute( "SELECT COUNT(["&sPKey&"]) FROM [" & sTableName & "]" & sCondition )
If Err Then
doError Err.Description
Response.End()
End If
iRecCount = oRs.Fields.Item(0).Value
Set oRs = Nothing
End Sub
'//计算总记录数(不带条件)
Private Sub CaculateTotalRecCount()
On Error Resume Next
Dim oRs
Set oRs = oConn.Execute( "SELECT COUNT(["&sPKey&"]) FROM [" & sTableName & "]" )
If Err Then
doError Err.Description
Response.End()
End If
iTotalRecCount = oRs.Fields.Item(0).Value
Set oRs = Nothing
End Sub
'//计算页数
Private Sub CaculatePageCount()
If isNull(iRecCount) Then CaculateRecCount()
If iRecCount = 0 Then iPageCount = 0 : Exit Sub
iPageCount = Abs( Int( 0 - (iRecCount / iPageSize) ) )
End Sub
'//增加条件
Public Sub AddCondition(s)
If Len(s)<0 Then Exit Sub
ReDim Preserve aCondition(UBound(aCondition)+1)
aCondition(UBound(aCondition)) = s
End Sub
'//版本信息
Public Function Information()
doError "Coding by <A HREF='MAILTO:[email protected]'>Sunrise_Chen</A> @ <A HREF='http://www.ccopus.com'>http://www.ccopus.com</A> ."
End Function

'//-------------------- 输入属性 --------------------//'
'//定义连接对象
Public Property Set ActiveConnection(o)
Set oConn = o
End Property
'//定义查询表名
Public Property Let TableName(s)
sTableName = s
End Property
'//定义需要输出的字段名
Public Property Let Fields(s)
sFields = s
End Property
'//定义主键
Public Property Let Pkey(s)
sPkey = s
End Property
'//定义排序规则
Public Property Let OrderBy(s)
sOrderBy = " ORDER BY " & s & " "
End Property
'//定义每页的记录条数
Public Property Let PageSize(s)
iPageSize = s
If Not isNumeric(iPageSize) Then iPageSize = iDefaultPageSize
If CLng(iPageSize)<1 Then iPageSize = iDefaultPageSize
End Property
'//定义当前页码
Public Property Let Page(s)
iPage = s
If Not isNumeric(iPage) Then iPage = 1
If CLng(iPage)<1 Then iPage = 1
Call CaculatePageCount()
If CLng(iPage)>CLng(iPageCount) And iPageCount>0 Then iPage = iPageCount
End Property
'//自定义查询语句
Public Property Let Sql(s)
sSqlString = s
End Property
'//-------------------- 输出属性 --------------------//'
'//取得当前条件下的记录数
Public Property Get RecordCount
If isNull(iRecCount) Then CaculateRecCount()
RecordCount = iRecCount
End Property
'//取得当前页码
Public Property Get Page
Page = iPage
End Property
'//取得当前页码
Public Property Get AbsolutePage
AbsolutePage = iPage
End Property
'//取得当前查询的条件
Public Property Get Condition
If Len(sCondition)<1 Then makeCondition()
Condition = sCondition
End Property
'//取得总的记录数
Public Property Get TotalRecordCount
If isNull(iTotalRecCount) Then CaculateTotalRecCount()
TotalRecordCount = iTotalRecCount
End Property
'//取得总页数
Public Property Get PageCount
If isNull(iPageCount) Then CaculatePageCount()
PageCount = iPageCount
End Property
'//得到分页后的记录集
Public Property Get Recordset
On Error Resume Next
sSql = getSql()
Set Recordset = oConn.Execute( sSql )
If Err Then
If bShowError Then doError Err.Description
If Len(sSqlString)>0 Then
Set Recordset = oConn.Execute( sSqlString )
If Err Then
doError Err.Description
Response.End()
End If
Else
doError Err.Description
End If
End If
Err.Clear()
End Property
'//版本信息
Public Property Get Version
Version = sVersion
End Property
End Class
</SCRIPT>

使用说明
复制代码 代码如下:

Class cc_db_Pager
Public Property Let ConnectionString '//设置连接字符串
Public Property Set ActiveConnection(o) '//设置连接对象(与ConnectionString属性二者取一)
Public Property Let TableName(s) '//设置查询表名或视图名
Public Property Let Fields(s) '//设置输出字段名(可省略,默认为"*",即所有字段)
Public Property Let Pkey(s) '//设置主键(可省略,默认为"ID")
Public Property Let OrderBy(s) '//排序规则(可省略,省略则按默认规则排序)
Public Property Let Page(s) '//设置当前页码
Public Property Let PageSize(s) '//设置每页记录数
Public Property Let Sql(s) '//容错的SQL语句(此功能有待进完善,暂保留)
Puvlic Property Get Sql '//返回已翻页的SQL语句
Public Property Get RecordCount '//返回当前记录数
Public Property Get TotalRecordCoun '//返回总记录数
Public Property Get Condition '//保留
Public Property Get PageCount '//返回总页数
Public Property Get Recordset '//返回已分页的记录集(核心)
Public Property Get Version '//返回本段代码的版本信息
Public Property Get Page '//返回当前页码
Public Property Get AbsolutePage '//返回当前页(同上)
Public Function Information()
Private Function getSql()
Private Sub makeCondition()
Private Sub CaculateRecCount()
Private Sub CaculateTotalRecCount()
Private Sub CaculatePageCount()
Private Sub AddCondition(s)
Private Sub Class_Initialize()
Private Sub Class_Terminate()
End Class

使用方法演示
复制代码 代码如下:

<SCRIPT language="JavaScript">
function doPage(n){
location.href=location.pathname+'?page='+n+'&其他条件...';
}
</SCRIPT>
<%
Dim oDbPager
iPageSize = DefaultPageSize
Set oDbPager = New cc_db_Pager
Set oDbPager.ActiveConnection = oConn
oDbPager.TableName = "t_Company"
oDbPager.Fields = "ID,Company,WebSite,MainProduct,UserLevel, Status, Phone, Fax"
oDbPager.Pkey = "ID"
oDbPager.OrderBy = "UserLevel DESC, Status DESC, CharIndex('中国',Country) DESC, ID DESC"
oDbPager.PageSize = iPageSize
oDbPager.AddCondition "Status>0"
If Not isEmpty(Request.QueryString("Auth1")) Then
oDbPager.AddCondition "Auth1>0"
End If
oDbPager.Page = Request.QueryString("page")
iCurrPage = oDbPager.Page
iRecCount = oDbPager.RecordCount
iPageCount = oDbPager.PageCount
sPageInfo = "当前页为 "&iCurrPage&" 共计 "&iPageCount&" 个页面 共有 "&iRecCount&" 条信息"
sPager = "" & vbCrLf _
& "[<A "&IIf(CInt(iCurrPage)<=1,"disabled href='javascript:void(0);'","href='javascript:doPage(1);'")&">首页</A>]" & vbCrLf _
& "[<A "&IIf(CInt(iCurrPage)<=1,"disabled href='javascript:void(0);'","href='javascript:doPage("&(iCurrPage-1)&");'")&">前页</A>]" & vbCrLf _
& "[<A "&IIf(CInt(iCurrPage)>=CInt(iPageCount),"disabled href='javascript:void(0);'","href='javascript:doPage("&(iCurrPage+1)&");'")&">后页</A>]" & vbCrLf _
& "[<A "&IIf(CInt(iCurrPage)>=CInt(iPageCount),"disabled href='javascript:void(0);'","href='javascript:doPage("&iPageCount&");'")&">末页</A>]"
%>
...
<%
Set oRs = oDbPager.Recordset
Do While Not oRs.Eof
'// ...
oRs.MoveNext()
Loop
%>
...
<%=sPageInfo%>
...
<%=sPager%>