TBlobField и Access
Необходимо удалить картинку из БД.
Код:
BlobField.Clear;
Но удаляется лишь ссылка на эту картинку и в таблице картинка пропадает, а сам файл базы Access в объеме не уменьшается (сама картинка не удаляется). Помогает только Сервис-Служебные программы-Сжать и восстановить базу данных.
У меня есть идея только такого решения: сначала делаем Clear, а потом через COM-интерфейс выполнить "Сжать и восстановить базу данных", но ниодного COM-интерфейса в справке я не нашёл.
Знаете ли вы такой COM-интерфейс?
Есть ли другой способ решения этой проблемы?
Если подумать, зачем СУБД сжимать файл БД после того, как оттуда удалена картинка? Это пустая трата времени. Картинка, например, может находиться в середине файла БД, и чтобы сжать файл, надо передвинуть весь "хвост". Выгодее впоследствии в освободившееся место записать другие данные.
Изменил поле для хранения изображений с OLE на "числовой" и записываю туда результат вычисления хеш-функции (цифровой отпечаток файла изображения). В отдельную папку копирую файл изображения и определяю наименование файла по тому же результату хеш-функции.
Теперь, когда я перемещаюсь к определенной записи в таблице, из поля вытаскиваю наименование файла, а по наименованию и сам файл изображения и произвожу с ним все необходимые действия.
В результате у меня появилась возможность хранить файлы практически неограниченные в объеме и при этом приложение не зависает при открытии набора данных.