שאילתה אקסס, SQL
-
יש לי טבלאות כדלהלן
- עיסקאות תשלומים
- הוראות קבע
- כרטיסי אשראי
אני רוצה להציג עבור כל עיסקה את צורת התשלום שלה
זאת אומרת אם תשלום העיסקה הוא ע"י כרטיס אשראי אז טבלת הבן תהיה כרטיס אשראי ולחילופין עם תשלום העיסקה היא בהוראת קבע
מה הדרך
אפילו פיתרון חלקי יעזור
תודה מראש
פורסם במקור בפורום CODE613 ב12/01/2014 18:44 (+02:00)
-
יש לי טבלאות כדלהלן
- עיסקאות תשלומים
- הוראות קבע
- כרטיסי אשראי
אני רוצה להציג עבור כל עיסקה את צורת התשלום שלה
זאת אומרת אם תשלום העיסקה הוא ע"י כרטיס אשראי אז טבלת הבן תהיה כרטיס אשראי ולחילופין עם תשלום העיסקה היא בהוראת קבע
מה הדרך
אפילו פיתרון חלקי יעזור
תודה מראש
ע"י קוד?
נניח שיש לך 2 טפסים שאמורים להיות טפסי משנה
frmSubMasav = משנה להו"ק
frmSubCreditCard = משנה לאשראינניח גם שהשדה המחזיק את סוג התשלום (אשראי או הו"ק) נקרא FeeVia.
ויש לך טופס עם פקד טופס משנה בשם SubForm.
אתה צריך לעשות באירוע Form_Current (שנקרא בכל פעם שיש מעבר לרשומה אחרת) את הקוד הבא:Private Sub Form_Current() Select Case Me!FeeVia Case 1 ' אם זה הוראת קבע Me!SubForm.SourceObject = "frmSubMasav" Me!SubForm.LinkMasterFields = "IDHok" Me!SubForm.LinkChildFields = "IDHok" Case 2 ' אם זה אשראי Me!SubForm.SourceObject = "frmSubCreditCard" Me!SubForm.LinkMasterFields = "IDCCredit" Me!SubForm.LinkChildFields = "IDCCredit" Case Else ' כאן תחליט מה קורה אם זה לא אשראי או הוק Me!SubForm.SourceObject = "" Me!SubForm.LinkMasterFields = "" Me!SubForm.LinkChildFields = "" End Select End Sub
אם אתה משתמש בתצוגת גליון נתונים (עם סימן הפלוס בצד) שים לב שכשעוברים מרשומה לרשומה הוא ישנה את הטופס משנה, ואז יכול להיות מצב שבהו"ק הוא יציג טופס משנה של אשראי, אם הנתונים הם לקריאה בלבד, ללא צורך בשינויים, הייתי מציע לעשות שאילתת UNION כך:
SELECT ID, Price, Bla, Bla, Bla, "הוק" AS FeeType FROM TblMasav UNION ALL SELECT ID, Price, Bla, Bla, Bla, "אשראי" AS FeeType FROM TblCreditCard
מטרת הUNION היא להציג תוכן של טבלה אחת, ומיד אחריה את השנייה.
שים לב שאפשר להשתמש בUNION שמחזיר רק רשומות ייחודיות שעדיין לא הוחזרו מטבלאות קודמות, וUNION ALL שיחזיר בכל מקרה את כל התוצאות מכל הטבלאות.
בנוסף, באפשרותך לצרף יותר מ2 טבלאות. (יש לי מקרה שצירפתי אפילו 8 טבלאות)הדבר שאתה חייב להקפיד עליו בשאילתת איחוד (UNION) זה שכמות השדות בכל הטבלאות חייבת להיות זהה.
בהצלחה....עריכה:
אם אתה מדבר על הו"ק, יש דבר שעשיתי עם שאילתת UNION שאני חושב שיוצר תצוגה ויזואלית מאד נוחה.
הוספתי 2 שדות בטבלת ההעברות מסב, שדה אחד בוליאני שמחזיק אם הייתה חזרה, ושדה של סכום עמלה. (יש עוד אחד של סיבת חזרה, אבל לא ממש קשור לכאן)
ואז יצרתי שאילתת UNION כזו:SELECT ID, Price, "הוק" AS FeeType FROM TblMasav UNION ALL SELECT ID, -Price, "חזרת הוק" AS FeeType FROM TblMasav WHERE Return=True UNION ALL SELECT ID, ReturnPrice, "עמלת חזרת הוק" AS FeeType FROM TblMasav WHERE Return=True And nz(ReturnPrice,0)<>0
מה שגורם שכשיש חזרת הו"ק, מספיק לסמן את הV ב"חזר", ואם יש עמלה גם את סכום העמלה, ואז מקבלים מאותה הטבלה גם את השורה של ההעברה, גם את החזרה במינוס (שים לב לסימן המינוס לפני הסכום) וגם שורה נוספת של עמלת החזרה. זה יוצר ללקוח תחושה של דפי בנק בלי באמת ליצור תנועות מיותרות.
פורסם במקור בפורום CODE613 ב12/01/2014 21:43 (+02:00)
-
-
אם הבנתי נכון ה UNION בעצם יביא את שתי הטבלאות גם של ההוראות קבע וגם של האשראי אחד אחרי השני, האם אפשר לעשות שאם מתקיים תנאי מסויים תוקדם הטבלה של ההוראות קבע ואם לא מתקיים תוקדם הטבלה של האשראי?
אם אתה כותב את השאילתא בקוד אז אתה יכול להחליט.
אני בעיקרון משתמש בUNION כשאילתת בסיס ואח"כ יוצר שאילתא שמבוססת על הUNION, ושם אני משחק עם מה שאני רוצה. - לדוגמא: בדוגמה הנ"ל אני אוהב שבסוף זה מסודר לפי תאריכים, את זה א"א לעשות בתוך הUNION כי הוא מביא טבלה אחרי טבלה. (אם כי אפשר לעשות מיון בתוך הUNION, אבל משום מה זה לא עובד כמו שצריך, אם למישהו יש תובנות בעניין, אשמח לשמוע) - ולכן אני משתמש עם שאילתא נוספת על השאילתת UNION.פורסם במקור בפורום CODE613 ב12/01/2014 21:59 (+02:00)
-
א''כ למדתי כאן שני דברים חדשים:
- אפשר לעשות קשרי גומלין לשאילתא במקום לטבלה, וכך השאילתא תציג כמה טבלאות.
- אפשר דרך הקוד להחיל תנאים שעל פיהם תיבנה שאילתא שונה לכל מקרה.
ואם נלך שלב קדימה אז לכאורה אפשר לעשות בקוד תנאי שאם הלקוח בחר לשלם בהו''ק השאילתא תביא רקמטבלת הו''ק ואם בחר לשלם באשראי השאילתא תביא רקמטבלת אשראי. הלא כן?
פורסם במקור בפורום CODE613 ב12/01/2014 22:04 (+02:00)
-
א''כ למדתי כאן שני דברים חדשים:
- אפשר לעשות קשרי גומלין לשאילתא במקום לטבלה, וכך השאילתא תציג כמה טבלאות.
זה לא קשרי גומלין. זו שאילתא מיוחדת, שיודעת להביא נתונים בזה אחר זה.
גשרי גומלין גורמים ל2 טבלאות שונות לאחד בינהם את הנתונים כמו ID והייצוג שלו בטקסט. שאילתת איחוד לעומת זאת, גורמת ל2 טבלאות להופיע אחד אחרי השני ללא קשר ביניהם. (וכאן המקום להדגיש שאפשר לעשות איחוד גם על שאילתות קיימת, ולא רק על טבלאות) - ברמה העקרונית, שאילתת איחוד יכולה לאחד נתונים ללא כל קשר. לדוגמא מתחת לID בטבלה הראשונה יהיה שם הלקוח בטקסט בטבלה השנייה - אמנם אין לזה כל שימוש, ולכן אני מביא את הדוגמא הזו, כי זו הפעולה ללא כל קשר בין מה שמתחבר.
@רחמים- אפשר דרך הקוד להחיל תנאים שעל פיהם תיבנה שאילתא שונה לכל מקרה.
לאו דווקא בשאילתא הזו. כל שאילתא אתה יכול לבנות בטקסט.
@רחמיםואם נלך שלב קדימה אז לכאורה אפשר לעשות בקוד תנאי שאם הלקוח בחר לשלם בהו''ק השאילתא תביא רקמטבלת הו''ק ואם בחר לשלם באשראי השאילתא תביא רקמטבלת אשראי. הלא כן?
כן.
פורסם במקור בפורום CODE613 ב12/01/2014 22:51 (+02:00)