Contar registros num DataSet com filtro
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.
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
Curtidas 0
Respostas
Junior Miranda
14/10/2009
Qual a sua suíte de acesso aos dados??
[]´s
[]´s
GOSTEI 0
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 !!!!
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
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
14/10/2009
Não dá steve, tenho que manter os BD como estão.
Tenho que migrar uma rotina de cada vez.
Tenho que migrar uma rotina de cada vez.
GOSTEI 0
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
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
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