Contar registros num DataSet com filtro

Delphi

14/10/2009

Utilizo BD do DBase (DBF).

Utilizo um filtro para me mostrar numa DBGrid os registros que interessam, até aí tudo bem.

No código abaixo como posso fazer para contar os registros que realmente passaram pelo filtro e estão na DBGrid.

[b:0f7711541e]DataSet1.IndexName := ´NCAD´;
DataSet1.Filtered := false;
DataSet1.Filter := ´NUMCAD=´ + QuotedStr(Edit1.Text);
DataSet1.Filtered := true;[/b:0f7711541e]

Se eu tenho 100 registros e só 10 atendem o filtro, utilizando o [b:0f7711541e]RecordCount[/b:0f7711541e], com o filtro ligado ou não, sempre vou ter 100, mesmo que na DBGrid apareçam só os 10.

Não consigui uma forma para isso.

Agradeço qualquer ajuda.


Cps.art

Cps.art

Curtidas 0

Respostas

Junior Miranda

Junior Miranda

14/10/2009

Qual a sua suíte de acesso aos dados??

[]´s


GOSTEI 0
Cps.art

Cps.art

14/10/2009

Falou grego Júnior.

Não entendi muito bem sua pergunta, então vou dizer como faço:

Tenho um sistema que funciona em Clipper estou tentando migrar para Delphi mantendo os BD do DBase inclusive indexadores .NTX.

Tenho um componente chamado [b:dd094c0879]Halcyon[/b:dd094c0879] que permite que eu utilize os BDs e indexadores no Delphi, sem alterar nada neles, permitindo tambem que possa ser utilizado o sistema em Clipper. (um de cada vez, claro).

No clipper, para saber quantos registros atendem alguma condição, faço:

[b:dd094c0879]Use (ou Select) Dataset1[/b:dd094c0879] - abrir ou selecionar o BD
[b:dd094c0879]Count [color=blue:dd094c0879]for[/color:dd094c0879] NumCad=´1234´ [color=blue:dd094c0879]to[/color:dd094c0879] qtd_reg[/b:dd094c0879] - Conta se campo NumCad for igual a 1234 e armazena na variavel qtd_reg

Porem, no Delphi eu não sei !!!!


GOSTEI 0
Steve_narancic

Steve_narancic

14/10/2009

Tenho um componente chamado [b:41293a4130]Halcyon[/b:41293a4130] que permite que eu utilize os BDs e indexadores no Delphi, sem alterar nada neles, permitindo tambem que possa ser utilizado o sistema em Clipper. (um de cada vez, claro).


Pq usar esse Halcyon, não poderia ser o próprio BDE que é nativo do delphi???


GOSTEI 0
Cps.art

Cps.art

14/10/2009

Não dá steve, tenho que manter os BD como estão.
Tenho que migrar uma rotina de cada vez.


GOSTEI 0
Steve_narancic

Steve_narancic

14/10/2009

Uma solução, seria vc fazer:

Var
i: integer;

begin
  DataSet1.first;
  DataSet1.disablecontrols;
  while not DataSet1.eof do
  begin
    i:= i + 1;
    DataSet1.next;
  end;
  DataSet1.enablecontrols;
  showmessage(inttostr(i));
end;



GOSTEI 0
Cps.art

Cps.art

14/10/2009

Olá steve.

Fiz algo parecido com o que vc. sugeriu.

[b:e370e4b710] RegEnc := 0;
DataSet.First;
for K := 0 to DataSet.RecordCount -1 do
begin
if DataSet.FieldGet(´NumReg´) = Edit.Text then
begin
RegEnc := RegEnc + 1;
end;
DataSet.Next;
end;[/b:e370e4b710]

Atendeu o que eu queria, mas vou testar tambem da forma que vc. indicou.

Abraços


GOSTEI 0
POSTAR