IBQuery.RecordCount sempre mostra 1

Delphi

06/05/2004

Me deparei com o esse bug do IBquery que retorna 1 mesmo se tiver mais registros...
Basta usar o Last ou um FechAll.

Tem alguma atualização para esse bug ?

Obrigado.


Pezzin

Pezzin

Curtidas 0

Respostas

Edineidaniel

Edineidaniel

06/05/2004

Pois é Pezzin,

Tb ja me deparei com esse problema...
mas eu ainda não encontrei na para de atualização disso...
eu uso
IBQuery.Last;
I := IBQuery.RecordConut;
IBQuery.First;

se alguém encontrar alguma coisa sobre isso respondam
t+
Edinei


GOSTEI 0
Lucas Silva

Lucas Silva

06/05/2004

A solução é:
Depois que você abrir a query, coloque este comando.
IBQuery.FetchALL;



GOSTEI 0
Rodolpho123

Rodolpho123

06/05/2004

Olá Pezzin,

Isto acontece porque o InterBase não é um banco Flat-Table, como dBase,Paradox,Access...etc. Ele é do sistema B-Tree, então seus índices são diferentes das Flat-Tables, que sempre sabe quantos registros tem armazenados. Para que vc saiba o total de registros no IB, vc tem que visitar todos os registros da sua tabela (ver Delphi Help IB.RecordCount). Se vc visitar apenas uma parte, só vai lhe dar os registros contados até onde vc foi, e isto vale tanto para Tables quanto para Queries. Uma vez visitados todos os registros, vc tem o total quando quiser, desde que não feche a Query. Eu costumo após a abertura da Query fazer assim:
With IBQuery1 do
 begin
  Last;
  First;
 end;
 

Usar FechAll até é uma boa opção, mas para quem trabalha com muitos usuários e necessita de atualização precisa, a própria Borland não recomenda o uso de FechAll, por apenas questões de atualizações, nada mais.


GOSTEI 0
Lucas Silva

Lucas Silva

06/05/2004

Usar FechAll até é uma boa opção, mas para quem trabalha com muitos usuários e necessita de atualização precisa, [b:383a781900]a própria Borland não recomenda o uso de FechAll[/b:383a781900], por apenas questões de atualizações, nada mais.


Eu também usava o comando [b:383a781900]LAST [/b:383a781900]e [b:383a781900]FIRST[/b:383a781900].
Em um evento que teve aqui em BH (que foi o Clube delphi que promoveu), um palestrante da Borland recomendou usar [b:383a781900]FetchALL[/b:383a781900].

Agora eu estou igual cego em tiroteio..

É ou não é bom usar FetchAll?


GOSTEI 0
Avante

Avante

06/05/2004

O Ideal para saber o numero de registros é usar

 Select count(0) n_registro from tabela 


Usar FetchAll, ou um loop para ler toda a tabela não é recomendável para ambientes client/server.

[]´s


GOSTEI 0
Rodolpho123

Rodolpho123

06/05/2004

Olá Lucas,

Sobre FetchAll, eu li isso no próprio arquivo de ajuda do Delphi7. Não é nada de mais não, só não é recomendado para quem necessita de atualizações precisa emuitos usuários conectados, pois alguns registros envolvidos no FetchAll podem ser modificados por outras aplicações, que provavelmente deixaria o BD corrompido.

Está ecrito assim no Help:


Note:Using FetchAll is not always appropriate. For example, when an application accesses a database used by many simultaneous clients and there is a high degree of contention for updating the same records, fetching all records at once may not be advantageous because some fetched records may be changed by other applications. Always weigh the advantages of reduced network traffic against the need for reduced record contention.



GOSTEI 0
Wellington Silva

Wellington Silva

06/05/2004

Me deparei com o problema também. FetchAll foi a solução também, apesar de ser muito estranho.
GOSTEI 0
POSTAR