קודם כל צריך לדעת שהאקסס משתמש בעצם בטבלה נוספת עבור כל שורה בטבלה ששם מאוחסנים הקבצים ולכן המחיקה שלך לא התבצעה על כל הקבצים אלא כנראה מחקה את הקישור לטבלה הנסתרת לכן צריך להשתמש בקוד הבא שמקורו בקובץ העזרה של האקסס 2013:
Function RemoveFiles(strTable As String, strField As String, Optional strFile As String, Optional strFilter As String) As Long
'הקוד מוחק קבצים מצורפים בטבלאות
'הארגומנטים של הקוד זה שם הטבלה, שם השדה ,פילטר אופציונאלי לבחירת רשומות מסוימות ,ואופציה נוספת לבחירת חלק משם הקובץ למחיקה
'הפונקציה מחזירה את מספר הקבצים שנמחקו
Dim dbs As DAO.Database
Dim rst As DAO.Recordset2
Dim rsA As DAO.Recordset2
Dim fld As DAO.Field2
'חיבור לקובץ דטה בייס [הנוכחי]
Set dbs = CurrentDb
'אם נבחר מסנן פתיחה של הטבלה עם המסנן אם לא פתיחה רגילה
If Len(strFilter) > 0 Then
Set rst = dbs.OpenRecordset("SELECT * FROM " & strTable & " WHERE " & strFilter)
Else
Set rst = dbs.OpenRecordset(strTable)
End If
'בחירת השדה שמכיל קבצים מצורפים
Set fld = rst(strField)
'עד כאן ההגדרות לבחירת הטבלה והשדה הנכון מכאן מתחיל המחיקה בפועל
'הלולאה רצה כל עוד לא הגענו לסוף הרשימה
Do While Not rst.EOF
'בחירת הערך של השדה הנוכחי
'כלומר פתיחת הטבלה הנסתרת שמכילה את הקבצים המצורפים ברשומה הנוכחית
Set rsA = fld.Value
'מעבר על כל הקבצים המצורפים
Do While Not rsA.EOF
'אם נבחר מסנן לקבצים הסר את הקובץ שמכיל את הטקסט שנבחר
'וספור את הקבצים שנמחקו
If Len(strFile) > 0 Then
If rsA("FileName") Like strFile Then
rsA.Delete
RemoveFiles = RemoveFiles + 1
End If
Else
'אם לא נבחר מסנן מחיקה של כל הקבצים
rsA.Delete
RemoveFiles = RemoveFiles + 1
End If
rsA.MoveNext
Loop
'סגירת הטבלה של הקבצים ששיכים לרשומה הנוכחית
rsA.Close
Set rsA = Nothing
'מעבר לרשומה הבאה בטבלה הראשית
rst.MoveNext
Loop
rst.Close
dbs.Close
Set fld = Nothing
Set rst = Nothing
Set dbs = Nothing
End Function
פורסם במקור בפורום CODE613 ב09/05/2016 11:19 (+03:00)