Como saber quantos registros estão sendo listados?

30/08/2004

Tem como eu saber quantos registros estão sendo listanos na minha DbGrid? É q estou listando por critérios.. eu posso ter 100 registros na tabela, mas se nenhum atender o critério q eu colocar, ele nao vai listar nenhum, aí eu preciso saber quantos sao listados, pra ´contar´ eles e exibir na tela e pra, se nao tiver nenhum registro, desativar os botoes Editar e Apagar... tem como?



Allan Elias Ramos :roll:


Aersoftware

Respostas

30/08/2004

Janete

nomedatabeladofiltro.recordcount;

// para verificar

if tabela.recordcount = 0 then
begin
nomebotão1.enabled:=false;
nomebotão2.enabled:=false;
end;

:D


Responder Citar

30/08/2004

Aersoftware

Janete, mas o RecordCount não conta todos os registros da TABELA?? O q quero é contar quantos ele ta listando.. intependente de quantos tiver na tabela.. tipo, se eu tiver 100 na tabela, e ele tiver listado só 25, quero q ele me conte os 25.. :wink:



Allan Elias Ramos :roll:


Responder Citar

31/08/2004

Marcelo_vms

COLEGA NAO SEI SE ENTENDI, MAS O QUE CONSEGUI FAZER EM UMA APLICAÇÃO MINHA FOI O SEGUINTE...
FIZ ESSE FILTRO ABAIXO NORMALMENTE...

E O TOTAL DE CLIENTES QUE HAVIAM NO DBGRID OU SEJA, O TOTAL DE CLIENTES QUE FORAM RELACIONADOS APARECIA NO LABEL...

POR EXEMPLO: QUERO TODOS OS CLIENTES QUE FIZERAM COMPRAS HOJE, ESCOLHO DIGITO A DATA NO EDIT E VAI APARECE TODOS QUE COMPRARAM NA DATA, E NO LABEL O TOTAL...
TENHO 1000 CLIENTE, MAS SO 20 COMPARAM HJ ENTAO NO LABEL APARECERÁ 20...



Table1.Filter := ´PARTIDOS=´+´´´´+EDIT1.Text+´´´´;
Table1.Filtered := True;
query1.Open;
query1.FetchAll;
ShowMEssage(´Foram encontrados ´+IntToStr(query1.RecordCount)+´ registros ´);
LABEL7.Caption := INTTOSTR(QUERY1.RecordCount);


Responder Citar

31/08/2004

Xtreme

Bom so pra constar em alguns casos o recordcount nao retorna o numeros de registros o por que eu nao sei, mas para vc obter a quantidade certa de um

filtrotabela.last;//ir para o ultimo

showmessage(inttostr(filtrotabela.recordcount));//total de registros

filtrotabela.first;//para voltar ao primeiro

eu so queria saber por que tenho que fazer isso mas, pelo menos da certo.


Responder Citar

31/08/2004

Dorivansousa

tente:
IBQuery1.RowsAffected;


Responder Citar

31/08/2004

Vinicius2k

Bom so pra constar em alguns casos o recordcount nao retorna o numeros de registros o por que eu nao sei, mas para vc obter a quantidade certa de um filtrotabela.last;//ir para o ultimo showmessage(inttostr(filtrotabela.recordcount));//total de registros filtrotabela.first;//para voltar ao primeiro eu so queria saber por que tenho que fazer isso mas, pelo menos da certo.

Colega, em qual tipo de camada de acesso vc precisa fazer isto? IBX(IBQuery)?
Se for, de uma olhada neste tópico : http://delphiforum.icft.com.br/forum/viewtopic.php?t=45198

Neste tópico tbm tem a solução que eu utilizo quando preciso contar registros, talvez ajude o colega AerParquer

Usar o RecordCount, não é uma boa prática... alguns exemplos são:
[list:1232d79efe][*:1232d79efe]o IBX que realiza o fetch do registros à medida que necessários, ou seja, se vc só estiver exibindo um registro o RecordCount é 1...
[*:1232d79efe]no dbExpress, se a query tiver parametros e/ou joins tentar ler o RecordCount levanta uma exceção: ´Capacity not supported´...
[*:1232d79efe]usando ClientDataSets, se vc usar em PacketRecords um valor diferente de -1 (o que é correto para otimizar seu desempenho) o RecordCount vai ser sempre a quantidade de registros que foram trazidos até o momento da leitura... de 1000 em 1000, por exemplo...
[*:1232d79efe]se vc usar funções agregadas como SUM, COUNT, AVG, etc... a query sempre terá 1 registo, que é o resultado da função...[/list:u:1232d79efe]

T+


Responder Citar

31/08/2004

Xtreme

Colega, em qual tipo de camada de acesso vc precisa fazer isto? IBX(IBQuery)? Se for, de uma olhada neste tópico : http://delphiforum.icft.com.br/forum/viewtopic.php?t=45198


Bom nao sei se foi isso que vc quiz dizer mas, é +ou- o que eu faço para selects onde o resultado eu sei que será pequeno(com poucos registros), eu uso da maneira que expliquei acima, mas quando sei que o nº de registros pode ser auto, faço um select count(*) aparte com a mesma clausula where do select original, É mas rapido e eficaz nesses casos mas, para resultados pequenos nao vejo muita nessecidade(hehe, mas concerteza fica bem melhor usar o select count(*)).


Responder Citar

31/08/2004

Vinicius2k

Blz.

Vc pode também substituir seus dois métodos (.Last e .First), por .FecthAll, com ele vc estará orientando a Query para que traga todos os registros e a leitura seja correta... isso evita o efeito incomodo, numa DBGrid, do cursor se mover para baixo e para cima sem a interação do usuário...

T+


Responder Citar

31/08/2004

Janete

Janete, mas o RecordCount não conta todos os registros da TABELA?? O q quero é contar quantos ele ta listando.. intependente de quantos tiver na tabela.. tipo, se eu tiver 100 na tabela, e ele tiver listado só 25, quero q ele me conte os 25.. :wink: Allan Elias Ramos :roll:


Janete, mas o RecordCount não conta todos os registros da TABELA?? O q quero é contar quantos ele ta listando.. intependente de quantos tiver na tabela.. tipo, se eu tiver 100 na tabela, e ele tiver listado só 25, quero q ele me conte os 25.. :wink: Allan Elias Ramos :roll:



Cria um while então, e uma variável para somar quantos foram listados exemplo:

procedure....
var WConta : Integer;
begin
WConta:=0;

TbItens.First;
While not TbItens.Eof do
Begin
if ...... //aqui coloca seu critério se for true por exemplo
WConta:=WConta+1; // ele conta
Tabela.Next;
end;
SHowmessage(´Foram listados ´+WConta+´.´);


Responder Citar

31/08/2004

Xtreme

Blz. Vc pode também substituir seus dois métodos (.Last e .First), por .FecthAll, com ele vc estará orientando a Query para que traga todos os registros e a leitura seja correta... isso evita o efeito incomodo, numa DBGrid, do cursor se mover para baixo e para cima sem a interação do usuário... T+


Valew cara!


Responder Citar