בולנט - דברים מיוחדים...     פרוטו - בניית אתרים

Israeli ASP Organization

ארגון ה-ASP הישראלי

מאמרים/דוגמאות קוד
קישורים
ספרות
חיפוש כללי:

חפש!
כלליHTMLASPASP.NETSQLמסדי נתוניםJavaScriptXML * XSLDHTML * CSSעיצוב וגרפיקהשרתיםComponentsפרסום ושיווקקידום אתריםקופירייטינגPHP
פרסומת
דף ראשי מדורים דרושים הרשמה למועדון אודותינו צור קשר
מיקום: מאמרים ודוגמאות קוד > ASP

חלוקה לדפים תוך שימוש ב GetRows

הדוגמא המובאת כאן היא התשובה לשאלה הנשאלת כל פעם מחדש, איך מחלקים את כל הרשימה הארוכה הזאת לדפים?
(דוגמא זו זהה לחלוטין לדוגמא של חלוקה לדפים, רק שבדוגמא זו השתמשנו בשיטת GetRows אשר מייעלת את המהירות שבה מוצגים הנתונים מתוך מסד הנתונים.)
אז הנה התשובה!

איך עושים את זה?
הנה הקוד מקור:

<%@ LANGUAGE="VBSCRIPT" %> <!-- #include file="../../Samples_DSN.asp" --> <html> <head> <META HTTP-EQUIV="Content-Type" content="text/html; charset=windows-1255"> </head> <body bgColor=LightSteelBlue> <BASEFONT Face=Arial> <BR> <table Width=90% Align=Center border=0> <% set rs = Server.CreateObject("ADODB.RecordSet") SQL = "select * from PHONE_BOOK" אם היינו עושים חיפוש המשפט היה שונה PAGE = Request.QueryString("page") if PAGE = "" Then PAGE = 1 לבדוק שבאמת נשלח מספר הדף הנוכחי NumOfRecInPage = Request.QueryString("numofrec") if NumOfRecInPage = "" Then NumOfRecInPage = 5 לבדוק שבאמת נשלח מספר הרשומות בדף rs.CacheSize = rs.PageSize rs.PageSize = NumOfRecInPage rs.Open SQL,Samples_DSN,3,1 NumOfRec = rs.RecordCount if Cint(NumofRecInPage) > Cint(NumOfRec) Then NumOfRecInPage = NumOfRec לא לאפשר חריגה NumOfPages = rs.PageCount CurrentPage = PAGE rs.AbsolutePage = CurrentPage RSa = rs.GetRows() rs.Close Set rs = Nothing Response.Write "<TR BGColor=#87bad3>" Response.Write "<TH>" & NumOfRec & ": סה"כ רשומות</TH>" Response.Write "<TH>" & NumOfPages & ": מספר הדפים</TH>" Response.Write "<TH>" & CurrentPage & ": דף נוכחי</TH>" Response.Write "<TH>" & NumOfRecInPage & ": מספר רשומות בדף</TH>" Response.Write "</TR>" Response.Write "<TR><TH Height=40></TH></TR>" Response.Write "<TR><TH Colspan=4><TABLE Width=50% Border=1>" Leng = Ubound(RSa,2) For i = 0 to NumOfRecInPage-1 לעבור על הסט רשומות כמספר הרשומות שבדף אחד Response.Write "<TR>" Response.Write "<th colspan=2>" & rsa(3,I) & "</td>" Response.Write "<th colspan=2>" & rsa(2,I) & "</td>" Response.Write "</tr>" if i = Leng Then i = NumOfRecInPage-1 לוודא שאין חריגה מהמערך Next Response.Write "</TABLE></TH></TR>" Response.Write "<TR><TH Height=40></TH></TR>" Pages = "" For i = 1 to NumOfPages קישורים לשינוי הדף הנוכחי Pages = Pages & " [<A Href=?page=" & i & "&numofrec=" & NumOfRecInPage & ">" & i & "</A>] " Next Response.Write "<TR><TH Colspan=4>" & Pages & ": דף נוכחי</TH></TR>" RecNum = "" For i = 1 to 10 קישורים לשינוי מספר הרשומות בדף RecNum = RecNum & " [<A Href=?page=1&numofrec=" & i & ">" & i & "</A>] " Next Response.Write "<TR><TH Colspan=4>" & RecNum & ": מספר רשומות בדף</TH></TR>" %> </TABLE> </CENTER> </body> </html>
הסברים כלליים

rs.RecordCount - מחזיר את סה"כ מספר הרשומות
rs.PageSize - מחזיר או קובע את מספר הרשומות בכל דף ודף
rs.CacheSize - קובע את מספר הרשומות שהאובייקט מקציב להן זיכרון Cache
rs.PageCount - מחזיר את מספר הדפים. זאת הוא מחשב ע"י חלוקה של סה"כ מספר הרשומות חלקי מספר הרשומות בכל דף
rs.AbsolutePage - מחזיר או קובע את הדף הנוכחי



התגובות שלכם

                  
01. 21/12/2004  Moty_p
מה ההבדל בין זה לבין החלוקה לדפים השני?

תשובת המערכת:
הדוגמא הזאת משלבת את החלוקה לדפים (מאמר חלוקה לדפים)
עם הפקודה GetRows אשר אינה קשורה לחלוקה לדפים אבל שילוב שלה ביחד עם החלוקה מקצר את תהליך טעינת הדף...

02. 22/12/2004  חגי .ב.
מה בקשר לחלוקת תוצאות חיפוש - מהמסד נתונים...
יש לי קצת בעיה עם זה...
כיוון שאני משתמש בטופס POST לדף אשר מציג את הנתונים מהטופס...
במעבר לעמוד הבא, זה מציג לי את הכל.. ולא את התוצאות חיפוש...
מה עושים?!

תשובת המערכת:
כשאתה רוצה לעבור לדף אחר, אתה צריך להעביר גם את כל הנתונים שנשלחו אל אותו דף
אתה יכול לעשות זאת ע"י לולאה שעוברת על כל הנתונים שנשלחו ולהעביר אותם הלאה, משהו בסגנון:
Links = ""
For each item in Request.Form
Links = Links & "&" & item & "=" & Request(item)
Next


ואז לשרשר את זה במעבר לעמודים האחרים, כמו למשל:
RecNum = RecNum & " [<A Href=?page=1&numofrec=" & i & ">" & i & Links & "</A>] "


בהצלחה!

03. 24/12/2004  חגי .ב.
האם זה משנה במידה וזה לא נעשה במערכת Getrows לפי המאמר המוזכר כאן, אלא לפי המאמר השני של חלוקת עמודים?!

תשובת המערכת:
יש הבדל מבחינת מהירות ההרצה, עבודה עם GetRows אמורה לקצר את זמן הריצה של הקוד...

04. 28/12/2004  Moty_p
לפי דעתי הדוגמת הקוד של החלוקה לדפים השניה (בלי השיטה של "GetRows")
יותר טובה משום שאולי ה-GetRows מקצר את תהליך זמן הקוד אבל בקודם יש אפשרות של דף הבאה ודף קודם ואין את זה או שזה לא עובד אם ה-GetRows

האם אפשר לעשות שיהיה את האפשרות של "דף הבאה ודף קודם" אם השיטה והדוגמת קוד של GetRows?

05. 12/01/2005  snppro
לפעמים צריך לשקול שימוש ב GetString אבל זה כבר שיטת עבודה שונה

06. 17/01/2005  יניב
מה קורה עם אין רשומות ???
כלומר הטבלה ריקה מרשומות ?
המצב הזה לא מכוסה !!

07. 26/04/2005  yaron
ואיך נקרא ל-Rsa(i) כאשר משתמשים ב-JOIN ?

לא ניסתי את העניין אבל אני אנסה..

08. 29/06/2005  שי
הדוגמא לא עובדת כאשר משתמשים בבסיס נתונים של mysql

09. 19/11/2005  k4school
2 הערות/הארות לקוראים שעדיין לא קיבלו תגובה:

יניב
ניתן לכסות את המצב בקלות ע"י הוספת בדיקה "if rs.eof then" מייד אחרי שפותחים את הרשומות ולפני כל הפעולות על הרשומות
המאמר טוב וברור שלא ניתן לכסות כל מצב

שי
אכן נכון אבל במסד mysql יש שיטה מובנית הרבה יותר קלה והיא שימוש ב limit

הערה: ישנם שיטות יעילות יותר מהשיטה המוסברת כאן וזו רק שיטה אחת (טובה לנתונים מסויימים) מכמה שיטות.

למשל שיטה נוספת יעילה בדרך כלל הרבה יותר במסדי mssql היא שימוש ב"SET ROWCOUNT"

כמו כן זכרו ששימוש ב
הבדלי המהירות (מדוד במסד נתונים ספציפי שלי) הן כ 4 שניות לעומת 0.05 שניות.

לצערי אני לא מכיר מדריך טוב לשימוש בשיטה אבל דוגמאות יש באתר msdn של מייקרוסופט
דוגמאות והשוואת מהירות של כמה שיטות נפותות ניתן לראות בקישור הבא
http://www.codeproject.com/aspnet/PagingLarge.asp

הערה: גם המהירות ב mysql היא באותם סדרי גודל של שימוש ב RowCount והסיבות לכך נובעות ככל הנראה מכך שבשיטות האחרות המסד מבצע בדיקות על הנתונים כגון חלוקת מספר הנתונים במספר הנתונים שרוצים להציג בעוד בשיטות האחרות שהזכרתי יש פנייה ישירה לנתונים שרוצים

בהצלחה

                  

מחבר: אדם ליבסקירמת קושי: 2  ||  ציון: (6)כל הזכויות שמורות ל-IAO ©

חנות לסטלן  |   מתכונים  |   חגי ישראל  |   פורטל משחקים  |   חנויות מחשבים ו-ציוד הקפי  |   מגזין מסטול לסטלן המצוי  |   קליפרים  |   גידול צמחים פרחים  |   ספא פינוק מושלם