日期:2014-05-17  浏览次数:21091 次

关于存储过程分页,在线等!
我调用存储过程实现分页,用ado打开数据库没问题,换成ODBC就不行了,大家帮忙看看吧
存储过程:
CREATE   procedure   p_splitpage      
@sql   nvarchar(4000), --要执行的sql语句
@currentpage   int=2,   --要显示的页码
@pagesize   int=10, --每页的大小
@recordcount   int=0   output, --记录数
@pagecount   int=0   output --总页数
as
set   nocount   on
declare   @p1   int

exec   sp_cursoropen   @p1   output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount   output
set   @recordcount=@pagecount
set   @pagecount=ceiling(1.0*@pagecount/@pagesize)      
set   @currentpage=(@currentpage-1)*@pagesize+1    
--select   @recordcount   recordcount   ,@pagecount     pagecount,@currentpage     currentpage
exec   sp_cursorfetch   @p1,16,@currentpage,@pagesize  
exec   sp_cursorclose   @p1
set   nocount   off
GO
调用函数:
Function   GetData(Sql,Conn,BeginNum,EndNum,R_Count,P_Count)
dim   rs,Cmd
Set   Cmd   =   Server.CreateObject( "ADODB.Command ")
Cmd.ActiveConnection=Conn
Cmd.CommandType=4   'adCmdStoredProc
Cmd.prepared=true   '保存编译
Cmd.CommandText= "p_splitpage "   '存储过程   名称
'设置参数
Cmd.Parameters.Append   Cmd.CreateParameter( "@sql ",200,1,500,Sql)
Cmd.Parameters.Append   Cmd.CreateParameter( "@currentpage ",3,1,4,BeginNum)
Cmd.Parameters.Append   Cmd.CreateParameter( "@pagesize ",3,1,4,EndNum)
Cmd.Parameters.Append   Cmd.CreateParameter( "@recordcount ",3,2)
Cmd.Parameters.Append   Cmd.CreateParameter( "@pagecount ",3,2)
'set   rs=cmd.execute   '开始执行
set     rs=server.CreateObject( "adodb.recordset ")        
rs.CursorType     =3        
rs.LockType     =3        
rs.CursorLocation     =3        
set     rs.Source     =cmd    
rs.open
R_Count=Cmd( "@recordcount ")
P_Count=Cmd( "@pagecount ")  
set   rs=rs.nextrecordset
set   GetData=rs
End   Function
调用代码:
sql= "select   *   from   test "
Set   rs   =   GetData(sql,   Conn,   currentpage,   20,   r_count,   p_count)


------解决方案--------------------
rs.open
R_Count=Cmd( "@recordcount ")
P_Count=Cmd( "@pagecount ")

错在这里了。。。。常见问题

其实是先返回rs,然后rs.close 然后给值

R_Count=Cmd( "@recordcount ")
P_Count=Cmd( "@pagecount ")

这么个顺序就可以了