| ראשי | חיפוש | קוד לדוגמא | שו"ת FAQ | מאמרים | קישורים | לימוד VB | הפורום | צ'אט | | |
אחת השאלות הנפוצות ביותר ב- VB 2005 היא איך עובדים עם מסדי נתונים. מאמר זה נוצר כדי לענות לכם על השאלה הזו. במאמר נשתמש ב-DAO.NET (הכלי שהחליף את DAO מ- Visual Basic 6) כדי לעבוד עם מסד הנתונים דרך שורות הקוד. ישנה עוד שיטה שאיתה אפשר לעבוד עם מסדי-נתונים ב- Visual Basic 2005, אבל נשאיר אותה לפעם הבאה... לפני שנתחיל: פתחו את Visual Basic 2005. מהתפריט Project בחירו ב-Add Reference. עברו ללשונית COM סמנו את Microsoft DAO 3.6 Object Library ולחצו על OK. במהלך המאמר שלנו אנו נעזר במסד הנתונים DataBase.mdb, שאותו אפשר להוריד מכאן (הקובץ נמצא בספריה הראשית בקובץ ה-Zip). במסדנתונים זה ישנה טבלה בשם "Employees" עם הערכים הבאים: ID - תעודת זהות. Fname - שם משפחה. Lname - שם פרטי. Address - כתובת. Tel - טלפון. אני ממליץ לכם להוריד את מסדהנתונים ולעניין בו קצת, על מנת להבין טוב יותר את שורות הקוד. כמו כן, מומלץ להוריד את קוד המקור (מהקישור לעיל או מהקישור שבסוף המאמר) ולצפות בו לפני קריאת המאמר. קישור הטופס עם מסד נתונים: כדי לקשר את הטופס שלנו עם מסד הנתונים אנו צריכים לבצע מספר פעולות. א. נתחיל בהצהרה על משתנים. כתבו בראש הטופס שאתם רוצים לקשרו עם מסד הנתונים את השורות הבאות:
אחרי התחלת המחלקה (Class) שלכם, כתבו את השורות הבאות:
ההצהרה השנייה נכתבה כדי לנהל את הטבלאות שבמסד הנתונים, כאשר "Table" הוא שם המשתנה ו-"DAO.Recordset" הוא סוג המשתנה. ההצהרה השלישית נכתבה כדי לפתוח את מסד-הנתונים, כאשר "OpenDataBase" הוא שם המשתנה ו-"DAO.DBEngine" הוא סוג המשתנה. ב. קישור הטופס עם מסדהנתונים. ב- Form_Load כתבו את השורות הבאות:
השורה השניה מתחלקת לשני חלקים: 1. My.Application.Info.DirectoryPath - מטרתה לזהות את המקום שבו התוכנה נמצאת. נעזרו באובייקט My בשורה זו. פרטים נוספים על האובייקט My אפשר למצוא במאמר על האובייקט My שבאתר. 2. & "\database.mdb" - קובץ מסד-הנתונים שלנו. כדי להבין טוב יותר את השורה השנייה ניעזר בדוגמה: נגיד שהתוכנה שלנו נמצאת בתוך התיקייה Roee שנמצאת בכונן C. נכתוב:
עכשיו, אחרי שהבנו את החלק הראשון - נעבור לחלק השני: נגיד שיש לנו בתוך התיקייה של התוכנה עוד תיקייה, הנקראת Dr-Vb ובתוכנה נמצא קובץ בשם Data.mdb ואנחנו רוצים למצוא את הנתיב המלא שלו. נכתוב:
תפקיד & הוא לחבר את שני החלקים של השורה. אחרי שזיהינו את מקום מסד הנתונים שלנו באמצעות המשתנה StrFileName נשתמש בשורה השלישית כדי לקשר את הפרויקט עם מסד הנתונים שלנו. תפקיד השורה הרביעית הוא לקשר את מסד הנתונים שלנו עם הטבלה שלנו - Employees. כל הכבוד, הטופס שלכם מקושר עם מסדהנתונים שלכם! שירותים לעבודה עם מסד הנתונים: כמובן שקישור הטופס למסד הנתונים אינו מספיק על מנת לעבוד עם מסדינתונים. לכן, להלן יוסברו השירותים העיקריים והשימושים ביותר בעבודה עם מסדי נתונים. א. השירות Move: השירות Move מאפשר לנו לנוע בין הרשומות בטבלה שבמסד הנתונים - ניתן לעבוד בעזרתו לרשומה הראשונה, הקודמת, הבאה או לכל מקום שתרצו. להלן מספר דוגמאות לשימוש בשירות Move:
באמצעות השורה השנייה נעבור לרשומה הראשונה. באמצעות השורה השלישית נעבור לרשומה הבאה. באמצעות השורה הרביעית נעבור לרשומה הקודמת. באמצעות השורה החמישית נעבור 3 רשומות קדימה מהרשומה שבא אנו נמצאים. באמצעות השורה החמישית נעבור 2 רשומות אחורה מהרשומה שבא אנו נמצאים. כמובן שאחרי כל שורה, יש לכתוב או להציב במקום המתאים את ערכי הרשומה הנוכחית (למשל: בתיבת-טקסט, בתיבת הודעה, במשתנים וכדומה). כעת אדגים כיצד להציב למשתנים את ערכי הרשומה הנוכחית לאחר מעבר לרשומה הבאה (MoveNext):
בשורה השנייה העברנו את הטבלה לרשומה הבאה. בשאר השורות (שורות 6-2) הכנסנו את הערכים השונים של השדות ברשומה הנוכחית למשתנים. ב. השירות AddNew: חלק חשוב מיכולת ניהול הטבלה במסד הנתונים, הוא האפשרות להוסיף רשומה חדשה לטבלה. בהפעלת השירות אין כל משמעות באיזו רשומה נמצאים בעת הפעלתו. בכל מקרה הרשומה תתווסף בסוף הטבלה. נשתמש בקוד הבא בשביל לבצע את הפעולה הזו בטבלה שלנו (זכרו! בגלל שהשדה ID הוא המפתח של הטבלה שלנו הוא לא יכול להופיע פעמיים):
בשורות 2 עד 5 הוספנו את הערכים לרשומה. בשורה 6 השתמשנו בשירות Update כדי לעדכן את הטבלה. ג. השירות Edit: השירות Edit מאפשר את עריכת הרשומה הנוכחית ושינוי הערכים שבה.
בשורות 2 עד 5 ערכנו את הערכים של הרשומה. בשורה 6 השתמשנו בשירות Update כדי לעדכן את הטבלה. ד. השירות Delete: השירות Delete מאפשר למחוק את הרשומה הנוכחית. למשל:
בשורה השניה השתמשנו בשירות Delete, על מנת מחוק את הרשומה הנוכחית. בשורה השלישית השתמשנו בשירות MoveNext על מנת לעבור לרשומה הבאה. בשורות 4 עד 8 הכנסנו את הערכים (של הרשומה הבאה, אחרי זו שמחקנו) למשתנים. ה. המאפיינים EOF ו- BOF: המאפיינים EOF ו-BOF עוזרים לנו לבדוק האם הגענו לסוף הרשומות או שאנחנו ברשומה הראשונה. על מנת להשתמש בהם אנו נעזר בקוד הבא:
במקרה שהתשובה היא False מתבצע הקוד שבשורה שלישית. בשורה השלישית נעזרנו במשפט ElseIf ובמאפיין BOF (ראשי תיבות של Beginning of File - תחילת הקובץ), על מנת לבדוק האם אנו נמצאים ברשומה הראשונה. במקרה שהתשובה היא True מתבצע הקוד שבשורה הרביעית, המציג הודעה שבה רשום כי אנחנו נמצאים ברשומה הראשונה. במקרה שהתשובה היא False מתבצע הקוד שבשורה הרביעית, הגורם לקוד שבשורה החמישית להתבצע ואז מוצגת הודעה בה רשום כי אנו לא בתחילת ולא בסוף הטבלה. שירותים ומאפיינים לחיפוש בטבלה: חיפוש בטבלה הוא לא נושא כל כך פשוט. הוא בעל הרבה מאפיינים והרבה שירותים ובגלל זה הקדשתי לו פרק משלו. בפרק שלפניכם אני יסביר את השירותים והמאפיינים בהם נעשה שימוש על מנת ליצור את שגרת החיפוש שלנו בטבלה במסד הנתונים. א. המאפיין Index: האינדקס שבטבלה שלנו (Employees) הוא "ID". במקרה שלנו האינדקס הוא גם המפתח (Primary Key) של הטבלה. אם, לדוגמה, נרצה לפנות ישירות לרשומה של דני בעל תעודת הזהות 012345678, נפנה בשלב הראשון לאינדקס (במקרה הזה - למפתח) המכיל את השדה "ID". שימו לב! כשאתם יוצרים מפתח באקסס הוא הופך להיות גם אינדקס. המפתח שלכם הוא גם האינדקס שלכם. יש מקרים באקסס שאתם יכולים לעשות גם מפתח וגם עוד כמה אינדקסים. כדי לפנות לאינדקס, נשתמש בקוד הבא:
ב. המאפיין Seek : המאפיין Seek מאתר רשומה מסוימת בתוך האינדקס. שימו לב לדוגמה הבאה:
בשורה השנייה השתמשנו במאפיין Seek, שורה זו מתחלקת לשלושה חלקים. 1. Table.Seek - פנינו למאפיין Seek כדי לבצע חיפוש. 2. "=" - הגדרנו שאנחנו רוצים לחפש את הרשומה שה-ID שלה שווה ל- 012345678. אם היינו כותבים ">" אז היה מתבצע חיפוש רשומה שה-ID שלה קטן מ- 12345678. אם היינו כותבים "<" אז היה מתבצע חיפוש רשומה שה-ID שלה גדול מ- 12345678. אם היינו כותבים "=>" אאז היה מתבצע חיפוש רשומה שה-ID שלה שווה או קטן מ- 12345678. אם היינו כותבים "=<" אז היה מתבצע חיפוש רשומה שה-ID שלה שווה או גדול מ- 12345678. 3. 012345678 - הערך שאנחנו רוצים לחפש. לאחר הרצת קוד זה - החיפוש יתבצע, אבל כדי לראות את תוצאות החיפוש, אנו צריכים לקבוע היכן הן יירשמו - במשתנים, בתיבת הודעה, בתיבת טקסט וכדומה. אני ישתמש בדוגמה שבה יוצגו תוצאות החיפוש במשתנים:
בשורה השנייה פנינו לאינדקס מפתח. בשורה השלישית נעזרנו במאפיין Seek כדי לבצע את החיפוש. בשורות 4 עד 8 הוצבו ערכים במשתנים, שהם תוצאות החיפוש של האדם עם התעודת הזהות: 012345678. ג. המאפיין NoMatch: במידה ונמצאה הרשומה שחיפשנו, הערכים יועברו למשתנים (בקוד שלעיל). אבל אם לא נמצאה תוצאה, במקרה זה תופיע הודעת שגיאה. על מנת למנוע את הופעת הודעת השגיאה, אנו ניעזר במאפיין NoMatch (שפירושו: אין התאמה). כדי להשתמש במאפיין הזה נשתמש במשפט תנאי (משפט If). במידה ונמצאה תוצאה - התוצאה של משפט התנאי תהיה False. אם לא נמצאה תוצאה - התוצאה של משפט התנאי תהיה True. נכון שזה נשמע הפוך ממש שזה צריך להיות - ההסבר לכך הוא בגלל שבמאפיין יש No, כדי שזה לא יראה הפוך, נשתמש במשפט התנאי IF ב-Not:
בשורה השנייה פנינו לאינדקס-מפתח שלנו. בשורה השלישית ביצענו חיפוש של תעודת הזהות 012345678. בשורה הרביעית השתמשנו בשורת If Not ובמאפיין NoMatch כדי לבדוק האם החיפוש הצליח או לא. במקרה שהחיפוש הצליח, שורות 5 עד 9 יתבצעו ויועברו ערכים למשתנים. במקרה שהחיפוש לא הצליח, שורה 11 תתבצע ואז תופיע הודעה שבה כתוב שהרשומה המבוקשת לא נמצאה. סיכום: במאמר זה למדתם כיצד לעבוד עם מסדי נתונים ב-VB 2005. אני ממליץ לכם לעבור שוב על הקוד מקור ולבדוק אם אתם מבינים את כולו. לבעיות, הערות והארות אתם מוזמנים לפנות את קוד המקור, כולל קובץ מסדהנתונים (Access), ניתן להוריד מכאן. אז שיהיה לכם בהצלחה - רועי אנגל! |