Array
(
)

Como saber quantos registros estão sendo listados?

Aersoftware
   - 30 ago 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:


Janete
   - 30 ago 2004

nomedatabeladofiltro.recordcount;

// para verificar

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

:D


Aersoftware
   - 30 ago 2004

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:


Marcelo_vms
   - 31 ago 2004

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);


Xtreme
   - 31 ago 2004

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.


Dorivansousa
   - 31 ago 2004

tente:
IBQuery1.RowsAffected;


Vinicius2k
   - 31 ago 2004


Citação:
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+


Xtreme
   - 31 ago 2004


Citação:
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(*)).


Vinicius2k
   - 31 ago 2004

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+


Janete
   - 31 ago 2004


Citação:
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:



Citação:
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+´.´);


Xtreme
   - 31 ago 2004


Citação:
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!