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

www.ASP.org.il

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  ||  ציון: (7.6)כל הזכויות שמורות ל-IAO ©

© כל הזכויות שמורות ל-IAO
Lamparas y Mobiles  |   בולנט - Bolenat סטלן  |   מתכונים  |   הומו גאה  |   שמות  |   מיסטיקה וקבלה  |   Fisherman Pants סדרות טלויזיה טיסות זולות הודו נפאל תאילנד ביקורות משחקי מחשב Engineering Solutions עיצוב גרפי בפלאש לימוד צילומים תמונות ופיתוח קנוורט משאיות ישראל islands & beaches TV Series Guide חגי ישראל play online game clothes wear בניית אתר חנויות מחשבים ו-ציוד הקפי jewish holidays israeli games ישראל אופנה חולצות טישירט מעוצבות הריון לידה תינוק כוסיות ערומות קורס אימון אישי מידע על חברות רשתות ikesound car audio wholesale recetas comidas family and woman magic trip T Shirt mania Bolenat Searches Bolenat UK online video clips חיפושים מגזין מסטול ל-סטלן המצוי Hebrew learning online תכשיטים טבעות שרשראות קליפרים מצתים התפתחות הילד comparte light lamps תרופות / מחלות הדפסה על חולצות למכירה מוזיקה ישראלית תמונות סרטונים מצחיקים גידול צמחים פרחים ישראלים בעולם מתפנקים - ספא פינוק מושלם ייעוץ עסקים משפחתיים סרט קולנוע - קומדיה סאטירה כסף / שוק ההון לימוד שחיה בריכה מפסיקים לעשן סיגריות נשים אישה בחורה בחורות Bongs and Pipes Music Festivals Coca-Cola קססונית