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

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

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

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

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

    תנסה לשנות לסוגריים עגולות

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

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

      תנסה לשנות לסוגריים עגולות

      @ליבל לא עוזר

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

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

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

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

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

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

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

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

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

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

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

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

            בעיה מוכרת.

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

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

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

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

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

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

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

              בעיה מוכרת.

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

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

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

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

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • S לא נמצא
                S לא נמצא
                Shmuel754
                השיב לאוריי ב נערך לאחרונה על ידי
                #8

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

                תגובה 1 תגובה אחרונה
                0
                • 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
                  • WWWW מנותק
                    WWWW מנותק
                    WWW
                    השיב לOdedDvir ב נערך לאחרונה על ידי WWW
                    #10

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

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

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

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

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

                    OdedDvirO תגובה 1 תגובה אחרונה
                    0
                    • OdedDvirO מנותק
                      OdedDvirO מנותק
                      OdedDvir
                      השיב לWWW ב נערך לאחרונה על ידי 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
                      • WWWW מנותק
                        WWWW מנותק
                        WWW
                        השיב לOdedDvir ב נערך לאחרונה על ידי WWW
                        #12

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

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

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

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

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

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

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

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

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

                          condition ? consequent : alternative
                          

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

                          WWWW תגובה 1 תגובה אחרונה
                          2
                          • WWWW מנותק
                            WWWW מנותק
                            WWW
                            השיב לOdedDvir ב נערך לאחרונה על ידי WWW
                            #14

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

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

                            IF (a = 1 OR b = 2)
                            

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

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

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

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

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

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

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