אקסס | RecordCount מחזיר ערך לא נכון
-
כבר קרה לי כמה פעמים שאקסס משתגע ומוסיף או מחסיר כמה רשומות ממספר הרשומות בגישה דרך VBA:
RS.RecordCount
לא עוזר להוסיף לפני כן:
If RS.EOF And RS.BOF Then RS.MoveLast
כי כשהטבלה ריקה זה פשוט מחזיר שגיאה שהרשומה לא קיימת.
וזה מחזיר RecordCount של 23.במקרה אחר, שזה הציג פחות ממה שיש באמת, אז לאחר מחיקת כל הרשומות, זה הציג לי RecordCount: -3
מה עושים?
בדקתי ב 2 גרסאות, 2010 ו 365.
-
כנראה שהטופס עוד לא סיים לטעון את כל ה RS
תנסה לזוז קודם לרשומה האחרונה ואז לאחזר את הערך של RecordCount
if rs.eof then
result = 0
else
rs.MoveLast
result = rs.RecordCount -
@WWW אמר באקסס | RecordCount מחזיר ערך לא נכון:
לא עוזר להוסיף לפני כן:
If RS.EOF And RS.BOF Then RS.MoveLastכי כשהטבלה ריקה זה פשוט מחזיר שגיאה שהרשומה לא קיימת.
וזה מחזיר RecordCount של 23.צריך להיות IF NOT
@WWW אמר באקסס | RecordCount מחזיר ערך לא נכון:
במקרה אחר, שזה הציג פחות ממה שיש באמת, אז לאחר מחיקת כל הרשומות, זה הציג לי RecordCount: -3
כמה הוא החסיר לפני שמחקת את כל הרשומות,
אם הוא החסיר 3 ייתכן שיש איזה שורה מפוספסת שמחסירה 3... -
@מלא אמר באקסס | RecordCount מחזיר ערך לא נכון:
אם הוא החסיר 3 ייתכן שיש איזה שורה מפוספסת שמחסירה 3...
מה הכוונה?
-
@מלא אמר באקסס | RecordCount מחזיר ערך לא נכון:
צריך להיות IF NOT
מצאתי את זה ברשת, מעניין.
בכל אופן זה לא עזר, גם בלי IF. -
@WWW אמר באקסס | RecordCount מחזיר ערך לא נכון:
@מלא אמר באקסס | RecordCount מחזיר ערך לא נכון:
אם הוא החסיר 3 ייתכן שיש איזה שורה מפוספסת שמחסירה 3...
מה הכוונה?
התכוונתי שזה דבר מוזר שהוא יחזיר -3 על טבלה ריקה.
ואם תמיד הוא החזר - 3 לפעמים יש איזה שורה שמחסירה 3כאן בסעיף 3 הם כותבים שהא מחזיר 100% אמת...
-
@מלא אמר באקסס | RecordCount מחזיר ערך לא נכון:
התכוונתי שזה דבר מוזר שהוא יחזיר -3 על טבלה ריקה.
ואם תמיד הוא החזר - 3 לפעמים יש איזה שורה שמחסירה 3ברור שזה מוזר.
הוא החזיר נראה לי כל הזמן 3 פחות, ואז ב 0 הוא תרגם ל -3 ...
-
אני חושב שזה בגלל שבVBA כל משפט IF בודק את כל התנאים שב-AND יחד, גם אם הראשון FALSE.
תנסה להפריד את התנאים, ולבדוק אחד אחד:
If RS.EOF then
result =0
else
RS.Movelast
result = RS.recordCount
end if -
@OdedDvir גם כשאני כותב RS.Movelast בלי IF, זה לא עוזר.
עכשיו הטבלה ריקה לגמרי
וזה מציג לי 75...זה כנראה בגלל שאני מדביק כל הזמן חומר, ויש שגיאות הדבקה שמושמטות.
כנראה יש לו בעייה עם הרענון.אני מאמין שדחוס ותקן יפתור את הבעיה.
אבל זה קובץ ענק אין לי זמן לזה
-
יש לי רעיון:
אם אתה צריך רק את מספר הרשומות, אולי DCount יעזור?
עוד רעיון
אולי תריץ שאילתת יצירת טבלה, ותכניס רק עמודה אחת לתוכה (אם אתה צריך רק את מספר הרשומות), ותבדוק כמה שורות יש בה
SELECT [id] INTO [NewTable] FROM [TableName]
ותבדוק כמה רשומות יש ב-NewTable -
עוד כיוון:
איך את פותח את ה-RS? מה פקודת OpenRecordset?
תנסה להוסיף את הדגל dbReadOnly או dbOpenSnapshot -
@OdedDvir אמר באקסס | RecordCount מחזיר ערך לא נכון:
dbOpenSnapshot
עזר!
עדכון:
לא עזר, כעת זה מציג לי על 7000 רשומות 1. -
תנסה OpenRecordset("A", dbOpenSnapshot, dbReadOnly)
-
או OpenRecordset("A", dbPessimistic, dbReadOnly)
-
@OdedDvir אמר באקסס | RecordCount מחזיר ערך לא נכון:
או OpenRecordset("A", dbPessimistic, dbReadOnly)
תנסה OpenRecordset("A", dbOpenSnapshot, dbReadOnly)כנ"ל מחזיר 1.
-
@WWW וואו איזה תיסכול
ניסית ליצור טבלת עזר ולספור את הרשומות שם (כמו שהצעתי למעלה)?
או אולי במקום שם הטבלה "A" תכניס שאילתא (זה יוצר עותק של הטבלה)
set RS = currentdb.OpenRecordset("SELECT id FROM A", dbOpenSnapshot, dbReadOnly) -
@OdedDvir אמר באקסס | RecordCount מחזיר ערך לא נכון:
set RS = currentdb.OpenRecordset("SELECT id FROM A", dbOpenSnapshot, dbReadOnly)
ניסיתי כבר בהתחלה.
לא עזר.בכל אופן אני הסתדרתי, הפרויקט הזה שהייתי צריך אותו כבר סיימתי ב"ה.
13/19