שאלה נורא חשובה....

שאלה נורא חשובה....

אוקיי אז ככה...באקסס...בניתי שאילתת הוספה....הבעיה היא כזאתי....אני רוצה להוסיף קריטריון שבמקרה שנגיד המספר_עובד מופיע כבר בטבלה שאליה מוסיפים אז הוא לא מוסיף ובמקרה שלא מופיע, להוסיף. הבעיה היא שבבונה הביטויים בניתי את הביטוי כך בתור קריטריון (תחת הכותרת מספר_עובד) קריטריון: [tbl_ovdim]![mispar_oved] <> [tbl_ovdim_vatikim]![mispar_oved] האקסס מזהה את הסוגריים המרובעות כקריאה לקבלת נתונים מהשתמש ולא כערכים שיש להשוות בינהם... איך אני בונה את התנאי הזה? אני מאוד מאוד אודה לכם אם תוכלו לעזור לי. חורף.
 

פוזנא

New member
אז ככה

ראשית, סוגריים מרובעים זה כל הערכים !! ולא רק כאלה שניתנים ע"י המשתמש ! האקסס לעיתים מפעיל תיבת דוח-שיח בה הוא מבקש את הערכים. כדי להימנע מזה, כל שעליך לעשות הוא כך: בתצוגת עיצוב של השאילתה, פשוט הוסף לטבלאות למעלה את כל הטבלאות המשמשות את התנאי שלך. בלי קישורים, בלי להוסיף שדות לשאילתה - בלי כלום. זה אמור לפתור את הבעיות שלך... ENJOY !
 
אוקיי...תודה רבה....אבל

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

אני מקווה שאתה בונה את השאילתה בקוד.... כלומר, ב - VBA ולא יוצר שאילתה ממשית. ובכל אופן, הנה הפתרון לקוד בטופס עצמו. באיבר הקריטריון אנחנו כותבים:
" WHERE (((tbl_ovdim![mispar_oved]) <> " & Me![mispar_oved] & "))"​
פשוט לא?
 
שמוליק

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

בקוד של הטופס....פשוט להוסיף את השורה אבל הוא לא מבין את (where) אני משער שה debugger מבקש שאני יגדיר אותו או משהו כזה....
 
כפי שאתה בודאי יודע...

WHERE הינו איבר קריטריון בשאילתה.... אני הבנתי שאתה יודע קצת תכנות באקסס... אז הרעיון הכללי הוא להוסיף שאילתה בקוד, הבנוי על כל האיברים שלה כלומר: INSERT INTO VALUES WHERE ואז להוסיף את הפקודה: Docmd.RunSQL והשאילתה שלך שנכנסת לתוך סוגרים. פעולה זאת תבצע הוספה לטבלה בדיוק כפי שאתה מבקש, רק שקל יותר לשלוט בקריטריונים. מקווה שהונתי הפעם קצת יותר
 

tberger

New member
הבנת הבעיה ופתרון אחר

אתה רוצה לבדוק אם קיים כבר מספר עובד שאתה רוצה להוסיף. אם קיים לא להוסיף ואם לא קיים להוסיף. האם נכון ? אם כן הרי לכל DBMS יש הגדרות (המכונות CONSTRAINT) לכל מיני תנאים וביניהם בדיקה האם הערך שרוצים להכניס לשדה כבר קיים (בדיקה המכונה UNIQUE). אם קיים מתקבלת הודעת שגיאה וכך יודעים. הדבר נועד לשמירת עקביות המידע גם אם יש טעויות בתוכנה או מכניסים נתונים ישירות ל DB
 
נכון אבל

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

LuzErez

New member
פתרון פשוט../images/Emo13.gif

לעשות Left Join בין הטבלאות כך שמספר העובד יופיע כ Null בטור של הטבלה לתוכה אנו מכניסים את הנתונים. בתנאי לכתוב is not null ואז מקבלים רק עובדים שאינם מופיעים כבר בטבלה:
SELECT Ovdim.Oved_ID, Ovdim_Vatikim.Oved_ID FROM Ovdim LEFT JOIN Ovdim_Vatikim ON Ovdim.Oved_ID = Ovdim_Vatikim.Oved_ID WHERE (((Ovdim_Vatikim.Oved_ID) Is Null));​
 
למעלה