Советы по Delphi


Пакование таблиц dBASE IV


Nomadic советует:

Для 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;

Pavel Kulchenko
(2:465/66)

Пpимеp для Paradox:

    Uses BDE; // for D3, для D2 не помню (что-то типа DbiProcs и еще что-то)

// для п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;

// можно еще чеки ввести, но облом :-)

[001355]



Содержание раздела