-
@dovid אמר בשגיאה בVBA:
מה אתה מעדיף עבור עצמך כשאתה מבקר במדריך ההוא, שהוא יהיה קצר עם עשר פוסטים, או שהוא יהיה שו"ת אינוסופי בעניינו?
במקרה הספציפי הזה מדובר על אשכול שנפתח במיוחד לתגובות (160 פוסטים בערך) ומ"מ הוא נסגר מזמן כך שלא היה לי צד להקפיץ אותו עכשיו.
@OdedDvir בניסיונותיי הנואשים לצאת מהתסבוכת מחקתי את הקוד, כך שאני לא יכול להעלות אותו, אבל אח"כ התחלתי הכל מהתחלה, בניתי את המסד מחדש, וכתבתי שוב את הקוד, ואז קפצה שגיאה אחרת כדלהלן
אשמח לתגובתך (השם של הטבלה הוא מלכתחילה "Donations" עם S בסוף, כך שלא זו הטעות...)
תודה ענקית על המדריך, הגעתי ממש מאפס, וכבר עכשיו אני יכול לראות את התועלת שיוצאת לי בכמה וכמה דברים באמת יישר כח עצום!!! -
@סקרן-0 תודה על הפרגון, זה חשוב לי.
לענינך, יש טעות כתיב, צריך להיות כך:CurrentDb.Execute "qryUpdate_Status", dbFailOnError
אגב, להבא, אתה יכול לצרף קטע קוד בטקסט רגיל (במקום צילום מסך) על ידי לחיצה על הסמל החמוד הזה:
כך יותר קל להגיב עליו.
בהצלחה! -
@OdedDvir תודה רבה (גם על הטיפ...)
תיקנתי ולא עזרIf donationsToUpdate > 0 Then UserMessage = UserMessage & vbNewLine & "האם ברצונך לעדכן סטטוס למיועדת?" If MsgBox(UserMessage, vbYesNo + vbMsgBoxRtlReading + vbMsgBoxRight) = vbYes Then CurrentDb.Execute "qryUpdate_Status", dbFailOnError End If End If
עדיין אותה הודעה
-
@סקרן-0 לפי האמור בהודעת השגיאה, השאילתה מצפה לפרמטר כלשהו, אך אינה מקבלת אותו.
ברוב המקרים זו טעות בהקלדה, או הפנייה לשדה שאינו קיים בטבלת הבסיס (Donations).
כשאתה מריץ ידנית את השאילתהqryUpdate_Status
מהפאנל הימני, האם אקסס מבקשת להכניס ערך לפרמטר? -
@סקרן-0 הממ.. עכשיו סיקרנת אותי. תבדוק רגע מה קורה אם אתה מחליף את השורה:
CurrentDb.Execute "qryUpdate_Status", dbFailOnError
בשורה:
DoCmd.RunSQL "UPDATE Donations SET Donations.StatusID = 2 WHERE (((Donations.StatusID)=1) AND ((Donations.TargetFamilyID) Is Not Null));"
-
@OdedDvir בחיים לא קרה לי כזה דבר אבל פתאום זה עבד!!!
בלי שהחלפתי...
אין לי מושג מה קרה פתאום, אני כבר כמה שעות על זה...
אבל ניסיתי בכל זאת להחליף וג"כ עבד. ומכאן מתעוררת השאלה האם ייתכן שהיתה לי איזו שגיאה בפרוצדורה ולא בקוד עצמו?
(אני מדגיש שלא שיניתי כלום מהקוד שהעליתי ובכ"ז זה עבד
ושוב תודה רבה על ההשקעה ובעצם על כל העובדה שאני יושב וכותב קודים ואקסס.. וואו...
אגב: מה מבטא המשפטdbFailOnError
? (כמדומני שגם במדריך לא הסברת את זה)
עריכה: אחרי שניסיתי שוב כמה פעמים גיליתי שכשהרצתי עם הקוד המקורי הנתונים התעדכנו בלי החלונית של "הנך עומד לעדכן 2 רשומות" וכו', וכשהרצתי עם הקוד שנתת זה כן דרש כמו בהרצה ידנית של השאילתא
אין לי שמץ מה זה אומר אבל אולי תבין מזה משהו... -
@סקרן-0 אויש... כעת אני אצטרך להכניס את זה למגירת התעלומות הבלתי פתורות של אקסס...
הפקודה
Execute
מקבלת שני פרמטרים, הראשון הוא חובה, ומציין את הדבר שרוצים להריץ, והשני הוא אופציונאלי, ויש לו כמה אפשרויות.
האפשרותdbFailOnError
פירושה: להכשל במקרה של שגיאה, ולגלגל אחורה (=לבטל) כל שינוי שנעשה על ידי הרצת השאילתה.
אם לא מציינים אותו, ברירת המחדל היא האפשרותdbInconsistent
שפירושה עדכון לא עקבי. זה מצב שאתה אמור להמנע ממנו בדרך כלל במערכת.עיין בדקומנטציה של הפקודה באקסס למידע נוסף.
-
@סקרן-0 אמר בשגיאה בVBA:
עריכה: אחרי שניסיתי שוב כמה פעמים גיליתי שכשהרצתי עם הקוד המקורי הנתונים התעדכנו בלי החלונית של "הנך עומד לעדכן 2 רשומות" וכו', וכשהרצתי עם הקוד שנתת זה כן דרש כמו בהרצה ידנית של השאילתא
זו ההתנהגות המצופה, כי
DoCmd
מחקה את ההרצה הידנית של השאילתא ממשק המשתמש (הפאנל הימני), בעוד שExecute
פועלת באופן אחר, ללא קשר לממשק המשתמש בכלל. -