› פורומים › אפיון ופיתוח פריוריטי › שמירת קוד משותף לכמה פרוצדורות
- This topic has 12 תגובות, 5 משתתפים, and was last updated לפני 4 חודשים by shimshon.
- Post
- Replies
-
- נובמבר 9, 2021 בשעה 1:58 pm
אני לא מסכים אתך: יש קוד מסוים ששמרתי כהפעלה מתוך מסך func אשר משתמש בקורסור עם הפקודה DECLARE @NCRC1 CURSOR ואין בעיה בפרוצדורה שקוראת להפעלה הזו באמצעות #INCLUDE func/TEST_NEWCALCRELCOST.אני לא כל כך אוהב את הטכניקה הזו מפני שהקוד נמצא במסך: לאחר עריכה, עלי להריץ בניית מסכים מחדש, וזה גורם להודעה מסוימת אצל המשתמשים (לכן אני מוסיף/מתקן/משפר מסכים רק בערב או בסוף השבוע). לעומת זאת, פיתחתי טכניקה של קריאת פרוצדורה נוספת לבצע עבודה משותפת. לדוגמא, אפשר לכתוב קוד כמו
LINK ORDERS TO :$.ORD;
ERRMSG 1 WHERE :RETVAL <= 0;
INSERT INTO ORDERS (ORD, ORDNAME)
SELECT ORIG.ORD, ORIG.ORDNAME
FROM ORDERS ORIG, STACK
WHERE ORIG.ORD = STACK.ELEMENT
AND ORIG.ORD > 0;
EXECUTE WINACTIV '-P', 'TEST_MUTUALCODE', 'ORDERS',
:$.ORD;
UNLINK ORDERS;- נובמבר 10, 2021 בשעה 9:52 am
כשאותו קוד מועבר ל func/my_Test הוא מחייב להוסיף @ לשם ה CURSOR. כשהפרוצדורה מפנה לקוד זה ב INCLUDE אין שגיאה והקוד רץ אבל נראה שהCURSOR לא עובד כראוי כי לא נותן את התוצאה הרצויה (אין שינוי) כפי שהיה נותן אם אותו הקוד נשאר בתוך הפרוצדורה.קריאה לפרוצדורה בעלת קוד משותף זה רעיון אבל לא מספיק כאשר בקוד כמה וכמה לינקים ומשתנים שונים.
כך שבינתיים לא מצאתי פתרון למנוע הכפלת הקוד.
- נובמבר 10, 2021 בשעה 1:11 pm
זה צריך לעבודאני רוצה לבדוק שלא העברתם ביטויים כמו ZZZ.$: מהפרוצדורות לבאפר ללא שינוי. צריכים להעביר משתנים רגילים. ה-$ לא מוכר כבר בתוך הבאפר (הנ"ל יחזיר את הערך שתשימו בפרוצדורה במשתנה ZZZ.: – כאילו הדולר הוחלף בכלום ולכן יותר ברור להשתמש במשתנים ייעודים בתור קלט).
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- נובמבר 10, 2021 בשעה 1:36 pm
הקוד שבבאפר כולל שימוש במשתנים שהם קלט של כל הפרוצדורות המפנות לקוד זה.לדג' LINK SUPPLIERS TO :$.SUP
חשבתי שהוא פשוט מכניס את הקוד ישירות כאילו היה כתוב בפרוצדורה.
הוצאתי את הלינק מחוץ לקוד ומשתנים אחרים של הפרוצדורה העברתי למשתנים רגילים- עדיין לא עובד.
אם הבאפר לא מתייחס ללינק שנוצר בפרוצדורה שקראה לו, איך ניתן להתייחס לקלט כזה בבאפר?
תודה
- נובמבר 10, 2021 בשעה 1:51 pm
היה עוזר לו היינו רואים את הקוד כי אחרת אנחנו מגששים באפלה. אתה כותב שיש לינק לטבלת SUPPLIERS. אפשר לכתוב משהו שנראה מוזר אבל יכול לעבוד – במקום לכתובLINK SUPPLIERS TO :$.SUP
תכתוב :MYSUP = :$.SUP בפרוצדורה שלך, ובקוד המשותף תכתוב LINK SUPPLIERS TO :MYSUP
הרי בפנים :$.SUP מכיל שם של קובץ במערכת הקבצים וניתן להעתיק אותו.
- נובמבר 10, 2021 בשעה 2:06 pm
חשבתי שהוא פשוט מכניס את הקוד ישירות כאילו היה כתוב בפרוצדורה.
זה פחות או יותר נכון, רק התרגום של $ לשם פרוצדורה שקורה בתוך הפרוצדורה לא עובד אלא ה-$ מתורגם לכלום ולכן לא קוראים מהשתנה של הפרוצדורה.
אני מסכים עם נעם – בלי לראות את הקוד אנחנו חייבים לנחש ולחשוב על דברים שאצלנו מובנים מאליהם, כאשר אם הקוד היה מולנו יש סיכוי טוב שנראה את הבעיה די מיידית.
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- נובמבר 10, 2021 בשעה 3:23 pm
דרך אגב, $ פירושו "שם התכנית הנוכחית". לפעמים אפשר לנצל את העובדה הזו ולפעמים זה יוצר בעיות. פעם נדרשתי להכין ברקוד שהכיל את כתובת החברה, אבל אין בגופן הברקוד אפשרות להדפיס את @, לכן זה הוחלף ב-$. בהתחלה כמובן תוכן הברקוד הכיל את שם התכנית באמצע הכתובת.לקח לי קצת זמן למצוא שיטה להתגבר על זה – בסוף הגדרתי הודעה לפרוצדורה שהמלל שלו $ והטענתי אותו באמצעות SELECT ENTMESSAGE שבעצמו משתמש ב-$.
- נובמבר 11, 2021 בשעה 10:17 am
ניסיתי להעביר את המשתנה הקובץ של הפרוצדורה למשתנה מקומיMYSUP = :$.SUP: וזה אכן רץ טוב, אבל יוצר שגיאת סינטקס בפרוצדורה unresolved identifier myprocname.SUP.
במקום זה, הוצאתי את ה LINK וגם את הUNLINK כך שירוצו מחוץ לבאפר וכעת גם עובד מצוין!
אז למדתי שאפשר להכניס CURSOR@ בתוך באפר, רק צריך לשים לב שבאפר לא מתייחס למשתני $ שמגיעים מהפרוצדורה שקראה לו ולכן צריך לשלחם כמשתנים רגילים. את הפתיחה והסגירה של הלינקים למשתני הפרוצדורה להגדיר מחוץ לבאפר.
תודה רבה לכם!
- נובמבר 11, 2021 בשעה 12:52 pm
אפשר לשים את הלינק בפניםרק במקום = יש לעשות
select … into … from dummy
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- יולי 22, 2024 בשעה 9:36 am
שלום נעם.ניסיתי את הקוד שלך של קריאה מתוך פרוצדורה לפרוצדורה אחרת, ע"י:
EXECUTE WINACTIV '-P', 'TEST_MUTUALCODE', 'ORDERS', :$.ORD;
זה עובד לי מעולה על שרת הפיתוח, גם כשמעביר את זה לשרת האמת, על השרת עצמו זה עובד, אבל כשמנסה להפעיל את הפרוצדורה דרך ממשק הווב זה לא עובד, יש סיבה לזה? ואולי פיתרון?
תודה רבה.
- יולי 22, 2024 בשעה 2:00 pm
This reply has been reported for inappropriate content.WINACTIV לא עובד בממשק הוובי,תנסה להחליף ל ACTIVATEמוצגות 12 תגובות – 1 עד 12 (מתוך 12 סה״כ)תגיות: Announcement, BUF, CURSOR, קוד משותף
- יש להתחבר למערכת על מנת להגיב.
סרגל נגישות
visibility_offהשבת את ההבזקים
titleסמן כותרות
settingsצבע רקע
zoom_outזום (הקטנה)
zoom_inזום (הגדלה)
remove_circle_outlineהקטנת גופן
add_circle_outlineהגדלת גופן
spellcheckגופן קריא
brightness_highניגודיות בהירה
brightness_lowניגודיות כהה
format_underlinedהוסף קו תחתון לקישורים
font_downloadסמן קישורים