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

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

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

שימוש בפרמטרים בשאילתת עדכון באקסס

מתוזמן נעוץ נעול הועבר תוכנה
18 פוסטים 3 כותבים 459 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • איש ימיניא איש ימיני

    @OdedDvir
    תצוגת SQL :

    UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[חודש 08/20] = IIf(Not (IsNull([חודשי].[Name])),"1","")
    WHERE ((([ראשי].[חודש 08/20]) Is Null Or ([ראשי].[חודש 08/20]) Like 0));
    

    מה שאני רוצה הוא שאוכל לכתוב משהו כמו:

    [חודש [הזן חודש]/[הזן שנה]]
    

    במקום:

    [חודש 08/20]
    

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

    dovidD מחובר
    dovidD מחובר
    dovid
    ניהול
    כתב ב נערך לאחרונה על ידי
    #4

    @איש-ימיני זה תמיד החודש והשנה הנוכחיים או לאו דוקא?

    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
    איש ימיניא תגובה 1 תגובה אחרונה
    1
    • dovidD dovid

      @איש-ימיני זה תמיד החודש והשנה הנוכחיים או לאו דוקא?

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

      @dovid
      ברוב הפעמים
      לא בכל הפעמים

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

        @OdedDvir
        תצוגת SQL :

        UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[חודש 08/20] = IIf(Not (IsNull([חודשי].[Name])),"1","")
        WHERE ((([ראשי].[חודש 08/20]) Is Null Or ([ראשי].[חודש 08/20]) Like 0));
        

        מה שאני רוצה הוא שאוכל לכתוב משהו כמו:

        [חודש [הזן חודש]/[הזן שנה]]
        

        במקום:

        [חודש 08/20]
        

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

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

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

        UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[חודש 08/20] = IIf(Not (IsNull([חודשי].[Name])),"1","")

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

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

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

        למשל משהו כזה (פישטתי קצת את ה Where)

        Dim iMonth, iYear as integer
        iYear = InputBox("הזן שנה")
        iMonth = InputBox("הזן חודש")
        
        Dim fieldName as String
        fieldName = "חודש " & iMonth & "/" & iYear
        Dim SQL as String
        SQL = "UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[" & fieldName  & "] = IIf(Not (IsNull([חודשי].[Name])),'1','')
        WHERE Nz([ראשי].[" & fieldName & "],0)=0;"
        CurrentDb.Execute SQL
        
        איש ימיניא תגובה 1 תגובה אחרונה
        3
        • OdedDvirO OdedDvir

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

          UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[חודש 08/20] = IIf(Not (IsNull([חודשי].[Name])),"1","")

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

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

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

          למשל משהו כזה (פישטתי קצת את ה Where)

          Dim iMonth, iYear as integer
          iYear = InputBox("הזן שנה")
          iMonth = InputBox("הזן חודש")
          
          Dim fieldName as String
          fieldName = "חודש " & iMonth & "/" & iYear
          Dim SQL as String
          SQL = "UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[" & fieldName  & "] = IIf(Not (IsNull([חודשי].[Name])),'1','')
          WHERE Nz([ראשי].[" & fieldName & "],0)=0;"
          CurrentDb.Execute SQL
          
          איש ימיניא מנותק
          איש ימיניא מנותק
          איש ימיני
          כתב ב נערך לאחרונה על ידי איש ימיני
          #7

          @OdedDvir
          תודה רבה !!!
          עשיתי את זה כך:

          Dim iMonth, iYear As Integer
          iYear = InputBox("הזן שנה")
          iMonth = InputBox("הזן חודש")
          
              Dim db As DAO.Database
              Set db = CurrentDb
              Dim qryDef As DAO.QueryDef
              Dim selectSQL As String
              Dim fieldName As String
              fieldName = "חודש " & iMonth & "/" & iYear
              Dim SQL As String
              
              Dim newSelectSQL As String
              newSelectSQL = "UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[" & fieldName & "] = IIf(Not (IsNull([חודשי].[Name])),'1','') WHERE Nz([ראשי].[" & fieldName & "],0)=0;"
              With db.QueryDefs("1234")
                  .SQL = newSelectSQL
              End With
              
              DoCmd.OpenQuery "1234"
              
              Set qryDef = Nothing
              Set db = Nothing
          

          @OdedDvir אמר בשימוש בפרמטרים בשאילתת עדכון באקסס:

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

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

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

            @OdedDvir
            תודה רבה !!!
            עשיתי את זה כך:

            Dim iMonth, iYear As Integer
            iYear = InputBox("הזן שנה")
            iMonth = InputBox("הזן חודש")
            
                Dim db As DAO.Database
                Set db = CurrentDb
                Dim qryDef As DAO.QueryDef
                Dim selectSQL As String
                Dim fieldName As String
                fieldName = "חודש " & iMonth & "/" & iYear
                Dim SQL As String
                
                Dim newSelectSQL As String
                newSelectSQL = "UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[" & fieldName & "] = IIf(Not (IsNull([חודשי].[Name])),'1','') WHERE Nz([ראשי].[" & fieldName & "],0)=0;"
                With db.QueryDefs("1234")
                    .SQL = newSelectSQL
                End With
                
                DoCmd.OpenQuery "1234"
                
                Set qryDef = Nothing
                Set db = Nothing
            

            @OdedDvir אמר בשימוש בפרמטרים בשאילתת עדכון באקסס:

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

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

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

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

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

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

            ID   | UpdatedOn
            100  | 10/01/2020
            101  | 10/01/2020
            

            אגב, מדוע שינית את הקוד ומה הרווחת בזה?

            איש ימיניא תגובה 1 תגובה אחרונה
            1
            • OdedDvirO OdedDvir

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

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

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

              ID   | UpdatedOn
              100  | 10/01/2020
              101  | 10/01/2020
              

              אגב, מדוע שינית את הקוד ומה הרווחת בזה?

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

              @OdedDvir אמר ב[שימוש בפרמטרים בשאילתת עדכון

              אגב, מדוע שינית את הקוד ומה הרווחת בזה?

              ניסיתי בדיוק כמו שכתבת וזה החזיר שגיאה
              265604d0-529d-4dc6-99a2-226b0e8af285-image.png
              עשיתי חיפוש קצר על הקוד ומצאתי את זה ושילבתי את זה ביחד ועובד מצוין וזה גם מיד מריץ את השאילתה.

              @OdedDvir אמר בשימוש בפרמטרים בשאילתת עדכון באקסס:

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

              ID   | UpdatedOn
              100  | 10/01/2020
              101  | 10/01/2020
              

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

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

                @OdedDvir אמר ב[שימוש בפרמטרים בשאילתת עדכון

                אגב, מדוע שינית את הקוד ומה הרווחת בזה?

                ניסיתי בדיוק כמו שכתבת וזה החזיר שגיאה
                265604d0-529d-4dc6-99a2-226b0e8af285-image.png
                עשיתי חיפוש קצר על הקוד ומצאתי את זה ושילבתי את זה ביחד ועובד מצוין וזה גם מיד מריץ את השאילתה.

                @OdedDvir אמר בשימוש בפרמטרים בשאילתת עדכון באקסס:

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

                ID   | UpdatedOn
                100  | 10/01/2020
                101  | 10/01/2020
                

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

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

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

                ניסיתי בדיוק כמו שכתבת וזה החזיר שגיאה

                שורות 8-9 בקוד שלי אמורות להכתב כשורה אחת ארוכה. ייתכן והדבקת אותן כשתי שורות כמו שמופיע בפוסט.

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

                INSERT INTO UserUpdates(Id, UpdatedOn) VALUES (UserId, UpdateDate);
                
                איש ימיניא תגובה 1 תגובה אחרונה
                1
                • OdedDvirO OdedDvir

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

                  ניסיתי בדיוק כמו שכתבת וזה החזיר שגיאה

                  שורות 8-9 בקוד שלי אמורות להכתב כשורה אחת ארוכה. ייתכן והדבקת אותן כשתי שורות כמו שמופיע בפוסט.

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

                  INSERT INTO UserUpdates(Id, UpdatedOn) VALUES (UserId, UpdateDate);
                  
                  איש ימיניא מנותק
                  איש ימיניא מנותק
                  איש ימיני
                  כתב ב נערך לאחרונה על ידי איש ימיני
                  #11

                  @OdedDvir אמר בשימוש בפרמטרים בשאילתת עדכון באקסס:

                  INSERT INTO UserUpdates(Id, UpdatedOn) VALUES (UserId, UpdateDate);
                  

                  איך אני משלב את זה עם:

                  UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[" & fieldName & "] = IIf(Not (IsNull([חודשי].[Name])),'1','') WHERE Nz([ראשי].[" & fieldName & "],0)=0;
                  
                  OdedDvirO תגובה 1 תגובה אחרונה
                  0
                  • איש ימיניא איש ימיני

                    @OdedDvir אמר בשימוש בפרמטרים בשאילתת עדכון באקסס:

                    INSERT INTO UserUpdates(Id, UpdatedOn) VALUES (UserId, UpdateDate);
                    

                    איך אני משלב את זה עם:

                    UPDATE ראשי LEFT JOIN חודשי ON [ראשי].[מזהה]=[חודשי].[מזהה] SET ראשי.[" & fieldName & "] = IIf(Not (IsNull([חודשי].[Name])),'1','') WHERE Nz([ראשי].[" & fieldName & "],0)=0;
                    
                    OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    כתב ב נערך לאחרונה על ידי
                    #12

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

                    איש ימיניא תגובה 1 תגובה אחרונה
                    2
                    • OdedDvirO OdedDvir

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

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

                      @OdedDvir
                      אני רוצה לעדכן בטבלה 'ראשי' בשדה 'כמות' שכל חודש יעלה מספר אחד, לדוגמה: אם יצחק שה-ID שלו הוא 55 נמצא בטבלת 'חודשי' שיוסיף לו 1 בשדה 'כמות' (+1), וחוץ מזה יעדכן גם בטבלת 'UserUpdates' שהיה עדכון ביום X
                      מקווה שכתבתי מספיק ברור

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

                        @OdedDvir
                        אני רוצה לעדכן בטבלה 'ראשי' בשדה 'כמות' שכל חודש יעלה מספר אחד, לדוגמה: אם יצחק שה-ID שלו הוא 55 נמצא בטבלת 'חודשי' שיוסיף לו 1 בשדה 'כמות' (+1), וחוץ מזה יעדכן גם בטבלת 'UserUpdates' שהיה עדכון ביום X
                        מקווה שכתבתי מספיק ברור

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

                        @איש-ימיני האם אתה צריך לזכור את כל תאריכי העדכונים או רק את תאריך העדכון האחרון?

                        איש ימיניא תגובה 1 תגובה אחרונה
                        1
                        • OdedDvirO OdedDvir

                          @איש-ימיני האם אתה צריך לזכור את כל תאריכי העדכונים או רק את תאריך העדכון האחרון?

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

                          @OdedDvir
                          את כל התאריכים

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

                            @OdedDvir
                            את כל התאריכים

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

                            @איש-ימיני תצטרך ליצור שתי שאילתות ולהריץ אחת אחרי השניה:

                            שאילתא לעדכון המונה:

                            UPDATE Users INNER JOIN Monthly ON Users.Id = Monthly.UserId SET Users.[Counter] = [Users].[Counter]+1;
                            

                            שאילתא להוספת רשומת עדכון לטבלת UserUpdates:

                            INSERT INTO UserUpdates ( UserId, UpdatedOn )
                            SELECT Monthly.UserId, Now() AS UpdatedOn
                            FROM Monthly;
                            

                            או שתוכל להקצות ערך ברירת מחדל לשדה UpdatedOn בטבלה UserUpdates

                            =Now()
                            

                            ואז השאילתא יותר פשוטה:

                            INSERT INTO UserUpdates ( UserId )
                            SELECT Monthly.UserId
                            FROM Monthly;
                            
                            איש ימיניא תגובה 1 תגובה אחרונה
                            3
                            • OdedDvirO OdedDvir

                              @איש-ימיני תצטרך ליצור שתי שאילתות ולהריץ אחת אחרי השניה:

                              שאילתא לעדכון המונה:

                              UPDATE Users INNER JOIN Monthly ON Users.Id = Monthly.UserId SET Users.[Counter] = [Users].[Counter]+1;
                              

                              שאילתא להוספת רשומת עדכון לטבלת UserUpdates:

                              INSERT INTO UserUpdates ( UserId, UpdatedOn )
                              SELECT Monthly.UserId, Now() AS UpdatedOn
                              FROM Monthly;
                              

                              או שתוכל להקצות ערך ברירת מחדל לשדה UpdatedOn בטבלה UserUpdates

                              =Now()
                              

                              ואז השאילתא יותר פשוטה:

                              INSERT INTO UserUpdates ( UserId )
                              SELECT Monthly.UserId
                              FROM Monthly;
                              
                              איש ימיניא מנותק
                              איש ימיניא מנותק
                              איש ימיני
                              כתב ב נערך לאחרונה על ידי איש ימיני
                              #17

                              @OdedDvir
                              תודה רבה!!!
                              עובד טוב מאוד!!
                              עריכה: הוספתי רק את זה:

                              Nz([Users].[Counter],0)+1
                              
                              OdedDvirO תגובה 1 תגובה אחרונה
                              0
                              • איש ימיניא איש ימיני

                                @OdedDvir
                                תודה רבה!!!
                                עובד טוב מאוד!!
                                עריכה: הוספתי רק את זה:

                                Nz([Users].[Counter],0)+1
                                
                                OdedDvirO מנותק
                                OdedDvirO מנותק
                                OdedDvir
                                כתב ב נערך לאחרונה על ידי
                                #18

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

                                עריכה: הוספתי רק את זה:
                                Nz([Users].[Counter],0)+1

                                בעיקרון אם יש ערך ברירת מחדל 0 לשדה Counter לא צריך, אבל תמיד טוב להיות זהיר...

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


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

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

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