主题:  rs.AbsolutePage为何变成 -1

janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#12002/8/13 20:46:32
相关代码如下:
set rsLog = Server.CreateObject("ADODB.Recordset")
strSQL="Select * from tbLog Order by fTime DESC"
rsLog.open strSQL,conn,3
'conn已定义
rsLog.PageSize = 8
if len(request("pagesize"))>0 then rsLog.PageSize = request("PageSize")
if rsLog.PageSize > rsLog.recordcount then rsLog.PageSize = rsLog.recordcount
rsLog.AbsolutePage = 1
if len(request("pagenum"))>0 then rsLog.AbsolutePage = request("pagenum")
RowCount = RsLog.pagesize
response.write "第"& rsLog.AbsolutePage &"页"%>

输出为 第-1页,但用?pagenum=2时,又可显示第2页,输出时还是显示-1,直到最后一页时,才会输出一个正数来。why?



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#22002/8/13 21:02:18



蓝色理想

职务:普通成员
等级:1
金币:0.0
发贴:8
#32002/8/13 21:27:25
你自己看看怎么算吧。

        rs.PageSize=PageSize
        intPageCount=rs.PageCount
        if page>intPageCount then
            page=intPageCount
        end if
        rs.AbsolutePage=Page

if not (rs.EOF and rs.BOF) then
        '分页信息
        Response.Write "
"
        Response.Write "Total " & intRecordCount &" Display " & (Page-1)*PageSize+1 & " of "
        response.write (Page-1)*Pagesize+i -1& "
"
        Response.Write "
"
        Response.Write "Page "
        for i=1 to intpagecount
            if i=page then
                Response.Write "" & i & " "
            else
                Response.Write "" & i & " "
            end if
        next
            if page=intpagecount then
            Response.Write " Next

5D荣誉版主

职务:普通成员
等级:2
金币:10.0
发贴:658
#42002/8/15 8:15:20
我也遇到过这样的问题,
可能是和数据的打开方式有关,
比如我用
rs.open sql,conn,3,2
打开sql数据库的时候
rs.recordcount返回的是-1



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#52002/8/15 13:40:30
怎么解决的?



5D荣誉版主

职务:普通成员
等级:2
金币:10.0
发贴:658
#62002/8/15 16:32:44
rs.open sql,conn,3,1
rs.recordcount就返回正确了。



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#72002/8/16 23:13:27
还是不行,结果一样



5D荣誉版主

职务:普通成员
等级:2
金币:10.0
发贴:658
#82002/8/19 17:39:53
你是说要让打开的方式支持
rs.absolutepage
我以前看过王国荣的书上说只有打开方式为
rs.open sql,conn,3,2的时候支持
rs.absolutepage
要不你试试。
但是这个时候好像在SQL里面rs.recordcount返回为-1



iLiving

职务:普通成员
等级:1
金币:0.0
发贴:5
#92002/8/20 10:35:10
我也碰到这个问题,现在解决了,是数据库打开方式错了.把它改成1,1就行了.



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#102002/8/20 23:12:05
我最早就是用的1,1,结果不行,换了3,2还是不行,根据QQ上的网友建议,也换过其他值,问题依旧……我被它打败了:(

估计问题出在别的地方,我再找找别的



5D荣誉版主

职务:普通成员
等级:2
金币:10.0
发贴:658
#112002/8/21 10:52:43
解决的时候,
贴出来分享分享。



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#122002/8/23 22:56:31
在反复尝试过程中,终于把这个问题解决了。原来在用1,1打开时,rs.AbsolutePage只能写不能读(现在还没有试出来什么情况下可读)!

像蓝色写的那样,先用一个变量取得当前页,再把它赋给rs.AbsolutePage就行了。

我在写开发日志时的相关代码如下:

'之前相关对象已创建,所有变量已声明
'...
set rsLog = Server.CreateObject("ADODB.Recordset")
strSQL="Select * from tbLog Order by fTime DESC"
rsLog.open strSQL,conn,1,1
if rsLog.bof and rsLog.eof then
'
'此处处理无记录情况,略去
'
end if
intRecordCount=rsLog.RecordCount
pgsize = 8
if len(request("pagesize"))>0 then pgsize = CInt(request("pagesize"))
if pgsize>intRecordCount then pgsize=intRecordCount
rsLog.PageSize=pgsize
intPageCount=rsLog.PageCount
intPage=1
if len(request("pagenum"))>0 then intPage = CInt(request("pagenum"))
if intPage>intPageCount then intPage=intPageCount
rsLog.AbsolutePage = intPage
RowCount = pgsize
%>
……HTML代码,略去
<%Do While not rsLog.eof and RowCount > 0

'此处处理记录

<%
rsLog.movenext
RowCount = RowCount - 1
loop%>

'下面的代码输出导航页次

<%
Response.write "

全部日志"
if rsLog.pagecount=1 then
    Response.write"只有 1 页,"
else
    Response.write"共有 "& intPageCount &" 页,"
end if
response.write intRecordCount &" 条记录。"
if rsLog.pagecount > 1 then
    Response.write "此为第 "& intPage &" 页,此页显示 "& pgsize-RowCount &" 条("& (intPage-1)*pgsize+1 & "~" & intPage*pgsize-RowCount &")日志:
"
    if intpage>1 then response.write "[ |< ][ < ]"
    dim i
    for i=1 to intPageCount
        if i=intPage then
            Response.write "[ "& i &" ]"    
        else
            Response.write "[ " & i & " ]"
        end if
    next
    if intpage[ > ][ |> ]"
end if
response.write "

"
%>

手写的,有些乱:D

显示效果如下:



5D荣誉版主

职务:普通成员
等级:2
金币:10.0
发贴:658
#132002/8/25 10:34:11
<%@ Language=VBScript %>
<%option explicit%>

<%dim phone%>

<% ' VI 6.0 Scripting Object Model Enabled %>

<% if StartPageProcessing() Then Response.End() %>
<%


%>



    
    






    
        
    
    
        
    
    
        
    
    
        
    
    
        
    
    
        
    
    
        
    
    
    
        
    
    
        
    
    
        
    

        
         

            
                
                    
                    
                    
                    
                
            

                    
                    笔记本

                    
                    |

                    
                    分类

        

            
                
                    
                
            

                    
                    如果您和该名片主人有过交流,您可以在此做日志记录。请简单描述,字数限制在30字以内。

        
 
        

        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
                                                                                                                                                                                                                                                                                                

                                                                                                                                                                                                                                                                                                

                                                                                                                                                                                                                                                                                                

                                                                                                                                                                                                                                                                                                

                                                                                                                                                                                                                                                                                            

-->





<%    Grid1.display %>



        
        
        
        

        

            
                
                    
                
            
 
        

            
                
                    
                    
                    
                    
                    
                    
            
                
            

        

        
         

        
         

    
    
    
    
-->





<% ' VI 6.0 Scripting Object Model Enabled %>
<% EndPageProcessing() %>

    
    
    
-->
<%
Sub [_PO_OutputClientCode]()
%>

<%
End Sub
%>








5D荣誉版主

职务:普通成员
等级:2
金币:10.0
发贴:658
#142002/8/25 10:37:25
我上面贴的一段代码是在INTERDEV里面用可视化编程做出来的。
它的代码很长。
你只要把它拷回去在INTERDEV里面打开就可以看见三个服务器端的组件了。
中间的GRID组件很轻松的解决了分页显示的问题。
如果没有办法正常显示的话。
可能你的INTERDEV要安装扩展功能。



5D荣誉版主

职务:普通成员
等级:2
金币:10.0
发贴:658
#152002/8/25 10:38:19
有关上段代码有什么问题。
我可以解释。