העברת נתונים מהשרת ללקוח באמצעות getString

‏ • 3 באפריל, 2004

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

השיטה getString מחזירה לנו את כל השדות שבטבלה כמחרוזת אחת שיש בה מפרידים של שורות ומפרידים של עמודות.

זהו התחביר של שיטת getString










1  








rs.getString([strFormat][,rowsNum][,colDel][,rowsDel][,nullExp])


כמו שניתן לראות, כל הפרמטרים הם אופציונאליים.

strFormat – ערך מתוך "קבוצת" StringFormatEnum שבתוכה יש בסה"כ (לעת עתה) יש סוג אחד : adClipString שהוא ערך ברירת המחדל של פרמטר זה. הערך שלו הוא המס' 2 שבו נשתמש כדי להציגו. שלושת המאפיינים colDel, rowsDel ו-nullExp תלויים בו כדי לפעול

rowsNum – מספר הרשומות אותן יש לקחת ולהפוך אותן למחרוזת. (במקרה בו אנחנו מעוניים בכל הרשומות, נכתוב -1)

colDel – מפריד בין עמודות ע"י סימן (מס', טקסט, רווח, סימן מיוחד). ז"א שאם יש לנו רשומה אחת ושלוש שדות (עמודות) והמפריד שבחרנו הוא התו ";" (ערך ברירת המחדל של השיטה היא tab) אז כך תיראה המחרוזת שלנו (בקוד) :


field1;field2;field3;

וכך נכתוב את הקוד שיעשה זאת:










1
2
3
4  








<%
  Dim strGetString
  strGetString = rs.getString(2,-1,";")
%>


rowDel – מפריד בין שורות ע"י סימן. ז"א שאם יש לנו שני רשומות ושלוש עמודות והמפריד שבחרנו הוא טאב אז כך תראה התוצאה :

field1;field2;field3;       field1;field2;field3

שימו לב גם בסוף המחרוזת יהיה סימן המפריד.
וכך יהיה הקוד שיעשה זאת:










1
2
3
4  








<%
Dim strGetString
strGetString = rs.getString(2, –1,";",vbTab)
%>


nullExp – ביטוי ריק. אם אחד מהשדות שבטבלה ריק אז נוכל לשים שם ערך מסוים שיחליף אותו. ערך ברירת המחדל היא null (=ריק,כלום).
נגיד שיש לנו שלוש עמודות שני רשומות וברשומה הראשונה בשדה השני יש ערך ריק והערך שימלא את השדה ריק יהיה המעלה בחזקה (^) אז ככה יראה הפלט:

field1;^;field3;      field1;field2;field3

וככה יראה הקוד שיעשה זאת :










1
2
3
4  








<%
Dim strGetString
strGetString = rs.getString(2, –1,";",vbTab,"^")
%>



העברת הנתונים לצד הלקוח

ניקח לדוגמא ניקח טבלה פשוטה של פורום רקורסיבי שיש בה שלוש שדות ID, parentId ו-title.
המטרה שלנו היא להעביר את הנתונים מהשרת ללקוח, כדי שהעיבוד כולו יעשה בלקוח בלי להכביד על השרת.
בסופו של דבר אנחנו רוצים להגיע למחרוזת כזו:










1
2
3
4
5
6
7
8
9  








var recArray=[
["1","0","הודעה ראשונה"],
["2","1","שלום"],
["3","2","דני הלך לטייל"],
["4","1","יש לי כובע ירוק"],
["5","4","מתי אתה בא?"],
["6","0","גשם גשם בוא"],
["7","0","מי הזיז את הגבינה שלי?"]
]


אם נעביר את המחרוזת הזו ללקוח בתוך בלוק סקריפט, יווצר לנו מערך דו מימדי (מערך שכל איבר שלו מכיל מערך נוסף) שיכיל את כל ההודעות שלנו, וכל מה שנשאר לנו לעשות הוא להציגו.
זאת נשיג ע"י הצבה של הערכים הנכונים שמאפייני rowDel ו-colDel של השיטה getString.










1
2
3
4
5
6
7  








<%
    columnDelimiter=""","""
    rowDelimiter="""]," & vbCrlf & "["""
    str= rs.GetString(2,-1,columnDelimiter,rowDelimiter)
    str="var recArray=[[""" & Left(str, Len(str)-5) & "]"
    Response.Write(str)
%>


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










1
2
3
4
5
6
7
8
9
10  








function doWithRecArray(record){
    var together = "&nbsp;|&nbsp;" + record[0] + "&nbsp;|&nbsp;" + record[1] + "&nbsp;|&nbsp;" + record[2] + "&nbsp;|&nbsp;"
    return (together);
}

var sStr;
for (var i=0;i<(recArray.length);i++){
    sStr = doWithRecArray(recArray[i]);
    document.write("<div align='right' dir='rtl'>" + sStr + "</div><br><br>");
}



הקוד המלא

לא לשכוח כמובן לסגור אובייקטים בסופו של דבר.

VBS












1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29  









<%
sql="SELECT id, parentId, title FROM Messages ORDER BY Id "
rs.Open sql,Conn

If Not rs.EOF Then
    columnDelimiter=""","""
    rowDelimiter="""]," & vbCrlf & "["""
    str= rs.GetString(2,-1,columnDelimiter,rowDelimiter)
    str="var recArray=[[""" & Left(str, Len(str)-5) & "]"
%>

<script language="JavaScript">
<%Response.Write(str)%>
function doWithRecArray(record){
    var together = "&nbsp;|&nbsp;" + record[0] + "&nbsp;|&nbsp;" + record[1] + "&nbsp;|&nbsp;" + record[2] + "&nbsp;|&nbsp;"
    return (together);
}

var sStr;
for (var i=0;i<(recArray.length);i++){
    sStr = doWithRecArray(recArray[i]);
    document.write("<div align="right" dir="rtl">" + sStr + "</div><br><br>");
}
</script>
<%End If%>






JS












1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26  









<%
var sql="SELECT id, parentId, title FROM Messages ORDER BY Id "
oRs.Open(sql,oCon)

if (!oRs.EOF){
    var columnDelimiter="",""
    var rowDelimiter=""], [""
    var str= oRs.GetString(2,-1,columnDelimiter,rowDelimiter)
    str="var recArray=[["" + str.substr(0,str.length4) + "]"
%>

<script language="JavaScript">
<%Response.Write(str)%>
function doWithRecArray(record){
    var together = "&nbsp;|&nbsp;" + record[0] + "&nbsp;|&nbsp;" + record[1] + "&nbsp;|&nbsp;" + record[2] + "&nbsp;|&nbsp;"
    return (together);
}

var sStr;
for (var i=0;i<(recArray.length);i++){
    sStr = doWithRecArray(recArray[i]);
    document.write("<div align="right" dir="rtl">" + sStr + "</div><br><br>");
}
%<}%>
</script>


תכנות נעים!

תגיות: , , , ,

ניר טייב

בונה אתרים ומתכנת בשפות:HTML, CSS, JavaScript, PHP 5, JSP&Servlets ורובי.

תגובות בפייסבוק