Ver Mensaje Individual
  #4  
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 a todos.

Veo que el código tenía un error, al no poner el editor de post la barra invertida (la contraria al '/'). He sustituido esa parte del código por la función IncludeTrailingPathDelimiter y, por lo menos ayer funcionaba el código; vamos, que reducía el tamaño del DBT.

Aquí va de nuevo:

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
    // La tabla debe estar abierta para obtener su ruta física
    SetLength(cTablePath, MAX_PATH);
    DbiGetDirectory(ATable.DBHandle, True, PChar(cTablePath));
    cTablePath := PChar(cTablePath);
    // El editor de post se come la barra delimitadora del path.
    //*** if (cTablePath <> '') and (cTablePath[Length(cTablePath)] <> '/') then
    //***  cTablePath := cTablePath + '/';
    //*** cTablePath := cTablePath + ATable.TableName;
    cTablePath := IncludeTrailingPathDelimiter(cTablePath) + ATable.TableName;
    // Poner la ruta en la estructura.
    FillChar(TblDesc, SizeOf(CRTblDesc), 0);
    with TblDesc do
    begin
      StrPCopy(szTblName, cTablePath);
      bPack := True;  // Esto indica que se debe compactar
    end;
    // Cerrar la tabla. DbiOpenDatabase la abrirá en modo esclusivo.
    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