המאפיין CurrentRecord מזייף
-
שלום וברכה
יש לי טופס שמציג רשומות באקסס (טופס בודד), ויש לחצנים למעבר לרשומה הבא ולמעבר לרשומה הקודמת
אני מעוניין שכאשר הטופס טעון לרשומה הראשונה שלא יהיה מאופשר הלחצן של רשומה קודמת וכאשר הוא על הרשומה האחרונה שלא יהיה מאופשר הלחצן של רשומה הבאהכתבתי קוד כזה
GoPrevious.Enabled = CurrentRecord <> 1 GoNext.Enabled = CurrentRecord <> RecordsetClone.RecordCount
אבל משום מה כאשר אני פותח את הטופס מתוך טופס אחר שמכיל את הרשומות בצורה של טפסים רציפים ואני עושה בתוכו חיפוש (על ידי
bookmark
בRecordSetClone
) פתאום הוא משתבש ולפעמים חוסם את הכפתור הנ"ל למרות שהוא לא הראשון וכן להיפך
אשמח להכוונה
תודה! -
@מומחה-באקסס המאפיינים CurrentRecord ו-RecordCount מתעדכנים בצורה א-סינכרונית. כלומר, אקסס לא טוענת מייד את כל הרשומות, ולכן הם עלולים להציג ערך שגוי כל עוד הרשימה לא נטענה במלואה.
תוכל לאלץ את הטופס לטעון את כל הרשומות על ידי קפיצה לרשומה האחרונה על ידי MoveLast. -
@www ערך המאפיין נקבע רק בזמן שכל הרשומות נטענו, ובוצעה גישה לרשומה האחרונה. בשעת מחיקת רשומה על ידי המשתמש שפתח את קבוצת הרשומות (להלן RS) המאפיין יוקטן. עם זאת, אם נמחקה רשומה על ידי משתמשים אחרים שלא פתחו את ה-RS, המאפיין לא יעודכן עד שהמשתמש שפתח את ה-RS מנסה לגשת לרשומה שנמחקה. מה שיגרום לתוצאות לא נכונות.
במקרה של ריבוי משתמשים, עדיף להשתמש בשאילתת קיבוץ או ב-DCount כדי לקבל את הערך העכשווי.
יש באתר של מיקרוסופט הסבר נרחב על התופעה, כולל דוגמאות המחשה. -
@odeddvir אמר בהמאפיין CurrentRecord מזייף:
@www מעניין. מהי הפקודה שבה אתה משתמש לפתיחת ה-RS?
Dim NN As Recordset Set NN = CurrentDb.OpenRecordset("NN") If Not NN.EOF And NN.BOF Then NN.MoveLast MsgBox NN.RecordCount For n = 1 To NN.RecordCount
אני רואה כרגע שכבר ניסיתי בעבר לשים MoveLast, וזה לא עזר...
-
@www אמר בהמאפיין CurrentRecord מזייף:
If Not NN.EOF And NN.BOF Then NN.MoveLast
השורה הזו נראית שגויה, כי בפתיחה של RecordSet שמכיל לפחות רשומה אחת, התנאי יחזיר False ולא יבוצע MoveLast, כי Not קודם ל-And, לכן הקוד מתפרש כך:
If (Not NN.EOF) And (NN.BOF) Then NN.MoveLast
אולי התכוונת כך:
If Not NN.EOF And Not NN.BOF Then NN.MoveLast
שפירושו כך:
If (Not NN.EOF) And (Not NN.BOF) Then NN.MoveLast