› פורומים › אפיון ופיתוח פריוריטי › קלט בוליאני דיפולטיבי לפרוצדורה
- This topic has 7 תגובות, 3 משתתפים, and was last updated לפני 2 שנים, 11 חודשים by yitzchok.
- Post
-
- דצמבר 13, 2021 בשעה 12:34 pm
האם/ כיצד ניתן להגדיר קלט לפרוצדורה שיהיה גם בוליאני וגם דיפולטיבית יסומן תמיד (תיבה עם V) ?האפשרות היחידה שראיתי היא להגדירו כ CHAR = 'Y ולא ממש כבוליאני כי מגדירים את השדה כבוליאני בפרוצדורה באותו מקום שמגדירים אותו דיפולטיבי (בשדה "סוג" בפרמטרים לפרוצדורה- הרחבה).
תודה
- Replies
-
- דצמבר 13, 2021 בשעה 1:14 pm
כרגע נראה לי בלתי אפשרי: המפתח נמצא בשדה "סוג" במסך הבן "פרמטרים לפרוצדורה – הרחבה". מצד אחד צריך לסמן כאן Y כדי לקבל שדה בוליאני ומצד שני צריך לסמן d לקבל ערך מחדלי שמוגדר בשלב קודם כלשהו. ברור שהשדה לא יכול לקבל שני ערכים בו זמנית.- דצמבר 13, 2021 בשעה 1:25 pm
מוטב לשכוח ממה שכתבתי קודם.נניח שבשלב 10 לפרוצדורה יש פרמטר FLG שמוגדר סוג CHAR, אורך 1. במסך הבן "פרמטרים לפרוצדורה – הרחבה" מסומן Y בשדה "סוג". ההגדרות הללו יתנו שדה בוליאני.
עכשיו לערך המחדלי: בשלב קודם לפרוצדורה (נניח שלב 9), שם ישות SQLI, תרשום בגוף השלב
:DEFAULT = 'Y'
(כרגיל יוצא משובש כאן: צריך להיות משתנה כמו DEFAULT עם נקודותיים בצד שמאל שלו, כאשר הערך שלו Y). עכשיו בשלב 10, בשורה של FLG יש לרשום את :DEFAULT (שם המשתמש שהוגדר קודם) בשדה "ערך". כיון שהערך מגיע ממשתנה שמוגדר מראש, הערך הזה יהיה מחדלי.
יש דוגמא (אמנם לא שדה בוליאני אבל זה לא משנה) בפרוצדורה DELPART – בשלב 7 מוגדר ערך למשתנה והוא מופיע בקלט בשלב 8.
- התגובה הזו עודכנה לפני לפני 2 שנים, 11 חודשים ע"י NoamN.
- דצמבר 14, 2021 בשעה 9:47 am
תודה. ניסיתי להגדיר משתנה DEFAULT: בשלב לפני ולהכניסו כערך הקלט הבוליאני אבל הוא לא יוצא דיפולטיבית. כל פעם שמריצים את הפרוצדורה יוצא הערך שהוכנס בהרצה הקודמת.בפרוצדורת DELPART מוגדר לקלט סוג d (ברירת מחדל מהפרוצדורה) וכנראה לכן זה עובד שם. אבל במצב של קלט בוליאני עדיין לא מצאתי אפשרות להגדיר גם ברירת מחדל.
- דצמבר 14, 2021 בשעה 10:14 am
יכול להיות שאתם צריכים להוסיף לפני ה INPUT שלב SQLI עם מחיקה מתאימה מטבלת FORMUSERQUERY.אכן טבלה סטנדרטית אבל אני לא מאמין שמחיקה משם נחשבת כבעייתית.
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- דצמבר 16, 2021 בשעה 10:16 am
הצליח, תודה.
<p dir="ltr">:E = 0 ;
SELECT EXEC INTO :E FROM EXEC
WHERE EXEC.ENAME = 'procname' ;
DELETE FROM FORMUSERQUERY
WHERE FORMUSERQUERY.USER = SQL.USER
AND FORMUSERQUERY.NAME = 'paramname'
AND FORMUSERQUERY.FORM = :E ;</p>- דצמבר 16, 2021 בשעה 10:54 am
אופס, האמת היא שמחיקה מטבלת FORMUSERQUERY לא עוזרת כדי לקבל ערך דיפולטיבי מהפרוצדורה (אלא רק למחוק את הבחירה האחרונה של המשתמש)… כל עוד מגדירים את הקלט 'Y' בוליאני ולא 'd' הוא נשאר ריק ולא מקבל ערך דיפולטיבי המוגדר לו בפרוצדורה…אם מאוד רוצים אפשר אלי להכניס לפני הקלט רשומה חדשה ועדכון רשומה מתאימה בFORMUSERQUERY. אבל אז צריך להכניס לרשומה ב FORMUSERQUERY ערך לשדה PROG (מס' פנימי של השלב של הקלט בפרוצדורה- שהוא חלק ממפתח הטבלה) ויתכן שבפיתוח בהמשך ישתנה מספר השלב…
כנראה עדיף להשאר עם קלט דיפולטיבי Y ולוותר על הייצוג הבוליאני…
- דצמבר 16, 2021 בשעה 12:57 pm
לשם השלימות רצוי להוסיף את החלק המודגש.:E = 0 ;
SELECT EXEC INTO :E FROM EXEC
WHERE EXEC.ENAME = 'procname'
AND TYPE = 'P'
;
DELETE FROM FORMUSERQUERY
WHERE FORMUSERQUERY.USER = SQL.USER
AND FORMUSERQUERY.NAME = 'paramname'
AND FORMUSERQUERY.FORM = :E ;[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
- יש להתחבר למערכת על מנת להגיב.