קלט בוליאני דיפולטיבי לפרוצדורה

פורומים אפיון ופיתוח פריוריטי קלט בוליאני דיפולטיבי לפרוצדורה

  • Post
    namnami
    משתתף
    האם/ כיצד ניתן להגדיר קלט לפרוצדורה שיהיה גם בוליאני וגם דיפולטיבית יסומן תמיד (תיבה עם V) ?

    האפשרות היחידה שראיתי היא להגדירו כ CHAR = 'Y ולא ממש כבוליאני כי מגדירים את השדה כבוליאני בפרוצדורה באותו מקום שמגדירים אותו דיפולטיבי (בשדה "סוג" בפרמטרים לפרוצדורה- הרחבה).

    תודה

מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)
  • Replies
    NoamN
    משתתף
    none
    כרגע נראה לי בלתי אפשרי: המפתח נמצא בשדה "סוג" במסך הבן "פרמטרים לפרוצדורה – הרחבה". מצד אחד צריך לסמן כאן Y כדי לקבל שדה בוליאני ומצד שני צריך לסמן d לקבל ערך מחדלי שמוגדר בשלב קודם כלשהו. ברור שהשדה לא יכול לקבל שני ערכים בו זמנית.
    NoamN
    משתתף
    none
    מוטב לשכוח ממה שכתבתי קודם.

    נניח שבשלב 10 לפרוצדורה יש פרמטר FLG שמוגדר סוג CHAR, אורך 1. במסך הבן "פרמטרים לפרוצדורה – הרחבה" מסומן Y בשדה "סוג". ההגדרות הללו יתנו שדה בוליאני.

    עכשיו לערך המחדלי: בשלב קודם לפרוצדורה (נניח שלב 9), שם ישות SQLI, תרשום בגוף השלב

    :DEFAULT = 'Y'

    (כרגיל יוצא משובש כאן: צריך להיות משתנה כמו DEFAULT עם נקודותיים בצד שמאל שלו, כאשר הערך שלו Y). עכשיו בשלב 10, בשורה של FLG יש לרשום את :DEFAULT (שם המשתמש שהוגדר קודם) בשדה "ערך". כיון שהערך מגיע ממשתנה שמוגדר מראש, הערך הזה יהיה מחדלי.

    יש דוגמא (אמנם לא שדה בוליאני אבל זה לא משנה) בפרוצדורה DELPART – בשלב 7 מוגדר ערך למשתנה והוא מופיע בקלט בשלב 8.

    • התגובה הזו עודכנה לפני לפני 2 שנים, 4 חודשים ע"י NoamN.
    namnami
    משתתף
    תודה. ניסיתי להגדיר משתנה DEFAULT: בשלב לפני ולהכניסו כערך הקלט הבוליאני אבל הוא לא יוצא דיפולטיבית. כל פעם שמריצים את הפרוצדורה יוצא הערך שהוכנס בהרצה הקודמת.

    בפרוצדורת DELPART מוגדר לקלט סוג d (ברירת מחדל מהפרוצדורה) וכנראה לכן זה עובד שם. אבל במצב של קלט בוליאני עדיין לא מצאתי אפשרות להגדיר גם ברירת מחדל.

    yitzchok
    משתתף
    IL
    יכול להיות שאתם צריכים להוסיף לפני ה INPUT שלב SQLI עם מחיקה מתאימה מטבלת FORMUSERQUERY.

    אכן טבלה סטנדרטית אבל אני לא מאמין שמחיקה משם נחשבת כבעייתית.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    namnami
    משתתף
    הצליח, תודה.
    <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>
    namnami
    משתתף
    אופס, האמת היא שמחיקה מטבלת FORMUSERQUERY לא עוזרת כדי לקבל ערך דיפולטיבי מהפרוצדורה (אלא רק למחוק את הבחירה האחרונה של המשתמש)… כל עוד מגדירים את הקלט 'Y' בוליאני ולא 'd' הוא נשאר ריק ולא מקבל ערך דיפולטיבי המוגדר לו בפרוצדורה…

    אם מאוד רוצים אפשר אלי להכניס לפני הקלט רשומה חדשה ועדכון רשומה מתאימה בFORMUSERQUERY. אבל אז צריך להכניס לרשומה ב FORMUSERQUERY ערך לשדה PROG (מס' פנימי של השלב של הקלט בפרוצדורה- שהוא חלק ממפתח הטבלה) ויתכן שבפיתוח בהמשך ישתנה מספר השלב…

    כנראה עדיף להשאר עם קלט דיפולטיבי Y ולוותר על הייצוג הבוליאני…

     

    yitzchok
    משתתף
    IL
    לשם השלימות רצוי להוסיף את החלק המודגש.

    :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 ;

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.