קצת היסטוריה...
ADO זוהי טכנולוגיה של מייקרוסופט והיא קומפוננטה
של Active-X.
ראשי התיבות הן - ActiveX Data Objects
עם הקומפוננטה הזו יש אפשרות גישה למסד נתונים
במינימום מאמץ, מתוך דפי הASP
מה מיוחד בADO?
1] ADO היא שפה קלה מאוד ופשוטה לביצוע, לעומת SQL
ש_לפעמים_ קשה לעבוד איתה,
והיא נותנת _לפעמים_ הודעות שגיאה מעצבנות.
2] כתיבת סקריפט שיכניס רשומה לדאטאבייס בADO,
קצרה בהרבה מאשר בSQL.
ותמיד יש חסרונות...
1] חסרון ראשי - מהירות. עם SQL העבודה על השרת
יותר מהירה.
2] עם SQL לא צריך לפתוח אובייקט רקורדסט. אפשר
לעשות פשוט conn.execute sql.
הוספת רשומה בADO
בואו ניצור דף, שבו אנו רוצים להכנס לדאטאבייס
כלשהו, ולהוסיף רשומה.
זוהי הטבלה:
Heroes
| id |
fname |
lname |
city |
Super |
Work |
| 1 |
Clark |
Kent |
Metropolis |
Superman |
Daily Planet |
| 2 |
Peter |
Venom |
New York |
Spiderman |
Daily Bugel |
id = מספור אוטומטי.
עכשיו, ברצוני להוסיף רשומה חדשה של באטמן.
הנה היא:
| fname |
lname |
city |
Super |
Work |
| Bruce |
Wayne |
Gotham City |
Batman |
Wayne Enterprises |
אלו הפרטים שאני רוצה להכניס לטבלה Heros.
שם הקובץ הוא db.mdb.
בואו ניצור התחברות לקובץ:
<%
set c=Server.CreateObject("adodb.connection")
set r=Server.CreateObject("adodb.recordset")
c.Open "DBQ=" & Server.Mappath("db.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"
%>
כמובן ש c הוא החיבור ו r הוא
הרקורדסט.
אחרי החיבור, צריכים להתחבר לטבלה:
ישנן 2 אפשרויות לחיבור. אחת עם sql פשוט,
והשניה עם הרקורדסט
חיבור רקורדסט:
r.Open "heros", conn,3,3
חיבור sql:
sql = "select * from heros"
r.open sql,c,3,3
ה 3,3 בשביל אפשרות לשנוי.
בואו נוסיף רשומה חדשה
r.addnew
עכשיו, אמרנו שברצוננו להוסיף לרשומה את תאים הנ"ל:
r("fname") = "Bruce"
r("lname") = "Wayne"
r("city") = "Gotham City"
r("Super") = "Batman"
r("Work") = "Wayne Enterprises"
אנו רואים שהתחביר הוא r("the_cell") = "value"
ולבסוף - עדכון השורה:
r.update
OK, אז הוספנו את באטמן אבל מה אני רואה?
טעיתי בספיידרמן...
שם המשפחה אמור להיות Parker כמובן, ולא אויבו, Venom.
מה עושים?
עריכת רשומות
נשתמש בפתיחה של sql, והפעם עם האלמנט where:
sql = "select * from heros where id = 2"
r.open sql,c,3,3
הכי כדאי לעבוד עם עוד טור ששמו id במספור
אוטומטי, כדי למנוע שינוי כפול, במידה ואנו רוצים
לעשות שינוי יחיד.
נבצע את השינויים, ונסגור את הקשר:
r("lname") = "Parker"
r.update
r.close
אין צורך לשנות את כל התאים, רק את הבעייתית.
עכשיו, החלטתי שסופרמן הוא הכי קיץ שעבר, אז ממש בא
לי למחוק אותו.
מה אני עושה?
מחיקת רשומות
כרגיל, בוחרים את הרשומה הספציפית מהטבלה:
sql = "select * from heros where id = 1"
r.open sql,c,3,3
מוחקים, וסוגרים קשר:
r.Delete
r.close
תוספות והערות אחרונות
בכל פעם שאתם רושמים ***.r אתם משתמשים ב ado.
הנה המטודות של ado:
המטודה |
מה היא
עושה? |
| Open |
פותחת חיבור ומשפט SQL. |
| Close |
סוגרת חיבור. |
| Fields |
למרות שלא צריך ממש
להשתמש במטודה זו, ע"מ לקבל מהירות מקסימלית
כאפשר, משתמשים בה
להוצאת שדה מהדאטאבייס, כך: r.fields("the_field").
במקום שהרקורדסט יחפש אחת אחרי השניה
באיזו מטודה מדובר, הוא פשוט מקבל את המטודה. אם Fields
לא נרשמת, הוא עובר אחת אחת, בדיוק כמו ב
Request. |
| Update |
מעדכנת טבלה / רשומה
/ רשומות עפ"י תדרוך קודם. |
| Delete |
מוחקת את מה שנבחר
במשפט הSQL. |
| Recordcount |
אם עושים למטודה זו response.write,
מקבלים את מספר הרשומות בבחירה. |
| MoveFirst |
מעבירה לרשומה
הראשונה בבחירה. |
| MoveLast |
מעבירה לרשומה
האחרונה בבחירה. |
| Movenext |
מעבירה רשומה פיסית
(ללא תלות במשתנה זה או אחר, אלא אם כן משתמשים בWHERE)
אחת קדימה מהרשומה הנוכחית
(ואם לא נבחרה רשומה נוכחית, אז לשניה). |
| MovePrevious |
מעבירה רשומה אחת
אחורה מהרשומה הנוכחית. |
| Move(n) |
מעבירה n
רשומות מהרשומה הנוכחית. |
| Eof |
סוף האובייקט (כלומר
הרשומה האחרונה מתוך הבחירה). |
| Bof |
תחילת האובייקט (כלומר
הרשומה הראשונה מתוך הבחירה). |
לסיכום -
עדיף בהרבה להשתמש בado למרות חסרונותיו.
היתרונות של הפשטות עולים בהרבה על החסרונות של
המהירות.
יותר לא תראו שורות קוד מעצבנות ומסורבלות שתמיד יש
בהן הודעות שגיאה מעצבנות, ולוקח 15 דקות לדבג אותן...
|