What databases do is store the blobs in one big internal file. Then in the table they store a pointer to it.
If you delete the record, the associated space for the blob will be marked free.
Works the same as your hard drive basically.
If you delete a file, what you are actually doing is deleting the reference, so that space can be reused.
Like your disk though, you get fragmentation problems. Blobs are contiguous, so if you delete an 8k image, and you want to store a 9k one the file will grow, and you are left with an 8k hole in it.
If you are deleting by time range, fragmentation overhead should be reduced as it's likely that all the blobs for all the months records are in the order they were added.
Start simple.
Set up a scheduled job on the machine where the access database it to run a batch file
Create a batch file to connect to the database and run a command in a file.
Then just try something like
Delete From MyTable where DateDiff('d',Now(), MyTable.DateAdded) > 200
200 is a number I plucked out of the air, you'll have to tune it. But if you schedule this daily it will get rid of anything more than 200 days old every time it runs.
%age wise.
I'm not sure I'd bother with initially.
Select Sum(DataSize(MyBlob) From MyTable
Will give you the total size of the bmps.
Do this after a compact and you should be able the rough estimate against the filesize of the mdb.
If the bmps are averaging the same size.
Select Year(DateCreated), Month(DateCreated), Sum(DataSize(MyBlob)) From MyTable Group By
Year(DateCreated), Month(DateCreated)
Works out the start/end of the month that equates roughly to the percentage you want to keep.
Plug that number of days in to the date query
Go for simple, you don't want people deleting your data willy nilly, your users don't want to be bothered with doing it.
Leave them all with a grin, that says hey the system's faster, Zerin's a clever guy.