![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с очисткой таблицы [D7, dBase, FoxPro]
HID © (2007-07-30 16:59:00)Есть таблица DBF. Мне нужно периодически удалять из нее все записи. Я это делаю запросом.
delete from table
все записи удаляются, только файл с каждым удалением весит все больше и больше. По ходу дела, записи удаляются только логически. Подскажите, пожалуйста, как мне физически очишать таблицу.
HID (2007-07-31 11:20:00) [1]Вобщем, сделал, как посоветовал ЮЮ
DROP Table ...
CREATE Table ...
остался доволен и не парюсь.
Спасибо всем, ребят.
Jeer (2007-07-31 10:09:00) [2]Если необходимо удалить все записи, то не стоит употреблять термин "упаковка" - эта операция используется, как правило, для сжатия таблицы при наличии удаленных записей.
Для удаления всех записей и сжатия таблицы:
tb.EmptyTable; // вызывается dbiEmptyTable
Для Pdx упаковка может быть произведена через dbiDoRest*, а dbiPack, как верно заметил AP в [3], для Pdx не сработает.
procedure PackTable(PackDataSet: TDataSet);
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
if (PackDataSet is TTable) then
begin
PackDataSet.Close;
(PackDataSet as TTable).Exclusive := True;
PackDataSet.Open
end
else exit;
Check(DbiGetCursorProps((PackDataSet as TTable).Handle, Props));
FillChar(TableDesc, sizeof(TableDesc), 0);
Check(DbiGetObjFromObj(hDBIObj((PackDataSet as TTable).Handle), objDATABASE, hDBIObj(hDb)));
StrPCopy(TableDesc.szTblName, (PackDataSet as TTable).TableName);
StrPCopy(TableDesc.szTblType, Props.szTableType);
TableDesc.bPack := True;
PackDataSet.Close;
Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
(PackDataSet as TTable).Exclusive := False;
PackDataSet.Open;
end;
//
PackTable(tbMy {TTable});
ЮЮ (2007-07-31 09:51:00) [3]>а как на счет TQuery
тогда в другом TQuery последовательно выполнить запросы
DROP Table ...
CREATE Table ...
P.S. А данные не жалко?
Sergey13 (2007-07-31 09:18:00) [4]> [6] HID © (31.07.07 08:50)
Пустышечный автомат ничуть не порнографичнее паковательного автомата. Намного более порнографично "периодически удалять из нее все записи".
HID (2007-07-31 08:50:00) [5]Пустышками я как раз и пользуюсь, но это порнография. Все должно работать автоматом. Кстати, на счет пакования, я знаю, что с использованием TTable, пакование делается, а как на счет TQuery, я через него таблицу юзаю.
MsGuns (2007-07-31 08:11:00) [6]>Desdechado © (30.07.07 20:20) [4]
>Хранить пустышку-болванку таблицы и класть ее поверх боевой при надобности.
Если еще все "пустышки" хранить в отдельной папке, то будет самое то
Desdechado (2007-07-30 20:20:00) [7]Хранить пустышку-болванку таблицы и класть ее поверх боевой при надобности.
Anatoly Podgoretsky (2007-07-30 19:20:00) [8]для paradox функция DbiPackTable не применима, зато для dbase самое то. А с ФоксПро работать в режиме RW себе вредить. С ФоксПро надо работать через АДО
Jeer (2007-07-30 17:12:00) [9]1.DbiPackTable(..) для paradox и dbase
Для fox может не пойти.
2. Если удаляются все записи, то проще грохнуть файл и заново пересоздать.
vtur (2007-07-30 17:08:00) [10]table.clear