› פורומים › אפיון ופיתוח פריוריטי › הוספת שדה למסך כרטיס פריט מטבלה אחרת עם נתון
- This topic has 5 תגובות, משתתף 1, and was last updated לפני 6 שנים, 3 חודשים by אלמוני.
- Post
-
- אוגוסט 22, 2018 בשעה 3:15 pm
שלום,
יש לי טבלת פריטים קטנה שיצרנו עם מספר המקט וערך מספרי שקראנו לו BUFFER.
אני מעוניין להוסיף ולקשר את שדה BUFFER במחולל המסכים לכרטיס פריט, השדה קיים לחלק מהמקטים ולא לכולם בטבלה הנוספת.
כלומר יש לי טבלה נוספת, חלקית, בה מופיעים חלק מהמקטים (לא כולם) ולצידם שדה BUFFER.
ההצלבה תיעשה מק"ט מול מק"ט.
התוצאה הרצויה: בשליפת מקט בכרטיס פריט, במידה ובטבלה השניה יש ערך בשדה הרלוונטי לאותו המקט, להציג אותו.
במידה ואין ערך בשדה הנ"ל, עדיין להציג את הפרטים של הכרטיס פריט רק ללא הערך כמובן(למנוע מצב שמקט קיים לא יישלף בעקבות חוסר נתון).אחרי קישור הטבלאות והוספת השדה, האם צריך לרשום משהו בביטוי/תנאי כדי להביא את ה-BUFFER במידה וקיים?
אשמח לעזרתכם!
המון תודה, אופיר.
- Replies
-
- אוגוסט 22, 2018 בשעה 3:43 pm
- אוגוסט 22, 2018 בשעה 3:55 pm
היי נעם,
תודהעל תגובתך.בשורה של החיתוך להוסיף למזהה חיתוך סימן שאלה אחרי המספר? לצורך העניין מזהה החיתוך שלי הינו 5 אז לשנול ל-5 עם סימן שאלה?
כמו כן, את הטבלאות כבר אני לא יכול לשנות כי יש להן ערכים והתתשקויות עם המערכת.
לשדה מק"ט שבטבלה אין מפתח כלל, מכיוון שיכול להיות שיש מק"ט של פריוריטי בכמה שורות, ולא רק תחת שורה אחת, עשינו כמו רמות של באפר, הבאפר הוא החד ערכי בטבלה.
האם בגלל שהשדה של החיתוך הואאינו מפתח זה לא בר ביצוע?כמו כן בביטוי/תנאי צריך לרשום משהו נוסף בשדה הרלוונטי שבמסך, או שמספיק רק להוסיף את השדה ולבצע חיתוך עם סימן שאלה?
תודה- אוגוסט 22, 2018 בשעה 4:28 pm
"יכול להיות שיש מק"ט של פריוריטי בכמה שורות" – אם באמת פריט יכול להופיע כמה פעמים בטבלה שלך, אזי צריך לבנות מסך בן שיציג את כל הערכים האפשריים. במסך האב, יש הנחה שכל הקשרים הם 1 ל-1.לא יכול להיות שיש טבלה בפריוריטי "ללא מפתח כלל" – חובה שיהיה מפתח U ורצוי שיהיה מפתח A. מוטב שיהיה מפתח N על השדה פריט.
סימן השאלה (LEFT JOIN) נדרש כאשר החיתוך נעשה על פי מפתח ה-U (או A) בצד טבלה אחת (נניח PART.PART) לטבלה שניה שמכילה שדה PART. בהחלט יכול להיות רשומות בטבלת הפריטים שאין להם ערך מקביל בטבלה השניה. הדוגמא הרגילה שלי ORDERITEMSA. הטבלה הזו מכילה בין השאר את הסטטוס של שורת הזמנת לקוח והחיבור נעשה באמצעות השדה ORDI, שהוא מפתח ה-A של ORDERITEMS. לא בטוח שתהיה רשומה מקבילה ב-ORDERITEMSA, במיוחד אם אינכם משתמשים בסטטוס שורות, לכן החיבור (או החיתוך) בין שתי הטבלאות חייבת להתבצע באמצעות סימן שאלה בצד ORDERITEMSA.
- אוגוסט 28, 2018 בשעה 10:11 am
היי נעם בוקר טוב,לגבי העניין שבטבלה שלי יש את שדה המק"ט בכמה וכמה שורות והוא אינו מתפקד כמפתח, האם במקום לפתוח מסך בן ולהציג את כל האופציות, אפשר למשוך את הערך שמופיע בשורה הראשונה ביותר מבין כלה שורות בטבלה הפרטית תחת אותו המקט, או אולי במצב זה, פשוט לא להציג כלום בשדה שאני מעוניין ליצור בגלל ריבוי תוצאות במסך האב ובמצב שיש התאמה 1 על 1 כן להציג את הערך באותו מסך אב?
כלומר אם יש חיתוך 1 על 1 להציג ערך, במידה ויש חיתוך 1 לכמה, לדלג.המפתח הקיים בטבלה שלי הוא על שדה אחר שנקרא BUFFER, שאיני מעונייך להציגו במסך כרטיס פריט (מסך האב).
עכשיו הבנתי לגבי החיתוך וסימן השאלה, שזה בעצם LEFT JOIN. תודה!
אגב, אני מבין שזה ניתן לעשות (או חיתוך בכלל) רק מול שדה עם מפתח? במצב של שדה חיתוך ללא מפתח למשל כמו הדוגמה שלי, לא ניתן לבצע את החיתוך? זו שאלה תאורטית כדי להבין הלאה בפתרונות השונים והבאים איך להתנהל 🙂
תודה! ויום נפלא.- אוגוסט 28, 2018 בשעה 11:54 am
בדרך כלל, חיתוכים בין טבלאות נעשים על פי שדה מפתח מפני שהם לא ניתנים לשינוי. לדוגמא, אפשר לשנות את PART.PARTNAME ולא את PART.PART, לכן בכל טבלה שקשורה לפריטים יהיה שדה PART.כתבת לגבי המסך (בפסקה 2) "הערך שמופיע בשורה הראשונה". ב-SQL אין מושג כזה "שורה ראשונה". תלוי איך ממיינים את הטבלה. אפשר בהפעלה (נניח POST-FIELD פרטי אחרי PART.PARTNAME) לשלוף שורה אחת מתוך הטבלה הפרטית שלך כאשר הטבלה ממוינת לפי שדה מסוים ולהציב את הערך הרצוי בתוך שדה מחושב במסך, אבל אני לא הייתי עושה זאת אלא מציג את כל הנתונים הקשורים לפריט במסך בן.
תמיד לטבלה יש מפתח ראשי – PRIMARY KEY – שבפריוריטי הוא מפתח A, ואם אין, אז מפתח U. טבלה יכולה להכיל שדות אחרים שהם מפתחות בטבלאות אחרות, מה שנקרא FOREIGN KEY, אם כי בפריוריטי אין מושג כזה. בטבלת ORDERS, לדוגמא, המפתח הראשי הוא ORD, ומפתחות זרים הם CUST, ORDSTATUS, ORDTYPE, BRANCH וכו'. לפעמים לשדות הללו יש מפתח N ולפעמים לא.
- יש להתחבר למערכת על מנת להגיב.