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

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

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

אקסס - איך יכול להיות ערך כפול?

מתוזמן נעוץ נעול הועבר ארכיון code613m
6 פוסטים 3 כותבים 545 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • C מנותק
    C מנותק
    code.net
    כתב ב נערך לאחרונה על ידי
    #1

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

    ובכן, יש לי לקוח שעובד באקסס משני מחשבים ברשת מקומית בו זמנית, היות והוא כמעט ולא משתמש עם דוחות המהירות נסבלת, וזו לא הבעיה.
    אני משתמש עם טופס שמריץ INSERT SQL לאחת הטבלאות, במשפט הSQL אני לוקח את הערך המקסימלי מאותה הטבלה בעמודה מסויימת, מוסיף לה 1, ומכניס שורה חדשה. (אין לי אפשרות מסיבות מסויימות להשתמש עם ההוספה האוטומטית)
    הבעיה החמורה היא, שלפעמים קורה ששני המחשבים עושים את זה באותה שניה [כנראה] וכך נוצר ערך כפול!!!

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

    פורסם במקור בפורום CODE613 ב18/09/2017 11:34 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      השאלה למה אתה צריך את זה, אם אתה סתם מממש מספור אוטומטי אז אל תעשה זאת ותן לאקסס לבחור מספר אוטומטי (הוא עושה זאת ע"י דילוג: כל קליינט מקבל סדרת שורות חדשות שונה עם מספרים, מה שגורם לכך שייתכן שמס' אוטומטי 5 יווצר לפני 4 בגלל שריון לפי קליינט.
      אם אתה כן חייב לממש לבד את המספור, אתה צריך לנסות לחקות את זה. למשל בכניסה של האדם לתוכנה הוא מקבל "מזהה קפיצה" מאחד עד עשר (וגם זה צריך לודאות שזה צולח את הבו זמנית - אם כי זה רגע קטן בהרבה מכל אורך חיי התוכנה), ואז כל שורה חדשה זה חייב להיות המספר הזה כמו 5 15 25 35 וכו'.
      אם המספר לא חייב להיות עוקב זה מעולה, אתה פשוט מצמיד לכל יוזר קידומת למשל 1000000, 2000000 וכו'. ואז אתה מחפש את המקסימום ליוזר הזה ע"י max והתניית where id < 2000000 אז אתהמקבל טווח ספציפי ליוזר. את הקידומת אתה יכול לקבוע בטבלת משתמשים באופן שרירותי או אוטומטי.

      אולי לתותחי האקסס יש פתרונות פשוטים יותר.

      פורסם במקור בפורום CODE613 ב18/09/2017 12:03 (+03:00)

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

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

      תגובה 1 תגובה אחרונה
      1
      • C מנותק
        C מנותק
        code.net
        כתב ב נערך לאחרונה על ידי
        #3

        אני משתמש למספור מסמכים (הנה"ח) וכן חייב להשתמש במספור עוקב, אני משתמש עם אותה עמודה למספר [המ' בפת"ח] כמה סוגי מסמכים
        יש אפשרות באקסס למספור אוטומטי לפי תנאי??

        פורסם במקור בפורום CODE613 ב18/09/2017 12:11 (+03:00)

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

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

          פורסם במקור בפורום CODE613 ב18/09/2017 12:24 (+03:00)

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

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

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

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

            update tbl set DocNum=nz(DMax("DocNum","tbl","DocType=305"),0)+1 where id=1
            

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

            פורסם במקור בפורום CODE613 ב18/09/2017 12:35 (+03:00)

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            תגובה 1 תגובה אחרונה
            2
            • C מנותק
              C מנותק
              code.net
              כתב ב נערך לאחרונה על ידי
              #6

              @ClickOne

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

              update tbl set DocNum=nz(DMax("DocNum","tbl","DocType=305"),0)+1 where id=1
              

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

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

              פורסם במקור בפורום CODE613 ב18/09/2017 12:49 (+03:00)

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

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

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

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