利用COM组件对于B/S中分页的实现
2009-03-27 23:14
375 查看
1.运行环境:vb6.0+ASP3.0
2.准备条件:需要一个分页存储过程
存储过程代码如下:
CREATE PROCEDURE sp_newpage
@tb varchar(50), --表名
@col varchar(50), --按该列来进行分页
@coltype int, --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型
@orderby bit, --排序,0-顺序,1-倒序
@collist varchar(800),--要查询出的字段列表,*表示全部字段
@pagesize int, --每页记录数
@page int, --指定页
@condition varchar(800),--查询条件
@RecordCount Int Output,
@pages int OUTPUT --总页数
AS
/*
功能描述:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序
查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数
作 者:pbsql
版 本:1.10
最后修改:2004-11-29
*/
DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)
IF @condition is null or rtrim(@condition)=''
BEGIN--没有查询条件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN--有查询条件
SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件
SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件
END
SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+
') FROM '+@tb+@where2
EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数
SET @sql='SELECT @RecordCount=COUNT(*) FROM '+@tb+@where2
EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT--计算总记录
IF @orderby=0
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col
ELSE
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+
@col+' DESC'
IF @page=1--第一页
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+
@where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END
EXEC(@sql)
GO
3.编写COM组件
Dim MyResponse As response
Dim MyRequest As Request
Dim myApplication As Application
Dim myServer As Server
Dim mySession As Session
Public Sub OnStartPage(myScriptingContent As ScriptingContext)
Set MyResponse = myScriptingContent.response
Set MyRequest = myScriptingContent.Request
Set myServer = myScriptingContent.Server
Set myApplication = myScriptingContent.Application
Set mySession = myScriptingContent.Session
End Sub
Public Sub OnEndPage()
Set MyResponse = Nothing
Set MyRequest = Nothing
Set myServer = Nothing
Set myApplication = Nothing
Set mySession = Nothing
End Sub
Public Function showtable()
Page = MyRequest("page")
If Not IsNumeric(Page) Then
Page = 1
End If
If Page < 1 Then
Page = 1
End If
Dim conn As New ADODB.Connection
conn.open "Provider=SQLOLEDB;User ID=sa;Password=123;database=jsjdjks;server=127.0.0.1"
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_newpage"
cmd.Parameters.Append cmd.CreateParameter("tb", adVarChar, adParamInput, 50)
cmd.Parameters.Append cmd.CreateParameter("col", adVarChar, adParamInput, 50)
cmd.Parameters.Append cmd.CreateParameter("coltype", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("orderby", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("collist", adVarChar, adParamInput, 800)
cmd.Parameters.Append cmd.CreateParameter("pagesize", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("page", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("condition", adVarChar, adParamInput, 800)
cmd.Parameters.Append cmd.CreateParameter("RecordCount", adInteger, adParamOutput)
cmd.Parameters.Append cmd.CreateParameter("pages", adInteger, adParamOutput)
cmd("tb") = "userinfo"
cmd("col") = "id"
cmd("coltype") = 0
cmd("orderby") = 0
cmd("collist") = "*"
cmd("pagesize") = 1
cmd("page") = Page
cmd("condition") = ""
Set rs = cmd.Execute
If rs.state = 0 Then '未取到数据,rs关闭
RecordCount = -1
Else
rs.Close '只有关闭才能取出返回值
RecordPage = cmd.Parameters("pages")
RecordCount = cmd.Parameters("recordcount")
MyResponse.write "总记页数=" & cmd("pages")
MyResponse.write " 总记录数=" & cmd.Parameters("recordcount")
rs.open '要取出记录集,则要再打开
If CInt(Page) > CInt(RecordPage) Then
Page = RecordPage
End If
MyResponse.write "<TABLE width=100% bordercolorlight=#C0C0C0 cellspacing=1 bordercolor=#C0C0C0 bordercolordark=#FFFFFF border=1>"
MyResponse.write "<TR>"
MyResponse.write "<TD height=20 bgcolor=#C0C0C0>"
MyResponse.write "<p align=center>用户名</TD>"
MyResponse.write "<TD bgcolor=#C0C0C0>"
MyResponse.write "<p align=center>密码</TD>"
MyResponse.write "</TR>"
'If Not rs.EOF Then
Do While Not rs.EOF
MyResponse.write "<TR>"
MyResponse.write "<TD height=20>"
If Not IsNull(rs("username")) And rs("username") <> "" Then MyResponse.write rs("username") Else
MyResponse.write " </TD>"
MyResponse.write "<TD>"
If Not IsNull(rs("password")) And rs("password") <> "" Then MyResponse.write rs("password") Else
MyResponse.write " </TD>"
MyResponse.write "</TR>"
rs.movenext
Loop
'Else
'End If
rs.Close
Set rs = Nothing
MyResponse.write "<TR>"
MyResponse.write "<TD height=20 colspan=3>"
MyResponse.write "<p align=center>总共有" & RecordCount & "条记录 [<a href=page_test.asp?page=1>首页</a>]"
MyResponse.write "[<a href=page_test.asp?page="
If (Page - 1) > 0 Then MyResponse.write (Page - 1) Else MyResponse.write "1"
MyResponse.write ">上一页</a>] [<a href=page_test.asp?page="
If CInt(Page + 1) > CInt(RecordPage) Then MyResponse.write RecordPage Else MyResponse.write (Page + 1)
MyResponse.write ">下一页</a>] [<a href=page_test.asp?page=" & RecordPage & ">末页</a>]</TD>"
MyResponse.write "</TR>"
MyResponse.write "</TABLE>"
End If
Set cmd.ActiveConnection = Nothing
End Function
4.在asp页面调用
<%
set obj=server.CreateObject("wlw.ice")
obj.showtable()
%>
2.准备条件:需要一个分页存储过程
存储过程代码如下:
CREATE PROCEDURE sp_newpage
@tb varchar(50), --表名
@col varchar(50), --按该列来进行分页
@coltype int, --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型
@orderby bit, --排序,0-顺序,1-倒序
@collist varchar(800),--要查询出的字段列表,*表示全部字段
@pagesize int, --每页记录数
@page int, --指定页
@condition varchar(800),--查询条件
@RecordCount Int Output,
@pages int OUTPUT --总页数
AS
/*
功能描述:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序
查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数
作 者:pbsql
版 本:1.10
最后修改:2004-11-29
*/
DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)
IF @condition is null or rtrim(@condition)=''
BEGIN--没有查询条件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN--有查询条件
SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件
SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件
END
SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+
') FROM '+@tb+@where2
EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数
SET @sql='SELECT @RecordCount=COUNT(*) FROM '+@tb+@where2
EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT--计算总记录
IF @orderby=0
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col
ELSE
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+
@col+' DESC'
IF @page=1--第一页
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+
@where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END
EXEC(@sql)
GO
3.编写COM组件
Dim MyResponse As response
Dim MyRequest As Request
Dim myApplication As Application
Dim myServer As Server
Dim mySession As Session
Public Sub OnStartPage(myScriptingContent As ScriptingContext)
Set MyResponse = myScriptingContent.response
Set MyRequest = myScriptingContent.Request
Set myServer = myScriptingContent.Server
Set myApplication = myScriptingContent.Application
Set mySession = myScriptingContent.Session
End Sub
Public Sub OnEndPage()
Set MyResponse = Nothing
Set MyRequest = Nothing
Set myServer = Nothing
Set myApplication = Nothing
Set mySession = Nothing
End Sub
Public Function showtable()
Page = MyRequest("page")
If Not IsNumeric(Page) Then
Page = 1
End If
If Page < 1 Then
Page = 1
End If
Dim conn As New ADODB.Connection
conn.open "Provider=SQLOLEDB;User ID=sa;Password=123;database=jsjdjks;server=127.0.0.1"
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_newpage"
cmd.Parameters.Append cmd.CreateParameter("tb", adVarChar, adParamInput, 50)
cmd.Parameters.Append cmd.CreateParameter("col", adVarChar, adParamInput, 50)
cmd.Parameters.Append cmd.CreateParameter("coltype", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("orderby", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("collist", adVarChar, adParamInput, 800)
cmd.Parameters.Append cmd.CreateParameter("pagesize", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("page", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("condition", adVarChar, adParamInput, 800)
cmd.Parameters.Append cmd.CreateParameter("RecordCount", adInteger, adParamOutput)
cmd.Parameters.Append cmd.CreateParameter("pages", adInteger, adParamOutput)
cmd("tb") = "userinfo"
cmd("col") = "id"
cmd("coltype") = 0
cmd("orderby") = 0
cmd("collist") = "*"
cmd("pagesize") = 1
cmd("page") = Page
cmd("condition") = ""
Set rs = cmd.Execute
If rs.state = 0 Then '未取到数据,rs关闭
RecordCount = -1
Else
rs.Close '只有关闭才能取出返回值
RecordPage = cmd.Parameters("pages")
RecordCount = cmd.Parameters("recordcount")
MyResponse.write "总记页数=" & cmd("pages")
MyResponse.write " 总记录数=" & cmd.Parameters("recordcount")
rs.open '要取出记录集,则要再打开
If CInt(Page) > CInt(RecordPage) Then
Page = RecordPage
End If
MyResponse.write "<TABLE width=100% bordercolorlight=#C0C0C0 cellspacing=1 bordercolor=#C0C0C0 bordercolordark=#FFFFFF border=1>"
MyResponse.write "<TR>"
MyResponse.write "<TD height=20 bgcolor=#C0C0C0>"
MyResponse.write "<p align=center>用户名</TD>"
MyResponse.write "<TD bgcolor=#C0C0C0>"
MyResponse.write "<p align=center>密码</TD>"
MyResponse.write "</TR>"
'If Not rs.EOF Then
Do While Not rs.EOF
MyResponse.write "<TR>"
MyResponse.write "<TD height=20>"
If Not IsNull(rs("username")) And rs("username") <> "" Then MyResponse.write rs("username") Else
MyResponse.write " </TD>"
MyResponse.write "<TD>"
If Not IsNull(rs("password")) And rs("password") <> "" Then MyResponse.write rs("password") Else
MyResponse.write " </TD>"
MyResponse.write "</TR>"
rs.movenext
Loop
'Else
'End If
rs.Close
Set rs = Nothing
MyResponse.write "<TR>"
MyResponse.write "<TD height=20 colspan=3>"
MyResponse.write "<p align=center>总共有" & RecordCount & "条记录 [<a href=page_test.asp?page=1>首页</a>]"
MyResponse.write "[<a href=page_test.asp?page="
If (Page - 1) > 0 Then MyResponse.write (Page - 1) Else MyResponse.write "1"
MyResponse.write ">上一页</a>] [<a href=page_test.asp?page="
If CInt(Page + 1) > CInt(RecordPage) Then MyResponse.write RecordPage Else MyResponse.write (Page + 1)
MyResponse.write ">下一页</a>] [<a href=page_test.asp?page=" & RecordPage & ">末页</a>]</TD>"
MyResponse.write "</TR>"
MyResponse.write "</TABLE>"
End If
Set cmd.ActiveConnection = Nothing
End Function
4.在asp页面调用
<%
set obj=server.CreateObject("wlw.ice")
obj.showtable()
%>
相关文章推荐
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 利用js、jQuery和css实现环形进度条组件封装
- COM 组件实现心得
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 利用python的GUI组件wxWidgets实现登录窗口
- SSM利用pageHelper实现分页
- vuejs2.0实现分页组件,使用$emit进行事件监听数据传递
- 电子商务系统的设计与实现(十三):分页组件,从前到后,从JS到Java
- 利用TitleWindow和VideoPlayer组件轻松实现视频弹出播放效果
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 利用Jakarta commons fileupload组件实现多文件上传
- 进程外组件免注册COM通信的实现
- vuejs2.0实现分页组件,使用$emit进行事件监听数据传递
- Asp.net 利用Repeater和ObjectDataSource 实现自定义分页控件
- Vue2.0+ElementUi封装table组件实现分页功能
- 利用铁匠组件实现在线头像截图的效果
- 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合
- 利用ActivityGroup实现Tab分页标签
- 使用easyUi技术的datagrid组件实现条件分页
- 利用AjaxPro框加结合存储过程实现的无刷新分页