מיספור שורות בשאילתא - אקסס
-
יש לי טבלה שמרכזת נניח תשלומים בפריסה,
יש ID לכל לקוח (CustID), ובטבלת Payments מזהה ייחודי (PaymentID) לכל הוראת תשלום (עתידית כלשעברית).
חשוב לי מאד לדעת כל תשלום כמה מתוך כמה הוא, כלומר תשלום X מתוך Y תשלומים. אז Y תשלומים זה פשוט: Count(CustID.Payments)
אבל אני לא מצליח (ולא שלא ניסיתי) למצוא דרך למצוא את מספר התשלום מתוך השורה.
עד כה השתמשתי בדרך מאד בנאלית ולא נכונה, חישבתי את הID של כל שורה מינוס הID של שורה הראשונה ללקוח, מה שיצר כמובן בעיה כאשר מחקתי שורה (=תשלום 10 מתוך 9) או הוספתי שורה (=תשלום 134 מתוך 11). כך שאני לא יכול לסמוך על חישוב מעוקל שכזה.
מצאתי כל מיני קודי VB שמיועדים להעתיק את סרגל Record X of Y אבל תכל'ס, זה לא עובד.
ניסיתי:DCount("CustID","Customers","CustID <=" & [CustID]) אבל זה מחשב רק זיהוי יחודי, אני לא יכול להפעיל את זה על PaymentID כי הוא מופיע כפול, והוא לא ייחודי.
א קיצער, האם יש דרך לחשב את מספר התשלום ביחס ללקוח ספציפי?!
מקווה שהובנתי
תודה למי שטרח לקרוא עד כאן,
ותודה עצומה מראש למי שיצליח להביא רעיון.פורסם במקור בפורום CODE613 ב05/02/2014 18:52 (+02:00)
-
נראה לי שמותר לשמור את זה בשורת התשלום, אבל נניח שאתה לא שומר.
אז אם המספר הוא מספר רץ, ובהכרח כל השורות שאחריו בעלי מס' גבוה יותר, אז תעשה Count על תשלומים של לקוח זה עם מס' שווה או קטן למס' הID של התשלום הנוכחי.
אם אין מספר, או המספר לא רץ/לא לפי סדר, אז תעשה אותו הדבר אבל בהתבסס על התאריך, כל השורות בהם התאריך קטן או שווה לנוכחי.עריכה, כעת ראיתי שכבר ניסית קודים בכיוון. מה קורה כשאתה עושה ככה:
DCount("CustID","Customers","PaymentID <= " & [PaymentID] & " AND CustID = " & [CustID])
פורסם במקור בפורום CODE613 ב05/02/2014 19:07 (+02:00)
-
אם אתה מוותר על שאילתה, אתה יכול לעשות את זה בדו"ח ואז לעשות שדה אחד שהערך שלו הוא "=1" ולעשות סכומים מצטברים מעל קבוצה (כמובן בתנאי שכל לקוח יש לו קיבוץ בפני עצמו.
אם יש לך בטבלת הבסיס את תאריך ההתחלה ותאריך הסיום, אז הדרך לחשב את מספר התשלום היא פשוטה מאוד, datediff פונקציה קלת משקל שמחשבת מרחק בין תאריכים.
לעשות את זה בשאילתה, זה מסובך והדרך הטובה ביותר היא באמצעות קוד, אם תרצה אוכל לעזור לך בזה שלח לי את המסד, זה קוד שעשוי להאט מאוד את השאילתה אם לא עושים אותו יעיל.
בהצלחה.
פורסם במקור בפורום CODE613 ב05/02/2014 20:38 (+02:00)
-
עיין כאן בדוגמא שהביא moishy
http://www.prog.co.il/showthread.php?t=138631פורסם במקור בפורום CODE613 ב05/02/2014 21:52 (+02:00)
-
הוא אכן משתמש בקוד, אבל נראה שהוריד את זה מהאינטרנט או משהו, הקוד הזה מסתמך על order by מסויים, שברגע שאתה משנה אותו בשאילתה, כבר לא הרווחת כלום. לדעתי חבל על המריבות עם אקסס, תסתפק בדו"ח וזהו.
ואגב אם אתה עושה את זה בטופס, יש מצב שזה יותר קל על ידי אובייקט recordset אם אני לא טועה.פורסם במקור בפורום CODE613 ב06/02/2014 01:18 (+02:00)
-
עיין כאן בדוגמא שהביא moishy
http://www.prog.co.il/showthread.php?t=138631השאלה שם זה מספור רץ פשוט לגמרי.
כלומר כמו שבאקסס יש מספר שורה למטה, אז זה מביא את זה בשדה בשאילתה.
זה שימושי רק לייצוא וגם אז לא ממש.פורסם במקור בפורום CODE613 ב06/02/2014 10:55 (+02:00)
-
@דוד ל.ט.
אתה יכול לנמק?תוריד את הקובץ תשנה את המיון ordrr by ותראה בעצמך.
אז לא הבנת אותי. לא אמרתי שלא.
התכוונתי שכמו שכשאתה עמוד על שורה אז כתוב למטה 5 מתוך XXXX
אז ה5 הזה יהיה כתוב באחת העמודות בשורה ה5 במיון הנוכחי.גם אם הקוד לא מביא את התוצאה הרצוייה הזו (יש שם בסוף קוד מעודכן יותר) זה הייתה כוונת פותח האשכול שם, שלא ככונת פותח האשכול פה.
פורסם במקור בפורום CODE613 ב06/02/2014 15:29 (+02:00)
-
אני מצרף דוגמא שכתבתי בעקבות השאלה. (לאחראים: נשמח אם תאפשרו גם את הסיומת accdb בהעלאת קבצים <!-- s8-) --><img src="{SMILIES_PATH}/icon_cool.gif" alt="8-)" title="מגניב" /><!-- s8-) --> )
השאילתא לא תלוייה במיון ולא בסינון. (גם אם נסנן רק תשלום אחד זה יראה איזה תשלום מתוך כמה)בעייה שלא היה לי זמן להתעסק איתה:
אם יש יותר מתשלום אחד הוא יכתוב על שתי התשלומים את אותו מספר תשלומים. (יש בקובץ דוגמא לזה) - הסיבה היא שהשאילתא בודקת וסופרת את מה שיותר קטן או שווה לתאריך התשלום.
יש לי אולי פיתרון זה ליצור שדה נוסף מסוג תאריך שיכיל בתוכו את התאריך + שעה שבה נוצרה התנועה ולסנן לפי זה. (יכול להועיל גם במקרה שמפיקים קבלה מאוחרת על תשלום ורוצים שזה ייכנס בסוף [בתאריך ההפקה של הקבלה] ולא בתאריך של השיק - אם יש שדה של נוצר בתאריך אז זה יפתור את הבעייה)השתמשתי בכוונה בשאילתת משנה ולא בDLookUp כי היא יותר זריזה מאשר DLookUp.
פורסם במקור בפורום CODE613 ב09/02/2014 01:40 (+02:00)