תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    חוקי הפורום

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

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

      יש לי בטבלה עמודות כאלה

      [חודש 08/20] [חודש 09/20]
      

      כרגע אני עושה כל חודש שאילתה חדשה.
      אני רוצה לעשות שאילתה אחת, וכל חודש אני אזין את החודש ואת השנה
      אני רוצה לעשות משהו כמו:

      [חודש [הזן חודש]/[הזן שנה]]
      
      OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • OdedDvir
        OdedDvir @איש ימיני נערך לאחרונה על ידי

        @איש-ימיני תעבור לתצוגת SQL ותדביק כאן את התחביר של השאילתא האחרונה שעשית

        איש ימיני תגובה 1 תגובה אחרונה תגובה ציטוט 2
        • איש ימיני
          איש ימיני @OdedDvir נערך לאחרונה על ידי איש ימיני

          @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]
          

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

          dovid OdedDvir 2 תגובות תגובה אחרונה תגובה ציטוט 0
          • dovid
            dovid ניהול @איש ימיני נערך לאחרונה על ידי

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

            אפשר ליצור קשר dovid@tchumim.com

            איש ימיני תגובה 1 תגובה אחרונה תגובה ציטוט 1
            • איש ימיני
              איש ימיני @dovid נערך לאחרונה על ידי

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

              תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • OdedDvir
                OdedDvir @איש ימיני נערך לאחרונה על ידי 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
                
                איש ימיני תגובה 1 תגובה אחרונה תגובה ציטוט 3
                • איש ימיני
                  איש ימיני @OdedDvir נערך לאחרונה על ידי איש ימיני

                  @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 אמר בשימוש בפרמטרים בשאילתת עדכון באקסס:

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

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

                  OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • OdedDvir
                    OdedDvir @איש ימיני נערך לאחרונה על ידי OdedDvir

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

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

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

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

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

                    איש ימיני תגובה 1 תגובה אחרונה תגובה ציטוט 1
                    • איש ימיני
                      איש ימיני @OdedDvir נערך לאחרונה על ידי איש ימיני

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

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

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

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

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

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

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

                      OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • OdedDvir
                        OdedDvir @איש ימיני נערך לאחרונה על ידי

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

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

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

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

                        INSERT INTO UserUpdates(Id, UpdatedOn) VALUES (UserId, UpdateDate);
                        
                        איש ימיני תגובה 1 תגובה אחרונה תגובה ציטוט 1
                        • איש ימיני
                          איש ימיני @OdedDvir נערך לאחרונה על ידי איש ימיני

                          @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;
                          
                          OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • OdedDvir
                            OdedDvir @איש ימיני נערך לאחרונה על ידי

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

                            איש ימיני תגובה 1 תגובה אחרונה תגובה ציטוט 2
                            • איש ימיני
                              איש ימיני @OdedDvir נערך לאחרונה על ידי

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

                              OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                              • OdedDvir
                                OdedDvir @איש ימיני נערך לאחרונה על ידי OdedDvir

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

                                איש ימיני תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                • איש ימיני
                                  איש ימיני @OdedDvir נערך לאחרונה על ידי

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

                                  OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • OdedDvir
                                    OdedDvir @איש ימיני נערך לאחרונה על ידי 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;
                                    
                                    איש ימיני תגובה 1 תגובה אחרונה תגובה ציטוט 3
                                    • איש ימיני
                                      איש ימיני @OdedDvir נערך לאחרונה על ידי איש ימיני

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

                                      Nz([Users].[Counter],0)+1
                                      
                                      OdedDvir תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                      • OdedDvir
                                        OdedDvir @איש ימיני נערך לאחרונה על ידי

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

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

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

                                        תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                        • 1 / 1
                                        • פוסט ראשון
                                          פוסט אחרון
                                        בא תתחבר לדף היומי!