Russian Qt Forum

Qt => Базы данных => Тема начата: Lostinnet от Сентябрь 24, 2010, 10:15



Название: Удаление всех записей из таблицы
Отправлено: Lostinnet от Сентябрь 24, 2010, 10:15
Подскажите как правильно удалять все записи из таблицы БД.
Пробую:

model->removeRows(0, model->rowCount());
model->submitAll();

записи удаляются очень медленно, и размер файла с БД остается прежним, не уменьшается


Название: Re: Удаление всех записей из таблицы
Отправлено: BaltikS от Сентябрь 24, 2010, 10:23
размер файла с БД остается прежним, не уменьшается
Это не значит что записи не удаляются из БД. Они удаляются. Остаётся мусор. Это также зависит от БД.


Название: Re: Удаление всех записей из таблицы
Отправлено: Lostinnet от Сентябрь 24, 2010, 10:28
Вижу что удаляется, но как увеличить скороть и избавится от мусора.
База SQLITE


Название: Re: Удаление всех записей из таблицы
Отправлено: crossly от Сентябрь 24, 2010, 10:33
используй trancate table.... после удаления строк из таблицы размер БД меньше не станет... :).... строки резервируются для последующего использования...


Название: Re: Удаление всех записей из таблицы
Отправлено: voronElf от Сентябрь 24, 2010, 10:56
модель поди по одной строке удаляет, потому и медленно (блокировки-разблокировки таблицы на каждой операции ). Можно конечно все удаление в одну транзакицю общую засунуть (по крайней мере при большом количестве запросов на запись, это дает выигрыш быстродействия очень ощутимый ). но лучше одним запросом DELETE FROM table_name . Запрос TRUNCATE здесь конечно лучше подойдет, только вот вроде SQLITE его не поддерживает.


Название: Re: Удаление всех записей из таблицы
Отправлено: Lostinnet от Сентябрь 24, 2010, 11:14
Спасибо за советы!!!
TRUNCATE действительно почему то не работает ((
но DELETE с транзакцией очень помогло!

и еще один вопросик.
Почему после QSqlDatabase::removeDatabase("Journal"); файл с БД все равно остается недоступным для удаления? Тогда как правильно закрыть БД


Название: Re: Удаление всех записей из таблицы
Отправлено: BaltikS от Сентябрь 24, 2010, 12:41
используй trancate table.... после удаления строк из таблицы размер БД меньше не станет... :).... строки резервируются для последующего использования...
Да зачем? После удаления VACUUM надо дать.....


Название: Re: Удаление всех записей из таблицы
Отправлено: BaltikS от Сентябрь 24, 2010, 12:45
Почему после QSqlDatabase::removeDatabase("Journal"); файл с БД все равно остается недоступным для удаления? Тогда как правильно закрыть БД
ищи по форуму, уже обсуждалось неоднократно...