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

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

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

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

מתוזמן נעוץ נעול הועבר תכנות
27 פוסטים 8 כותבים 527 צפיות 7 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO OdedDvir

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

    לדעתי האקסס מחזיר את התשובה הקודמת הוא מחזיר מה שנאמר בפעם הקודמת

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

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

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

    @OdedDvir
    בדקתי את זה שוב מול מי שפיתח את האקסס
    להלן נתוני הבדיקה שהעלנו, וזה נותר בגדר תעלומה:

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

    נקודות חשובות:

    1. אם אני משכפל את הקובץ ושולח מקובץ A ואח"כ שולח מקובץ B זה עובד כראוי (שוב, פעם אחת בקובץ B), כלומר לא הנקודה סגירת הקובץ, אלא יותר פתיחה ואתחול שלו מחדש
    2. אם אני משכפל את הטופס עצמו זה עדיין לא עובד טוב בפעם השניה
    3. גם אחרי הפעלה פעם אחת דרך האקסס, עדיין מתאפשר לשלוח דרך הדפדפן את הבקשה וזה עובד כראוי
    4. כמו שאפשר לראות אני משתמש לשליחת הבקשות באובייקט MSXML2.XMLHTTP

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

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

      @OdedDvir
      בדקתי את זה שוב מול מי שפיתח את האקסס
      להלן נתוני הבדיקה שהעלנו, וזה נותר בגדר תעלומה:

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

      נקודות חשובות:

      1. אם אני משכפל את הקובץ ושולח מקובץ A ואח"כ שולח מקובץ B זה עובד כראוי (שוב, פעם אחת בקובץ B), כלומר לא הנקודה סגירת הקובץ, אלא יותר פתיחה ואתחול שלו מחדש
      2. אם אני משכפל את הטופס עצמו זה עדיין לא עובד טוב בפעם השניה
      3. גם אחרי הפעלה פעם אחת דרך האקסס, עדיין מתאפשר לשלוח דרך הדפדפן את הבקשה וזה עובד כראוי
      4. כמו שאפשר לראות אני משתמש לשליחת הבקשות באובייקט MSXML2.XMLHTTP

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

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

      @אליהו-בן השאלה שלך סיקרנה אותי לחפור קצת בנידון.
      כנראה שהאובייקט של MSXML2.XMLHTTP מפעיל מנגנון מטמון של הבקשות והתגובות, מה שמסביר את התופעה לעיל בדיוק, כי כל מופע של אקסס משוייך לאותו סשן על ידי המערכת.

      יש כמה הצעות לפיתרון, מהקל לכבד:

      1. להוסיף את הכותרות הבאות לאובייקט כשאתה יוצר אותו, בתקווה שהשרת יכבד אותן:
          Set xhrRequest = CreateObject("MSXML2.XMLHTTP.6.0")
          xhrRequest.setRequestHeader "pragma", "no-cache"
          xhrRequest.setRequestHeader "Cache-Control", "no-cache, no-store"
         Do Until order.EOF
         ...
      
      1. להשתמש באובייקט החלופי WinHttp.WinHttpRequest.5.1, שלא משתמש במטמון. שמות המתודות הנדרשות בו זהים לשמות שבאובייקט MSXML2.XMLHTTP.6.0, דהיינו:
      Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
      
      Do Until order.EOF
      'Url = "XXXXXXXXX?
      httpRequest.Open "GET", url, False
      httpRequest.Send
      res = httpRequest.responseText
      
      1. "לעבוד" על המנגנון של המטמון, ולגרום לו לחשוב שבכל פעם מדובר בבקשה שונה לחלוטין, על ידי הוספה של פרמטר "בובה" (dummy) המכיל מספר אקראי, כך:
      ' תריץ את הפקודה הזו פעם אחת בתחילת ההפעלה של התוכנה שלך
      Randomize
      ...
      ' ואז בקוד של השליחה
      
          ' יצירת מספר מ-1 עד 100000
          Dim dummyNumber As Long
          dummyNumber = Int((99999) * Rnd) + 1
      
          ' הוספת הפרמטר לבקשה
          xhrRequest.Open "GET", url, False & "&dummy=" & dummyNumber
      
      1. אם כלו כל הקיצין: תוכל לנקות את המטמון לפני כל הפעלה (על ידי קריאה ל-API של Windows) וכך לכפות יצירת סשן חדש בכל פעם.
        תדביק את הקוד הבא במודול חדש:
      Public Declare PtrSafe Function InternetSetOptionStr Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal lOption As Long, ByVal sBuffer As String, ByVal lBufferLength As Long) As Integer
      
      Public Sub ClearInternetCache()
          InternetSetOptionStr 0, 42, 0, 0
      End Sub
      

      ובקוד של השליחה תקרא למתודה שיצרת לעיל, לפני השליחה:

          ClearInternetCache
          Set xhrRequest = CreateObject("MSXML2.XMLHTTP.6.0")
      ...
      

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

      א Y.Excel.AccessY 2 תגובות תגובה אחרונה
      8
      • OdedDvirO OdedDvir

        @אליהו-בן השאלה שלך סיקרנה אותי לחפור קצת בנידון.
        כנראה שהאובייקט של MSXML2.XMLHTTP מפעיל מנגנון מטמון של הבקשות והתגובות, מה שמסביר את התופעה לעיל בדיוק, כי כל מופע של אקסס משוייך לאותו סשן על ידי המערכת.

        יש כמה הצעות לפיתרון, מהקל לכבד:

        1. להוסיף את הכותרות הבאות לאובייקט כשאתה יוצר אותו, בתקווה שהשרת יכבד אותן:
            Set xhrRequest = CreateObject("MSXML2.XMLHTTP.6.0")
            xhrRequest.setRequestHeader "pragma", "no-cache"
            xhrRequest.setRequestHeader "Cache-Control", "no-cache, no-store"
           Do Until order.EOF
           ...
        
        1. להשתמש באובייקט החלופי WinHttp.WinHttpRequest.5.1, שלא משתמש במטמון. שמות המתודות הנדרשות בו זהים לשמות שבאובייקט MSXML2.XMLHTTP.6.0, דהיינו:
        Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
        
        Do Until order.EOF
        'Url = "XXXXXXXXX?
        httpRequest.Open "GET", url, False
        httpRequest.Send
        res = httpRequest.responseText
        
        1. "לעבוד" על המנגנון של המטמון, ולגרום לו לחשוב שבכל פעם מדובר בבקשה שונה לחלוטין, על ידי הוספה של פרמטר "בובה" (dummy) המכיל מספר אקראי, כך:
        ' תריץ את הפקודה הזו פעם אחת בתחילת ההפעלה של התוכנה שלך
        Randomize
        ...
        ' ואז בקוד של השליחה
        
            ' יצירת מספר מ-1 עד 100000
            Dim dummyNumber As Long
            dummyNumber = Int((99999) * Rnd) + 1
        
            ' הוספת הפרמטר לבקשה
            xhrRequest.Open "GET", url, False & "&dummy=" & dummyNumber
        
        1. אם כלו כל הקיצין: תוכל לנקות את המטמון לפני כל הפעלה (על ידי קריאה ל-API של Windows) וכך לכפות יצירת סשן חדש בכל פעם.
          תדביק את הקוד הבא במודול חדש:
        Public Declare PtrSafe Function InternetSetOptionStr Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal lOption As Long, ByVal sBuffer As String, ByVal lBufferLength As Long) As Integer
        
        Public Sub ClearInternetCache()
            InternetSetOptionStr 0, 42, 0, 0
        End Sub
        

        ובקוד של השליחה תקרא למתודה שיצרת לעיל, לפני השליחה:

            ClearInternetCache
            Set xhrRequest = CreateObject("MSXML2.XMLHTTP.6.0")
        ...
        

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

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

        @OdedDvir
        תודה רבה על ההסבר הנרחב והמפורט
        עצה א' מיד קפץ שגיאה
        עצה ב' עזר בצורה נפלאה
        ממילא כמובן לא המשכתי הלאה
        תודה רבה

        א תגובה 1 תגובה אחרונה
        3
        • א אליהו בן

          @OdedDvir
          תודה רבה על ההסבר הנרחב והמפורט
          עצה א' מיד קפץ שגיאה
          עצה ב' עזר בצורה נפלאה
          ממילא כמובן לא המשכתי הלאה
          תודה רבה

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

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

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

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

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

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

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

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

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

              @OdedDvir
              שים לב עשיתי שינוי קל במה ששלחת ב2
              במקום
              res = xhrRequest.responseText

              צריך להיות
              res = httpRequest.responseText
              ושוב תודה ענקית

              לא הצלחתי כתוב לי שא"א לערוך פוסט רק אחרי 3600 שניות

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

                @אליהו-בן השאלה שלך סיקרנה אותי לחפור קצת בנידון.
                כנראה שהאובייקט של MSXML2.XMLHTTP מפעיל מנגנון מטמון של הבקשות והתגובות, מה שמסביר את התופעה לעיל בדיוק, כי כל מופע של אקסס משוייך לאותו סשן על ידי המערכת.

                יש כמה הצעות לפיתרון, מהקל לכבד:

                1. להוסיף את הכותרות הבאות לאובייקט כשאתה יוצר אותו, בתקווה שהשרת יכבד אותן:
                    Set xhrRequest = CreateObject("MSXML2.XMLHTTP.6.0")
                    xhrRequest.setRequestHeader "pragma", "no-cache"
                    xhrRequest.setRequestHeader "Cache-Control", "no-cache, no-store"
                   Do Until order.EOF
                   ...
                
                1. להשתמש באובייקט החלופי WinHttp.WinHttpRequest.5.1, שלא משתמש במטמון. שמות המתודות הנדרשות בו זהים לשמות שבאובייקט MSXML2.XMLHTTP.6.0, דהיינו:
                Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
                
                Do Until order.EOF
                'Url = "XXXXXXXXX?
                httpRequest.Open "GET", url, False
                httpRequest.Send
                res = httpRequest.responseText
                
                1. "לעבוד" על המנגנון של המטמון, ולגרום לו לחשוב שבכל פעם מדובר בבקשה שונה לחלוטין, על ידי הוספה של פרמטר "בובה" (dummy) המכיל מספר אקראי, כך:
                ' תריץ את הפקודה הזו פעם אחת בתחילת ההפעלה של התוכנה שלך
                Randomize
                ...
                ' ואז בקוד של השליחה
                
                    ' יצירת מספר מ-1 עד 100000
                    Dim dummyNumber As Long
                    dummyNumber = Int((99999) * Rnd) + 1
                
                    ' הוספת הפרמטר לבקשה
                    xhrRequest.Open "GET", url, False & "&dummy=" & dummyNumber
                
                1. אם כלו כל הקיצין: תוכל לנקות את המטמון לפני כל הפעלה (על ידי קריאה ל-API של Windows) וכך לכפות יצירת סשן חדש בכל פעם.
                  תדביק את הקוד הבא במודול חדש:
                Public Declare PtrSafe Function InternetSetOptionStr Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal lOption As Long, ByVal sBuffer As String, ByVal lBufferLength As Long) As Integer
                
                Public Sub ClearInternetCache()
                    InternetSetOptionStr 0, 42, 0, 0
                End Sub
                

                ובקוד של השליחה תקרא למתודה שיצרת לעיל, לפני השליחה:

                    ClearInternetCache
                    Set xhrRequest = CreateObject("MSXML2.XMLHTTP.6.0")
                ...
                

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

                Y.Excel.AccessY מנותק
                Y.Excel.AccessY מנותק
                Y.Excel.Access
                כתב ב נערך לאחרונה על ידי
                #27

                @OdedDvir כתב במעונין בקוד לאקסס שירענן נתונים כאילו סגר את האקסס ופתח **נפתר**:

                כנראה שהאובייקט של MSXML2.XMLHTTP מפעיל מנגנון מטמון של הבקשות והתגובות, מה שמסביר את התופעה לעיל בדיוק, כי כל מופע של אקסס משוייך לאותו סשן על ידי המערכת.

                @OdedDvir אלוף!
                הסימנים והרמזים היו לשם... אבל רק אחד מצא את המטמון!

                Y.Excel.Access @ gmail.com

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


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

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

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