ADO – ActiveX Data Objects הינה טכנולוגיה של מיקרוסופט המשמשת כממשק גישה למסדי נתונים.
ADO מותקן אוטומטית על כל שרת IIS ו-PWS.
במאמר זה נדגים את דרכי העבודה עם ADO
יתרונות השימוש עם ADO
- נוח וקל הרבה יותר להשתמש עם ADO, לעומת SQL שלפעמים קצת קשה ולא נוח לשימוש ונותנת הודעות שגיאה די מעצבנות.
- כתיבת סקריפט הכנסת רשומה קצרה ונוחה בהרבה מאשר SQL.
חסרונות השימוש עם ADO
- הדבר שהכי חשוב לרבים – המהירות. העבודה עם SQL על השרת תהיה מהירה יותר בהרבה מקרים, אך לא תמיד.
- אין צורך להגדיר ולפתוח אובייקט RecordSet. ניתן לבצע Conn.Execute(sql) פשוט.
בואו נתחיל….
ראשית כל, ניצור מסד נתונים מסוג אקסס בשם Ado. יש ליצור טבלה בשם List ולתוכה נזין את הנתונים:
שם שדה |
סוג נתונים |
ID |
מספור אוטומטי, מפתח ראשי |
Name |
טקסט |
Email |
טקסט |
התוצאה אמורה להראות כך
הוספת רשומות למסד הנתונים:
בחלק זה ניצור שני עמודים.
עמוד ראשון יהיה הטופס שיכיל שני שדות (שם ודוא"ל) ונכניס את ערכם שנשלח מן הטופס אל הטבלה שלנו שבמסד הנתונים בעזרת העמוד השני שניצור.
Add.html
עמוד HTML המכיל את טופס הוספת הנתונים:
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 |
|
<html> <head> <title>הוספת רשומה</title> </head> <body dir="rtl"> <h3>הוספת רשומה</h3><br> <form action="Add.asp" method="post"> <table dir="rtl" width="60%" align="center"> <tr> <td width="15%" dir="rtl">שם מלא:</td> <td><input type="text" dir="rtl" name="name" size="20"></td> </tr> <tr> <td width="15%" dir="rtl"> דוא"ל:</td> <td><input type="text" dir="ltr" name="email" size="20"></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value=" הוספת רשומה "> <input type="reset" value=" החזר ערכים "> </td> </tr> </table> </form> </body> </html>
|
|
|
יצרנו טופס פשוט הכולל את שדה השם ושדה הדוא"ל שיוכנסו למסד הנתונים. הטופס יישלח לעמוד הבא שניצור, Add.asp.
Add.asp
תפקידו של עמוד זה הוא להוסיף נתוני הטופס שנשלח ישירות אל הטבלה במסד הנתונים. העמוד מקבל את הנתונים אשר נשלחו מהעמוד Add.html.
|
<%@language="VBSCRIPT" CODEPAGE="1255"%> <% Dim name, email Dim Conn, rs, SQL name = Request.Form("name") email = Request.Form("email") |
|
|
בשורה הראשונה אנחנו מגדירים את העמוד עבור שפת עברית. לאחר מכן, אנחנו מגדירים את כל המשתנים עימם נשתמש ומכניסים למשתנים name, email את ערכם שנשלח מהטופס הקודם.
|
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath("Ado.mdb") Set rs = Server.CreateObject("ADODB.RecordSet") |
|
|
אני מקווה שאין צורך להסביר את הקוד (אם יש, פנו אל מדריך ASP).
|
SQL = "Select * from List" rs.Open SQL, Conn, 2, 3 rs.AddNew rs("name") = name rs("email") = email rs.Update |
|
|
כעת הכנסנו את הנתונים אשר נשלחו מהטופס הקודם לטבלה במסד הנתונים. בשורה השנייה הגדרנו אפשרות להוספת/עדכון נתונים במסד. בשורה השלישית אנחנו מגדירים שאנחנו מעוניינים להכניס רשומה לטבלה במסד ובשורה האחרונה אנחנו מבצעים את עדכון הטבלה במסד עם הנתונים החדשים.
|
rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing |
|
|
נסגור ונאפס את הרקורדסט והאובייקט שלנו (
למה לסגור אובייקטי חיבור? )
|
Response.Redirect "List.asp" %>
|
|
|
כעת נפנה אל העמוד List.asp ונסגור את העמוד.
הקוד במלואו
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 |
|
<%@language="VBSCRIPT" CODEPAGE="1255"%> <% Dim name, email Dim Conn, rs, SQL name = Request.Form("name") email = Request.Form("email")
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath("Ado.mdb")
Set rs = Server.CreateObject("ADODB.RecordSet") SQL = "Select * from List" rs.Open SQL, Conn, 2, 3 rs.AddNew rs("name") = name rs("email") = email rs.Update
rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing Response.Redirect "List.asp" %> |
|
|
עריכת רשומה במסד הנתונים
ניתן לערוך רשומות במסד הנתונים יחד עם ADO בקלות רבה בעזרת ההגדרות הנכונות. בחלק זה נוכל לערוך את הרשומות הקיימות במסד הנתונים שלנו שכבר הוספנו בחלק הראשון בעזרת העמודים שיצרנו.
Edit.asp
בעמוד זה נקבל ערך ID של רשומה על מנת שנוכל לערוך את נתוניה בטבלה שלנו שבמסד.
|
<%@language="VBSCRIPT" CODEPAGE="1255"%> <html> <head> <title>עריכת רשומה</title> </head> <body dir="rtl"> <h3>עריכת רשומה</h3><br>
|
|
|
זהו החלק העליון שיוצג בעמוד העריכה. הגדרנו הגדרה לשפה העברית, קצת קוד HTML בסיסי ותת כותרת של עריכת רשומה.
|
<% Dim ID, Edit, Name, Email Dim Conn, rs, SQL
ID = Request.QueryString("id") Edit = Request.QueryString("Edit") |
|
|
הגדרנו את כל המשתנים עימם נשתמש. הערך של ID קובע את מספר הרשומה אותה נערוך ואילו ערכו של Edit בודק אם הטופס העריכה נשלח.
|
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath("Ado.mdb") Set rs = Server.CreateObject("ADODB.RecordSet") |
|
|
יצירת אובייקט חיבור ורקורדסט.
|
If IsEmpty(ID) or IsNumeric(ID) = False Then ID = 0 SQL = "Select * from List where ID="&ID rs.Open SQL, Conn
|
|
|
משפט תנאי הבודק את ערכו של ID (אם הוא ריק או אינו ערך מספרי אז ערכו שווה לאפס). לאחר מכן נבחר את הרשומה שהמספר הזיהוי שלה שווה ל-ID שלנו.
|
If rs.EOF Then Response.Write "<h3 align=""center"">הרשומה המבוקשת נמחקה או אינה קיימת במסד הנתונים!</h3>" & vbcrlf Else If Edit <> "True" Then
|
|
|
משפט תנאי נוסף הבודק אם הרשומה הרצוייה לעריכה קיימת. במידה ואיננה קיימת, נציג הודעת שגיאה מתאימה, אחרת נמשיך הלאה. בשורה האחרונה כתוב משפט תנאי הבודק אם הטופס נשלח. במידה ולא, נציג את הטופס, אחרת נבצע עריכת רשומה.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
<form action="?Edit=True&id=<%=ID%>" method="post"> <table dir="rtl" width="60%" align="center"> <tr> <td width="15%" dir="rtl">שם מלא:</td> <td><input type="text" dir="rtl" name="name" size="20" value="<%=rs("name")%>"></td> </tr> <tr> <td width="15%" dir="rtl"> דוא"ל:</td> <td><input type="text" dir="ltr" name="email" size="20" value="<%=rs("email")%>"></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value=" עריכת רשומה "> <input type="reset" value=" החזר ערכים "> </td> </tr> </table> </form> |
|
|
בשורה הראשונה אנחנו מגדירים שזהו טופס שעמוד הפעולה שלו הוא העמוד הנוכחי ונוסיף לו שני ערכים:
ID – ערך מספר הרשומה שלנו שאותה נערוך.
Edit – ערכו יאשר את עריכת הרשומה.
בהמשך הטופס אנחנו מכניסים לשדה שם ואימייל את נתוניהם.
|
<% Else name = Request.Form("name") email = Request.Form("email") rs.Close |
|
|
ה-Else שייך למשפט התנאי השני שפתחנו שבעצם אומר לנו אם הטופס נשלח או לא. אנחנו מציבים במשתנים name, email את ערכם שנשלח מהטופס וסוגרים את הרקורדסט הראשון שפתחנו אשר מציג את נתוני הרשומה הנוכחיים.
|
SQL = "Select * from List where ID="&ID rs.Open SQL, Conn, 2, 3 rs("name") = name rs("email") = email rs.Update rs.Close |
|
|
לאחר שבדקנו שהטופס אכן נשלח נוכל לעדכן את הנתונים אשר נשלחו מטופס העריכה. שוב, אנחנו מגדירים הגדרה לעריכת נתונים במסד ומכניסים את הערכים החדשים (המעודכנים) אל הרשומה שברצוננו לערוך. נעדכן את הטבלה שלנו במסד ונסגור רקורדסט.
|
Response.Write "<h3 align=""center"">הרשומה נערכה בהצלחה!<br>" & vbcrlf Response.Write "<a href=""List.asp"">חזרה לדף הרשומות</a></h3>" & vbcrlf End If End If |
|
|
לאחר שביצענו את עריכת הרשומה נציג הודעת פלט המאשרת את עריכת הרשומה שלנו. בשורות האחרונות אנחנו סוגרים את משפטי התנאי שפתחנו (בדיקה אם הרשומה קיימת ובדיקה האם נשלח טופס העריכה).
|
Set rs = Nothing Conn.Close Set Conn = Nothing %> </body> </html> |
|
|
נאפס את הרקורדסט. נסגור ונאפס את אובייקט חיבור ואת תגי ה-HTML של העמוד.
הקוד במלואו
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
|
<%@language="VBSCRIPT" CODEPAGE="1255"%> <html> <head> <title>עריכת רשומה</title> </head> <body dir="rtl"> <h3>עריכת רשומה</h3><br> <% Dim ID, Edit, Name, Email Dim Conn, rs, SQL
ID = Request.QueryString("id") Edit = Request.QueryString("Edit") Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & – Server.MapPath("Ado.mdb") Set rs = Server.CreateObject("ADODB.RecordSet")
If IsEmpty(ID) or IsNumeric(ID) = False Then ID = 0 SQL = "Select * from List where ID="&ID rs.Open SQL, Conn
If rs.EOF Then Response.Write "<h3 align=""center"">הרשומה המבוקשת נמחקה או אינה קיימת במסד הנתונים!</h3>" & vbcrlf Else If Edit <> "True" Then %> <form action="?Edit=True&id=<%=ID%>" method="post"> <table dir="rtl" width="60%" align="center"> <tr> <td width="15%" dir="rtl">שם מלא:</td> <td><input type="text" dir="rtl" name="name" size="20" value="<%=rs("name")%>"></td> </tr> <tr> <td width="15%" dir="rtl"> דוא"ל:</td> <td><input type="text" dir="ltr" name="email" size="20" value="<%=rs("email")%>"></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value=" עריכת רשומה "> <input type="reset" value=" החזר ערכים "> </td> </tr> </table> </form> <% Else name = Request.Form("name") email = Request.Form("email") rs.Close SQL = "Select * from List where ID="&ID rs.Open SQL, Conn, 2, 3 rs("name") = name rs("email") = email rs.Update rs.Close
Response.Write "<h3 align=""center"">הרשומה נערכה בהצלחה!<br>" & vbcrlf Response.Write "<a href=""List.asp"">חזרה לדף הרשומות</a></h3>" & vbcrlf
End If End If
Set rs = Nothing Conn.Close Set Conn = Nothing %> </body> </html>
|
|
|
מחיקת רשומות
Delete.asp
בעזרת העמוד נוכל למחוק רשומות בעזרת קבלת ערכו של ID בלבד.
|
<%@language="VBSCRIPT" CODEPAGE="1255"%> <html> <head> <title>מחיקת רשומה</title> </head> <body dir="rtl"> <h3>מחיקת רשומה</h3><br>
|
|
|
כמו בעמוד העריכה, כאן נגדיר הגדרה לשפה העברית וקצת קוד HTML בסיסי לעיצוב העמוד.
|
<% Dim ID Dim Conn, rs, SQL ID = Request.QueryString("id")
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath("Ado.mdb") Set rs = Server.CreateObject("ADODB.RecordSet") |
|
|
נגדיר את המשתנים שלנו ונציב את ערך הרשומה הרצוייה למחיקה במשתנה ID. נגדיר ונפתח אובייקט חיבור ונגדיר רקורדסט.
|
If IsEmpty(ID) or IsNumeric(ID) = False Then ID = 0 SQL = "Select * from List where ID="&ID rs.Open SQL, Conn, 2, 3 |
|
|
משפט התנאי מופיע שנית. בודק אם הערך של ID ריק או אינו ערך מספרי ורק אם כן, יציב בו את הערך אפס. נגדיר הגדרה לעריכת נתונים במסד.
|
If rs.EOF Then Response.Write "<h3 align=""center"">הרשומה המבוקשת נמחקה או אינה קיימת במסד הנתונים!</h3>" & vbcrlf Else rs.Delete Response.Write "<h3 align=""center"">הרשומה נמחקה בהצלחה!<br>" & vbcrlf Response.Write "<a href=""List.asp"">חזרה לדף הרשומות</a></h3>" & vbcrlf End If |
|
|
משפט תנאי מאוד פשוט. אם הרשומה הרצוייה למחיקה איננה קיימת נציג הודעת פלט מתאימה, אחרת נמחוק את הרשומה ממסד הנתונים ונציג הודעת פלט מתאימה.
נסגור ונאפס את הרקורדסט ואת אובייקט החיבור ולא לשכוח לסגור תגי HTML בסיסיים.
הקוד במלואו
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 36 37 38 |
|
<%@language="VBSCRIPT" CODEPAGE="1255"%> <html> <head> <title>מחיקת רשומה</title> </head> <body dir="rtl"> <h3>מחיקת רשומה</h3><br> <% Dim ID Dim Conn, rs, SQL
ID = Request.QueryString("id")
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath("Ado.mdb") Set rs = Server.CreateObject("ADODB.RecordSet")
If IsEmpty(ID) or IsNumeric(ID) = False Then ID = 0 SQL = "Select * from List where ID="&ID rs.Open SQL, Conn, 2, 3 If rs.EOF Then Response.Write "<h3 align=""center"">הרשומה המבוקשת נמחקה או אינה קיימת במסד הנתונים!</h3>" & vbcrlf Else rs.Delete Response.Write "<h3 align=""center"">הרשומה נמחקה בהצלחה!<br>" & vbcrlf Response.Write "<a href=""List.asp"">חזרה לדף הרשומות</a></h3>" & vbcrlf End If rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing %> </body> </html> |
|
|
הצגת כל הרשומות
List.asp
עמוד אשר יציג לנו את כל הרשומות המופיעות במסד הנתונים. כל הרשומות מסודרות בטבלה באופן מסודר ונוח לצפייה.
|
<%@language="VBSCRIPT" CODEPAGE="1255"%> <html> <head> <title>רשימת הרשומות</title> </head> <body dir="rtl"> <h3>רשימת הרשומות במסד הנתונים</h3><br>
|
|
|
נגדיר תמיכה לשפה העברית ונכתוב תגי HTML לעיצוב בסיסי של העמוד הכולל תת כותרת.
|
<% Dim Conn, rs, SQL Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath("Ado.mdb") Set rs = Server.CreateObject("ADODB.RecordSet") |
|
|
נגדיר את המשתנים שעימם נשתמש, נפתח ונגדיר אובייקט חיבור ונגדיר רקורדסט.
|
SQL = "Select * from List order by ID" rs.Open SQL, Conn If rs.EOF Then Response.Write "<h3 align=""center"">אין רשומות במסד הנתונים!</h3>" & vbcrlf Else |
|
|
נציג שאילתה המציגה את כל הנתונים המופיעים בטבלה שלנו ונסדר אותם עפ"י סדר ה-ID שלהם בסדר עולה (רגיל). במידה ואין רשומות נציג הודעת פלט מתאימה, אחרת נמשיך את הצגת הרשומות בעמוד.
|
<table dir="rtl" width="70%" align="center"> <tr> <td width="5%"><b>#</b></td> <td width="20%"><b>שם מלא</b></td> <td width="30%"><b>דוא"ל</b></td> <td width="10%"><b>עריכה</b></td> <td width="10%"><b>מחיקה</b></td> </tr>
|
|
|
ניצור התחלת טבלה פשוטה הכוללת 5 שדות לסידור כל רשומה בשורה.
|
<%Do while not rs.EOF%> <tr> <td width="5%"><%=rs("id")%></td> <td width="20%"><%=rs("name")%></td> <td width="30%"><a href="mailto:<%=rs("email")%>"><%=rs("email")%></a></td> <td><a href="Edit.asp?id=<%=rs("id")%>">עריכה</a></td> <td><a href="Delete.asp?id=<%=rs("id")%>">מחיקה</a></td> </tr> |
|
|
נתחיל לולאה עד סוף הרשומות (רקורדסט). כל שדה מסודר בתא משלו וכל הרשומה מסודרת בשורה אחת.
|
<% rs.MoveNext Loop Response.Write "</table>" & vbcrlf End If |
|
|
בשורה הראשונה והשנייה אנחנו קובעים המשכת הלולאה והעברה לרשומה הבאה. נסגור את הטבלה שפתחנו ואת משפט התנאי שלנו (אם קיימות רשומות או לא).
|
rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing %> </body> </html> |
|
|
נסגור ונאפס את הרקורדסט ואת אובייקט החיבור ולא לשכוח לסגור תגי HTML בסיסיים.
הקוד במלואו
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
<%@language="VBSCRIPT" CODEPAGE="1255"%> <html> <head> <title>רשימת הרשומות</title> </head> <body dir="rtl"> <h3>רשימת הרשומות במסד הנתונים</h3><br> <% Dim Conn, rs, SQL Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath("Ado.mdb") Set rs = Server.CreateObject("ADODB.RecordSet")
SQL = "Select * from List order by ID" rs.Open SQL, Conn
If rs.EOF Then Response.Write "<h3 align=""center"">אין רשומות במסד הנתונים!</h3>" & vbcrlf Else %> <table dir="rtl" width="70%" align="center"> <tr> <td width="5%"><b>#</b></td> <td width="20%"><b>שם מלא</b></td> <td width="30%"><b>דוא"ל</b></td> <td width="10%"><b>עריכה</b></td> <td width="10%"><b>מחיקה</b></td> </tr> <% Do while not rs.EOF %> <tr> <td width="5%"><%=rs("id")%></td> <td width="20%"><%=rs("name")%></td> <td width="30%"><a href="mailto:<%=rs("email")%>"><%=rs("email")%></a></td> <td><a href="Edit.asp?id=<%=rs("id")%>">עריכה</a></td> <td><a href="Delete.asp?id=<%=rs("id")%>">מחיקה</a></td> </tr> <% rs.MoveNext Loop Response.Write "</table>" & vbcrlf End If rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing %> </body> </html>
|
|
|
לחצו כאן להורדת הקוד המלא של המאמרלסיום, מספר הערות
- הקוד שיצרנו במאמר זה יכול לשמש אתכם כחלק ממועדון חברים, מאגר משתמשים או כל דבר אחר שתרצו (כולל שינוי הקוד).
- בעזרת עריכת ומחיקת רשומות ניתן לבנות פאנל ניהול עבור שימוש אישי.
- עדיין עדיף להשתמש ב- ADO על פני SQL למרות חסרון המהירות.
- מאמר זה רק מדגים את השימוש בהוספת, עדכון ומחיקת רשומות ואינו מלמד את ADO באופן מלא.
בהצלחה!
תגובות בפייסבוק