Table - obter recordcount mesmo estando filtrado

Top  Previous  Next

uses DbiProcs 

 

// Os componentes TTable e TQuery possuem a propriedade RecordCount 

// que indicam a quantidade de registros da tabela. 

// No entanto esta propriedade é dependente de filtros, ou seja, se 

// tivermos uma tabela com dez registros com campo "Codigo" de 1 a 10 e

// aplicarmos o filtro mostrado a seguir, a propriedade RecordCount 

// retornará 5 e não 10. 

 

Table1.Filter := 'Codigo <= 5'

Table1.Filtered := true; 

 

// Se quizermos obter a quantidade total de registros, 

// independentemente de filtros, devemos usar uma API do BDE conforme abaixo: 

 

var 

  Total: integer; 

begin 

  Check(DbiGetRecordCount(Table1.Handle, Total)); 

  ShowMessage('Total de registros: ' + IntToStr(Total)); 

end

 

// Para testar o exemplo acima, o Table1 precisa estar aberto. é OBVIO

 

================ OUTRO EXEMPLO =====================

 

function RecNo(Dataset: TBDEDataset): Longint;

var

  RecordProps: RECProps;

  CursorProps : CurProps;

begin

  Result := 0;

  with Dataset do

  begin

    // dataset deve estar ativo

    if State = dsInactive then

      raise EDatabaseError.Create('Dataset não pode estar fechado');

    DbiGetCursorProps(Handle, CursorProps);

    // preenche RecordProps com as propriedades do registro

    DbiGetRecord(Handle, dbiNOLOCK, nil, @RecordProps);

    // CursorProps.iSeqNums tem o tipo de números de registro

    case CursorProps.iSeqNums of

      0: Result := RecordProps.iPhyRecNum;  // 0 - números de registro (DBase)

      1: Result := RecordProps.iSeqNum;     // 1 - números de seqüência (Paradox)

    end;

  end;

end;

 

procedure TForm1.Table1CalcFields(DataSet: TDataSet);

begin

  Table1RecNo.Value := RecNo(Table1);

end;