Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.22;
Скачать: CL | DM;

Вниз

Удаление большого числа записей из БД   Найти похожие ветки 

 
АСУ-Антон   (2002-08-01 11:27) [0]

Мастера, помогите!!!
Срочно нужно научиться программно (пусть по нажатию кнопки) собирать мусор и удалять его (не используя InterBase Server Manager) после удаления большого числа записей из БД PARADOX, отобранных по определённому признаку. (После удаления методом Table1.DELETE (SQL использовать нельзя) размер базы не уменьшается).


 
Val ©   (2002-08-01 11:46) [1]

нужно паковать таблицы, вопрос довольно частый, должен быть в факе или поиск по форуму.


 
Mike_Goblin ©   (2002-08-02 09:50) [2]

Присоединяюсь к предыдущему автору по поводу упаковки
PS а какое отношение имеет InterBase Server Manager к Paradox?


 
Асу-Антон   (2002-08-02 10:44) [3]

В книге по программированию БД и справке Delphi5 я искал ответ.
Насколько я понял, InterBase SM предназначен, в частности, для удаления мусора.
(у него ещё много функций).
Мне посоветовали использовать функцию PackTable из пакета RxLib.


 
Val ©   (2002-08-02 10:50) [4]

Насколько я понял, InterBase SM предназначен...
ну..допустим :) но вы-то работаете с парадоксом? эдак можно и оракловских и MSSQL-ских утилит нахватать и ими тесто месить? ;)


 
Асу-Антон   (2002-08-02 10:55) [5]

Понял:). Просто раньше дела с этим не имел.

procedure PackTable(Table: TTable);var Props: CURProps; hDb:
hDBIDb;
TableDesc: CRTblDesc;begin if not Table.Active then
raise EDatabaseError.Create("Table must be opened to pack");
if not Table.Exclusive then
raise EDatabaseError.Create("Table must be opened exclusively to
pack");
Check(DbiGetCursorProps(Table.Handle, Props));
if Props.szTableType = szPARADOX then begin
FillChar(TableDesc, sizeof(TableDesc), 0);
Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE,
hDBIObj(hDb)));
StrPCopy(TableDesc.szTblName, Table.TableName);
StrPCopy(TableDesc.szTblType, Props.szTableType);
TableDesc.bPack := True; Table.Close;
Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil,
False)); end
else if (Props.szTableType = szDBASE) then
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE,
True))
else
raise EDatabaseError.Create("Table must be either of Paradox or
dBASE " +
"type to pack"); Table.Open;end;


 
Асу-Антон   (2002-08-02 12:56) [6]

Добавление:
1) Не забыть включить в uses ....,dbiProcs;

Вопрос:
Крапиляция проходит, но при попытке очистки выдаёт предусмотренное сообщение:
"Table must be opened exclusively to
pack");
Как это исправить?


 
Val ©   (2002-08-02 13:00) [7]

Крапиляция - это ж надо так :))
Это не исправлять надо, а следовать сказанному - таблица для упаковки должна бвть открыта в эксклюзивном режиме: .Exclusive := True; После упаковки можно вернуть ее в прежнее состояние.


 
Асу-Антон   (2002-08-02 15:36) [8]

Все заработало
Всем спасибо.



Страницы: 1 вся ветка

Текущий архив: 2002.08.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-71194
Katie
2002-08-09 20:17
2002.08.22
установка RxLib v 2.75


1-71161
BigVova
2002-08-13 14:06
2002.08.22
Word document to Stream


14-71358
orlov
2002-07-28 06:51
2002.08.22
Как определить что написано например в строке Memo1 внутри скобкb


3-70993
nikolo
2002-07-31 14:06
2002.08.22
Как в BDE создать алиас на MS SQL Server 2000?


1-71252
Иван
2002-08-12 09:15
2002.08.22
Переменное кол-во параметров