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

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

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

מתוזמן נעוץ נעול הועבר ארכיון code613m
6 פוסטים 3 כותבים 486 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

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

  • התחברו או הירשמו כדי לחפש.