Série da semana: Primeiros passos no Angular

Veja mais

como retornar a quantidade de registros de uma tabela? (IB)

02/02/2005

27

como retornar a quantidade de registros de uma tabela?

queria saber como faço pra meu IBdataset retornar a quantidade de registros de uma tabela... tentei usar recordcount mais ele responde sempre 0 ou 1... sendo q tem mais de 8 registros

showmessage(intTostr(bd.ibdataset1.recordcount));

no selectsql da minha table... tem la... selec * from tabela

alguem ae sabe oq tah errado ou oq fazer?[

valeu :)


Responder

Posts

02/02/2005

Isabelct

Isso ocorre porque a query só tras para a estação os registros que necessita, por isso que exibe apenas 0 ou 1.

Uma alternativa para isso seria você forçar que todos os registros sejam trazidos para a estação, movendo a query para o último registro.

bd.ibdataset1.last;
showmessage(intTostr(bd.ibdataset1.recordcount)); 


Mas isso não fica muito elegante, porque se a sua tabela tiver muitos registros, o comando bd.ibdataset1.last pode demorar algum tempo. A melhor alternativa para o seu caso seria você contar os registros diretamente por uma instrução SQL. Assim:

bd.ibdataset1.SQL.Add(´SELECT COUNT(*) FROM TABELA´);
bd.ibdataset1.open;
showmessage(intTostr(bd.ibdataset1.recordcount)); 


Assim, independente do número de registros da sua tabela, a performance da sua aplicação será boa.


Responder

02/02/2005

Marcio.theis

Evite usar o select *, isto pode lhe retornar as vezes até mesmo o -1 utilizando o RecordCount;


Responder
corrigindo uma coisinha...

o correto seria:

bd.ibdataset1.SQL.Clear;
bd.ibdataset1.SQL.Add(´SELECT COUNT(*) FROM TABELA´);
bd.ibdataset1.open;
showmessage(intTostr(bd.ibdataset1.fields[0].asinteger));


Responder
ou simplesmente:


bd.ibdataset1.SQL.Clear;
bd.ibdataset1.SQL.Add(´SELECT COUNT(*) FROM TABELA´);
bd.ibdataset1.open;
showmessage(bd.ibdataset1.fields[0].asstring);


Responder

02/02/2005

Salsa

no caso isso ae seria usando um Query neh...
pq pelo dataset eu nao posso usar .SQL
pois no dataset nao existe essa propriedade neh?

:P


Responder
bd.ibdataset1.SelectSQL.Clear;
bd.ibdataset1.SelectSQL.Add(´SELECT COUNT(*) FROM TABELA´);
bd.ibdataset1.open;
showmessage(bd.ibdataset1.fields[0].asstring);


Responder

02/02/2005

Rodolpho123

Depois de aberto o seu DataSet, use o método FetchAll. Vai funcionar do jeitonho que vc quer...


Responder

02/02/2005

Salsa

como assim FetchAll?
pra que serve e como usar?


Responder

02/02/2005

Rodolpho123

como assim FetchAll? pra que serve e como usar?


IBDataSet1.FetchAll

O método FetchAll funciona assim: Quando vc faz um SELECT * FROM TABELA, a maioria dos BD´s relacionais (ex: FB/IB), para otimizarem o tráfego de registros na rede, não trazem todos os registros do seu SELECT. Então, a cada medida que vc vai, digamos assim, ´visitando´ o registro, ele vai trazendo-os à medida que vc for chamando (Next ou Last). o FetchAll, traz todos os registros e os armazena em um buffer local. Então, depois que vc abrir o seu DataSet, se vc usar o FecthAll e depois der um RecordCount, vc terá todos os registros do seu SELECT.


Responder

02/02/2005

Gandalf.nho

Embora o método de usar SELECT COUNT(*) seja mais usual, já que o uso de FetchAll num ambiente cliente/servidor não é recomendado.


Responder

02/02/2005

Salsa

ah entendi .. eh q tipo .. to tentando aprender firebird na raça.... tava mais acostumado a trabalhar com mysql e tal e fazia umas coisas de um modo mais facil.. e sem comandos e etc q existem no firebird.. valeu pessoal :P

:wink:


Responder

19/02/2005

Vitoreduardo

:D Gostaria de usar este código
bd.ibdataset1.SQL.Clear; 
bd.ibdataset1.SQL.Add(´SELECT COUNT(*) FROM TABELA´); 
bd.ibdataset1.open; 
showmessage(bd.ibdataset1.fields[0].asstring);
Claro q aqui eu adaptei as minhas necessidade, porei ele esta me retornado o seguinte erro(´IBQRClientes: Field ´Codigo´ not found´).

Estou usando os componentes da paleta InterBase.
E estou usando IBQuery.

Só q eu não quero q apareça um showmessage, eu tenho um Label no form e gostaria que a este label recebesse a quantidade de registro.

Não sei se fui claro, mais no paradox eu faria assim:
.
Label1.caption:=inttostr(Dbgrid1.DataSource.DataSet.RecordCount);


isso eu colocaria em baixo de post e no oncreate do form.

Se alguém puder me ajudar ficarei grato.

Jackell Alves


Responder

20/02/2005

Gandalf.nho

Faça assim:
bd.ibdataset1.SQL.Clear; 
bd.ibdataset1.SQL.Add(´SELECT COUNT(*) AS TotalRegistros FROM TABELA´); 
bd.ibdataset1.open; 
Label1.caption := bd.ibdataset1TotalRegistros.AsString;



Responder

21/02/2005

Salsa

oq seria esse AS TotalRegistros?

:)

vc poderia me explicar? valeu :P


Responder

21/02/2005

Renato_sp

Amigo o As seria para dar um Apelido para uma coluna

no codigo SELECT COUNT(*) AS TotalRegistros

Estou falando que a contagem (count) vai se chamar TotalRegistros, se vc colocar isso no dataset qualquer, uma query por exemplo e ativar ela, e ir no add fields ao adicionar o campo vai aparecer TotalRegistros e nao Count como seria se nao tivesse dado um apelido a ela


Espero que tenha entendido
Renato / SP


Responder