Fórum Erro no recordcount ... #237786
15/06/2004
0
No meu aplicativo, faço uma query, no qual me retorna vários registros ...
Uso recordCount, mais o valor dele, é bem inferior dos registros relacionados no DBGrid ...
O que há de errado ???
Leo.
Lbsystems
Curtir tópico
+ 0Posts
15/06/2004
Djjunior
Gostei + 0
15/06/2004
Christ
Query.Open;
Query.Last;
Query.First;
Quant := Query.RecordCount;
Ou seja, fui até o fim e retornei ao início dos resultados antes de usar o RecordCount aí deu certo.
:D :D :D
Gostei + 0
15/06/2004
Vinicius2k
Isso nada tem haver com a definição de páginas do banco de dados... a limitação inteligente está na IBQuery: o fetch dos registros para o buffer é efetuado conforme necessário e isto é ótimo para selects que retornam muitos registros...
A solução de aplicação dos métodos Last seguido de First é um ´quebra-galho´, digamos assim, para forçar o fetch de todos os registros... muito mais prático e limpo que ela é aplicar o metodo FetchAll...
Contudo vcs devem analizar o princípio de aplicações Client/Server que é trazer ao cliente apenas os registros necessários, mas caso seja realmente necessário trazer todos os registros, não apliquem nenhum dos métodos acima, pois vão comprometer muito a performance da aplicação.
Talvez vcs discordem do meu ponto de vista, mas quando possuírem tabelas com algumas centenas de milhares de registros vão compreender minha preocupação em lhes mostrar isso... (um FetchAll em 100.000 registros leva 10 segundos local e cerca de 30 segundos na rede, por exemplo)...
Se precisarem de um contador de registros usem uma query auxiliar com a instrução ´SELECT COUNT´ que é instantânea... não há necessidade de comprometer a query principal apenas para ler um contador...
Neste tópico que participei isso tbm foi discutido... http://delphiforum.icft.com.br/forum/viewtopic.php?t=45198
Espero ter ajudado...
T+
Gostei + 0
15/06/2004
Christ
Usei o Last First por acaso e deu certo, realmente foi um quebra-galho que já me quebrou muitas árvores, quanto a paginação inteligente, observei que isso não acontecia quando passei a usar o dbExpress ao invés dos objetos IB...
Gostei da sua colocação, vou procurar mais sobre isso, pois estou desenvolvendo uma aplicação que irá trabalhar com mais ou menos 180 a 200 mil registros e isso pode me trazer problemas de performance.
Valew!!!!!
:D :D :D
Gostei + 0
15/06/2004
Vinicius2k
Felizmente, a arquitetura usando dbExpress também pode ser ajustada para trabalhar com Fetch por pacotes de dados com tamanho reduzido, bastando que para isso você ajuste a propriedade ´PacketRecords´ do TClientDataSet para a quantidade de registros que você deseja que tenha no pacote... por exemplo, 1000 que seria equivalente ao valor default da propriedade ´BufferChunks´ da IBQuery... se a performance estiver ruim, baixe o valor para ganhar mais velocidade...
Com certeza lhe traria problemas... fico feliz em ter ajudado...
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)