בד"כ כאשר אנו מציגים מידע מתוך מסד נתונים נשתמש בשיטה הבאה :
Do while not Recordset.EOF
Response.write Recordset("UserId")
Response.write Recordset("UserName")
Loop
יצירת אובייקט Recordset והחזקה של אובייקט Connection במצב פתוח מהווים עומס ניכר על השרת ועל ביצועי האפליקציה.
אם כל שברצוננו לעשות עם אובייקט ה- Recordset הוא לעבור בלולאה על כל הרשומות ולבצע פעולות קצרות על כל רשומה (למשל הדפסת נתוני הרשומה למסך) אזי המלצתי היא להמשיך להשתמש בשיטות המוכרות למעבר על אובייקט ה- Recordset.
אולם, כאשר אנו רוצים לבצע פעולות ארוכות המשתמשות בנתוני הרשומות שב- Recordset ניתן להשתמש בשיטה(method) GetRows של האובייקט.
השיטה GetRows מייצאת את כל נתוני ה- Recordset לתוך מערך דו מימדי.
לאחר השימוש בשיטה ניתן לסגור את ה- Recordset ואת ה-Connection ולהמשיך לעבוד עם המערך. העבודה עם המערך:
arr=RS.GetRows
RS.Close
Set RS=nothing
Set Connection=nothing
for i=0 to ubound(arr,2)
for j=0 to UBound (arr,1)
response.write arr(j,i) <-- שימו לב לסדר
next
next
הקוד המתואר (לדעתי) אינו נוח לעבודה ובפרט לתחזוקה של הקוד.
בכדי לפתור בעייה זו ייצרתי מחלקה LocalRecordset - (class) אשר מהווה "עטיפה" למערך המכיל את נתוני ה-Recordset ,וניתן לפנות אליה כפי שפונים לאובייקט Recordset . המחלקה מכילה את רוב המאפיינים והשיטות הנפוצות של Recordset.
מאפיינים: BOF,EOF,RecordCount
שיטות: MoveFirst ,MoveLast ,MoveNext ,MovePrevious
השיטה Open מקבלת כפרמטר אובייקט Recordset לצורך "שאיבת הנתונים" (בעזרת GetRows) ואתחול המחלקה.
לאחר הפעלת השיטה "Open" ניתן ניתן לסגור את ה- Recordset ואת ה-Connection ולהמשיך לעבוד עם המחלקה.
עבודה עם המחלקה LocalRecordset:
< !--#include file = "LocalRecordset.inc"->
set Conn=server.CreateObject("ADODB.Connection")
Conn.ConnectionString=Application("ConnectionString")
Conn.Open
Set RS=Server.CreateObject("ADODB.Recordset")
objRS.Open sqlQuery, Conn
'**********************************************************
set LocalRS=new LocalRecordset
LocalRS.Open RS
'**********************************************************
RS.Close
set RS=nothing
Conn.Close
set Conn=nothing
'**********************************************************
Response.Write "Num of records :" & LocalRS.RecordCount & " "
do while not LocalRS.EOF
Response.write LocalRS.Fields("UserId")
Response.write LocalRS.Fields("UserName")
LocalRS.MoveNext
Loop
set LocalRS=nothing
· למסמך זה מצורף הקובץ "LocalRecordset.inc" המכיל את קוד המחלקה ויש לצרפו לפרוייקט ולהכלילו בדף שנעשה בו שימוש ע"י פקודת ה-include:
< !--#include file = "LocalRecordset.inc"->
או לחילופין, להעתיק את הקוד במלואו לתוך דף ה-asp בו נעשה שימוש במחלקה. פעולה זו מאפשרת למפתחים בסביבת Visual InterDev לראות באופן אוטומטי את השיטות והמאפיינים של המחלקה בעת יצירת מופע חדש של המחלקה ...