Fórum Select que retorna mais de 50.000 registros #235027

29/05/2004

0

Pessoal...

Estou com um problema aqui em relação à visualização de datasets com muitos registros... Estou trabalhando com PostgreSQL + Zeos + Delphi 7... Utilizando uma grid simples, devidamente conectada ao banco, com a instrução:

select * from usu order by codusu


Em uma base local, em que a tabela usu possui 200.000 registros, o retorno para visualição dos registros na grid é algo em torno de 2 segundos. O que eu considero ótimo...

Mas... O que eu realmente preciso, é que esta base fique online... Portanto, estou fazendo o mesmo processo em uma base remota, instalada em um servidor FreeBSD e conectando através de VPN. Neste caso, a tabela possui em torno de 140.000 registros e o retorno para visualização dos registros na grid é algo em torno de 1 minuto, o que considero impossível de se trabalhar...

Nos componentes ADO, mais precisamente no ADOQuery, existe uma propriedade CacheSize, que, se não me engano, é a quantidade de registros que o dataset vai trazer à memória local para visualização. Conforme se navega na grid, ele vai trazendo mais registros...

Gostaria de saber se realmente é isso o que o ADO faz, e se positivo, se existe alguma maneira de se fazer isso com o Zeos...


Ffsombra

Ffsombra

Responder

Posts

29/05/2004

Xisto

Para o bem da rede e dos bons costumes.
Existe mesmo a necessidade de abrir todos os MILS registros de uma só vez ?
Isto vai sobrecarregar a rede por melhor que ela seja.
Ou entao nao entendi bem o que vc precisa.
[]s
Xisto


Responder

Gostei + 0

29/05/2004

Ffsombra

Para o bem da rede e dos bons costumes. Existe mesmo a necessidade de abrir todos os MILS registros de uma só vez ? Isto vai sobrecarregar a rede por melhor que ela seja. Ou entao nao entendi bem o que vc precisa. []s Xisto


Infelizmente, eu preciso...

Mas eu gostaria que ao invés de trazer todos os 50.000 registros de uma só vez, ele fosse trazendo esses registros conforme eu fosse navegando na grid... acredito que assim não comprometeria a rede...


Responder

Gostei + 0

29/05/2004

Vinicius2k

Fábio,

Ajuste a propriedade ´Filtered´ da ZQuery para True... isso não vai influenciar em nada o resultado do select, mas vai fazer com que a ZQuery se comporte como uma IBQuery, por exemplo, trazendo para o buffer os registros, à medida que forem solicitados...
Eu acho q isso é um ´quebra-galho´ q fizeram pq está no ´Know Bugs´, mas funciona perfeitamente...
Feito isso, sua performace crescerá muito, mas vc se vc disparar um ´ZQuery.Last´ ou um ´ZQuery.RecordCount´ ae já era... vai levar os 60 segundos pq ele vai precisar trazer tudo para o buffer para mover o cursor para o final...
Espero ter ajudado...
T+


Responder

Gostei + 0

31/05/2004

Ffsombra

Ajustei a propriedade Filtered para True, mas o comportamento não mudou em nada........ estou utilizando o Zeos 6.1.5..... Qual versão vc testou isso???


Responder

Gostei + 0

31/05/2004

Vinicius2k

6.1.5 também... a diferença que com bancos firebird...

achei isso no Knowbugs.html na raíz de instalação da Zeos :
If you are using dbgrid, all the records will be fetched because of a call to recordcount (in scrollbar). You can avoid this behavior if you turn on the Filtered property. In this case you can achieve fast open even on bigger resultsets.


não diz que é restrito a um determinado banco...
Fábio, tem certeza q não está disparando nenhum método ou propriedade que invalide a opção ? como um .RecorCount, por exemplo...

T+


Responder

Gostei + 0

01/06/2004

Ffsombra

Não estou o usando este método, mas estou disparando uma instrução SQL em outro componente ZQuery:

select count(*) as qtd from usu


Será que isto tb pode estar interferindo???

Vou testar...


Responder

Gostei + 0

02/06/2004

Ffsombra

Retirei a instrução.... mas mesmo assim não funciona......


Responder

Gostei + 0

02/06/2004

Vinicius2k

Fábio,

Sua ZQuery está ligada num DataSetProvider+ClientDataSet ?
Se estiver o ClientDataSet tbm força o fecth de todos os registros se não estiver definida a propriedade ´PacketRecords´ com a quantidade de registros desejada... e tbm, neste caso, vc pode retirar o filtered da ZQuery que não fará diferença...
Torço para que seja isso...
T+


Responder

Gostei + 0

03/06/2004

Ffsombra

Como estou fazendo testes, estava tentando utilizar sem ClientDataSet´s e DataSetProvider´s.....

Para utilizar ZQuery+DataSetProvider+ClientDataSet, é necessário atualizar alguns fontes da Zeos, pesquisei isso nos fóruns da própria Zeos.
Sem estas atualizações, se vc alterar a propriedade PacketRecords para algo diferente a -1, os registros não são visualizados...

Fiz as alterações e conversei com uma pessoa que utiliza desta maneira...
Mas ainda não consegui... Ainda vou testar mais...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar