שלח תשובה

זירת השאלות

425
צפיות
13
תשובות

ריבוי שאילתות ב recordset אחד

,‏ 23 בדצמבר, 2004

איך אני בונה כמה משפטי select כלומר 2 ומעלה באותו recorset באותו דף asp בלי לפתוח עוד ועוד recordset ?

תגיות:

13 תשובות

  1. ניר טייב הגיב:

    JOIN, UNION…
    יש אפשרויות רבות ומגוונות
    השאלה היא מהן השאילתות, מה תפקידן והאם יש בכלל צורך לאחדם לשאילתא אחת ? (ענייני גמישות ויעילות).

  2. Ronix הגיב:

    מפני ש
    איו קשר בין השאילתות חלקן כבר מורכבות מ join המטרה היא לשלוף את הכל כדי שלא יפתח יותר מ recordset אחד בדף כי זה גרם לי לבעיות אני חייב שיפתח רק אחד.
    עכשיו השאלה שלי היא במידה ואני פותח recordset אחד בשם x  לדוגמא ואני כל הזמן נותן לן שאילתא אחרת ופותח וסוגר אותו ושוב ושוב… האם יש הבדל בין זה לפתיחה של מספר recordset שונים?

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

    כן, יש הבדל.
    כל יצירה של אובייקט (כלומר, כל Server.createObject ב VBS או new activeX ב JS) לוקחת משאבים מהשרת. ברגע שאתה יוצר אובייקט recordset אחד, אין שום סיבה בעולם ליצור עוד אובייקטים כאלו.
    אם אתה צריך שאילתה שעובדת לפי ערכים משאילתה אחרת, ואי אפשר לבצע join, מה שעושים זה פותחים את ה recordset, משתמשים ב getRows או ב getString, סוגרים את ה recordset ואז פותחים אותו מחדש.

    למעשה, יש דברים שלפעמים עדיף לעשות אותם בסקריפט טהור, אפילו שיש אובייקטים שיודעים לעשות אותם, כי היצירה של האובייקט גוזלת יותר משאבים מאשר הפעולה בלעדיו.

  4. Ronix הגיב:

    בקשר ל getRows
    אז הכי כדאי זה לפתוח recordset אחד, להכניס את התוכן הנשלף למערך בעזרת getRows, לסגור את ה recordset ואז אם אני רוצה לשלוף מאוד טבלאות לפתוח שוב את אותו recordset ולהכניס את המידע למערך אחר, שוב לסגור וכן הלאה?

  5. Ronix הגיב:

    עוד משהו קטן בקשר לזה
    לאחר כל סגירה אני מחדש צריך משתנה ששווה ל Server.CreateObject("ADODB.Recordset") ?
    אם לא אני נראה לי אקבל שגיאה שהוא לא מוצא את האוביקט אני צודק?
    ככה שכן עושים Server.CreateObject("ADODB.Recordset") אבל לאותו אוביקט מחדש ולא לעוד אוביקטים…

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

    כן ולא.
    כן לשאלה על ה getRows,
    לא לשאלה השניה.
    סגירה של recordset בעזרת המתודה close לא הורגת את האובייקט, אלא רק סוגרת אותו. את אותו אובייקט אפשר לפתוח אחר כך מחדש עם שאילתה אחרת, בלי שום בעיה.
    מה שהורג את האובייקט הוא set objRs = nothing.

  7. Ronix הגיב:

    זוהר תודה רבה רק דבר קטנטן נוסף
    ניסיתי לחפש ולא מצאתי: מה השורה או כמה שורות שבעזרתן אני מודד את המהירות שהדף נטען כמו שיש בדוגמה של ה getRows פה באתר ?

  8. Ronix הגיב:

    שאלה בקשר להתקנת IIS על XP Home Ed
    אני לא מוצא את הקובץ sysoc.inf  שצריך לערוך אותו. מישהו יכול אולי לומר לי איפה זה אמור להיות (זה לא במחשב שלי) או לצרף אותו לפה?

  9. somebody הגיב:

    אתה יכול לנסות אבל לא תצליח בחיים
    להתקין iis על XP home.
    לא ניתן לא משנה מה תעשה..
    XP home לא תומכת במספר משתמשים.
    היא לא מערכת רב מישתמשים לעומתה XP pro תומכת במספר משתמשים.
    בזה אני בטוח ב 100%…

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

    תלוי בשפה…
    וזה לא מהירות הטעינה של הדף, אלא מהירות העיבוד שלו בשרת.

    אם אתה כותב ב VBS, אתה משתמש ב timer בתחילת ה ASP ועוד timer אחד בסוף, וההפרש בינהם נותן לך את מהירות העיבוד של הדף (לא זוכר אם בשניות או במילישניות.

    אם אתה כותב ב JS, אתה פותח אובייקט date בתחילת הדף, מוציא ממנו למשתנה getDate, ובסוף הדף מחסיר את הערך של המשתנה מ getDate נוסף שאתה מבצע על אובייקט ה Date. ההפרש נותן לך את זמן העיבוד במילישניות.

  11. ניר טייב הגיב:

    getTime
    אלא אם הסקריפט מיועד להיטען כמה ימים 😛

שלח תשובה