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]