2011-12-09 27 views
0

私のaspページングに問題があります。各ページに6つのレコードを表示することができます。しかし、2ページ目に進むと、同じページに6つのレコードが表示されます。 以下は私のコードです。助言がありますか?クラシックASPのページング

Dim iPageSize,iPageCount , iPageCurrent , strOrderBy,strSQL,iRecordsShown,I 
    iPageSize = 6 
    set registerRS=server.CreateObject("ADODB.recordset") 
    registerRS.PageSize = iPageSize 
    ' Retrieve page to show or default to 1 
    If Request.QueryString("page") = "" Then 
     iPageCurrent = 1 
    Else 
     iPageCurrent = CInt(Request.QueryString("page")) 
    End If 
    qry="SELECT * FROM "dbo.CustomerOrders;" 

    registerRS.CacheSize = iPageSize 
    registerRS.open qry,ObjConn,3 
    iPageCount = registerRS.PageCount 
    If iPageCurrent > iPageCount Then iPageCurrent = iPageCount 
    If iPageCurrent < 1 Then iPageCurrent = 1 
    If iPageCount = 0 Then 
     Response.Write "No records found!" 
    Else 
     registerRS.AbsolutePage = iPageCurrent 
    end if 
    %> 
     <p> 
     <font size="+1">Page <strong><%= iPageCurrent %></strong> 
     of <strong><%= iPageCount %></strong></font> 
     </p> 
    <% 
    x=registerRS.recordcount 
    if registerRS.recordcount > 0 Then 
    registerRS.movefirst 
    End If 
     Do While iRecordsShown < iPageSize And Not registerRS.EOF 
       counter=counter+1 
       if counter=41 then 
        counter=0 
        counter=counter+1 
       end if 
       r = r + 1 
       If r = 1 then 
        Response.write "<tr>" 
       End if 
       %> 
        <td> 
         <%=registerRS.Fields("Address")%> <br />>     
         </td>   
     <%  
      If r = 2 then 
      Response.write "</tr>" 
      End if 
      If r = 3 then r = 1 
      ' Increment the number of records we've shown 
       iRecordsShown = iRecordsShown + 1 
      registerRS.movenext 
      loop    
     %> 
</table> 
<table width=90%> 
    <tr> 
     <td> 
<%   
    If iPageCurrent > 1 Then   
%> 
    <a href="add.asp?page=<%= iPageCurrent - 1 %>&SchoolId=<%=registerRS.Fields("Add")%>">[&lt;&lt; Prev]</a> 
<% 
    End If 
    ' You can also show page numbers: 
     For I = 1 To iPageCount 
     If I = iPageCurrent Then 
%> 
<%= I %> 
<%Else%> 
    <a href="add.asp?page=<%= I %>&SchoolId=<%=registerRS.Fields("Add")%>"><%= I %></a>  
<% 
    End If 
    Next 'I 
    If iPageCurrent < iPageCount Then 
%> 
    <a href="add.asp?page=<%= iPageCurrent + 1 %>&SchoolId=<%=registerRS.Fields("Add")%>">[Next &gt;&gt;]</a> 
<% 
    registerRS.close 
    set registerRS=nothing 
    End If 
    end sub 
%> 
+2

正直言って、あなたのコードのどこに「ページング」していると思うかわかりません。ページングには、表示するページを決定するパラメータと、そのパラメータの値に基づいて異なるレコードを表示するパラメータがURLに含まれていることが含まれます。 –

+0

これはPHPより悪いです... –

答えて

2

Webページのソースを表示していますし、このコード行ことを確認します。

<a href="add.asp?page=<%= iPageCurrent + 1 %>&SchoolId=<%=registerRS.Fields("Add")%>">[Next &gt;&gt;]</a> 

が正しい結果を生産しています。そうでない場合は、正しいページ参照が生成されていない場所を見つけるためにバックトラックする必要があります。

考えられるエラーソースについては、この例とコードを比較してください。

http://www.asp101.com/samples/viewasp.asp?file=db_paging.asp

私はいくつかのテストを行なったし、私は問題を引き起こす可能性のある物事のカップルを参照してください。

1] Do-Loopの前にiRecordsShown = 0を初期化する必要があります。

2]また、ループの後でリンクにデータベース値を取得しようとしています。ループが既にその時間までにレコードの終わりに達しているため、これはうまくいかないでしょう。ループの終わりに達する前に、データベース値を取得する必要があります。

それ以外は私のために働いた。

+0

htmlは、表示すると思われる7番目のレコードを表示しています。どのようにそれをテーブルに表示するかについての任意のアイデア? – JohnDoe4136

+0

あなたのリンクは "add.asp"というファイルを指していますそれは値のテーブルをリストするための正しいファイルですか?あなたが提供したサンプルコードを保持するファイルの名前ですか? – Dee

+0

はい。これは私のコードがあるファイル名です。 – JohnDoe4136

1

次の条件ブロックは、レコードの数が0より大きい場合(すでに存在するはずです)、最初のレコードにカーソルを移動します。そして、ループはページ番号に影響を与えずに最初のレコードから開始します。これは賢明ではない、ブロックを削除します。

if registerRS.recordcount > 0 Then 
registerRS.movefirst 
End If