הצטרפו לקבוצות שלנו לקבלת עדכונים מרוכזים פעם בשבוע:

ווטסאפ:
http://wa.dwh.co.il
טלגרם:
http://telegram.dwh.co.il

איך מכניסים ערך של רשומה למשתנה?

More
16 years 4 months ago #4959 by davidvir
היי,

יש לי טבלה (TEST) בת שתי עמודות A ו-B ושורה אחת בלבד.  אני מעוניין ליצור משתנה שיחזיק את הערך 1 או 0
בהתאם לערכים שמצאים בטבלת TEST.

לדוגמא,כאשר הערך בעמודה A הינו 40 ובעמודה B הינו 20 אזי המשתנה יקבל את הערך 1.
בכל מקרה אחר הוא יקבל את הערך 0.

זה בכלל אפשרי?

Please התחברות to join the conversation.

More
16 years 4 months ago #4960 by Daniel Chotzen
davidvir שלום,
בתוך הסקריפט ניתן לגשת לכל ערך בכל שדה בכל רשומה באמצעות הפונקציה ()peek
פונקציה זו מקבלת 3פרמטרים
1. שם של שדה לחיפוש
2. מספר הרשומה ממנה אנו רוצים לשלוף את הערך מהשדה. 0 מציין את הרשומה הראשונה, -1 מתחיל את הספירה מהרשומה האחרונה. אם לא מציינים פרמטר זה ברירת המחדל היא 0 כלומר הרשומה הראשונה.
3. שם של טבלה.  פרמטר זה הוא חובה במידה ומשתמשים בפונקציה שלא במסגרת הפקודה LOAD
בכל מקרה אחר באם לא מציינים של של טבלה הוא לוקח בחשבון כאילו זו הטבלה שאותה הוא קורא כרגע.

ניתן להשתמש בפנקציה גם בתוך פקודת LOAD ואז בעצם היא מתבצעת עבור כל רשומה. כך שזה מאפשר למעשה להעביר ערכים של שדה משדה שקיים כבר לשדה חדש בטבלה הנקראת כרגע.

במידה ומשתמשים בפונקציה מחוץ לפקודת LOAD (וזה למשל במקרה של הדוגמה שלך) הרי שצריך להציב אותה בתוך משתנה או לבדוק את הערך שבה

כלומר במקרה שלך לאחר שקראת את הטבלה שדיברת עליה אתה יכול להוסיף שורה חדשה מאחרי ה-LOAD שאומרת ככה
if
peek(A) = 40 and peek(B) = 20 then
set myVar=1
else
set myVar=0
end if

מקווה שעזרתי
נ.ב
אגב, כל משתנה שמגדירים אותו בסקריפט נגיש אחר כך גם בשאר המודל, כלומר בlayout וגם במקרו והערך הראשוני שלו הוא מה שהיה בסיום הסקריפט.

Please התחברות to join the conversation.

More
16 years 4 months ago #4961 by davidvir
היי DanielC ,

פתרון יפה,לא הכרתי את PEEK.
השתמשתי בזה ואכן הפונ' עובדת אך גיליתי שלמעשה עכשיו אני נתקע במשהו אחר.

אני מתחבר ל-DB ואם רשומה מסויימת בטבלת מסויימת שווה ל-1 אני ממשיך את הטעינה,אם הרשומה
הנ"ל שווה לאפס אז אני יוצא מה-IF ולא טוען דבר.

את אותה רשומה הכנסתי לתוך המשתנה בעזרת PEEK.

הבעיה היא שכאשר המשתנה שלנו שווה ל-0 שום דבר לא נטען והקובץ בעצם ריק (ללא כל נתונים כי ה-QV לא נכנס ללולאה)
כמובן שמצב זה הינו בעייתי כי המשתמשים רואים קובץ ריק.
כאשר הפתרון האופטימלי זה במידה ולא נכנסים ללופ-להשאיר את המצב כמו שהוא ולא
לעדכן את הקובץ.
כיצד מטפלים בבעיה זו?

תודה

דויד

Please התחברות to join the conversation.

More
16 years 4 months ago #4963 by Daniel Chotzen
הי דוד,
אני חושב שהפתרון הפשוט הוא כזה:
לשם התחלה עליך ליצא פעם ראשונה את הקובץ לQVD באופן יזום באמצעות הפקודה STORE.
עכשיו בתוכנית שלך אתה ממשיך כרגיל.
בשלב לאחר שאכלסת את המשתנה שלנו בערך שקיים ברשומה ההיא עליך לפצל את הסקפריט באמצעות IF כך שבמידה והמשתנה מכיל 0 אתה תקרא את הQVD ובמקרה והמשתנה מכיל 1 אתה תקרא את הנתונים מהDB ובסיום הטעינה תייצא את הטבלה המעודכנת לאותו QVD.
זה פותר לדעתי את הבעיה (אם הבנתי אותה נכון).
אפשרות נוספת ויעילה יותר יכולה להתבצע במידה ויש לך דרך להפריד את הרשומות החדשות מהרשומות הישנות.
במקרה כזה אתה קורא את הרשומות הישנות מהQVD תמיד, והביטוי IF ישמש אותך להחליט באם לקרוא את הרשומות החדשות מה-DB או לא לקרוא אותן בכלל. במידה וכן גם כאן אתה מיצא את הטבלה החדשה לQVD עבור הLOAD הבא.


שים לב שבשני המקרים אתה דורס את הQVD בחדש רק אם הבאת רשומות חדשות.
בברכה

Please התחברות to join the conversation.

More
16 years 4 months ago #4965 by davidvir
דניאל ,הבנת את הבעיה נכון.

דרך ב' לא אפשרית,או לפחות מורכבת ביותר לכן אני רואה שהאופציה היחידה
הינה דרך א' כלומר שימוש ב-QVD.
המודל שלי כולל 20 טבלאות,אז כמובן שצריך לייצא את כולן ואם נוספת עוד טבלה
אז גם אותה יש לייצא ולהוסיף ל-IF ,לא עניין פשוט,הרבה תחזוקה תידרש.

לא עולה לך רעיון אחר רגע לפני שאני ניגש לביצוע?  :-[

Please התחברות to join the conversation.

More
16 years 4 months ago #4966 by Daniel Chotzen
הממ...
ובכן, אני בדרך כלל פועל בדרך קצת שונה ממך. אצלי בכל פרוייקט הדבר הראשון זה להוריד את כ ל!! טבלאות המקור לתוך קבצי  QVD (כעין שלב staging)
כך שמבחינתי מה שאתה צריך לא שונה ממה שאני כבר עושה.
ולכן אולי קשה לי להבין את הבעיתיות.
יתרה מזו, לפעמים אני עושה שכבה נוספת של QVD שבהם אני מעביר את הקבצים המקוריים סדרה של בדיקות ו/או שינויים ומכין אותם לקראת REALOAD של המודל הסופי.

כך שלהתחמק מלבצע את התהליך של יצוא 20 הטבלאות שלך לא נראה לי שאפשר. אבל לגבי התחזוקה שציינת.
כשאתה מוסיף טבלת מקור חדשה לתוך מודל קיים אתה בכל מקרה צריך לכתוב את הLOAD שלה בסקריפט. כך שכל ההבדל יהיה להכניס את זה לתוך החלק של הIF. הרבה תחזוקה אין פה.

אם אתה מחפש ליעל את התחזוקה אולי כדי שתציץ בסדרת השדות שנקראים 
"System fields"
שדות אלה מספקים מידע על הטבלאות/השדות/הרשומות ועוד על כל מבנה הנתונים במודל.
כמו כן ישנה סידרה של פנקציות שכולן מתחילות באותיות QVD ומספקות מידע רב על קבצי QVD
כן שתוכל לבנות מודל שיציג למי שאחראי על המערכת מידע על כל הנתונים, הטבלאות וקבצי הQVD שמעורבים במודל.
במדריך למשתמש ישנו מידע מצוין ומפורט כולל דוגמאות, לכל אחת מהפונקציות.

מצטער שאני לא יכול לעזור יותר מזה (למעט לכתוב את הפרוייקט במקומך :) )


בברכה
נ.ב
אגב גם בדרך ב' יש שימוש בQVD
ולעיתים אין ברירה אלא להשתמש בדרך ב'
למשל בגלל גודל של טבלאות מקור לא רוצים תמיד לקרוא את כל הידע שוב מהDB ואז מביאים משם רק את הדלתא

Please התחברות to join the conversation.

More
16 years 4 months ago #4969 by davidvir
רב תודות על התגובות.

מוכרות לי רוב הפונקציות המשמשות לבקרה,אני אף מבצע טעינה אינקרמנטלית במודל אחר,פשוט
במודל הנ"ל זה מאוד מורכב לבצע זאת.

אאלץ לכתוב פעם אחת את פקודות הייצוא ל-QVD ,אין ברירה....

שוב תודה 8)

Please התחברות to join the conversation.

Moderators: avishaylgiladlDaniel Chotzenodedth
Time to create page: 0.314 seconds