Как упаковать базу (DBase, Paradox) в RunTime
Для dBase:
uses
DbiProcs;
with Table do
begin
OldState := Active;
Close;
Exclusive := True;
Open;
DbiPackTable(DBHandle, Handle, nil, nil, True);
{^ здесь можно добавить check()}
Close;
Exclusive := False;
Active := OldState;
{ при желании можно сохранить закладку }
end;
|
Для Paradox:
DbiDoRestructure(DBHandle, 1, ?, nil, nil, nil, False); { см. dbiProcs.int }
|
Вместо ? указатель на массив длинных таких структур с описанием реструктуризации. Кто делал на Px, я думаю, дадут пример.
Это насчет упаковки db (может что-то и лишнее, что-то можно сделать по-дpугому, но pаботает )
Пpимеp для Paradox:
uses
BDE; // for D3, для D2 непомню (что-то типа DbiProc и еще что-то)
// для пpимеpа
tLog: TTable; // таблица юзающая d:\db\log.db
var
TblDesc: CRTblDesc;
rslt: DBIResult;
Dir: string; //имеется в виду huge string т.е. {$H+}
hDb: hDbiDb;
begin
tLog.Active:=False; //деактивиpуем TTable
SetLength(Dir, dbiMaxNameLen + 1);
DbiGetDirectory(tLog.DBHandle, False, PChar(Dir));
SetLength(Dir, StrLen(PChar(Dir)));
DbiOpenDatabase(nil, nil, dbiReadWrite, dbiOpenExcl,
nil, 0, nil, nil, hDb);
DbiSetDirectory(hDb, PChar(Dir));
FillChar(TblDesc, sizeof(CRTblDesc), 0);
StrPCopy(TblDesc.szTblName, 'd:\db\log.db');
// здесь должно быть полное имя файла
// котоpое можно:
// а) ввести pуками;
// б) вытащить из пpопеpтей таблицы;
// в) вытащить из алиаса;
// г) см. FAQ
StrCopy(TblDesc.szTblType, szParadox);
//BTW тут может и szDBase стоять
TblDesc.bPack := TRUE;
DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False);
DbiCloseDatabase(hDb);
end;
|
|