Ver Mensaje Individual
  #2  
Antiguo 23-09-2003
Lmas Lmas is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 27
Reputación: 0
Lmas Va por buen camino
Hola anitra_cattivo.

Creo que exite la función DbiPack..., pero mirando un programa donde compactaba tablas dBase, utilizaba este código que si que funcionaba:


Código:
uses BDE;

procedure PackTable(ATable: TTable);
var
  TblDesc: CRTblDesc;
  hDb: hDbiDb;
  cTablePath: string;
begin
  if not ATable.Active then
    raise Exception.Create('La tabla debe estar abierta.');
  hDb := nil;
  try
    SetLength(cTablePath, MAX_PATH);
    DbiGetDirectory(ATable.DBHandle, True, PChar(cTablePath));
    cTablePath := PChar(cTablePath);
    if (cTablePath <> '') and (cTablePath[Length(cTablePath)] <> '\') then
      cTablePath := cTablePath + '\';
    cTablePath := cTablePath + ATable.TableName;
    FillChar(TblDesc, SizeOf(CRTblDesc), 0);
    with TblDesc do
    begin
      StrPCopy(szTblName, cTablePath);
      bPack := True;
    end;
    ATable.Active := False;
    DbiOpenDatabase(nil, 'STANDARD', dbiReadWrite, dbiOpenExcl, nil,
                    0, nil, nil, hDb);
    DbiSetDirectory(hDb, PChar(cTablePath));
    DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False);
  finally
    DbiCloseDatabase(hDb);
  end;
end;
SalU2.
__________________
Una cosa es una cosa, y otra cosa es otra cosa...
Responder Con Cita