IBQuery.RecordCount sempre mostra 1
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.
Basta usar o Last ou um FechAll.
Tem alguma atualização para esse bug ?
Obrigado.
Pezzin
Curtidas 0
Respostas
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
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
06/05/2004
A solução é:
Depois que você abrir a query, coloque este comando.
Depois que você abrir a query, coloque este comando.
IBQuery.FetchALL;
GOSTEI 0
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:
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.
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
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
06/05/2004
O Ideal para saber o numero de registros é usar
Usar FetchAll, ou um loop para ler toda a tabela não é recomendável para ambientes client/server.
[]´s
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
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:
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
06/05/2004
Me deparei com o problema também. FetchAll foi a solução também, apesar de ser muito estranho.
GOSTEI 0