שלח תשובה

זירת השאלות

371
צפיות
7
תשובות

בעיה עם חלוקה לדפים

,‏ 4 בדצמבר, 2005

קראתי את המאמר על הנושא באתר, וניסיתי לבנות לעצמי דוגמא קטנה, אך משום מה זה לא מצליח לי.
הקוד של הדף שלי:


<%
    set conn = Server.CreateObject("ADODB.Connection")
    conn.open "samples2"
set rs = Server.CreateObject("ADODB.RecordSet")
Dim currPage,i,pCount, numRecs
currPage = 1
numRecs = 3
if Not request("currPage") = "" then
currPage= request("currPage")
end if
rs.Open "SELECT * FROM topics where father_id = 0",conn,3,1,1
rs.PageSize = numRecs
rs.CacheSize = numRecs
if Not rs.eOF Then
pCount=rs.pageCount
rs.AbsolutePage=CurrPage
headline = rs("headline")
End If
Do While Not rs.eOF AND i < rs.pagesize
%>
<%=headline%><br>
<%
i=i+1
rs.MoveNext
Loop
rs.Close

for i = 1 to pCount
if Cint(i) = Cint(currPage) then
Response.Write " <b>"& i &"</b> "
Else
Response.Write " <a href=""rec2.asp?currPage="&i&""">"& i &"</a> "
End If
Next
%>

עכשו, כשאני מריץ את זה, אז למשל בדף הראושן אני מקבל כותרת מסוימת שמופיעה 3 פעמים, בדף השני לא מופיע לי כלום, בדף השלישי ענ"ל כמו בדף הראשון, ובדף הרביעי, והאחרון, מופיעה כותרת פעם אחת…מה עשיתי לא בסדר?

תגיות:

7 תשובות

  1. זהר פלד הגיב:

    קודם כל,
    חלוקה לעמודים על שאילתה לא מסודרת לא תביא אותך רחוק.
    תוסיף order by לשאילתה.

    דבר שני, נסה להציג בנוסף לכותרת ערך שהוא חד חד ערכי בטבלה, כדי שתראה בוודאות שמדובר על אותה הרשומה או על רשומות נפרדות.

    דבר שלישי, אפשר לראות איזה לינק?

  2. ליאור1989 הגיב:

    הנה כמה שינויים
    זה הקוד המלא החדש:


    <%
        set conn = Server.CreateObject("ADODB.Connection")
        conn.open "samples2"
    set rs = Server.CreateObject("ADODB.RecordSet")
    Dim currPage,i,pCount, numRecs
    currPage = 1
    numRecs = 10
    if Not request("currPage") = "" then
    currPage= request("currPage")
    end if
    rs.Open "SELECT * FROM topics where father_id = 0 order by id",conn,3,1,1
    rs.PageSize = numRecs
    rs.CacheSize = numRecs
    if Not rs.eOF Then
    pCount=rs.pageCount
    rs.AbsolutePage=CurrPage
    headline = rs("headline")
    id = rs("id")
    End If
    i = 0
    Do While Not rs.eOF AND i < rs.pagesize
    %>
    <%=headline%>&nbsp<%=id%><br>
    <%
    i=i+1
    rs.MoveNext
    Loop
    rs.Close

    for i = 1 to pCount
    if Cint(i) = Cint(currPage) then
    Response.Write " <b>"& i &"</b> "
    Else
    Response.Write " <a href=""rec2.asp?currPage="&i&""">"& i &"</a> "
    End If
    Next
    %>

    עכשו, הנה תמונת מסך של מה שמופיע לי בדף:

    http://img428.imageshack.us/img428/2212/recerror2er.jpg

    כפי שניתן לראות, הכותרת וה id חוזרים על עצמם 10 שורות.
    כאשר שיניתי את numrecs ל-15 למשל, הדף נשאר עם 10 תוצאות.
    כאשר עשיתי 5, אז היו לי קישורים לשלושת הדפים הבאים, שבהם היו כותרות אחרות עם id אחרים, אבל באותה מתכונת כמו פה…בכל דף מופיעה כותרת אחת בלבד, באופן מחזורי.

  3. זהר פלד הגיב:

    אני קצת מתבייש שלא עליתי על זה ישר.
    שים לב למה שאתה עושה:
    אתה שואל האם rs לא נמצא ב eof, ואז מכניס את הערכים שב rs לתוך משתנים ב asp:

    if Not rs.eOF Then
    pCount=rs.pageCount
    rs.AbsolutePage=CurrPage
    headline = rs("headline")
    id = rs("id")
    End If

    אחרי זה, אתה פותח לולאה שרצה על rs, ובתוכה אתה שולח לדפדפן את הערך של המשתנים של ה ASP מהתנאי הקודם:

    Do While Not rs.eOF AND i < rs.pagesize
    %>
    <%=headline%> <%=id%><br>
    <%
    i=i+1
    rs.MoveNext
    Loop

    בשום מקום בלולאה אתה לא מעדכן את המשתנים האלו, ולכן, מן הסתם, תקבל בכל עשרת השורות את אותם הערכים בדיוק.

  4. ליאור1989 הגיב:

    משהו נוסף
    צירפתי את הקוד המלא של הדף, משום מה מספרי העמודים לא מוצגים לי ואין אפשרות לנווט בין העמודים…

    החלק הבעייתי הוא זה:


    <%
    for i = 1 to pCount
    if Cint(i) = Cint(currPage) then
    Response.Write " <b>"& i &"</b> "
    Else
    %>
    <a href="forum.asp?id=<%=id%>&currPage=<%=i%>"><font color="black"></a>
    <%
    End if
    Next
    %>

    מופיע לי רק הספרה 1 וזהו…

שלח תשובה