Проблемы с Blob

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Аватара пользователя
Anticler
Сообщения: 28
Зарегистрирован: 28 мар 2007, 22:04

28 мар 2007, 22:32

Суть такова.
Мне необходимо чтобы из таблицы Парадокса удалялись изображения в виде Блоб.
Оно сохраняет данные Блоб в файл *.МВ , и при удалении записи оно запись-то удаляет, вот только этот самый файл в размерах не именяется так и остается с максимальным размером.
Может кто подскажет как удалить эти изабражения из файла *.МВ (еслиб можно было слелать таблице что-то на подобие "Pack")
namomelkor
Сообщения: 227
Зарегистрирован: 31 авг 2006, 13:11

28 мар 2007, 23:43

если я не ошибаюсь изображения тоже удаляются. Просто под базу изначально резервируется определенное дисковое пространство(отсюда и большой неменяемый размер базы ). Базу нужно сжимать. Как пока не помню напишу завтра есть до меня кто-то не напишет.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

29 мар 2007, 10:08

Пространство не резервируется, просто записи помечаются как удаленные - сжатие базы как раз и удаляет эти записи окончательно. Самого сжатия как такогого нет, как вы уже догадались.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

29 мар 2007, 14:09

Парадокс в отличии от dbf очень грамотно работает с удалёнными записями - он их помечает как удалённые, а при добавлении новых записей использует место занимаемое ранее удалёнными записями, а если места не хватает, то увеличивает файл в размерах. Когда-то меня это тоже беспокоило, но я провёл ряд тестов в который убедился, что если количество удаляемых и добавляемых записей одинаковое, то база в размерах не увеличивается (и это правильно, т.к. изменение размера файла очень тяжёлая операция).
А сжатие базы можно выполнить через Database Desktop, другого пути не знаю.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

29 мар 2007, 15:42

&quot писал(а):(и это правильно, т.к. изменение размера файла очень тяжёлая операция)
И это не только "правильно", а еще и полезно - из-за частых изменений размера файла происходит его фрагментация на диске. Хотя операция сама не тяжелая, она просто тупая - перемещая косочки файлов из места, куда необходимо расширится, ОС зачастую пихает их очень далеко от остальных кусков, вместо того, чтобы разместить их в первом попавшемся свободном месте.
&quot писал(а): Парадокс в отличии от dbf очень грамотно работает с удалёнными записями
Было бы умнее удаленные складывать в конце, чтобы при каждом запросе по ним не бегать. Удалил запись - пометилась как удаленная, поменялась местами с последней неудаленной записью. Согласитесь, это не очень долго сделать...
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Anticler
Сообщения: 28
Зарегистрирован: 28 мар 2007, 22:04

30 мар 2007, 21:52

Автор сообщения:
Я понимаю что записи "как-бы помечаются на удаление", но сама бинарная информация на удаляется из файла она там и остается, а когда дабавляется новая информация то она перезаписывает существующую.
Но мне бы узнать, как же все таки очистить то что не нужно и уменьшить файл, а то база данных с одной картинкой и весящая эдак мегабайт под 200 как то не смотрится.
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

31 мар 2007, 09:59

&quot писал(а):Было бы умнее удаленные складывать в конце, чтобы при каждом запросе по ним не бегать
Если такое и делать, то только опционально - данная фича помогала бы только при сканировании таблицы без индекса, а иначе при перемещении записи в другое место необходимо также вносить ещё изменения в индекс
&quot писал(а):как же все таки очистить то что не нужно и уменьшить файл
повторяю:
сжатие базы можно выполнить через Database Desktop
а из программы паковка базы не предусмотрена (во всяком случае через VCL)
Аватара пользователя
Anticler
Сообщения: 28
Зарегистрирован: 28 мар 2007, 22:04

31 мар 2007, 10:17

Автор:
SergeyS писал(а): повторяю:
а из программы паковка базы не предусмотрена (во всяком случае через VCL)
В этом-то и суть проблемы. Может быть есть какие нибудь средства, именно программно выполнять эту операцию (упаковку)
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

31 мар 2007, 12:36

Конечно есть (ведь Database Desktop написан на том же VCL и является не более чем клиентом BDE)

Используйте BDE API. Конкретно функцию DbiPackTable

(Для этого надо добавить DBE в секцию Uses).

PS
Вообще, вы можете написать свой собственный Database Desktop. С базой Paradox можно делать абсолютно все.

PPS
По функциям BDE API есть подробная стандартная справка с примерами на C++ и Object Pascal. Так что жмите F1/
Аватара пользователя
Anticler
Сообщения: 28
Зарегистрирован: 28 мар 2007, 22:04

31 мар 2007, 15:31

Спасибо, буду пробовать (надеюсь сработает)
Ответить