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

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

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

הרצת שאילתה בלולאה - VBA אקסס

מתוזמן נעוץ נעול הועבר תכנות
26 פוסטים 5 כותבים 603 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    השיב לסקרן 0 ב נערך לאחרונה על ידי dovid
    #12

    @סקרן-0 כתב בהרצת שאילתה בלולאה - VBA אקסס:

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

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

    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

    ס תגובה 1 תגובה אחרונה
    2
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      השיב לdovid ב נערך לאחרונה על ידי dovid
      #13

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

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

        @dovid

        @dovid כתב בהרצת שאילתה בלולאה - VBA אקסס:

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

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

        @dovid כתב בהרצת שאילתה בלולאה - VBA אקסס:

        עזוב, תן לנו לעזור לך, בבקשה!

        וואו! - אני אביא את המקרה האמיתי (הוא קצת יותר מורכב כדלהלן, ולכן העדפתי לשאול ע"י משל... אולי טעיתי...)

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

        1.טבלת "תורמים" - "רחוב", "עיר", "שכונה".
        2. טבלת "רחובות" - "מזהה_רחוב", "מזהה_עיר", "שם_רחוב", "מזהה_שכונה"
        3. טבלת "ערים" - "מזהה_עיר", "שם_עיר"
        4. טבלת "שכונות" - "מזהה_שכונה", "שם_שכונה".

        כעת המטרה היא שבהזנת העיר והרחוב יתעדכן אוטומטית הנתון ב תורמים.שכונה

        הקוד המקורי שאמור לעשות את זה הוא:

        If Not IsNull(Me!רחוב) Then
                Me!שכונה = Nz(DLookup("שם_שכונה", "שכונהלרחוב", "רחוב = '" & Me!רחוב & "' AND עיר = '" & Me!עיר & "'"), "")
            End If
        

        (שכונהלרחוב זו שאילתא שמוציאה את שם_עיר מ"ערים", שם_רחוב מ"רחובות", ושם_שכונה מ"שכונות")

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

        למעשה יש טופס עדכון, שמבוסס על הטבלה "רחובות", כשעל כל שורה יש כפתור "עדכון", שמריץ את הקוד הבא:

        Private Sub עדכן_Click()
        
                DoCmd.SetWarnings 0
                DoCmd.RunSQL "UPDATE תורמים SET תורמים.שכונה = '" & DLookup("שם_שכונה", "שכונה", "קוד_שכונה =" & Me!קודשכונה & " and קוד_עיר = " & Me!קודעיר) & "' WHERE (((תורמים.עיר)= '" & DLookup("שם", "ערים", "קוד =" & Me!קודעיר) & "') AND ((תורמים.רחוב)= '" & Me!שם & "'));"
                DoCmd.SetWarnings -1
            End If
        
        End Sub
        

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

        נ.ב. @dovid האם כדאי למחוק את הפוסטים הקודמים שלי? או שיש בהם איזה תוספת מידע מועילה? לשיקולך...)

        תודה ענקית!

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

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

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

            @dovid "רחוב, עיר, שכונה" הם טקסט.

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

              @סקרן-0 שאילתה כזו:

              SELECT שכונות.שם_שכונה, רחובות.שם_רחוב, ערים.שם_עיר 
              FROM (רחובות INNER JOIN שכונות ON רחובות.מזהה_שכונה = שכונות.מזהה_שכונה)
              INNER JOIN ערים ON רחובות.מזהה_עיר = ערים.מזהה_עיר
              

              מניבה תוצאה נכונה או שגיאה כל שהיא?
              ואם התוצאה נראית נכונה, האם בשאילתה הבאה ישנה התאמה בין הרחובות והערים והשכונה:

              SELECT רחוב, עיר, שכונה, שאילתה.שם_שכונה FROM תורמים 
              LEFT JOIN 
              (
              SELECT שכונות.שם_שכונה, רחובות.שם_רחוב, ערים.שם_עיר 
              FROM (רחובות INNER JOIN שכונות ON רחובות.מזהה_שכונה = שכונות.מזהה_שכונה)
              INNER JOIN ערים ON רחובות.מזהה_עיר = ערים.מזהה_עיר
              ) AS שאילתה ON 
              שאילתה.שם_רחוב = תורמים.רחוב AND
              שאילתה.שם_עיר = תורמים.עיר 
              
              

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

                @dovid השאילתא הראשונה מחזירה הודעת שגיאה "שגיאת תחביר במשפט JOIN

                תודה רבה!

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

                  @סקרן-0 כתבתי בטעות FORM במקום FROM.
                  תיקנתי כעת במקור, נסה כעת.

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

                    @dovid תיקנתי את זה בעצמי ולמרות זאת זה החזיר את אותה שגיאה.
                    האם אתה מתכוון לזה:

                    SELECT ערים.שם, שכונה.שם_שכונה, רחובות.שם
                    FROM ערים INNER JOIN (שכונה INNER JOIN רחובות ON שכונה.קוד_שכונה = רחובות.קודשכונה) ON (ערים.קוד = שכונה.קוד_עיר) AND (ערים.קוד = רחובות.קודעיר);
                    
                    

                    (השמות בפועל קצת שונים ממה שכתבתי בהתחלה, כמובן שתיקנתי אצלי לפני שעדכנתי על השגיאה)

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

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

                      @סקרן-0 לא, התכוונתי למה שכתבתי ואאינני מבין למה לא עובד לך.
                      כנראה יש עוד הבדל חוץ מהשמות, או שאתה טועה בתרגום.

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

                        @dovid אוקיי, אני חושב שהבנתי במה טעיתי... תיקנתי, והשאילתה עובדת - הנה:

                        SELECT תורמים.רחוב, תורמים.עיר, תורמים.שכונה, שאילתה.שם_שכונה
                        FROM תורמים INNER JOIN (SELECT ערים.שם as עיר, שכונה.שם_שכונה, רחובות.שם as רחוב
                        FROM ערים INNER JOIN (שכונה INNER JOIN רחובות ON שכונה.קוד_שכונה = רחובות.קודשכונה) ON ערים.קוד = רחובות.קודעיר
                        )  AS שאילתה ON (תורמים.עיר = שאילתה.עיר) AND (תורמים.רחוב = שאילתה.רחוב);
                        
                        

                        כשעשיתי LEFT JOIN בין התורמים לשאילתתה המשנה חזרה טבלה ריקה, וכשעשיתי RIGHT JOIN חזרו כל השורות של התורמים וכן כל השורות של השכונות.
                        זה בסדר? או שיש חשיבות לצירוף השמאלי, ואז זה אומר שיש לי טעות?

                        נ.ב. בתצוגה באתר יש ערבוב עם האנגלית, עכ"פ הכינויים לשדות בשאילתת המשנה הם בסדר...

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

                          @סקרן-0 לא הבנתי. השאילתה שהבאת כעת עובדת לגמרי? אז מה כתבת שבLEFT JOIN חזר ריק (לא ייתכן שINNER JOIN יחזיר יותר מLEFT JOIN!).

                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

                            @dovid טעות שלי... פשוט חזרו הרבה מאד שורות ריקות בהתחלה, וזה היה נראה לי ריק... זה עובד מצוין! תודה (וסליחה על התגובה המוטעית...)

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

                              @סקרן-0 אז הצעד הבא זה שאילתת עדכון:

                              UPDATE תורמים INNER JOIN (
                                  SELECT ערים.שם as עיר, שכונה.שם_שכונה, רחובות.שם as רחוב
                                  FROM ערים INNER JOIN (שכונה INNER JOIN רחובות ON שכונה.קוד_שכונה = רחובות.קודשכונה) ON ערים.קוד = רחובות.קודעיר
                              ) AS שאילתה ON (תורמים.עיר = שאילתה.עיר) AND (תורמים.רחוב = שאילתה.רחוב)
                              SET תורמים.שכונה = שאילתה.שם_שכונה
                              WHERE תורמים.שכונה IS NULL OR תורמים.שכונה = ''
                              

                              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

                                @dovid עובד! תודה ענקית!

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

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

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

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

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