עבודה עם getRows ב-JS צד שרת

‏ • 27 במרץ, 2004

עבודה עם getRows ב-JS צד שרת שיטת ה-getRows של אובייקט הרקורדסט מחזירה לנו מערך דו-מימדי. כשאנו כותבים ASP באמצעות VBS, אנו פשוט מקבלים אותו לתוך מערך, ואז עוברים בלולאה על שני המימדים שלו: https://www.webmaster.org.il/article.asp?id=60

הכותבים ASP ב-JS נתקלים בבעיה כשהם מנסים להשתמש ב-getRows. ב-JS, השיטה מחזירה מערך חד מימדי המכיל את כל הערכים, במקום מערך דו-מימדי. אבל זה לא אומר שלא ניתן להשתמש בה 🙂

כדי לקבל את המערך נכתוב










1
2  








var recArray = oRs.GetRows()
recArray = recArray .toArray()


עכשיו recArray הוא מערך חד מימדי המכיל את כל הנתונים שלנו.

נעבוד השיטה מצמצמת את האיטרציות (החזרות) של הלולאה ע"י כך שאנו מקדמים את המשתנה במס' השדות (שדות, ולא רשומות!) .










1
2
3
4
5
6
7
8
9  








Response.Write("<table>")
for (var i=0;i<recArray.length;i+=3){
    Response.Write("<tr>")
    Response.Write("<td>" + JSrecArray[i] + "</td>")
    Response.Write("<td>" + JSrecArray[i+1] + "</td>")
    Response.Write("<td>" + JSrecArray[i+2] + "</td>")
    Response.Write("</tr>")
}
Response.Write("</table>")


מה בדיוק עשינו פה?
פתחנו רקורדסט והפכנו אותו למערך חד מימדי באמצעות getRows. לאחר מכן פתחנו לולאה בעלת מקדם i שבכל אינטרציה שלה המקדם יעלה במס' השדות ששלפנו (במקרה שלנו 3). יוצא מצב בשכל איטרציה של הלולאה, היא עוברת על רשומה אחת. בתוכה אנחנו פונים לשדות עצמם (0-עמודה ראשונה, 1- עמודה שנייה, 2-עמודה שלישית וכך הלאה…)

אם אנחנו רוצים לכתוב משהו ג'נרי, שלא תלוי במספר השדות, כדי לעבור על הנתונים, נכניס למשתנה את מס' השדות שיש לנו ברקורסדט (שדות, ולא רשומות!) בצורה כזו:










1  








var fldsCount=oRs.Fields.Count


והלולאה שלנו תראה כך:










1
2
3
4
5
6
7
8  








Response.Write("<table>")
for (var i=0;i<recArray.length;i+=fldsCount){
    Response.Write("<tr>")
    for(var j=0; j<fldsCount, j++)
     Response.Write("<td>" + JSrecArray[i+j] + "</td>")
    Response.Write("</tr>")
}
Response.Write("</table>")


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










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
30
31
32
33
34
35  








<%
var Query =
"SELECT tbl.field1, tbl.field2, tbl.field3 FROM tbl"
var oRs = Server.CreateObject(
"ADODB.Recordset")
oRs.Open(Query,oConn,3)
if (!oRs.EOF){
   var tempArray = rs.getRows()
   var recArray = tempArray.toArray()
   oRs.Close
   delete oRs
   oRs = null
   %>

   <script language="JavaScript">
   var JSrecArray= new Array(<%=recArray.length%>)
   <% for (var i=0;i<JSrecArray.length;i++){ %>
       JSrecArray[<%=i%>] = <%=recArray[i]%>
  <%}%>
  document.write("<table><tr>")
  document.write("<th>field1</th>")
  document.write("<th>field2</th>")
  document.write("<th>field3</th>")
  
  for (i=0;i<JSrecArray.length;i+=3){
       document.write("<tr>")
     document.write("<td>" + JSrecArray[i] + "</td>")
     document.write("<td>" + JSrecArray[i+1] + "</td>")
     document.write("<td>" + JSrecArray[i+2] + "</td>")
     document.write("</tr>")
   }
   document.write("</table>")
   </script>
<%}else{%>
   oRs.Close
   delete oRs
   oRs = null
<%}%>



תכנות נעים!

תגיות: , , , ,

ניר טייב

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

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