UPDATE

  • Post
    sayo
    משתתף
    היי,

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

    לאחר הריצה, כל התעודות עודכנו בתאריכים אך רק התעודה הראשונה עודכנה בסטטוס.
    זו הפרוצדורה:
    LINK PORDISTATUSES POS TO :$.STS;
    ERRMSG 1 WHERE :RETVAL <= 0; UPDATE PORDERITEMS SET DUEDATE = :$.DAT WHERE CONT = :$.CNT; :STAT = 0; SELECT POS.PORDISTATUS INTO :STAT FROM PORDISTATUSES POS WHERE PORDISTATUS <> 0;
    UPDATE PORDERITEMSA SET PORDISTATUS = :STAT
    WHERE ORDI IN
    (SELECT ORDI FROM PORDERITEMS WHERE CONT = :$.CNT);
    UPDATE PORDERITEMS SET FIXDATE = SQL.DATE
    WHERE CONT = :$.CNT;

מוצגות 9 תגובות – 1 עד 9 (מתוך 9 סה״כ)
  • Replies
    אלמוני
    אורח
    אני הייתי כותב את התכנית באמצעות CURSOR וממשק – כך הדברים הרבה יותר ברורים ואפשר לבדוק בשלב כתיבת התכנית מה הולך לעבור עדכון.

    האם יש רשומה בטבלת PORDERITEMSA עבור כל שורה ב-PORDERITEMS? לא תמיד יש שורה מקבילה. שימוש בממשק יתגבר על הבעיה הזו.

    sayo
    משתתף
    רציתי להימנע משימוש ב-CURSOR…
    sayo
    משתתף
    הוספתי CURSOR אבל עדין מעדכן רק את הרשומה הראשונה.
    להלן הקוד:
    DECLARE C CURSOR FOR
    SELECT ORDI FROM PORDERITEMS WHERE ALLI_CONT = :$.CNT;
    OPEN C;
    GOTO 99 WHERE :RETVAL <= 0;
    LABEL 10;
    FETCH C INTO :ORDI;
    GOTO 20 WHERE :RETVAL <= 0;
    UPDATE PORDERITEMSA SET PORDISTATUS = :STAT
    WHERE ORDI = :ORDI;
    :COUNT = :COUNT + 1;
    LOOP 10;
    LABEL 20;
    CLOSE C;
    SELECT ITOA(:COUNT) INTO :PAR2 FROM DUMMY;
    אלמוני
    אורח
    בידקי את הערך של RETVAL לאחר פתיחת הקורסור. היתכן שיש רק שורה אחת שמסומנת כך?
    אגב, אין צורך לעדכן את ערך המשתנה COUNT – לכאורה את יכולה לשמור את הערך המקורי של RETVAL בתוך COUNT ולהציג את הערך הזה בסוף. RETVAL מקבלת את מספר הרשומות שנשלפות בהתחלה.
    אלמוני
    אורח
    הצעה נוספת: ביצעי את שליפת הקורסור ב-WINDBI ותראי כמה רשומות אכן נשלפות (הכוונה רק למשפט SELECT ORDI FROM ORDERITEMS WHERE …).
    sayo
    משתתף
    אני מקבלת מהערך RETVAL אפס לאחר פתיחת הקרסור וגם לאחר ה-FETCH
    אלמוני
    אורח
    סימן שאין שורות למשיכה. תבדקי את ערך המשתנה CNT.
    sayo
    משתתף
    אז איך הוא מעדכן לי את הרשומה הראשונה?
    אלמוני
    אורח
    אמנם זו שאלה טובה, אבל השאלה הנכונה צריכה להיות למה אין שורות ששייכות למכולה?
מוצגות 9 תגובות – 1 עד 9 (מתוך 9 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.