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

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

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

שימוש במשפט SQL כמשתנה בקוד, ושאלות על טפסים באקסס

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

    כמה שאלות באקסס:

    1. האם ואיך ניתן להגדיר משתנה ב VBA על בסיס משפט SQL? דוגמא:
    if "SELECT Donor.ID, Sum(Donations.Amount) AS SumמתוךAmount
    FROM Donor LEFT JOIN Donations ON Donor.ID = Donations.DonorID
    GROUP BY Donor.ID
    HAVING (((Donor.ID)=[Forms]![frmDonorCard]![ID]));" > 500 then
    msgBox
    end if
    
    

    דהיינו אם סכום התרומות לתורם זה גדול מ500 אז לדוג' תקפוץ הודעה וכו'

    עריכה: אחרי תגובתו של @OdedDvir למטה - השאלות האחרות הועברו לנושא נפרד.

    אפר שריפהא OdedDvirO 2 תגובות תגובה אחרונה
    0
    • אפר שריפהא מנותק
      אפר שריפהא מנותק
      אפר שריפה
      השיב לסקרן 0 ב נערך לאחרונה על ידי
      #2

      @סקרן-0 אמר בשימוש במשפט SQL כמשתנה בקוד, ושאלות על טפסים באקסס:

      כמה שאלות באקסס:

      1. האם ואיך ניתן להגדיר משתנה ב VBA על בסיס משפט SQL? דוגמא:
      if "SELECT Donor.ID, Sum(Donations.Amount) AS SumמתוךAmount
      FROM Donor LEFT JOIN Donations ON Donor.ID = Donations.DonorID
      GROUP BY Donor.ID
      HAVING (((Donor.ID)=[Forms]![frmDonorCard]![ID]));" > 500 then
      msgBox
      end if
      
      

      דהיינו אם סכום התרומות לתורם זה גדול מ500 אז לדוג' תקפוץ הודעה וכו'

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

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

      if DSum("Amount","Donation","DonorId=nz([Forms]![frmDonorCard]![ID],0)")>500 then
      msgbox
      end if
      
      ס תגובה 1 תגובה אחרונה
      1
      • ס מנותק
        ס מנותק
        סקרן 0
        השיב לאפר שריפה ב נערך לאחרונה על ידי
        #3

        @אפר-שריפה תודה רבה. אכן במקרה הספציפי הנ"ל אפשר לפתור ע"י חישוב בVBA בלי SQL, ואני עדיין שואל תיאורטית אם יש דרך כזו.

        אפר שריפהא תגובה 1 תגובה אחרונה
        0
        • אפר שריפהא מנותק
          אפר שריפהא מנותק
          אפר שריפה
          השיב לסקרן 0 ב נערך לאחרונה על ידי
          #4

          @סקרן-0 אמר בשימוש במשפט SQL כמשתנה בקוד, ושאלות על טפסים באקסס:

          @אפר-שריפה תודה רבה. אכן במקרה הספציפי הנ"ל אפשר לפתור ע"י חישוב בVBA בלי SQL, ואני עדיין שואל תיאורטית אם יש דרך כזו.

          זו הדרך התקינה לדעתי
          אבל בכל מקרה ניתן לייצר משתנה RecordSet ולטעון אליו שאילתא
          ואז לגשת לשדה הרלוונטי

          ראה כאן וכאן

          תגובה 1 תגובה אחרונה
          1
          • OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            השיב לסקרן 0 ב נערך לאחרונה על ידי
            #5

            @סקרן-0 לשאלתך הראשונה:

            האם ואיך ניתן להגדיר משתנה ב VBA על בסיס משפט SQL?

            משפט SQL באקסס לא מחזיר ערך. הוא פשוט הוראה לבסיס הנתונים לבצע שאילתה מסויימת.
            שמא כוונתך לשאול: האם ניתן לשלוף ערך מסויים מתוך שאילתא\משפט SQL?
            התשובה הקצרה היא כן. השאלה היא מה המשתנה אמור להכיל? תוצאה של שדה מסויים? סכום של עמודה מסויימת? מספר הרשומות? לכל מקרה יש אופן ביצוע אחר. לחלק יש כבר פונקציות מובנות באקסס, כמו DSum שציין @אפר-שריפה.

            באופן כללי, אם אתה מבקש לקבל שדה מסויים בשאילתא, אפשר להשתמש באובייקט RecordSet, כמו שציין יפה @אפר-שריפה.

            מובן שעליך לוודא שהשאילתא מחזירה רק רשומה אחת, אחרת לא ברור מאיזו רשומה יאוחזר הערך.

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

            Public Function GetFieldFromSQL(SQL As String, fieldName As String) As Variant
                Dim rs As DAO.Recordset
                Dim result As Variant
                Set rs = CurrentDb.OpenRecordset(SQL, dbOpenSnapshot, dbReadOnly)
                result = Null
                If Not rs.EOF Then result = rs.Fields(fieldName).Value
                rs.Close
                GetFieldFromSQL = result
            End Function
            

            לדוגמא (על פי המדריך למערכת תורמים):

            Dim SQL As String
            SQL = "SELECT FullName FROM qryDonor_FullName WHERE ID=2"
            Debug.Print GetFieldFromSQL(SQL, "FullName")
            

            תודפס התוצאה:

            לוי יצחק
            

            לגבי שאלותיך האחרות, נא פתח פוסטים נפרדים עבור כל שאלה, עם כותרת מתאימה, כדי שיהיה בזה תועלת לשאר החברים, ואשתדל לענות.

            תגובה 1 תגובה אחרונה
            6
            • ס סקרן 0 התייחס לנושא זה ב

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

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

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