שלח תשובה

זירת השאלות

566
צפיות
23
תשובות

Paging via GetRows….

,‏ 12 בינואר, 2005

ניסיתי לאלתר משהו יצא לא רע מלבד שגיאה אחת כשאני מנסה לקרוא מאיברים שלא קיימים במערך….

הקוד והשגיאה:

Subscript out of range: '18'

הקובץ מצורף

תגיות:

23 תשובות

  1. BuildHome הגיב:

    למה לסבך את החלוקה?
    תעשה משהו כזה:
    For i=0 To intRecordsInPage-1
               Response.Write rsArray(0,i)
               If i=UBound(rsArray,2) Then i=intRecordsInPage-1
    Next

    או מעבר על כל הרשומות
    For i=0 To UBound(rsArray,2)
               Response.Write rsArray(0,i)
    Next
    אתה תמיד תתחיל מ-0 עד מספר מסוים של רשומות.
    תשתמש ב-absolutePage על מנת לקבוע באיזה עמוד אתה נמצא.

  2. Music is my life הגיב:

    אפשר קצת יותר פירוט…
    אני דיי מבולבל…

    מה זה INTERECORDSINPAGE-1
    אפשר קצת פירוט?

    מעבר על כל הרשומות קצת לא מועיל לי כי אני צריך רק 15 רשומות בכל דף ואני לא יכול לגרום לא להפסיק :-/

    אני אשמח לקוד קצת יותר מורחב וגם להסבר קצת יותר רחב….

    תודה רבה רבה רבה על התגובה שלך.

  3. BuildHome הגיב:

    אוקי אז הנה תשובה ברורה יותר
    קודם כל, intRecordsInPage הוא משתנה המכיל את מספר הרשומות שיוצגו בעמוד, למשל 15.
    יש מינוס 1 כיוון שאתה מתחיל את הלולאה מאפס ולא מ-1 (אחרת תקבל 16 רשומות בעמוד).

    עכשיו, על מנת לעשות את החלוקה הנכונה לעמודים צריך להגדיר כמה רשומות להציג בדף (PageSize) ואז לבצע את החלוקה של העמודים (absolutePage) ולאחר מכן להתחיל את הלולאה.

    הנה קוד דוגמא:
    SQL = "SELECT [fields] FROM [tbl] WHERE ORDER BY [field] DESC"
    rs.Open SQL, Conn, 3, 1
    rs.CacheSize = rs.PageSize  ' הצבת מספר הרשומות במטמון העמוד
    rs.PageSize = intRecordsInPage  ' הצבת מספר הרשומות בעמוד בגודל העמוד עבור החלוקה
    If rs.EOF Then
            rs.Close
    Else
            Dim page : page = Request.QueryString("page")   ' הצבה במשתנה את מספר העמוד בו נמצאים
            If IsNumeric(page) = False or page = "" Then page = 1   ' בדיקה אם העמוד אינו מספר או ריק והצבת מספר ברירת מחדל
            intRecs = rs.RecordCount   ' הצבת מספר הרשומות הקיימות במשתנה
            If Cint(intRecs) < Cint(intRecordsInPage) Then intRecordsInPage = intRecs   ' בדיקה אם מספר הרשומות בעמוד גדול ממספר הרשומות הכולל והצבה בהתאם
            currPage = page  ' הצבה במשתנה את העמוד הנוכחי
            If Cint(currPage) > Cint(intPages) Then currPage = intPages  ' בדיקה אם העמוד הנוכחי גדול ממספר העמודים הכולל והצבה בהתאם
            rs.AbsolutePage = currPage  ' מעבר לעמוד הנוכחי בו נמצאים
            Dim rsArray : rsArray = rs.GetRows  ' הצבת הרשומות במשתנה
            rs.Close
            
            For r=0 To intRecordsInPage-1
                    Response.Write rsArray(0,r)
            Next
    End If

    כתבתי הערות עבור כל שורה שמצריכה הסבר על הפעולה.
    מקווה שעכשיו זה יותר מובן

  4. Music is my life הגיב:

    קודם כל תודה רבה.
    שנית יש לי שאלה.
    מה יכולה להיות הסיבה לשגיאה הזו:
    Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another

    בשורה הזו:
                  rs.PageSize = intRecordsInPage

  5. Music is my life הגיב:

    עונה לעצמי…
    ככל הנראה זה הפוך…

    אמור להיות:
    intRecordsInPage=rs.PageSiz
    מן הסתם… 🙂

  6. Music is my life הגיב:

    שאלה לי לגבי הקוד שלך…
    כשאתה בודק בשורה הזו:
    If Cint(currPage) > Cint(intPages) Then currPage = intPages  ' בדיקה אם העמוד הנוכחי גדול ממספר העמודים הכולל והצבה בהתאם

    מאיפה אתה מקבל את הערך של IntPages?????
    הוא לא קיים ולא מוגדר :-/

  7. Music is my life הגיב:

    אגב גם השורה הזו לפני שהפכתי את
    המקומות נתנה אותה שגיאה…

  8. BuildHome הגיב:

    כנראה שכחתי
    אז הנה:
    intPages = rs.PageCount

  9. BuildHome הגיב:

    התכוונתי בקוד רלוונטי
    לא רק לשורת השגיאה אלא לכמה שורות לפני וכמה שורות אחרי השגיאה.

  10. Music is my life הגיב:

    ים לב למשהו מוזר…
    גם כשאני מדפדף בעמודים וה PAGE שלי שווה נגיד ל 2
    אז זה מציג לי את התוכן כמו ש PAGE = 1
    אין הודעת שגיאה אבל אני מניח שזה קשור לאבסולוט פייג'…

  11. Music is my life הגיב:

    אוקי…
    השגיאה:
    Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another

    מתרחשת בשימוש בקוד שנתת לי:
                    Dim page : page = Request.QueryString("page")   ' הצבה במשתנה את מספר העמוד בו נמצאים

                    If IsNumeric(page) = False or page = "" Then page = 1   ' בדיקה אם העמוד אינו מספר או ריק והצבת מספר ברירת מחדל

                    TotalRec = rs.RecordCount   ' הצבת מספר הרשומות הקיימות במשתנה

                    If Cint(TotalRec) < Cint(RecordsInPage) Then RecordsInPage = TotalRec   ' בדיקה אם מספר הרשומות בעמוד גדול ממספר הרשומות הכולל והצבה בהתאם

                    If Cint(currPage) > Cint(TotalPages) Then currPage = TotalPages  ' בדיקה אם העמוד הנוכחי גדול ממספר העמודים הכולל והצבה בהתאם

    >>>>> בשורה הזו >>>>>>>>>                 rs.AbsolutePage = currPage  ' מעבר לעמוד הנוכחי בו נמצאים

                    Dim RSArray : RSArray = RS.GetRows  ' הצבת הרשומות במשתנה
                    rs.Close

  12. BuildHome הגיב:

    תציג את הקוד כקוד פורום
    ולא סתם טקסט. תיישר לשמאל.

  13. BuildHome הגיב:

    אני לא יכול לעזור לךאם לא תכתוב את
    הקוד שלך – הרלוונטי (למשל כמו כל הקוד דוגמא שכתבתי לך).

  14. Music Is My Lif הגיב:

    תאשימו את השפעת….
    רוצה את כל הקוד?
    או רק שורה אחת ספציפית?

  15. Music Is My Lif הגיב:

    עכשיו הבנתי רק איך
    Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another


    מתרחשת בשימוש בקוד שנתת לי:
    Dim page : page = Request.QueryString("page")   ' הצבה במשתנה את מספר העמוד בו נמצאים
    If IsNumeric(page) = False or page = "" Then page = 1   ' בדיקה אם העמוד אינו מספר או ריק והצבת מספר ברירת מחדל
    TotalRec = rs.RecordCount   ' הצבת מספר הרשומות הקיימות במשתנה
    If Cint(TotalRec) < Cint(RecordsInPage) Then RecordsInPage = TotalRec   ' בדיקה אם מספר הרשומות בעמוד גדול ממספר הרשומות הכולל והצבה בהתאם
    If Cint(currPage) > Cint(TotalPages) Then currPage = TotalPages  ' בדיקה אם העמוד הנוכחי גדול ממספר העמודים הכולל והצבה בהתאם

    rs.AbsolutePage = currPage  ' מעבר לעמוד הנוכחי בו נמצאים

    Dim RSArray : RSArray = RS.GetRows  ' הצבת הרשומות במשתנה
    rs.Close

  16. אוריקס הגיב:

    רוצים את הקוד הרלבנטי בלבד.
    כל מה שדרוש בשביל לדבג – לא יותר ולא פחות.

  17. Music Is My Lif הגיב:

    שוב שלום – בעיה חדשה… בנושא ישן..
    שלום לכולם שוב.
    ותודה רבה על העזרה בבעיה הקודמת.

    בהמשך לבעיית העימוד שלי…
    יש לי את קטע הקוד הבא:


    UBRSArray = UBOUND(RSArray,2)
        if UBRSArray > MyPageSize-1 THEN UBRSArray = MyPageSize-1

        For i=0 to UBRSArray
    הצגת הרשומות….
        NEXT

    עכשיו
    הכל טוב ויפה.
    הכל עובד לי כמו שצריך
    אין שום הודעות שגיאה…

    הכל מלבד העובדה שבכל העמודים, אני מקבל בדיוק את אותם רשומות כמו בעמוד הראשון (רשומות 0 – 14)

    גם כשאני עובר לעמוד השני אז אני מקבל את כל הרשומות כמו בעמוד הראשון במקום לקבל את הרשומות מהרשומה האחרונה בעמוד הראשון (+1) ועד הרשומה ה 15 במספר בעמוד השני.
    אני מקבל בדיוק את אותם רשומות (0-14) .

    כשאני מוריד את קטע ה IF אז אני מקבל את כל הרשומות שיש לי בטבלה
    גם בעמוד הראשון וגם בשאר העמודים…

    לעזרתכם אודה.
    יום טוב, ותודה.

  18. Music Is My Lif הגיב:

    שוב שלום. בעיה נוספת בעימוד….
    שלום לכולם שוב.
    ותודה רבה על העזרה בבעיה הקודמת.

    בהמשך לבעיית העימוד שלי…
    יש לי את קטע הקוד הבא:


    UBRSArray = UBOUND(RSArray,2)
        if UBRSArray > MyPageSize-1 THEN UBRSArray = MyPageSize-1

        For i=0 to UBRSArray
    הצגת הרשומות….
        NEXT

    עכשיו
    הכל טוב ויפה.
    הכל עובד לי כמו שצריך
    אין שום הודעות שגיאה…

    הכל מלבד העובדה שבכל העמודים, אני מקבל בדיוק את אותם רשומות כמו בעמוד הראשון (רשומות 0 – 14)

    גם כשאני עובר לעמוד השני אז אני מקבל את כל הרשומות כמו בעמוד הראשון במקום לקבל את הרשומות מהרשומה האחרונה בעמוד הראשון (+1) ועד הרשומה ה 15 במספר בעמוד השני.
    אני מקבל בדיוק את אותם רשומות (0-14) .

    כשאני מוריד את קטע ה IF אז אני מקבל את כל הרשומות שיש לי בטבלה
    גם בעמוד הראשון וגם בשאר העמודים…

    לעזרתכם אודה.
    יום טוב, ותודה.

שלח תשובה