פרק כד: עושים סדר: חלק ג: תפריטים ופקדי ניווט, פונקציונאליות ברשימת המשפחות
שלום לכולם! מקווה שנהנתם מהחופש הגדול...
היום הגענו לחלק די קל ומהנה (יחסית...) והוא בניית התפריטים.
אחד הדברים שחסרים מאוד במערכת שלנו הוא התפריט הראשי, (או הדשבורד), שדרכו ננווט את דרכנו בין הטפסים השונים, במקום לבחור בכל פעם את הטופס מהפנל מימין.
אני רוצה ליצור משהו כזה:
929e98e0-7562-4e49-a60f-0a3e19ce26ba-תמונה.png
למרבה המזל, לאקסס יש מנגנון מובנה לניהול הניווט בין טפסים, בשם פקד הניווט.
אז בואו ניצור משהו כזה.
שלב א: יצירת טופס תפריט המשפחות
נפתח טופס חדש ריק, על ידי יצירה > עיצוב טופס.
נבחר מתפריט העיצוב את פקד הניווט:
61ed66c8-6c6a-49f5-8bf9-5a4114bce9a8-תמונה.png
ואז פשוט נקליק בתוך הטופס קרוב לפינה הימנית העליונה:
0d5c7b84-09e4-4a24-8d64-f05976996eb5-תמונה.png
אקסס תיצור עבורנו פקד ניווט:
779206f3-882f-4bbc-b756-7694ed7498e8-תמונה.png
לפקד הניווט שני חלקים:
החלק העליון הוא
פקד הניווט עצמו, זהו בעצם
התפריט, שמכיל את הלחצנים לבחירת הטפסים לתצוגה.
החלק התחתון הוא פקד
טופס המשנה לניווט, ותפקידו להציג בתוכו את הטפסים שבחרנו מן התפריט.
הערה חשובה: כברירת מחדל, שם פקד טופס המשנה הוא "NavigationSubform". למרות שאפשר לשנות את שמו לכל שם שנרצה,
לעת עתה נשאיר אותו עם שם זה. פרט זה יתגלה כחשוב בהמשך הדרך.
נוסיף לחצן לפקד הניווט על ידי לחיצה על המקום שמסומן [הוסף חדש], ונרשום בתוכו "רשימת משפחות". אקסס יצרה עבורנו לחצן חדש:
a1142b9b-6195-4492-8f19-eaa454574989-תמונה.png
נגדיל את הלחצן כך שיציג את כל הכיתוב:
758a4992-e004-4c80-a6b5-d7411662a887-תמונה.png
נוסיף עוד לחצן עם הכיתוב "כרטיס משפחה":
cff8531e-602b-4a9d-bb4e-9efaf52ce9d0-תמונה.png
כעת נותר לנו להגדיר איזה טופס ייפתח על ידי כל לחצן.
ניכנס למאפיינים של הלחצן הראשון (רשימת המשפחות), ובלשונית הנתונים נבחר את המאפיין "שם יעד ניווט", ונבחר מתיבת הרשימה המשולבת את טופס רשימת המשפחות frmFamilyList:
51f0751a-69df-48cc-91c1-d5cde737dad6-תמונה.png
באופן דומה, גם בלחצן השני, נבחר את שם יעד הניווט להיות טופס כרטיס המשפחה frmFamilyCard:
4da4aa8a-1182-4f17-af7f-856644ad27da-תמונה.png
לסיום, נסיר מן הטופס את הפקדים המיותרים: בוררי הרשומות, לחצני ניווט ופסי הגלילה: (להלן: "שלשת המעצבנים")
50efdb0e-dfef-428f-a7ca-f51e02ffd7c0-תמונה.png
ונצמצם את השוליים המיותרים מסביב לפקד הניווט (מסומנים בכתום):
d673cde3-9d38-4c66-85f1-cd7651ad2743-תמונה.png
נסגור את הטופס ונשמור אותו בשם navFamilies.
כעת פתחו את הטופס שיצרנו ובידקו את לחצני הניווט:
33298f0e-8cb3-45a3-9509-2ec6ca431b0a-תמונה.png
1bc0fe86-ab00-4812-8ef3-d9ce8b3dc785-תמונה.png
שלב ב: יצירת טופס התפריט הראשי
בדומה לשלב הקודם, נפתח טופס חדש ריק, על ידי יצירה > עיצוב טופס, ונוסיף אליו פקד ניווט, ונוסיף שלושה לחצנים כפי שמופיע בתמונה הבאה:
b0fefc87-12a4-45e7-a8f3-ed955d07a0ee-תמונה.png
כעת נהפוך את הכיוון של התפריט לאנכי.
לשם כך נבחר את פקד הניווט כולו (זוכרים? החלק העליון) על ידי הקלקה במקום הריק (לא על לחצן):
c79ac8cc-4754-420f-a1d9-59007a192374-תמונה.png
שימו לב שכל פקד הניווט מסומן כעת.
מתוך המאפיינים בלשונית התבנית נגדיר את המאפיין "מרחב" ל-"אנכי". שימו לב לשינוי בפריסת הלחצנים, כעת הם מופיעים מלמעלה למטה:
cc6ce00b-e005-465f-b735-660af708bd7e-תמונה.png
אך עדיין פקד הניווט מופיע בצמוד לחלק העליון של טופס המשנה, ולא מצידו הימני כמו בתכנון.
אל דאגה, נשנה זאת מיד: נגרור את כל פקד הניווט, כך שיופיע בצמוד לדופן הימנית של טופס המשנה.
שימו לב לגרור אותו אל הדופן הימנית ממש, כך שיוצג קו בצבע ורוד חלש בצד ימין:
240fd155-ddf3-4577-8221-4ba8e4e3a283-תמונה.png
כעת נקטין את רוחב פקד הניווט לגודל יותר סביר:
26b9919a-dd02-40f6-b134-528f7af8257e-תמונה.png
נגדיר את שם יעד הניווט עבור לחצן המשפחות להיות טופס תפריט המשפחות שיצרנו היום: navFamilies. (בינתיים יש לנו רק את תפריט המשפחות, את שני התפריטים של התורמים והתרומות ניצור בהמשך.)
לסיום – גם כאן נסיר את הפקדים המיותרים בטופס (שלשת המעצבנים כדלעיל), ואת השוליים המיותרים מסביב לפקד הניווט.
נשמור את הטופס בשם navMain.
להלן התוצאה:
9d35ed40-74d8-4c8e-9561-7f64ac3fe405-תמונה.png
נהדר, זה לא היה קשה, נכון?
קחו אויר, כי החלק הבא קצת יותר מורכב.
שלב ג: הוספת פונקציונאליות ללחצנים שבטפסים
נשאר לנו כעת לחבר את הלחצנים שבטפסי המשפחה (אלו שיצרנו בפרק כב). נתחיל עם טופס רשימת המשפחות.
לחצן תצוגת המשפחה
פתחו את הטופס בתצוגת עיצוב, ובחרו את לחצן הצגת המשפחה. שנו את שמו ל: cmdViewFamilyCard:
14cfc6d5-ef64-4b6b-90d5-9bee54fd7eb7-תמונה.png
כעת נגדיר פונקצית אירוע לחיצה:
בלשונית אירוע, בחרו את האירוע בעת לחיצה, ופתחו את בונה הקוד על ידי לחיצה על שלושת הנקודות … ובחירה באפשרות בונה הקוד.
אקסס תיצור תבנית עבור פונקצית הארוע של הלחצן.
הוסיפו בגוף הפונקציה את השורה הבאה:
DoCmd.BrowseTo acBrowseToForm, "frmFamilyCard", "navMain.NavigationSubform>navFamilies.NavigationSubform", "ID=" & Me.ID
הסבר הקוד:
אנו משתמשים כאן באובייקט DoCmd שראינו בעבר, המכיל פונקציות שונות באקסס. מתוכו אנו מפעילים את הפונקציה BrowseTo שתפקידה לנווט אל טופס מסויים. הפונקציה מקבלת כמה פרמטרים:
65ae142a-605d-4230-9469-b47200ef9bbb-תמונה.png
הפרמטר הראשון acBrowseToForm מציין את סוג האובייקט לתצוגה. במקרה שלנו הוא טופס.
כדי להציג דוח במקום טופס, יש לציין acBrowseToReport במקום acBrowseToForm.
הפרמטר השני "frmFamilyCard" מציין את
שם הטופס לפתיחה הלא הוא כרטיס המשפחה.
הפרמטר השלישי "navMain.NavigationSubform>navFamilies.NavigationSubform" מציין את
הנתיב שבו ייפתח הטופס.
כיוון שבנינו מערכת של תפריטי ניווט מקוננים (תפריט ראשי>תפריט המשפחות) אנו צריכים לציין במפורש את כל המסלול שדרכו נגיע ליעד המבוקש (טופס המשנה של תפריט המשפחות). התחביר הוא כך:
שם_טופס_הניווט.שם_פקד_טופס_המשנה (כברירת מחדל הוא NavigationSubform)
אם יש כמה טפסי ניווט אחד בתוך השני (כמו אצלנו), מפרידים ביניהם על ידי הסימן "גדול מ" <.
כך מתקבלת התוצאה הנ"ל.
שימו לב שיש להוסיף גרשיים מסביב לנתיב, כי הוא צריך להיות מועבר לפונקציה כמחרוזת.
הפרמטר הרביעי "ID=" & Me.ID מציין
קריטריון לחיפוש רשומה מבוקשת לתצוגה.
פרמטר זה הוא אופציונאלי, וכאשר מציינים אותו, אקסס תחפש בטופס שנפתח את הרשומה המתאימה לקריטריון, ותקפוץ אליה בפתיחת הטופס.
לדוגמא, אם אנו רוצים להציג את המשפחה שהמזהה ID שלה הוא 7, עלינו להעביר לפונקציה את הקריטריון: "ID=7".
הואיל וברצוננו להציג את המשפחה המתאימה לשורה שבה לחצנו על הלחצן, ואנחנו לא יודעים מה יהיה המזהה שלה, נוכל לקבל את המזהה שלה על ידי האובייקט Me.ID וניצור את הקריטריון המתאים על ידי חיבור מחרוזות.
הערה: ההסבר לעיל עלול לבלבל מאוד מתכנתים בתחילת הדרך.
אם אתם כאלו, זה נורמלי לחלוטין, ואין צורך להיבהל. כתיבת והבנת קוד, כמו כל מיומנות, הולכת ומשתפרת עם תרגול.
כמובן שישנה גם האפשרות שההסבר שלי לא מספיק ברור...
בכל מקרה, אל תזיעו יותר מידי. אני מבטיח שהעסק נהיה יותר קל עם הזמן.
שימרו את הטופס.
כעת פיתחו את טופס התפריט הראשי navMain, בחרו את תפריט המשפחות, וברשימת המשפחות בידקו שהלחצן "הצג" עובד כראוי.
טעות בכתובת
הניווט של אקסס אינו מושלם.
נסו לפתוח ישירות את הטופס של רשימת המשפחות frmFamilyList, וללחוץ על הלחצן "הצג".
למרבה התסכול, במקום להציג את הטופס, אקסס תציג הודעת שגיאה:
ad51c3b1-8ab4-4465-b976-e8857dd3fd0e-תמונה.png
מה קרה?
ההודעה הזו מוצגת מפני שאנו מנסים לגשת לנתיב שאינו קיים.
הרי בקוד צייננו שהנתיב המבוקש הוא "navMain.NavigationSubform>navFamilies.NavigationSubform". אבל הטפסים של הניווט navMain ו-navFamilies לא פתוחים כעת, ולכן הנתיב שגוי.
ישנה אפשרות על ידי קוד לפתור את הבעיה הנ"ל, אך לעת עתה נניח לה במקומה, ולא נלחץ על הכפתור הצג אם התפריטים לא פתוחים.
לחצן יצירת משפחה חדשה
בואו ניצור גם את הלחצן של יצירת משפחה חדשה. נבחר את הלחצן, וניצור עבורו פונקצית אירוע בעת לחיצה:
1e7bf761-05a7-43ec-8dff-e66bf5dbd51e-תמונה.png
לשמחתנו, הקוד הנדרש דומה לקוד הקודם (נוכל להעתיק ולהדביק, ולשנות כנדרש):
DoCmd.BrowseTo acBrowseToForm, "frmFamilyCard", "navMain.NavigationSubform>navFamilies.NavigationSubform", , , acFormAdd
הסבר הקוד:
השמטנו את הפרמטר הרביעי (כי אנו לא רוצים לקפוץ לרשומה מסויימת), וגם את הפרמטר החמישי (לא רלוונטי כעת).
הפרמטר השישי acFormAdd מורה לאקסס לפתוח את הטופס המבוקש במצב
הוספת נתונים, ולהציג רשומה חדשה בטופס.
שימרו את הטופס, פתחו את התפריט הראשי ובידקו שלחצן יצירת משפחה חדשה עובד כראוי.
לחצן מחיקת המשפחה
מחיקת משפחה היא תהליך מורכב, הואיל ויש לכל משפחה קשרי גומלין שונים. בנוסף, אני לא בטוח שכדאי לאפשר מחיקת משפחה מתצוגת הרשימה. לכן אני אחזור בי ואסיר את לחצן המחיקה מרשימת המשפחות, כדי לאפשר מחיקת משפחה רק מכרטיס המשפחה:
8cb6114f-a2b9-4c8e-9a41-ad0ffb38f4c0-תמונה.png
את הקוד עבור לחצני כרטיס המשפחה (כולל מחיקת משפחה) נשאיר לפעם הבאה אי"ה.