דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. שאילתה אקסס, SQL

שאילתה אקסס, SQL

מתוזמן נעוץ נעול הועבר ארכיון code613m
7 פוסטים 3 כותבים 405 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    שמואל
    כתב ב נערך לאחרונה על ידי
    #1

    יש לי טבלאות כדלהלן

    1. עיסקאות תשלומים
    2. הוראות קבע
    3. כרטיסי אשראי
      אני רוצה להציג עבור כל עיסקה את צורת התשלום שלה
      זאת אומרת אם תשלום העיסקה הוא ע"י כרטיס אשראי אז טבלת הבן תהיה כרטיס אשראי ולחילופין עם תשלום העיסקה היא בהוראת קבע
      מה הדרך
      אפילו פיתרון חלקי יעזור
      תודה מראש

    פורסם במקור בפורום CODE613 ב12/01/2014 18:44 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • רחמיםר מנותק
      רחמיםר מנותק
      רחמים מורחק
      כתב ב נערך לאחרונה על ידי
      #2

      אני חושב שאתה צריך לעשות שתי עמודות באחת הבנים יהיו מטבלת ההוראות קבע ובאחד מטבלת האשראי ואם תרצה תוכל להוסיף עוד עמודה שבה יצויין באיזה צורת תשלום בחר הלקוח.

      פורסם במקור בפורום CODE613 ב12/01/2014 18:47 (+02:00)

      תגובה 1 תגובה אחרונה
      1
      • clickoneC מנותק
        clickoneC מנותק
        clickone
        כתב ב נערך לאחרונה על ידי
        #3

        @שמואל

        יש לי טבלאות כדלהלן

        1. עיסקאות תשלומים
        2. הוראות קבע
        3. כרטיסי אשראי
          אני רוצה להציג עבור כל עיסקה את צורת התשלום שלה
          זאת אומרת אם תשלום העיסקה הוא ע"י כרטיס אשראי אז טבלת הבן תהיה כרטיס אשראי ולחילופין עם תשלום העיסקה היא בהוראת קבע
          מה הדרך
          אפילו פיתרון חלקי יעזור
          תודה מראש

        ע"י קוד?
        נניח שיש לך 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)

        אין טסט כמו פרודקשן.

        המייל שלי urivpn@gmail.com

        תגובה 1 תגובה אחרונה
        2
        • רחמיםר מנותק
          רחמיםר מנותק
          רחמים מורחק
          כתב ב נערך לאחרונה על ידי
          #4

          אם הבנתי נכון ה UNION בעצם יביא את שתי הטבלאות גם של ההוראות קבע וגם של האשראי אחד אחרי השני, האם אפשר לעשות שאם מתקיים תנאי מסויים תוקדם הטבלה של ההוראות קבע ואם לא מתקיים תוקדם הטבלה של האשראי?

          פורסם במקור בפורום CODE613 ב12/01/2014 21:50 (+02:00)

          תגובה 1 תגובה אחרונה
          0
          • clickoneC מנותק
            clickoneC מנותק
            clickone
            כתב ב נערך לאחרונה על ידי
            #5

            @רחמים

            אם הבנתי נכון ה UNION בעצם יביא את שתי הטבלאות גם של ההוראות קבע וגם של האשראי אחד אחרי השני, האם אפשר לעשות שאם מתקיים תנאי מסויים תוקדם הטבלה של ההוראות קבע ואם לא מתקיים תוקדם הטבלה של האשראי?

            אם אתה כותב את השאילתא בקוד אז אתה יכול להחליט.
            אני בעיקרון משתמש בUNION כשאילתת בסיס ואח"כ יוצר שאילתא שמבוססת על הUNION, ושם אני משחק עם מה שאני רוצה. - לדוגמא: בדוגמה הנ"ל אני אוהב שבסוף זה מסודר לפי תאריכים, את זה א"א לעשות בתוך הUNION כי הוא מביא טבלה אחרי טבלה. (אם כי אפשר לעשות מיון בתוך הUNION, אבל משום מה זה לא עובד כמו שצריך, אם למישהו יש תובנות בעניין, אשמח לשמוע) - ולכן אני משתמש עם שאילתא נוספת על השאילתת UNION.

            פורסם במקור בפורום CODE613 ב12/01/2014 21:59 (+02:00)

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            תגובה 1 תגובה אחרונה
            0
            • רחמיםר מנותק
              רחמיםר מנותק
              רחמים מורחק
              כתב ב נערך לאחרונה על ידי
              #6

              א''כ למדתי כאן שני דברים חדשים:

              1. אפשר לעשות קשרי גומלין לשאילתא במקום לטבלה, וכך השאילתא תציג כמה טבלאות.
              2. אפשר דרך הקוד להחיל תנאים שעל פיהם תיבנה שאילתא שונה לכל מקרה.

              ואם נלך שלב קדימה אז לכאורה אפשר לעשות בקוד תנאי שאם הלקוח בחר לשלם בהו''ק השאילתא תביא רקמטבלת הו''ק ואם בחר לשלם באשראי השאילתא תביא רקמטבלת אשראי. הלא כן?

              פורסם במקור בפורום CODE613 ב12/01/2014 22:04 (+02:00)

              תגובה 1 תגובה אחרונה
              0
              • clickoneC מנותק
                clickoneC מנותק
                clickone
                כתב ב נערך לאחרונה על ידי
                #7

                @רחמים

                א''כ למדתי כאן שני דברים חדשים:

                1. אפשר לעשות קשרי גומלין לשאילתא במקום לטבלה, וכך השאילתא תציג כמה טבלאות.

                זה לא קשרי גומלין. זו שאילתא מיוחדת, שיודעת להביא נתונים בזה אחר זה.
                גשרי גומלין גורמים ל2 טבלאות שונות לאחד בינהם את הנתונים כמו ID והייצוג שלו בטקסט. שאילתת איחוד לעומת זאת, גורמת ל2 טבלאות להופיע אחד אחרי השני ללא קשר ביניהם. (וכאן המקום להדגיש שאפשר לעשות איחוד גם על שאילתות קיימת, ולא רק על טבלאות) - ברמה העקרונית, שאילתת איחוד יכולה לאחד נתונים ללא כל קשר. לדוגמא מתחת לID בטבלה הראשונה יהיה שם הלקוח בטקסט בטבלה השנייה - אמנם אין לזה כל שימוש, ולכן אני מביא את הדוגמא הזו, כי זו הפעולה ללא כל קשר בין מה שמתחבר.
                @רחמים

                1. אפשר דרך הקוד להחיל תנאים שעל פיהם תיבנה שאילתא שונה לכל מקרה.

                לאו דווקא בשאילתא הזו. כל שאילתא אתה יכול לבנות בטקסט.
                @רחמים

                ואם נלך שלב קדימה אז לכאורה אפשר לעשות בקוד תנאי שאם הלקוח בחר לשלם בהו''ק השאילתא תביא רקמטבלת הו''ק ואם בחר לשלם באשראי השאילתא תביא רקמטבלת אשראי. הלא כן?

                כן.

                פורסם במקור בפורום CODE613 ב12/01/2014 22:51 (+02:00)

                אין טסט כמו פרודקשן.

                המייל שלי urivpn@gmail.com

                תגובה 1 תגובה אחרונה
                2

                בא תתחבר לדף היומי!
                • התחברות

                • אין לך חשבון עדיין? הרשמה

                • התחברו או הירשמו כדי לחפש.
                • פוסט ראשון
                  פוסט אחרון
                0
                • דף הבית
                • קטגוריות
                • פוסטים אחרונים
                • משתמשים
                • חיפוש
                • חוקי הפורום