אקסס למתחילים: יצירת מערכת לניהול תורמים
-
כהמשך לפוסט: https://tchumim.com/topic/10485/מערכת-לניהול-תורמים/11
@בערל השלב הראשון הוא התכנון כמובן. והתכנון הראשון הוא מבנה הנתונים.
בבסיס הנתונים (להלן db) הנתונים נשמרים כאוסף של טבלאות. כל עמודה בטבלה מציינת "שדה", וכל שורה מציינת "רשומה".אבל קודם כל, היכרות פשוטה:
חלק א: יצירת טבלת התורמים והטופס שלה:
לשם פשיטות, נתחיל עם טבלה פשוטה ביותר של התורמים:
עבור כל תורם אני אשמור את השדות הבאים:
ID (שדה מפתח, המזהה של הרשומה) - מספר רץ
שם פרטי - מחרוזת טקסט
משפחה - מחרוזת טקסט
טלפון נייד - מחרוזת טקסטלשם כך תפתח את אקסס, ובתפריט תבחר יצירה > עיצוב טבלה, ותקליד את השורות הבאות:
אחר כך תעמוד על השורה של ה-ID ותלחץ בתפריט למעלה על הסמל של "מפתח ראשי".
שים לב שנוסף ליד השורה סמל של מפתח:
סגור את הטבלה ותקרא לה: Donor (תורם)
היה קל, נכון?
בוא ניצור עכשיו טופס פשוט שבו נוכל להקליד נתוני תורמים:
תסמן את הטבלה Donor בפאנל שבצד ימין, ובתפריט למעלה תבחר: יצירה > טופס.
אקסס תיצור מיד טופס בשבילך:
סגור ושמור בשם frmDonorפתח את הטופס ותכניס כמה שמות של תורמים. תוכל לנווט בין הרשומות עם החצים למטה.
בפוסט הבא ניצור טבלה וטופס של תרומות, ונקשר אותו לטופס הזה.
-
חלק ב: יצירת טבלת התרומות והטופס
טוב, אז בוא ניצור עוד טבלה, שתכיל את התרומות של כל תורם (אל תשכח לסמן את שדה המפתח)
שים לב: השדה השני DonorID הוא המקשר של התרומה לתורם.
עוד דבר חשוב: בחר את השדה האחרון CreatedOn, ולמטה בחלון המאפיינים של השדה, תחת ערך ברירת מחדל תכניס את הפונקציה (המובנית):=Now()
זה יכניס אוטומטית את הזמן הנוכחי ביצירת רשומת תרומה חדשה.
שמור את הטבלה בשם Donation.
צור טופס חדש המבוסס על הטבלה הזו, כמו שעשינו למעלה עם התורמים:
תבחר את הטבלה Donation מצד ימין, ובתפריט: יצירה > טופס:שמור את הטופס בשם frmDonation
קח הפסקה לכוס קפה, ונמשיך בפוסט הבא. -
חלק ג: קישור בין הנתונים של התורמים והתרומות
הכח של בסיס נתונים רלציונאלי (כגון אקסס, SQL) נובע מהגדרת קשרי הגומלין (relationships) בין הנתונים.
הקשר בין רשומה של תורם לרשומה של תרומה הוא קשר של אחד-להרבה (one-to-many)
כי לכל תורם יכולות להיות מספר תרומות (לפחות אם אנחנו אופטימיים)
כדי להגדיר את הקשר בין הטבלאות, נבחר בתפריט למעלה: כלי מסד נתונים > קשרי גומלין
ונוסיף את שתי הטבלאות שיצרנו:
עכשיו נבחר את השדה DonorID בטבלת התרומות, ונגרור אותו אל השדה ID בטבלת התורמים.
אם לא טעינו, נפתח חלון כזה:
נסמן את התיבה: "אכוף שלמות הקשרים בין הטבלאות". זה מבטיח שלא יהיו לנו רשומות יתומות, דהיינו רשומות של תרומות שאין להן רשומת תורם תואמת.
נקליק על "צור". שים לב שעכשיו הטבלאות מחוברות על ידי קו. הסימון
1 - ∞
מציין שהקשר הוא "אחד-להרבה" כנ"ל.
סגור את חלון קשרי הגומלין ושמור את השינויים.עכשיו מתחיל הכיף:
נפתח את הטופס של התורמים בתצוגת עיצוב, ונרחיב את החלון קצת למטה כדי לעשות חלל פנוי לרשימת התרומות:
נגרור לתוך החלל שיצרנו את הטופס של התרומות frmDonation, כדי ליצור טופס משנה:
נסגור ונשמור את הטופס של התורם.
עכשיו נפתח את הטופס של התרומות בתצוגת עריכה, ובגליון המאפיינים של הטופס, נשנה את תצוגת ברירת המחדל ל- גליון נתונים (זה יהפוך את התצוגה לגליון נתונים כמו באקסל)
כמו כן, נמחק מהטופס את שני השדות הראשונים: ID ו- DonorID:
נסגור ונשמור.
שים לב: עכשיו כשנפתח את הטופס הראשי (של התורם) יוצגו עבור כל תורם כל התרומות שלו, ורק שלו:
הפלא ופלא!
איך זה קורה?
הסבר בפוסט הבא! -
חלק ד - נקודות למחשבה
החלק הזה יעסוק פחות ביצירה של דברים חדשים, ויתמקד בתיאוריה שמאחורי הדברים.
חשוב שנבין מה עשינו עד עכשיו.
לשם כך נסקור שוב את מה שעשינו, ונתעמק קצת, ונשפר פה ושם כמה דברים.
כולם הביאו מחברת ועפרון ?טבלת התורמים
נפתח אותה שוב בתצוגת עיצוב, ונראה כי
א. שמות השדות מורכבים מאותיות אנגליות בלבד, וללא רווחים.
למרות שאקסס מאוד סלחנית ומאפשרת לנו בלי בעיה ליצור שמות שדות בעברית, זה מאוד לא מומלץ, ונשלם על כך מחיר יקר בהמשך.ב. קיים שדה מזהה לרשומה בשם ID.
ככלל, לכל טבלה ב-db תמיד יהיה שדה כזה, והוא נקרא מפתח ראשי. סוג הנתונים בו הוא מספר שלם (ארוך), ובדרך כלל הוא יהיה מסוג מספור אוטומטי, זהו שדה לקריאה בלבד וה-db אחראי לטפל בערכים שלו, והוא קובע באופן אוטומטי את הערך שלו בכל יצירת רשומה חדשה (בקפיצות של 1).
ערך השדה הוא ייחודי ונקבע באופן חד-פעמי, כלומר, אם למשל ברשומה האחרונה ID=4, גם אם נמחק אותה וניצור רשומה חדשה, ה-db יקצה לרשומה החדשה ID=5, למרות שכבר אין רשומה עם ID=4.המנגנון הזה מבטיח שתמיד ניגש לרשומה הנכונה.
דרך משל, אם לפלוני היה מספר תעודת זהות 1002, גם אם הוא נפטר, לא ישתמשו במספר שלו עבור אדם אחר, כדי שתמיד פלוני יזוהה עם המספר 1002.
ג. סוג הנתונים בשאר השדות
כברירת מחדל, גודל השדה "טקסט קצר" הוא עד 255 תוים.
אם ודאי לנו שלא נשתמש בכזה אורך, נוכל להקטין את גדול השדה המקסימלי, על מנת לחסוך מקום ולשפר יעילות.
בואו נגדיר מחדש את אורך השדות שלנו: LastName, FirstName, MobilePhone להיות כל אחד 30 תוים:נבחר את השורה LastName, ולמטה במאפיינים, נגדיר גודל שדה 30:
נחזור על הפעולה גם עבור השדות FirstName ו-MobilePhone. נסגור ונשמור את הטבלה, ואז נקבל את תיבת ההתראה הבאה:
שדואגת שלא נעשה דבר טיפשי בטעות. במקרה שלנו מסתמא לא הכנסנו שם גדול מ-30 תוים. פשוט נאשר וזהו.
הערה: אם כבר היה בשדה ערך גדול מ-30 תוים, המחרוזת תיחתך אחרי התו השלושים.נעבור לטבלה השניה:
טבלת התרומות
גם כאן יש מפתח ראשי בשם ID. אבל יש כאן שדה נוסף:מפתח משני
שימו לב לשדה DonorID, הוא מציין לאיזו רשומה בטבלה הראשית (תורמים), שייכת כל רשומה בטבלה המשנית (תרומות). ולכן הוא נקרא מפתח משני או מפתח זַר.
גם המפתח המשני מוגדר כסוג מספר שלם ארוך, כי הוא חייב להיות תואם לסוג הנתונים של המפתח הראשי בטבלת התורמים.
אבל שימו לב שהוא לא מסוג מספור אוטומטי, מפני שאנחנו קובעים (ולא אקסס) לאיזו רשומת תורם שייכת כל תרומה.זה מעלה שתי נקודות חשובות למחשבה:
איך נוודא שלא שכחנו בטעות למלא את השדה?
ומה אם ננסה לרשום מספר שלא נמצאת עבורו רשומה בתורמים (=התורם לא קיים)....?אל תדאגו.
תאמינו או לא, את שתי הבעיות האלו כבר פתרנו כשהגדרנו את קשרי הגומלין בין הטבלאות, וסימננו את התיבה "אכוף שלמות הקשרים בין הטבלאות"!
א. אם ננסה להכניס בשדה DonorID ערך שלא קיים בטבלת התורמים, למשל 1000, ה-db יסרב לשמור את רשומת התרומה, כי הוא מוודא עבורינו שלא יהיו רשומות "יתומות" (תרומות ללא תורם משוייך)
ב. אם ננסה למחוק מטבלת התורמים תורם שקיימת עבורו תרומה - שוב ה-db לא יאפשר זאת.הערה: משום מה יש שמתעצלים מלהגדיר את קשרי הגומלין בצורה מפורשת, וסומכים על הגדרת היחס בין הטפסים \ על הקוד וכו'. זוהי "מדיניות" גרועה של הזנחה, ואנשים כאלו מקומם מאחורי סורג ובריח ולא מאחורי מסך מחשב... נו, הגזמתי כמובן, קצת...
דבר קטן לסיום:
את השדה של הטלפון הנייד הגדרנו כמחרוזת ולא כמספר. הוא הדין גם לגבי שדה שמכיל תעודת זהות.
טיפ: כל שדה שמכיל מספר, אבל ברור לנו שאין לנו לעולם עניין לעשות עליו מניפולציות מתמטיות (חיבור, חיסור, כפל וכו') עדיף להגדיר כמחרוזת.טוב, שיעורי בית (אוף...):
לקצר את אורך השדה של מספר הטלפון הנייד ל-20 תוים.בפוסט הבא ב"ה נמשיך לעבור על הטפסים שעשינו.
-
חלק ד - תוספת: בקשר למדריך הזה
א. איה הסילבוס?
המדריך לא מתיימר להיות מקיף. הוא אמור להוות קרש קפיצה למים.
אני מאמין בשיטת לימוד של "שני צעדים קדימה וצעד אחד אחורה", דהיינו להתנסות בידיים ואחר כך לפרק לגורמים ולראות איך זה עובד.
חוץ מזה, אני לא אוהב למשוך דברים לאורך זמן. לכן אני לא תמיד מארגן נכון את השיעור.
לא בטוח שזו שיטה מתאימה לכולם.ב. זהירות, מלכודת אקסס
ביטים רבים כבר נשפכו כאן בפורום על אקסס ועל הרלוונטיות שלה.
לעניות דעתי אקסס היא שער כניסה מצוין לעולם בסיסי הנתונים. היא נותנת לך ישר מהקופסה ארגז כלים נהדר למתחילים, ומטפלת בהרבה דברים מאחורי הקלעים.
אבל במידה מסויימת, זה החסרון הכי גדול שלה.
אל תפחדו לעבור את השער יום אחד.
אני מקווה שהמדריך יעזור לנו להכיר את אקסס ולהשתמש בה רק במקרים שהיא באמת הכי מתאימה. -
חלק ה: טפסים מקושרים
אז כמו שכבר ראינו, אקסס עוזרת לנו המון ביצירת טפסים. למעשה, כדי ליצור טופס שמבוסס על טבלה פשוט בוחרים אותה ובתפריט: יצירה > טופס.
נשים לב שהטופס מקושר לטבלה עצמה, זה אומר שכל שינוי של נתונים בטופס – מיד מבוצע גם בטבלה עצמה, בלי שנדאג לאיך זה מתבצע.
הערה: אקסס היא תוכנה מבוססת נתונים, כך אין צורך לשמור כל שינוי. אמנם קיימים מקרים שבהם נרצה לשאול את המשתמש האם לשמור את השינויים. יש לזה גם פתרונות אך הם מעבר להיקף ההדרכה הזו.
אקסס גם מספקת לנו סרגל ניווט כברירת מחדל בתחתית כל טופס, תראו בתחתית טופס התורמים:
ויש בו אפילו מנגנון חיפוש פשוט!
תנסו להקליד שם של תורם למטה, אקסס מיד תעבור לרשומה הרלוונטית.
אבל מה שיותר נחמד, הוא שהיא עוזרת לנו בניהול טפסים מקושרים.
תשאלו: מה זה טפסים מקושרים?
אז זוכרים שיצרנו קשרי גומלין בין התורמים והתרומות? בואו תראו מה קרה:
תפתחו את טבלת התורמים, הפעם בתצוגת גליון נתונים (פשוט תקליקו עליה פעמיים)
שימו לב שיש סימן + לפני כל שורה:
אם נלחץ עליו, נקבל את רשימת התרומות של אברהם כהן:
אבל חסר כאן שדה אחד, שמתם לב? השדה DonorID נעלם. אקסס מסתירה אותו, כי היא יודעת שלגבי התרומות של אברהם כהן, המזהה של התרומה צריך תמיד להיות המזהה של אברהם כהן, כלומר 1, לכן היא קובעת עבורנו את הערך בשדה באופן אוטומטי ל-1, ומסתירה את העמודה הזו.
זה גם מה שקרה כשיצרנו את הטופס המשולב, אקסס זיהתה ששתי הטבלאות שעליהם מבוססים הטפסים הן מקושרות בקשר גומלין, ולפיו קבעה לבד כי השדות המקושרים הם: ID בטבלת התורמים עם DonorID בטבלת התרומות.
כאשר אנחנו מדפדפים בין התורמים בטופס, היא היא גם דואגת עבורנו לעדכן אוטומטית את טופס המשנה של התרומות לרשומות הרלוונטיות.
גם כשנוסיף רשומה חדשה לתרומות, אקסס תקבע את ערך השדה DonorID ל-ID של התורם הנכון שבטופס האב. (זו הסיבה שמחקנו את השדה הזה מהטופס, מפני שאם הוא היה מוצג, הוא היה שדה לקריאה בלבד)
מחיאות כפיים לאקסס!
אם אתם רוצים להציץ מתחת למכסה המנוע ולראות היכן מופיע הקישור בטופס, תפתחו את הטופס של התורמים בתצוגת עיצוב, תבחרו את טופס המשנה, ובמאפיינים שלו יש לשונית שנקראת נתונים, והנה השדות המקשרים לפניכם:
הערה: כל ההוקוס פוקוס הזה קרה כי הגדרנו מראש את קשרי הגומלין בין הטבלאות. אם היינו מדלגים על כך, היינו צריכים לספק את שמות השדות האלו באופן ידני.
בפוסט הבא נעסוק אי"ה בשאילתות.
-
חלק ו: שאילתות חלק א: שאילתת בחירה עם שדה מחושב
שאילתות מאפשרות לנו לבצע ניתוח נתונים.
בלעדיהן, כל הנתונים שלנו פשוט יהיו בלתי שמישים.שאילתות במסד הנתונים מבוססות על שפה שנקראת SQL שזה בתרגום חופשי "שפת שאילתות מובנית". (תודה ל @yossiz על ההארה)
אקסס מאפשרת לנו ליצור סוגי שאילתות רבות על ידי שימוש בממשק גרפי פשוט, בלי לדעת כלום על שפת SQL. אקסס עושה את העבודה הקשה בשבילנו, ומתרגמת את רצוננו לשפת SQL.
שאילתא ראשונה: שם מלא
נניח שאני רוצה להציג את השם המלא של כל תורם.
נבחר בתפריט למעלה: יצירה > עיצוב שאילתא, נבחר את טבלת התורמים Donor, ונוסיף אותה למשטח העבודה:
נעמוד על השדה הראשון, ונפתח מהתפריט למעלה את בונה הביטויים:
בחלון שנפתח נרשום:FullName: LastName & " " & FirstName
ונלחץ על אישור:
נעבור לתצוגת גליון נתונים (בתפריט בצד ימין):
ונראה את התוצאות:
השאילתא יצרה שדה מחושב בשם FullName, שמכיל את הנוסחא:LastName & " " & FirstName
אנו משתמשים באופרטור & כדי לחבר מחרוזות, בדומה לאקסל.
הערה: השאילתא הזו לא ממש שימושית, כי חסר בה את השדה המזהה ID. בכוונה השמטתי אותו כטעות של מתחילים, ובהמשך כשניתקל בבעיה ונראה שאנו חייבים אותו, נערוך את השאילתא ונוסיף גם אותו.
אתם זוכרים שאמרתי לכם שאקסס דואגת ליצור את פקודת ה-SQL בשבילנו? אז תנשמו עמוק, ובואו נראה כיצד כתובה השאילתא בשפת SQL. בתפריט נעבור לתצוגת SQL:
והנה לפנינו פקודת הSQL שמרכיבה את השאילתא:
תתבוננו ותראו שבאמת שפת SQL לא כל כך נוראית. הפקודה SELECT אומרת שהשאילתא תבחר את השדות LastName ו-FirstName, ותוסיף ביניהם רווח, והמילה AS יוצרת שדה חדש בשם FullName. המילה FROM מציינת כי השדות ייבחרו מתוך הטבלה Donor.נשמור את השאילתא בשם qryDonor_FullName.
בפוסט הבא נכיר את שאילתת הקיבוץ.
-
חלק ז: שאילתות חלק ב: שאילתת קיבוץ
נניח שאני רוצה לדעת מה כמה כסף תרם כל תורם. לשם כך אנו זקוקים לשאילתת קיבוץ. שאילתת קיבוץ כשמה כן היא, מקבצת לנו נתונים הקשורים זה לזה לתוך שדה יחיד. במקרה שלנו, היא תחשב את הסכום של כל התרומות לכל תורם.
שאילתא שנייה: סכום התרומות לתורם
נבחר בתפריט למעלה: יצירה > עיצוב שאילתא, נבחר את טבלת התרומות Donation, ונוסיף אותה למשטח העבודה:
עכשיו נקליק פעמיים על השדה DonorID, הוא יתווסף לרשימה למטה:
נוסיף גם את השדה Amount:
עכשיו, נבחר מהתפריט למעלה את הסמל של הסיגמא, שכתוב מתחתיו "סכומים":
שימו לב שנוספה למטה עוד שורה, עם הכותרת "סך הכל", ולכל שדה כתוב "קיבוץ לפי":
זה אומר שהפכנו את סוג השאילתא משאילתת בחירה פשוטה לשאילתת קיבוץ.נשנה בעמודה של Amount את האפשרות "קיבוץ לפי" לאפשרות Sum (=סכום)
זהו, השאילתא מוכנה!
כדי לראות את התוצאות, נעבור לתצוגת גליון נתונים, והנה התוצאות:
רגע, מה קרה לכותרת של העמודה השניה? אקסס נתנה לה שם אחר כדי לציין שזוהי עמודה של סכום. אבל זוכרים כמה אנו צריכים להזהר במתן שמות לעמודות? חובה עלינו לשנות את שם העמודה לשם תקני. נחזור לתצוגת עיצוב:
נבחר את העמודה השניה, ובתפריט למעלה נפתח את בונה הביטויים:
בחלון שנפתח נרשום:TotalAmount: Amount
ונלחץ על אישור. נעבור שוב לתצוגת גליון נתונים, ונראה שעכשיו הכותרת של העמודה השניה השתנתה ל: TotalAmount:
נשמור את השאילתא בשם qryDonation_TotalAmount.יפה, נכון?
כן, אבל לא כל כך שימושי... מי זוכר מיהו התורם מספר 2 ומיהו התורם מספר 732?
אני רוצה להציג גם את שם התורם ליד הסכום שתרם!
בסדר, בסדר, בפוסט הבא נלמד איך לשלב את שתי השאילתות שיצרנו יחד, וליצור את התוצאה המבוקשת. -
חלק ח: שאילתות חלק ג: שאילתות צירוף
טוב, אז יש לנו שאילתה אחת בשם: qryDonor_FullName שמציגה את השמות המלאים של התורמים, להלן נקרא לה: "שאילתת-השמות", ויש לנו עוד שאילתא בשם qryDonation_TotalAmount שמציגה את סכום התרומות של כל תורם, להלן תיקרא: "שאילתת-הסכומים".
אנחנו רוצים לחבר את שתי השאילתות ביחד, כדי לקבל את התוצאה הבאה:
איך עושים את זה?
לשם כך נכיר סוג נוסף של שאילתא, והוא (תופים בבקשה...)
שאילתת צירוףשאילתא זו מצרפת שתי טבלאות או שאילתות, או יותר.
פתחו את מעצב השאילתות (יצירה > עיצוב שאילתא), ונעבור ללשונית של שאילתות כדי להציג את רשימת השאילתות שלנו:
נוסיף את שתי השאילתות למשטח העבודה:
אבל...
איך נחבר את שתי השאילתות? מה השדה שמקשר ביניהן?
התשובה היא: אין שדה כזה...השדה שאמור להיות המקשר הוא שדה המפתח של התורם, אבל אם נתבונן, נראה כי בשאילתת-הסכומים, לכל רשומה יש שדה מפתח, הלא הוא מיודענו DonorID, אבל בשאילת-השמות אין שדה מפתח.
בואו נתקן את הבעיה. נסגור את עורך השאילתות. תופיע ההודעה הבאה:
נבחר לא. אחרי שנתקן את שאילתות הבסיס, ניצור מחדש את השאילתא.הערה: יכולנו לשמור את השאילתא, לערוך את שאילתות הבסיס ולחזור לערוך את השאילתא, אבל לשם תרגול העדפתי לעשות הכל שוב מחדש. על הדרך תרוויחו עוד שיטה ליצירת שאילתות.
נפתח את שאילתת השמות בתצוגת עיצוב, ונוסיף את השדה ID לרשימת השדות (על ידי הקלקה כפולה על שם השדה):
נעבור לתצוגת גליון נתונים ונראה שעכשיו השדה מוצג בשאילתא:
הממ... השדה המזהה מוצג בעמודה השנייה ולא בראשונה... בואו נתקן גם את זה.הערה: סדר השדות במקרה של השאילתא הנ"ל לא משנה. אמנם אם נרצה להפעיל מיון על העמודות, סדר העמודות יקבע את קדימות המיון. וכן בשאילתת קיבוץ, לסדר השדות יש חשיבות גדולה. לכן כדי ללמוד איך עושים זאת, נסדר את השדה המזהה להיות ראשון.
לשם כך נחזור לתצוגת עיצוב, ונלחץ על המלבן האפור בראש העמודה של ID:
העמודה נצבעה בשחור:
נלחץ שוב פעם שנייה, ונגרור את העמודה לתחילת הרשימה, לפני עמודת השמות:
נשים לב שסדר העמודות השתנה:
נסגור ונשמור את השאילתא.עכשיו הכל מוכן ליצירת השאילתה שלנו:
מי זוכר איך בונים את שאילתת הצירוף? צריך לפתוח את מעצב השאילתות ולהוסיף את שתי השאילתות, אבל בואו נראה עוד דרך לעשות זאת:
בתפריט נבחר יצירה > עיצוב שאילתא, אבל הפעם, נסגור את החלון של הבחירה בלי להוסיף כלום למשטח העבודה, נקבל משטח ריק.
הפעם, נגרור את שתי השאילתות מהפאנל הימני לתוך המשטח:
נשים לב שהפעם מופיע בשאילתת השמות שדה המפתח בשם ID.
כדי לקשר את השאילתות, נגרור את השדה ID משאילתת השמות אל השדה DonorID בשאילתת הסכומים, ונראה שנוצר קו מחבר בין השאילתות (מזכיר לכם משהו?):נוסיף את השדות הבאים לפי הסדר:
מטבלת השמות: ID, FullName
ומטבלת הסכומים: TotalAmount
נעבור לתצוגת עיצוב כדי לבדוק את התוצאות:
נראה שזה עובד!אבל רגע,
לאן נעלם ישראל יעקב?
תעלומה.מי שהבין מה קרה - כל הכבוד, אתה מוזמן לשתף את התשובה בתגובות.
השאר - נשאיר אתכם במתח עד הפוסט הבא... -
חלק ט: שאילתות חלק ד: שאילתות צירוף חיצוני
אז מה קרה לישראל יעקב?
כל הכבוד ל @בערל שענה תשובה נכונה לשאלה:כי השאילתא שלנו מצרפת בין qryDonor_FullName ל-qryDonation_TotalAmount
מכיוון שישראל יעקב אינו תרם (עדיין), הוא לא מופיע ב- qryDonation_TotalAmount
ולכן גם לא נמצא בתוצאה הסופית שממזגת בין שניהם
ולמה הוא לא מופיע ב-qryDonation_TotalAmount שהוא תרם 0.00?
כי qryDonation_TotalAmount מבוסס על טבלת Donation ושם הרי לא מופיע תרומות של אפסים, אז אין לשאילתא שלנו (כרגע) שום מקור לשלוף את המידע
הבנתי נכון?כן, מצוין! (שאר התלמידים ישארו בסוף השיעור לנקות את הכיתה
)
הבעיה נוצרה כי השאילתא שלנו משתמשת בצירוף פנימי.
צירוף פנימי יציג נתונים רק כאשר יש מזהה תואם בשתי מקורות הנתונים, דהיינו בשתי השאילתות שלנו.
וכמו שציין יפה @ בערל, בשאילתת הסיכום לא מופיע המזהה של ישראל יעקב, כי היא מבוססת על טבלת התרומות (שבה הוא לא נמצא עדיין) ולא על טבלת התורמים (שבה הוא נמצא)
בואו נפתח שוב את השאילתא, ונעבור לתצוגת SQL. שימו לב למילים INNER JOIN שהדגשתי בצהוב, שפירושן צירוף פנימי:
כדי שהשאילתא תציג את כל התורמים, אנו צריכים ליצור צירוף חיצוני.
צירוף חיצוני מציג את כל הנתונים ממקור נתונים אחד, ורק את הרשומות התואמות מהמקור השני. למקור הנתונים שאנו רוצים להציג את כולו, קוראים טבלת הבסיס. ולשני קוראים טבלת המשנה.
זה בעצם מה שאנחנו מבקשים: להציג את כל הרשומות משאילתת השמות (בסיס), ורק את הרשומות התואמות משאילתת הסיכום (משנה).
נחזור לתצוגת עיצוב. נקליק פעמיים על הקו המקשר בין השאילתות, והחלון הבא יצוץ:
שימו לב שאקסס קראה לשאילתת השמות: הטבלה השמאלית, ולשאילתת הסכומים: הטבלה הימנית, למרות שבחלון שנפתח המיקום שלהן הפוך. זה בגלל שאקסס מתורגמת מימין לשמאל, ואילו שפת SQL משתמשת בתחביר של אנגלית, שבה הטבלה הראשונה נכתבת משמאל לטבלה השניה... בגרסא האנגלית של אקסס המיקום שלהן נכון.יש כאן שלוש אפשרויות:
- אפשרות ברירת המחדל: רק השורות בהן המזהה שווה. זהו צירוף פנימי.
- כל הרשומות מטבלת השמות (=השמאלית) ורק הרשומות הרלוונטיות מטבלת הסכומים (הימנית)
זה נקרא צירוף חיצוני שמאלי. - כל הרשומות מטבלת הסכומים (הימנית) ורק הרשומות הרלוונטיות מטבלת השמות (=השמאלית)
זה נקרא כמובן צירוף חיצוני ימני.
אז מה האפשרות שאנו מבקשים?
נכון, אפשרות מספר שתיים.
נבחר ונאשר.
תראו מה קרה לקו המחבר:
הוא הפך לחץ! אקסס מודיעה לנו שיש כאן צירוף חיצוני. טבלת הבסיס היא הטבלה שממנה יוצא החץ, וטבלת המשנה היא הטבלה שאליה החץ מגיע.הערה: המונח צירוף חיצוני שמאלי או ימני עלול לבלבל אותנו לא מעט, כי באמת יש כאן יש צירוף שמאלי ואילו המיקום של הטבלאות במעצב השאילתא הוא הפוך (טבלת הבסיס בצד ימין). כשנרצה לכתוב SQL טהור, נזכור שצירוף שמאלי גורם שטבלת הבסיס היא השמאלית, דהיינו זו שמופיעה ראשונה במשפט ה-JOIN, כי באנגלית כותבים משמאל לימין.
למזלנו, אקסס דואגת להבהיר את העניינים על ידי חץ פשוט. כמה נהדר!
נעבור לתצוגת גליון נתונים, ,ונראה שהפעם השאילתה קיבצה נדחי ישראל:
אבל עדיין יש עבודה.
שימו לב שהסכום של ישראל הוא ריק ולא מכיל 0.
הערה: כאשר שאילתת צירוף חיצוני לא מוצאת רשומה עם מפתח תואם בטבלת המשנה, היא מחזירה ערך מיוחד שנקרא NULL, שפירושו = כלום, שום דבר, גורנישט, וכו'.
אם ברצוננו להציג שם אפס, צריך ליצור שדה מחושב:
נחזור לתצוגת עיצוב, נבחר את השדה TotalAmount, וניכנס לבונה הביטויים:
נרשום שם את הנוסחה הבאה:
נלחץ על אישור, ונעבור לתצוגת גליון נתונים כדי לראות את התוצאות:
עכשיו לישראל מופיע אחר כבוד סכום תרומות כולל של 0.מי שם לב למשהו לא בסדר?
מישהו?
נכון מאוד. העמודה של הסכום קיבלה שם מוזר Expr1...
אני לא זוכר שנתתי לה שם כזה...
נחזור לתצוגת העיצוב, ונרחיב את העמודה השלישית כדי לראות את הנוסחא:
ונראה שאקסס נתנה את השם Expr1 לעמודה:
מה הפשט?
זה קרה בגלל שכתבנו נוסחא אך לא סיפקנו שם לשדה. לכל שדה חייב להיות שם, ולכן אקסס נתנה לו את השם הכללי Expr1, דהיינו "ביטוי מספר 1".בואו נשנה את השם ל: DonorTotaDonation:
נפתח בתצוגת גליון נתונים, ונראה שהכל בסדר:
הערה: נתנו לעמודה את השם DonorTotalDonation, ולא TotalAmount מפני שאם כן, הנוסחא היתה
TotalAmount: IIf(TotalAmount Is Null, 0, TotalAmount)
מה שהיה יוצר הפנייה מעגלית בנוסחא, כי שם השדה זהה לשם המשתנה בנוסחא. כמו לומר לילד קטן: לך תקרא לי מבחוץ.
מה שמביא אותי להערה הבאה:
שִיוּם, Naming (= מתן שמות) הוא מלאכה חשובה, וקשה לעתים באופן מפתיע. שיום טוב יכול להקל עלינו כל כך, ושיום גרוע יכול לגרום לנו רגשות קשים מאוד... יש כמה כללי אצבע בזה, וגם כמה מחלוקות, בנוסף על הטעם האישי של המתכנת. השמות שבחרתי לטבלאות, לשאילתות והשדות, מסתמכים על כמה הרגלים שפיתחתי.
יופי!
נשמור את השאילתא בשם: qryDonor_TotalDonation
ונצא להפסקה. -
חלק י: שיעורי בית
חלק מהמטלות שאני אתן הן קלות, וחלק יותר מאתגרות.
מה שחשוב זה להנות ולא להיבהל...
גם כשלא מצליחים - זהו חלק חשוב מתהליך הלימוד!- הוסף מיון לשאילתת השמות, כך שהיא תציג את שמות התורמים לפי סדר הא"ב.
- הוסף לשאילתת הסיכום גם שדה בשם DonationCount שיכיל את מספר התרומות של כל תורם. דהיינו עבור אברהם יופיע 3, ליצחק יופיע 1, וליעקב יופיע 0 בדוגמא שלנו.
- סדר את שאילת הסכומים לפי סכום התרומות בסדר יורד, כלומר שבשורה הראשונה יופיע התורם שתרם הכי הרבה.
- אני רוצה לשמור עבור כל תורם את פרטי ההתקשרות עמו. כלומר שעבור כל תורם יהיה יומן שיחות עם תאריך השיחה ותקציר השיחה. צור טבלה חדשה בשם DonorConversation כדי לנהל את פרטי ההתקשרות. חשוב: אילו שדות אמורים להופיע בטבלה?
- צור קשר גומלין מתאים בין טבלת התורמים לטבלת השיחות.
- צור טופס חדש בשם frmDonorConversation שמציג את פרטי ההתקשרות.
- הטמע את הטופס הנ"ל בטופס התורמים הראשי, כך שליד רשימת התרומות תוצג גם היסטוריית השיחות.
בהצלחה לכולם!
בפוסט הבא נציג את הפתרונות בע"ה. -
חלק יא: פתרונות לשיעורי הבית
שוב יש"כ ל @בערל על התשובות, למעשה הוא ענה נכון על כל המטלות. אני בכל זאת אביא כאן גם את התשובות שלי:
- כדי לא להשאיר את המדריך חסר
- כי יש לי הערות קטנות פה ושם
אז מה היה לנו?
- הוסף מיון לשאילתת השמות, כך שהיא תציג את שמות התורמים לפי סדר הא"ב.
טוב, אז אמנם לא למדנו איך למיין עמודות, אבל מי שקצת מחפש רואה את השורה של המיון:
- הוסף לשאילתת הסיכום גם שדה בשם DonationCount שיכיל את מספר התרומות של כל תורם. דהיינו עבור אברהם יופיע 3, ליצחק יופיע 1, וליעקב יופיע 0 בדוגמא שלנו.
גם כאן, מי ששם לב כשבנינו את עמודת הסיכום בשאילתת הקיבוץ, הבחין שיש עוד נוסחאות לבחירה, אחת מהן היא Count, שהיא פשוט סופרת את מספר הרשומות עבור שדה מסויים:
הערה: בתור פרקטיקה טובה, אני רגיל לספור את המופעים של השדה המזהה בטבלה, דהיינו השדה ID, מפני שהוא תמיד מכיל ערך. אם הייתי בוחר בשדה שחלק מהשורות שלו מכילות לפעמים NULL, הפונקציה Count לא סופרת את השורות האלו. אכן לעתים זה כן שימושי להתעלם מהן, והכל לפי העניין.- סדר את שאילת הסכומים לפי סכום התרומות בסדר יורד, כלומר שבשורה הראשונה יופיע התורם שתרם הכי הרבה.
זה פשוט, על ידי הוספת מיון לעמודת הסכומים:
4.אני רוצה לשמור עבור כל תורם את פרטי ההתקשרות עמו. כלומר שעבור כל תורם יהיה יומן שיחות עם תאריך השיחה ותקציר השיחה. צור טבלה חדשה בשם DonorConversation כדי לנהל את פרטי ההתקשרות. חשוב: אילו שדות אמורים להופיע בטבלה?
גם זה ממש דומה לטבלת התרומות, ישר כח לכל מי שזכר גם פה לספק ערך ברירת מחדל לזמן השיחה:
- צור קשר גומלין מתאים בין טבלת התורמים לטבלת השיחות.
בבקשה:
הערה: בפתרון ש@בערל הביא, הוא ייבא את טבלת התורמים שוב, עם הכינוי Donor_1. זהו כינוי שנוצר אוטומטית על ידי אקסס כשמייבאים פעמיים את אותה הטבלה למשטח העבודה. אני מעדיף את הדרך שלי, כי היא נראית יותר קריאה, הכינוי Donor_1 נותן אשליה של שתי טבלאות. מלבד הקריאוּת של קשרי הגומלין, אני לא חושב שיש הבדל בשטח בין הפתרון שלו לשלי. אשמח אם מישהו יוכל להוסיף ולהרחיב בעניין.
- צור טופס חדש בשם frmDonorConversation שמציג את פרטי ההתקשרות.
שני קליקים וסיימתי:
7.הטמע את הטופס הנ"ל בטופס התורמים הראשי, כך שליד רשימת התרומות תוצג גם היסטוריית השיחות:
שוב, קלי קלות, פשוט לגרור את הטופס לתוך הטופס הראשי:
סיכום:
המטלות האלו הראו לנו באיזו קלות (יחסית) ומהירות אקסס מאפשרת לנו ליצור מערכת עובדת ולהוסיף לה פונקציונאליות.
זה דבר שככל הידוע לי, אין לו עדיין אח ורע במערכות אחרות.
אקסס משלבת בין בסיס נתונים, וממשק משתמש בצורה הכי חלקה וקלה שאפשר.כאן בונים
מי שחוש העיצוב שלו מפותח אפילו מעט, יכול להרים גבה ולומר: מה זה העיצוב הזה? ככה לא בונים טופס, ואיך אפשר להשתמש בזה בכלל?
על זה יש לי שתי תשובות:
א. MVP
לא, אני לא מתכוון לדגם של מאזדה. MVP הוא קיצור של Minimum Viable Product.ההגדרה הרשמית (לפי המכלול) : מוצר בר-קיימא מינימלי הוא מוצר עם המינימום ההכרחי של תכונות כך שלקוח יוכל להשתמש במוצר.
ההגדרה הרחובית משהו היא: בוא ניקח את הרעיון החלומי שלך, נוריד ממנו את כל חווית המשתמש, ואת כל הרעש והצלצולים, ונשאיר רק את השלד והעצמות כך שזה עדיין יוכל לעבוד...
אבל צחוק בצד, זה השלב הראשון והחשוב מאוד בפיתוח תוכנה.
באופן עקרוני אני לא מתכוון כרגע להשקיע כמעט כלום בעיצוב. אני אתייחס לאקסס במדריך הזה ככלי שאמור לפתור לי את הבעיה שאני מבקש לפתור, והיא בניית מערכת לניהול תורמים.
ברגע שהמערכת עובדת, אוכל להשקיע מזמני החופשי שאין לי, ולעצב כל קוצו של יוד.
ב. סבתא אקסס
כנגד היכולות הגבוהות שלה בפיתוח, אקסס מאד דלה בצד של חווית המשתמש.למרות שאפשרי בהחלט לשוות לה מראה מתקדם יותר, אנחנו די מוגבלים בזה. אפשרי לייבא מבחוץ כל מיני פקדים חיצוניים, או לכתוב בעצמנו שורות ארוכות של קוד, אבל ככל הנראה עדיף שנוותר. אם אנחנו מחפשים ממשק מתקדם ועכשווי, צריך להכיר בעובדה שאמנם אקסס יפה היא, אלא שהעניות מנוולתה.
טוב די עם הפיטפוטים.
בשיעור הבא נוסיף עוד מימד למערכת ניהול התורמים, והוא: רשימת הנתמכים.
יהיה מעניין בעז"ה. -
חלק יב: רשימת הנתמכים
בואו נראה מה עשינו עד עכשיו.
יש לנו מערכת שיכולה לנהל מאגר תורמים.
לכל תורם יש רשימת תרומות וכן יומן התקשרויות.
אני יודע לסכם את כל התרומות שהתקבלו לפי תורם.כעת אני רוצה לעבור לצד השני של הנתמכים.
אני רוצה לנהל מאגר של משפחות נתמכות, ולייעד אליהם את התרומות שהתקבלו.
אבל יש לי כמה כללים:
-
לכל משפחה במערכת, אני רוצה לנהל רשימה של תורמים פוטנציאליים, שנראה לי שהם יתחברו למקרה שלה, ויהיו מעוניינים לתרום לה, כך שעבודת השנור שלי תהיה יותר ממוקדת.
-
התורם הנדיב, בבואו לקיים מצווות צדקה, יוכל לבחור מתוך שתי אפשרויות של תרומה:
א. לייעד את התרומה עבור משפחה מסויימת, מתוך רשימת המשפחות שמשודכות אליו.
או
ב. לתרום תרומה כללית לקופה, ללא ייעוד למשפחה מסויימת. במקרה הזה, תהיה לי האפשרות, כמנהל של המערכת (נרו יאיר), לייעד את התרומה לאיזו משפחה שארצה.נשמע מורכב? בואו נתחיל עם מה שכבר אנו יודעים.
ניצור טבלה חדשה עבור המשפחות, עם השדות הבאים:
הערה: מובן שרשימת השדות לעיל היא חלקית ואינה מספקת. לצורך ההדרכה, יצרתי בכוונה רק את השדות הבסיסיים ביותר.
שימו לב, ששדה תיאור המקרה מוגדר כטקסט קצר. ולכן הוא מוגבל עד 255 תווים. לכאורה טיפוס הנתונים העדיף לשדה זה היא "טקסט ארוך". באופן כללי אני נמנע מלהשתמש בטיפוס הנתונים הזה באקסס.
למה?
טקסט ארוך מאוחסן בבסיס הנתונים באופן שונה לגמרי מטקסט קצר. בעבר יצא קול על אקסס בנוגע לשגיאות שהטיפוס הזה גרם. במקרים שבהם אני ממש זקוק לשדה עם טקסט ארוך, אני שומר את השדה הזה בקובץ נתונים נפרד לגמרי משאר הנתונים.
הערה: שימו לב גם לשדה האחרון, ששומר את זמן יצירת הרשומה. אקסס לא מספקת לנו מידע על זמן יצירת הרשומה בטבלה, והרבה פעמים זה מסייע מאוד בתחזוקה. בתור הרגל טוב אני מוסיף אותו כמעט לכל טבלה.
נשמור את הטבלה בשם Family.
עכשיו יש לנו בעיה.
איך מגדירים את קשרי הגומלין בין המשפחות לתורמים?
אחרי ההתבוננות, נשים לב כי לכל תורם יכולות להיות כמה משפחות קשורות, אז לכאורה זה קשר של יחיד-רבים... אבל גם לכל משפחה יכולים להיות כמה תורמים קשורים!
אחרי עוד קצת עיון
, נראה שהדרך לשמור את הנתונים על הקשרים בין התורמים למשפחות, היא על ידי רשימה של זוגות:
משפחה-תורם.
משפחה-תורם.
משפחה-תורם.לקשר הזה קוראים קשר של רבים לרבים. והדרך ליישם אותו בבסיס הנתונים היא על ידי טבלת עזר, או טבלת זוגות.
צרו טבלה חדשה עם השדות הבאים:
נסו לשמור את הטבלה בשם: Family_Donor... אקסס תקפיץ לכם את החלון הבא:
מה קרה?
אקסס דואגת לנו שנעבוד נכון!לא הגדרנו שדה מזהה בטבלה, ואקסס מתריעה על כך.
הממ... נוכל להוסיף את השדה ID כמו קודם... אבל אם נחשוב על כך, אין לו כל כך משמעות בטבלה הזו, כי עבור כל מזהה משפחה FamilyID, אין לי חשיבות לשורה מסויימת אחת בלבד של מזהה תורם DonorID, אלא אני תמיד אצטרך לייבא את כל השורות ששייכות אליה בבת אחת, מבלי חשיבות לסדר.
הנכון הוא לקבוע כי שתי השדות גם יחד הם שדה המפתח של הטבלה. הגדרה כזו נקראת מפתח מרוכב (Composite Key)
לשם כך נבחר את שתי השורות יחד, על ידי גרירה של הריבוע האפור מימין לשם השדה:
עכשיו נלחץ בתפריט על הסמל של המפתח הראשי, ונבחין כי נוסף סימון של מפתח לפני שתי השורות:
מעולה. עכשיו נוכל לשמור את הטבלה בשלווה, בלי שום התראות מאקסס.
נעבור כעת להגדרת קשרי הגומלין, ונוסיף את הטבלאות החדשות Family, Family_Donor למשטח העבודה.
נגדיר את קשרי הגומלין לפי התמונה הבאה:
שימו לב שניתן להסיק מהתמונה המדהימה הזו, כי הקשר בין התורמים למשפחות הוא קשר של רבים-לרבים, כי לפי הסימון על החיצים לכל משפחה יכולות להיות הרבה רשומות קשורות בטבלת הזוגות, וכן לכל תורם יכולות להיות הרבה רשומות קשורות בטבלה הזו.
כל הכבוד!שיעורי בית
צור שני טפסים חדשים, אחד עבור המשפחות, ואחד עבור טבלת הזוגות.בפוסט הבא ניצור את הטפסים המתאימים לניהול הטבלאות שהוספנו.
-
-
(אני זוכר שהבטחתי להמשיך עם הטפסים, אבל עכשיו זה הזמן המתאים להכיר את... )
חלק יג: נפלאות התיבה המשולבת
כל טופס מכיל בתוכו פקדים. הפקדים הם הרכיבים החזותיים המרכיבים את ממשק המשתמש.
אם נתבונן בטפסים שאקסס הכינה עבורנו, נראה שיש שם שני סוגי פקדים: תווית, ותיבת טקסט:
נבחין בין שתי מחלקות של פקדים:
- פקד סטטי - פקד שהערך שהוא מציג הוא קבוע. כלומר המשתמש לא יכול לשנות ישירות את הערך שלו. התווית, למשל, היא פקד סטטי.
- פקד דינמי - פקד שהערך שהוא מציג אינו קבוע. כלומר המשתמש יכול לשנות ישירות את הערך שלו. תיבת הטקסט, למשל, היא פקד דינמי.
את הפקדים הדינמיים גם נחלק לשני סוגים:
- פקד מאוגד - פקד הקשור ישירות לשדה כלשהו בטבלה. שינוי של הערך בפקד - גורר עדכון מיידי של הערך שלו בטבלה. תיבת שם המשפחה של התורם, למשל, היא פקד מאוגד.
שימו לב שזה נכון רק בכיוון אחד, דהיינו מהטופס לטבלה, לעומת זאת בכיוון ההפוך זה לא כך: אם הערך של השדה בטבלה ישתנה – השינוי לא ישתקף בפקד עד לריענון הטופס. (ישנם אירועים שונים שגורמים לטופס להתרענן, וכן ניתן תמיד לרענן את הטופס על ידי הקשה על מקש F5)
- פקד לא מאוגד - לא מאוגד לשדה כלשהו בטבלה.
שימו לב, הפקד הלא מאוגד מסוגל להכיל ערך, אך הערך אינו נשמר בטבלה, אלא מאוחסן ברמת הטופס בלבד. לפקד הלא מאוגד שימושים חשובים.
התוית ותיבת הטקסט הם מן הסתם הפקדים הנפוצים ביותר.
במקום השלישי והמכובד, נמצאת התיבה המשולבת (ComboBox)
בשונה מתיבת טקסט פשוטה, התיבה המשולבת מאפשרת לנו לבחור ערכים מתוך רשימה מוגדרת מראש, ובכך היא:
- מקצרת את זמן הכנסת הנתונים – כי היא יכולה להשלים את הטקסט באופן אוטומטי.
- מוודאת את תקינות הנתונים שהכנסנו – כי היא מאפשרת ערכים מוגדרים מראש, כנ"ל.
- מאפשרת לנו להציג באלגנטיות את הנתונים בצורה קריאה, עבור שדות מפתח.
היתרונות האלו משדרגים את חווית המשתמש באופן מהותי.
בואו נראה.פתחו את טבלת התרומות Donation בתצוגת עיצוב. עברו לשדה DonorID, ולמטה במפייני השדה שלו, בחרו בלשונית "בדיקת מידע":
נבחין כי כרגע השדה מוגדר כתיבת טקסט. אם נקליק עם הסמן על השורה, נראה בצד שמאל שלה חץ קטן למטה, נלחץ עליו ונבחר מהרשימה את התיבה המשולבת:
נקבל שלל של אפשרויות חדשות!
הכניסו את הערכים הבאים, כפי שהם מופיעים בתמונה:
שימרו את הטבלה ועיברו לתצוגת גליון נתונים. בשורה הראשונה, כנסו לשדה של DonorID ותבחינו כי יש חץ קטן למטה בסוף השדה. זה מציין כי השדה מוצג כתיבה משולבת. לחצו על החץ:
אקסס תציג לנו את שם התורם המלא ליד המזהה שלו!איך זה קרה?
בואו נחזור על מה שעשינו:א. שינינו את מאפייני השדה כך שיציג תיבה משולבת במקום תיבת טקסט רגילה.
ב. הגדרנו את מקור השורה של התיבה המשולבת להיות השאילתא qryDonor_FullName שכזכור, מציגה את שם התורם המלא לצד המזהה שלו.
ג. הגדרנו את מונה העמודות ל-2, כך שיוצגו שתי העמודות הראשונות בשאילתא.כעת שימו לב שבהגדרות התיבה המשולבת, מוגדרת העמודה המאוגדת להיות מספר 1:
העמודה המאוגדת היא הערך האמיתי שנשמר בשדה שבטבלה. במקרה שלנו, העמודה הראשונה של השאילתא qryDonor_FullName היא המספר המזהה-ID של התורם (ולא השם המלא-FullName)מה שמביא אותנו לשלב הבא:
בואו נסתיר לגמרי את המזהה של התורם!כנסו שוב למאפייני השדה של DonorID, והפעם, הוסיפו במאפיין "רוחב עמודות" את הטקסט הבא
4;0
:
כך אנו מגדירים את רוחב העמודות שיוצגו בתיבה המשולבת (משמאל לימין). דהיינו:
עמודה מספר 1 תוצג ברוחב 0 ס"מ (=מוסתרת)
עמודה מספר 1 תוצג ברוחב 4 ס"מ
שימרו את הטבלה ועברו לתצוגת גליון נתונים. שימו לב שעכשיו מוצגים שמות התורמים בלבד, ללא המזהה שלהם:
שנו את תרומה מספר 1 לתורם ישראל יעקב:
ראיתם כמה שזה קל וברור! זוהי העוצמה שבתיבה המשולבת. הנה כל היתרונות שציינתי בהתחלה:1. מקצרת את זמן הכנסת הנתונים – ברור.
2. מוודאת את תקינות הנתונים שהכנסנו – נסו להקליד שם תורם שלא קיים...
3. מאפשרת לנו להציג באלגנטיות את הנתונים בצורה קריאה, עבור שדות מפתח - כמו שציינתי, למרות שהערך המוצג הוא שם התורם, הנתון שמאוחסן בפועל בטבלה הוא המזהה של התורם (ID).מקווה שהכל היה ברור. מעכשיו התיבה המשולבת תהיה הפקד החביב עלינו.
שיעורי בית:
- צרו שאילתא חדשה: qryFamily_FullName ובה שני שדות: המזהה של המשפחה ID, ושדה מחושב FamilyFullName שמחבר את שם המשפחה, שם האב, וא"ו החיבור ושם האם, כך שתתקבלנה התוצאות הבאות:
ID FamilyFullName 1 ראובני אברהם ושרה 2 שמעוני יצחק ורבקה
וכו'.
- בטבלה Family_Donor שנו את הגדרות השדה FamilyID כך שיציג (בתיבה משולבת) את שם המשפחה המלא במקום את המספר FamilyID (השתמשו כמובן בשאילתא שהכנתם בסעיף א), ואת הגדרות השדה DonorID כך שיציג את שם התורם.
בהצלחה רבה!
בפוסט הבא נציג אי"ה את הפתרונות (גם לשיעור שעבר).