Combobox access
-
שלום לכולם
ידוע השיטה שכאשר רוצים להציג נתונים מטבלה אחרת על סמך ID מטבלה נוכחית, אפשר לעשות במקום קשר גומלין וכדומה, פשוט קומבו שבו הID הוא עמודה נסתרת, ומקור הקומבו הוא מאותה טבלה אשר בה נמצא התוכן התצוגתי. אולם דא עקא, כאשר אין ID מקביל בטבלה המציגה, אקסס מחליט על דעת עצמו ובלי שאיש ביקש זאת, לחשוף את ה ID, וזה למרות בקשות חוזרות ונשנות מהמאפיין רוחב עמודות להגדיר עמודה ראשונה לרוחב אפס, כלום, אטימות מוחלטת.......אם מישהו יודע פתרון זה יכול להציל הרבה כאב ראש.
תודה.
פורסם במקור בפורום CODE613 ב22/01/2014 15:17 (+02:00)
-
שלום וברכה
סליחה שאני מתפרץ ככה אבל... קודם כל עצם העובדה שיש לך ID בלי ערך מקביל, מעורר שאלה על נירמול הנתונים שלך, מאיפה הגיע ה ID הזה בכלל, הרי הוא מייצג ערך לא קיים.
בנוסף חושבני שזה לא תקלה כלל, להפך, כיצד תדע שיש ערך בשדה? אם הוא יוצג כריק, יתכן ובטעות יערכו אותו. ואם אינך מעוניין שיהיה אפשר לערוך, למה לך קומבו בוקס, עדיף תיבת טקסט עם ערך מחושב.פורסם במקור בפורום CODE613 ב22/01/2014 22:36 (+02:00)
-
שלום וברכה
סליחה שאני מתפרץ ככה אבל... קודם כל עצם העובדה שיש לך ID בלי ערך מקביל, מעורר שאלה על נירמול הנתונים שלך, מאיפה הגיע ה ID הזה בכלל, הרי הוא מייצג ערך לא קיים.
בנוסף חושבני שזה לא תקלה כלל, להפך, כיצד תדע שיש ערך בשדה? אם הוא יוצג כריק, יתכן ובטעות יערכו אותו. ואם אינך מעוניין שיהיה אפשר לערוך, למה לך קומבו בוקס, עדיף תיבת טקסט עם ערך מחושב.לא חייב.
דוגמא: אם יש ילד שקשור למוסד וכיתה, (2 שדות קומבו) ויש מקרה קיצון שהמשתמש העביר את הכיתה למוסד אחר, אז בטבלה של התלמידים יהיה שבירה של הID של הכיתה. (בעיקרון צריך בכזה מקרה לעשות עידכוןן בשאילתא כדי לעדכן את המוסד בתלמידים)
וזה בהחלט יכול לקרות.זה תקלה, כי זה יוצא רק בדוחות, ושם זה לא רלוונטי שזה נשבר....
פורסם במקור בפורום CODE613 ב22/01/2014 23:02 (+02:00)
-
שלום וברכה
סליחה שאני מתפרץ ככה אבל... קודם כל עצם העובדה שיש לך ID בלי ערך מקביל, מעורר שאלה על נירמול הנתונים שלך, מאיפה הגיע ה ID הזה בכלל, הרי הוא מייצג ערך לא קיים.
חבלזון, לאו בשופטני עסקינן, והתשובה איננה ממין הטענה, יש דברים התצוגה שלהם לפעמים דורשת לבקשת הלקוח, לעשות את הדברים ביתר קלות. דוגמא לנתונים "נורמליים", כשיש למשל חמש מאות תלמידים במוסד, אולם לא כולם מחוייבים בארוחות, אנחנו לא עושים שדה מיוחד לארוחות, כי מה יהיה כשירצו גם הסעות?? וצהרון?? ושיעורים פרטיים?? ועוד... ועוד... אז הנורמליזציה היא לעשות טבלה מיוחדת שמחזיקה מידע אודות חיובים של תלמיד, ותלמיד שאין לו חיוב בתחום מסויים, פשוט אין לו שורה.
כעת כשדורשים ממך לעשות דוח שיציג את כל התלמידים, ויציג ערך בשדה האם מחוייב על ארוחות, במקום לעשות dlookup או dcount וכדומה, שלוקח כשלושת אלפים שנה להריץ אותו על חמש מאות תלמידים (הואיל והפונקציות הללו מבית האופה של מייקרוסופט, בנויים בצורה כה מטופשת, שהם מאחזרים את כל הטבלה על מנת להחזיר ערך בודד, ולוקחים פי חמישים יותר זמן משאילתת סלקט פשוטה), עושים קומבו שמקור הרשומה שלו מבוסס על סלקט, אולם אזי כאשר אין שורה מתאימה, במקום שיופיע 0 או פשוט ערך null בסכום החיוב, מופיע לי 987768904509987234987475441389674647876 שזהו הID של התלמיד.... אז מה בדיוק אני אמור לעשות??? דו"ח שעד שהוא יעלה לאוויר, הילד כבר יעזוב את הת"ת?????
(ולמי שיישאל למה לא עושים שאילתת סלקט מקוננת, התשובה היא כי בדוחו"ת הוא לא נותן לעשות גרופ בי מדורג כאשר יש שאילתת משנה, למה? ככה!)
קליק וואן תודה על ההגנה...
פורסם במקור בפורום CODE613 ב22/01/2014 23:11 (+02:00)
-
לצערינו זה שינוי של מייקרוסופט מגירסה 2007, (קיים בדוחות ולא בטפסים).
הייתי עושה את הקובובוקס מוסתר ותיבת טקסט עם מקור הפקד:cmb.column(1)
לא בדקתי, אבל זה אמור לעבוד...
אוי ואבוי לנו אם לשם הידרדרנו..... זה נקרא טינופת צרופה (אינני מתכוון לרעיון שלך חלילה אל תיקח את זה אישי , אלא למייקרוסופט שגורמים לנו להגיע לכאלו קובמינות וכבר התפקעו העצבים שלי לפעמים שמרוב מריבות איתם אני נאלץ לעשות דברים מלוכלכים בקוד בסופו של דבר אני נכנע תמיד כי הלקוח לוחץ, אבל זה המשך של הדיון הישן על מייקרוסופט וחסרונותיה, עצם הדבר שאתה לא יכול לשלוט בפקד שלהם וצריך להגיע לכאלו דברים), ואם מי שעובד עם מייקרוסופט צריך לעשות כאלו קובמינות, כבר עדיף לעבוד בעירייה ולקחת שוחד על חריגה מהיתרי בנייה, תאמין לי יותר נקי שם....
פורסם במקור בפורום CODE613 ב22/01/2014 23:14 (+02:00)
-
להגנתי אומר שלא פירטת שאתה מדבר בסיכום, אלא בערך יחידני, ועל זה אני חושב ששאלתי במקומה, כי צריך לתקן דבר כזה.
אבל האמת שזה לא כ"כ מגן עלי, כי כל הבעיה שלך קיימת רק כאשר יש חישוב או תנאי או סיכום בשאילתה. כאשר זו שאילתה פשוטה הוא מציג שדה ריק.
אז פידחתי בכל מקרה...טוב, בוא נתחיל מחדש.
אתה זקוק לסיכום? או רק לעצם הידיעה שהוא מופיע שם?
(כמו שאני מבין ממך אתה רק רוצה לדעת שהוא מופיע בארוחות לפחות פעם אחת).אם רק לעצם הידיעה- הנה רעיון שישמע לך קצת מוזר, אבל תכל'ס עובד....
תוסיף עמודה בטבלה המקורית, שהתוכן שלה יהיה המילה "כן".... ואותה תקבע כעמודה המוצגת בקומבו, וכרגיל את ה- ID מוסתר.
מקור השורה יהיה פשוט ללא חישובים ותנאים. במקרה כזה כאשר התלמיד לא מופיע, תשאר התיבה ריקה.גם אם הרעיון הזה לא מוצא חן בעיניך, אפשר להגיב בצורה שתשאיר חשק להמשיך לדון איתך....
פורסם במקור בפורום CODE613 ב23/01/2014 00:05 (+02:00)
-
תוסיף עמודה בטבלה המקורית, שהתוכן שלה יהיה המילה "כן".... ואותה תקבע כעמודה המוצגת בקומבו, וכרגיל את ה- ID מוסתר.
מקור השורה יהיה פשוט ללא חישובים ותנאים. במקרה כזה כאשר התלמיד לא מופיע, תשאר התיבה ריקה.צר לי לאכזב אותך, אבל זה לא יעזור כלום, המקרה הזה דומה בדיוק למקרה הקודם, כאשר אין רשומה מקבילה הוא לא יופיע ריק אלא יופיע ID שבטבלה שהיא מקור הדו"ח והשדה. אם השאלה שלי עדיין לא מובנת, אעלה כאן קובץ לדוגמא.
גם אם הרעיון הזה לא מוצא חן בעיניך, אפשר להגיב בצורה שתשאיר חשק להמשיך לדון איתך....
אתה צודק, אבל אל תדון את חברך עד שתגיע למקומו, אינני יודע כמה פעמים בשבוע יוצא לך להתקוטט עם טמטום של מיקרוסופט, כשבסופה של מריבה לא יוצא מזה כלום, אני לא לומד כלום ולא מתקדם כלום חוץ מעוד שורה על האטימות של מייקרוסופט, ומדיניות הקוד הסגור שלהם, תאמין לי שכשאני שואל שאלה בפורום, זה אחרי מלחמת התשה עקובה מעצבים, אני מרגיש שכל מי שמציע פתרון בשליפה מהשרוול זה כמו לזרוק נודות נפוחים על נפש צמאה... אז אנא....
פורסם במקור בפורום CODE613 ב23/01/2014 00:30 (+02:00)
-
אז רק שתדע שאני יושב עם אקסס כבר כמעט שעה רק על האתגר הזה...
ועשיתי כך: טבלת שמות אנשים וטבלת שמות ערים, בדו"ח שמתי קומבו שמושך שם עיר לפי ID של העיר בכתובות.
הוספתי ID ללא ערים במקביל, ויצא כך:כאשר היה איזשהו חישוב בשאילתה של מקור הפקד, אפילו רק בדיקת NULL וכל שכן סיכומים, קרתה התקלה המדוברת.
אבל אם רק שלפתי את הנתונים- בהעדר התאמה נותרה התיבה ריקה.
כמו שאני מבין אותך, לא יכלת לעשות כך כי אז היה מוצג סתם מספר חיוב אקראי ללא הסבר, ולכן הוספת איזשהו חישוב לבדוק אם וכמה וכו', ולכן הצעתי לך שדה קיים עם המילה כן.הנסיונות בוצעו באקסס 2013.
ובקשר להתקוטט עם מיקרוסופט, יש משהו יותר גרוע. הרצת דוח עם שגיאה בשליפת הנתונים שיוצרת הודעת שגיאה.
תלחץ אישור עד שכל האצבעות כואבות....פורסם במקור בפורום CODE613 ב23/01/2014 00:40 (+02:00)
-
בדוחו"ת אני שולף את שם העיר לפי הid ששמתי בשדה STAM.
ההבדל היחיד ביניהם שבאחד הדוחות יש תנאי במקור הפקד ששם העיר is not nullפורסם במקור בפורום CODE613 ב23/01/2014 01:47 (+02:00)
-
תודה רבה
אז לסיכום ככה:
אכן באקסס 2013 הם סידרו את הבעיה חלקית, כלומה כשאין משפט where בשאילתה (במקרה שלי אני דווקא צריך עם תנאי). ב 2007 זה לא עוזר בכלל.רק תבין שאם היינו אנשים שעובדים עם קוד פתוח, בשניות היינו נכנסים לגיט האב, מאתרים את הבנאי של הפקד, ומעלים הצעה לתיקון, או שהיינו מגלים שכבר עשו את זה הרבה לפנינו....... במייקרוסופט אני לא יודע אם יש מישהו שיודע בכלל על הבעיה, ושיודע למי לדווח על מה וכולי... לא נורא אני מתפלל שבתוך שנה כולנו כבר נהיה בעלי קוד פתוח לגמרי....
בכל אופן תודה רבה על העזרה
פורסם במקור בפורום CODE613 ב23/01/2014 11:43 (+02:00)
-
מצאתי משהו מעניין, תבדוק אצלך.
תשנה את העמודה המאוגדת בקומבו בוקס ל -0.
אצלי זה עבד!
טוב הבנתי איך זה עובד,
זה אמנם עובד בלי הבאג של החזרת הערך בשעה שאין ערך מקביל, אבל זה בכלל לא הערך שהוא מאגד, שים לב שזה מאוגד למאפיין ListIndex שבסך הכל מצביע על מספר השורה שנבחרה... הערכים שהוא מחזיר לא נכונים בכלל כאשר אני מסתכל על הID :lol: :lol: :lol: :lol: :lol:
שים לב שאם תשנה את האורדר בי במקור הרשומה, הערכים ישתנו לך פתאום....
כנראה שאין מנוס מלהיכנע שוב, ולעשות דברים לא נכונים בקוד כדי להתגבר על בעיית תצוגה כל כך שולית וטפשית, או לעשות קוד לא יעיל לצערי הרב..... אז אם מישהו יש לו בכל זאת רעיון, זה אתגר שיכול לפתור הרבה מאוד כאב ראש באקסס, יעזור מאוד.תודה
פורסם במקור בפורום CODE613 ב23/01/2014 18:08 (+02:00)
-
לפחות משהו אחד טוב כן יצא מזה, למדתי על המאפיין הזה שנקרא ListInex שמחזיר -1 כאשר הערך איננו קיים ברשימה, ואז עשיתי קוד (לא פתרון הכי נקי, אבל לפחות משהו) שמסתיר את המידע כאשר הערך לא נמצא ברשומה, איך??? לא תאמינו, פשוט משחקי צבעים....
Private Sub פירוט_Format(Cancel As Integer, FormatCount As Integer) 'On Error Resume Next If meals.ListIndex = -1 Then meals.ForeColor = meals.BackColor Else meals.ForeColor = vbBlack End If End Sub
טוב אז מבחינתי אפשר לסגור את האשכול, לא נראה לי שמשהו יותר טוב יכול לצוץ פתאום, אני מסמן וי.
פורסם במקור בפורום CODE613 ב23/01/2014 18:18 (+02:00)
-
קצת יצאתי אידיוט באשכול הזה....
האמת היא שעבדתי על ID במספרים נמוכים, ולכן לא הבחנתי שהערכים לא תואמים. ראיתי שזה עובר לאיגוד לליסט אינדקס,
ולכן רציתי שתבדוק אצלך. היתה לי השערה שבדוחות זה יפעל בכל זאת....שוין, העיקר שיצא משהו טוב.
פורסם במקור בפורום CODE613 ב23/01/2014 19:36 (+02:00)
-
לפחות משהו אחד טוב כן יצא מזה, למדתי על המאפיין הזה שנקרא ListInex שמחזיר -1 כאשר הערך איננו קיים ברשימה, ואז עשיתי קוד (לא פתרון הכי נקי, אבל לפחות משהו) שמסתיר את המידע כאשר הערך לא נמצא ברשומה, איך??? לא תאמינו, פשוט משחקי צבעים....
Private Sub פירוט_Format(Cancel As Integer, FormatCount As Integer) 'On Error Resume Next If meals.ListIndex = -1 Then meals.ForeColor = meals.BackColor Else meals.ForeColor = vbBlack End If End Sub
טוב אז מבחינתי אפשר לסגור את האשכול, לא נראה לי שמשהו יותר טוב יכול לצוץ פתאום, אני מסמן וי.
לכאורה במקום קוד יכולת לשים את זה בעיצוב מותנה, לא?
לא בדקתי, אבל אני משער...
בכל מקרה בקוד יכולת לעשות כך:meals.ForeColor =iif(meals.ListIndex = -1, meals.BackColor,vbBlack)
נראה לי יותר קצר <!-- s8-) --><img src="{SMILIES_PATH}/icon_cool.gif" alt="8-)" title="מגניב" /><!-- s8-) -->
עריכה: והמספר שהוא מחזיר בליסט אינדקס זה המספר של האיבר במערך האפשרויות בליסט. (בעצם הסיבה שקומבו רץ יותר מהר מDLookUp (וכמו שאמרת בשאלה הראשונה שלך) היא שהשאילתא רצה פעם אחת וכל פעם רק מוצאת את הנתון בליסט...
פורסם במקור בפורום CODE613 ב25/01/2014 22:26 (+02:00)