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

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

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

עזרה | הזנת ערך הפרמטר באקסס

מתוזמן נעוץ נעול הועבר תוכנה
15 פוסטים 7 כותבים 545 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • chagoldC chagold

    @אוריי אולי ככה
    CostPerProduct: vb_AveragePerMonthlyProduct((vb0MN(),[IDLtem])*([SealsCM]))

    אורייא מנותק
    אורייא מנותק
    אוריי
    כתב ב נערך לאחרונה על ידי
    #5

    @chagold אמר בעזרה | הזנת ערך הפרמטר באקסס:

    @אוריי אולי ככה
    CostPerProduct: vb_AveragePerMonthlyProduct((vb0MN(),[IDLtem])*([SealsCM]))

    לצערי גם כך לא עובד

    ניתן לפנות אלי גם ב al0548446188@gmail.com
    ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

    מלאמ תגובה 1 תגובה אחרונה
    0
    • אורייא אוריי

      @chagold אמר בעזרה | הזנת ערך הפרמטר באקסס:

      @אוריי אולי ככה
      CostPerProduct: vb_AveragePerMonthlyProduct((vb0MN(),[IDLtem])*([SealsCM]))

      לצערי גם כך לא עובד

      מלאמ מנותק
      מלאמ מנותק
      מלא
      כתב ב נערך לאחרונה על ידי מלא
      #6

      @אוריי אמר בעזרה | הזנת ערך הפרמטר באקסס:

      לצערי גם כך לא עובד

      לא נראה שיש סיבה שהסוגריים יעזרו משהו.

      בעיה מוכרת.

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

      אולי @clickone יש לו יותר מידע מתי זה קורה.

      אורייא תגובה 1 תגובה אחרונה
      0
      • מלאמ מלא

        @אוריי אמר בעזרה | הזנת ערך הפרמטר באקסס:

        לצערי גם כך לא עובד

        לא נראה שיש סיבה שהסוגריים יעזרו משהו.

        בעיה מוכרת.

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

        אולי @clickone יש לו יותר מידע מתי זה קורה.

        אורייא מנותק
        אורייא מנותק
        אוריי
        כתב ב נערך לאחרונה על ידי
        #7

        @מלא אמר בעזרה | הזנת ערך הפרמטר באקסס:

        @אוריי אמר בעזרה | הזנת ערך הפרמטר באקסס:

        לצערי גם כך לא עובד

        לא נראה שיש סיבה שהסוגריים יעזרו משהו.

        בעיה מוכרת.

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

        אולי @clickone יש לו יותר מידע מתי זה קורה.

        ככל הנראה זה מה שאני יעשה אבל זה לוקח הרבה משאבים לאקסס
        בכל אופן שאילתה על שאילתה זה מה ש @clickone הציע לי אבל זה לא יותר קצר מלעשות את החישוב גם בחדש

        ניתן לפנות אלי גם ב al0548446188@gmail.com
        ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

        OdedDvirO תגובה 1 תגובה אחרונה
        0
        • אורייא אוריי

          למה זה קורה
          כתבתי ביטוי בבונה, זה הביטוי:

          CostPerProduct: vb_AveragePerMonthlyProduct(vb0MN(),[IDLtem])*[SealsCM]
          

          כמובן כל השדות קיימים הכל כתוב נכון (ככל מה שידוע לי)

          ראוי לציין ששדה SealsCM הוא שדה מחושב באותה השאילתה

          תכלס בהפעלת השאילתה הוא מקפיץ חלון כזה
          e0a1cb25-0809-49e1-bd42-e10f22f3b01e-image.png

          לאחר שאני לוחץ אישור (בלי לכתוב כלום בפנים)
          אני מקבל את השדה מחושב בדיוק לפי מה שכתבתי בביטוי

          b40c9841-7fb5-450c-8527-6e51667fccc1-image.png

          מישהו יודע למה קופץ החלון הזה?
          ומה אני צריך לכתוב כדי שלא יקפוץ?

          S מנותק
          S מנותק
          Shmuel754
          כתב ב נערך לאחרונה על ידי
          #8

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

          תגובה 1 תגובה אחרונה
          0
          • אורייא אוריי

            @מלא אמר בעזרה | הזנת ערך הפרמטר באקסס:

            @אוריי אמר בעזרה | הזנת ערך הפרמטר באקסס:

            לצערי גם כך לא עובד

            לא נראה שיש סיבה שהסוגריים יעזרו משהו.

            בעיה מוכרת.

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

            אולי @clickone יש לו יותר מידע מתי זה קורה.

            ככל הנראה זה מה שאני יעשה אבל זה לוקח הרבה משאבים לאקסס
            בכל אופן שאילתה על שאילתה זה מה ש @clickone הציע לי אבל זה לא יותר קצר מלעשות את החישוב גם בחדש

            OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            כתב ב נערך לאחרונה על ידי
            #9

            יש דרך ארוכה וקצרה ויש קצרה וארוכה:

            הדרך הקצרה והארוכה

            היא להכניס פונקציות שלך בתוך השאילתות ו...
            א. להשתמש בשאילתת ביניים כמו ש @clickone ציין,
            או
            ב. להכפיל את החישוב גם עבור שדה זה (רח"ל) 😬 😬 כמו ש @מלא ציין.
            שתי הדרכים לא מומלצות, כמו שאסביר מיד.

            הדרך הארוכה והקצרה

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

            כללי אצבע:

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

            זה נכון הן מבחינת יעילות:

            • שאילתות רצות הרבה יותר מהר מקוד VBA באקסס, כי כל קריאה לפונקציה דורשת משאבים מהמערכת.
            • אתה לא צריך לחשב חישובים מיותרים פעמיים (או יותר) כדי שהשאילתא תואיל בטובה לקבל את הערך של הפונקציה.
            • שים לב שאפילו בפונקציות טריוויאליות, כמו Nz() או IsNull() עדיף לרשום בSQL טהור ולא לבצע קריאה ל-VBA, תשווה למשל בין:
            IsNull(SomeField) AS ValueIsEmpty
            

            ל:

            (SomeField Is Null) AS ValueIsEmpty
            

            הראשונה קוראת לפונקצית VBA בשם IsNull() בעוד השניה משתמשת רק בSQL והיא הרבה יותר מהירה.

            דוגמה שניה:
            תשווה בין:

            Nz(Amount,0)
            

            ל:

            IIf(Amount Is Null, 0, Amount)
            

            האופציה השנייה עדיפה בהרבה, כי היא משתמשת ב SQL טהור, ולכן

            • אתה לא מבצע קריאה לפונקציה
            • אתה שומר על טיפוס המשתנה בשדה (Data Type)
            • הקריטריון (אם יש בשאילתה) מחושב נכון
            • העמודה ממויינת נכון

            (הערה: יש הבדל עצום בין IIF של SQL שהיא פונקציה יעילה, לבין IIF של VBA, שהוא פונקציה גרועה שמחשבת תמיד את שתי התוצאות האפשריות!)

            והן מבחינת תחזוקה:

            • לפעמים פונקציה כתובה לא נכון ומייצרת שגיאת ריצה שמוכפלת אלפי פעמים בשאילתא - תרחיש לא נעים בכלל הן לך כמפתח וכ"ש למשתמש.
            • אם תרצה אי פעם לשדרג לבסיס נתונים אחר - הפונקציות לא יעבדו.
            WWWW תגובה 1 תגובה אחרונה
            6
            • OdedDvirO OdedDvir

              יש דרך ארוכה וקצרה ויש קצרה וארוכה:

              הדרך הקצרה והארוכה

              היא להכניס פונקציות שלך בתוך השאילתות ו...
              א. להשתמש בשאילתת ביניים כמו ש @clickone ציין,
              או
              ב. להכפיל את החישוב גם עבור שדה זה (רח"ל) 😬 😬 כמו ש @מלא ציין.
              שתי הדרכים לא מומלצות, כמו שאסביר מיד.

              הדרך הארוכה והקצרה

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

              כללי אצבע:

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

              זה נכון הן מבחינת יעילות:

              • שאילתות רצות הרבה יותר מהר מקוד VBA באקסס, כי כל קריאה לפונקציה דורשת משאבים מהמערכת.
              • אתה לא צריך לחשב חישובים מיותרים פעמיים (או יותר) כדי שהשאילתא תואיל בטובה לקבל את הערך של הפונקציה.
              • שים לב שאפילו בפונקציות טריוויאליות, כמו Nz() או IsNull() עדיף לרשום בSQL טהור ולא לבצע קריאה ל-VBA, תשווה למשל בין:
              IsNull(SomeField) AS ValueIsEmpty
              

              ל:

              (SomeField Is Null) AS ValueIsEmpty
              

              הראשונה קוראת לפונקצית VBA בשם IsNull() בעוד השניה משתמשת רק בSQL והיא הרבה יותר מהירה.

              דוגמה שניה:
              תשווה בין:

              Nz(Amount,0)
              

              ל:

              IIf(Amount Is Null, 0, Amount)
              

              האופציה השנייה עדיפה בהרבה, כי היא משתמשת ב SQL טהור, ולכן

              • אתה לא מבצע קריאה לפונקציה
              • אתה שומר על טיפוס המשתנה בשדה (Data Type)
              • הקריטריון (אם יש בשאילתה) מחושב נכון
              • העמודה ממויינת נכון

              (הערה: יש הבדל עצום בין IIF של SQL שהיא פונקציה יעילה, לבין IIF של VBA, שהוא פונקציה גרועה שמחשבת תמיד את שתי התוצאות האפשריות!)

              והן מבחינת תחזוקה:

              • לפעמים פונקציה כתובה לא נכון ומייצרת שגיאת ריצה שמוכפלת אלפי פעמים בשאילתא - תרחיש לא נעים בכלל הן לך כמפתח וכ"ש למשתמש.
              • אם תרצה אי פעם לשדרג לבסיס נתונים אחר - הפונקציות לא יעבדו.
              WWWW מנותק
              WWWW מנותק
              WWW
              כתב ב נערך לאחרונה על ידי WWW
              #10

              @odeddvir כל מילה פנינה!

              @odeddvir אמר בעזרה | הזנת ערך הפרמטר באקסס:

              לבין IIF של VBA, שהוא פונקציה גרועה שמחשבת תמיד את שתי התוצאות האפשריות!

              מה ההסבר בזה? למה זה נצרך? הרי ב 90% מהמקרים זה לא נצרך, מה הסברא לעשות ברירת מחדל כזה?

              WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • WWWW WWW

                @odeddvir כל מילה פנינה!

                @odeddvir אמר בעזרה | הזנת ערך הפרמטר באקסס:

                לבין IIF של VBA, שהוא פונקציה גרועה שמחשבת תמיד את שתי התוצאות האפשריות!

                מה ההסבר בזה? למה זה נצרך? הרי ב 90% מהמקרים זה לא נצרך, מה הסברא לעשות ברירת מחדל כזה?

                OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                כתב ב נערך לאחרונה על ידי OdedDvir
                #11

                @www אמר בעזרה | הזנת ערך הפרמטר באקסס:

                מה ההסבר בזה? למה זה נצרך? הרי ב 90% מהמקרים זה לא נצרך, מה הסברא לעשות ברירת מחדל כזה?

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

                Debug.Print MyMax(2, SquareRoot(2))
                

                התוכנה תחשב גם את השורש הריבועי של 2, עוד לפני הקריאה לפונקציה MyMax, למרות שבסוף לא תשתמש בו.
                היתרון ב-IIF של SQL הוא שאם התנאי נכון, לא מבוצע חישוב של הפרמטר השני, והשאילתא מתעלמת ממנו.
                הניחוש שלי הוא שב-VBA הפונקציה IIF מיושמת כפונקציה רגילה ולא כקיצור ל IF שלם, דהיינו:

                IIF (Condition, A, B)
                

                אינו מיושם כ:

                If (Condition) Then
                Do A
                Else
                Do B
                End If
                
                WWWW תגובה 1 תגובה אחרונה
                3
                • OdedDvirO OdedDvir

                  @www אמר בעזרה | הזנת ערך הפרמטר באקסס:

                  מה ההסבר בזה? למה זה נצרך? הרי ב 90% מהמקרים זה לא נצרך, מה הסברא לעשות ברירת מחדל כזה?

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

                  Debug.Print MyMax(2, SquareRoot(2))
                  

                  התוכנה תחשב גם את השורש הריבועי של 2, עוד לפני הקריאה לפונקציה MyMax, למרות שבסוף לא תשתמש בו.
                  היתרון ב-IIF של SQL הוא שאם התנאי נכון, לא מבוצע חישוב של הפרמטר השני, והשאילתא מתעלמת ממנו.
                  הניחוש שלי הוא שב-VBA הפונקציה IIF מיושמת כפונקציה רגילה ולא כקיצור ל IF שלם, דהיינו:

                  IIF (Condition, A, B)
                  

                  אינו מיושם כ:

                  If (Condition) Then
                  Do A
                  Else
                  Do B
                  End If
                  
                  WWWW מנותק
                  WWWW מנותק
                  WWW
                  כתב ב נערך לאחרונה על ידי WWW
                  #12

                  @odeddvir אמר בעזרה | הזנת ערך הפרמטר באקסס:

                  התוכנה תחשב גם את השורש הריבועי של 2, עוד לפני הקריאה לפונקציה MyMax, למרות שבסוף לא תשתמש בו.

                  מי גילה למחשב (לפני החישוב של הפרמטר השני) שבסוף לא אשתמש בו?
                  משא"כ ב IIF יש הסתברות (ממוצעת) של 50% שלא אשתמש בתנאי השני.

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

                  WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                  OdedDvirO תגובה 1 תגובה אחרונה
                  0
                  • WWWW WWW

                    @odeddvir אמר בעזרה | הזנת ערך הפרמטר באקסס:

                    התוכנה תחשב גם את השורש הריבועי של 2, עוד לפני הקריאה לפונקציה MyMax, למרות שבסוף לא תשתמש בו.

                    מי גילה למחשב (לפני החישוב של הפרמטר השני) שבסוף לא אשתמש בו?
                    משא"כ ב IIF יש הסתברות (ממוצעת) של 50% שלא אשתמש בתנאי השני.

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

                    OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    כתב ב נערך לאחרונה על ידי
                    #13

                    @www אמר בעזרה | הזנת ערך הפרמטר באקסס:

                    שהפלטפורמה מיושנת

                    נכון. בשפות מתקדמות יותר קיים אופרטור יעיל לכך, למשל ב-C#:

                    condition ? consequent : alternative
                    

                    אם התנאי (condition) נכון, לא מבוצעת הערכה של הפרמטר השני (alternative)

                    WWWW תגובה 1 תגובה אחרונה
                    2
                    • OdedDvirO OdedDvir

                      @www אמר בעזרה | הזנת ערך הפרמטר באקסס:

                      שהפלטפורמה מיושנת

                      נכון. בשפות מתקדמות יותר קיים אופרטור יעיל לכך, למשל ב-C#:

                      condition ? consequent : alternative
                      

                      אם התנאי (condition) נכון, לא מבוצעת הערכה של הפרמטר השני (alternative)

                      WWWW מנותק
                      WWWW מנותק
                      WWW
                      כתב ב נערך לאחרונה על ידי WWW
                      #14

                      @odeddvir אני מכיר את זה מפלטפורמות אחרות, בפלטפורמות הסטנדרטיות יש תמיד אפשרות של && ו || גם ב שתי תנאים של IF.

                      איך זה ב VBA? לדוגמה:

                      IF (a = 1 OR b = 2)
                      

                      WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                      OdedDvirO תגובה 1 תגובה אחרונה
                      0
                      • WWWW WWW

                        @odeddvir אני מכיר את זה מפלטפורמות אחרות, בפלטפורמות הסטנדרטיות יש תמיד אפשרות של && ו || גם ב שתי תנאים של IF.

                        איך זה ב VBA? לדוגמה:

                        IF (a = 1 OR b = 2)
                        
                        OdedDvirO מנותק
                        OdedDvirO מנותק
                        OdedDvir
                        כתב ב נערך לאחרונה על ידי OdedDvir
                        #15

                        @www אגב, המונח שאנו עוסקים בו נקרא Short-circuit evaluation.
                        לצערי הוא לא קיים בשפת VBA.
                        תמיד שני הצדדים יחושבו, דהיינו גם אם a = 1 עדיין תבוצע ההשוואה האם b=1 למרות שהתנאי הוא or והתוצאה היא ודאי אמת.

                        תגובה 1 תגובה אחרונה
                        3
                        תגובה
                        • תגובה כנושא
                        התחברו כדי לפרסם תגובה
                        • מהישן לחדש
                        • מהחדש לישן
                        • הכי הרבה הצבעות


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

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

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