clientDataSet Lento Delphi

Delphi

Firebird

11/08/2017

Bom dia pessoal. Firebird
Uso ibtable, datasourte, provider e clientdataset para trazer os dados para serem manipulados no sistema. Porém uma determinada tabela tem muitos campos e muitos registros, o clientdataset chega a levar 2 min para abrir. Existe alguma forma para contornar essa situação?

Agradeço desde já.
Antonelly Silva

Antonelly Silva

Curtidas 0

Melhor post

Gutierry Pereira

Gutierry Pereira

11/08/2017

Bom dia, primeiro verifique a consulta se esta devidamente projetada, depois verifique os os index dessa consulta. Por ultimo verifique o numero de registro retornado, se o número for muito grande, faça uma paginação.

Dica. evite trazer muitos registro em uma consulta, coloque filtros ou dispositivos que minimizem esse resultados. ;)

Espero ter ajudado.

Att: Gutierry Antonio
GOSTEI 1

Mais Respostas

Rafael Bosco

Rafael Bosco

11/08/2017

ClientDataSet.DisableControls;

Faça o select e adiciona a visualização, posteriormente:

ClienteDataSet.EnableControls;

Dica: Não use o ClienteDataSet.First ao percorrer um CDS, pois esse método, irá varrer novamente o CDS para achar a primeira posição.
GOSTEI 1
Antonelly Silva

Antonelly Silva

11/08/2017

os Controls não funcionou..

Como funciona a paginação?
GOSTEI 0
Rafael Bosco

Rafael Bosco

11/08/2017

Você está trazendo TODOS os campos da tabela? e no seu CDS cada campo da Tabela tem um campo definido? Por que se a sua tabela tem por exemplo 60 campos, e o seu CDS apenas 30, filtre a sua SELECT.

Se a sua select usa INNER, LEFT JOINS, utilize a ligação entre eles com indices que diminui o tempo também.

Tive uma situação parecida, utilizei o DisableControls e EnableControls e resolveu.
GOSTEI 0
Antonelly Silva

Antonelly Silva

11/08/2017

Fiz um teste, no meu ibtable esta todos os campos e no cds deixei apenas um campo e continua lento a mesma coisa, acho que vou precisar fazer um filter no ibtable antes de abrir o cds, não é isso?
GOSTEI 0
Gutierry Pereira

Gutierry Pereira

11/08/2017

o filtro ira ajudar a reduzir o numero de registro, a paginação irá reduzir isso. Se unir os dois tera um bom resultado.
A paginação depende de banco para banco o mysql por exemplo fazemos uma consulta utilizando o limit.
Exemplo:
  Select * from MinhaTabela limit (10,0) // traz as primeiras 10 ocorrencias
  Select * from MinhaTabela limit (10,11 // Traz as 10 registros iniciando no 11)


para isso vc tem que ter um controlador de pagina e dessa forma vai fazendo a requiisção das paginas necessarias.

Em algumas aplicações utilizo um algoritimo que enquanto o usuário navega na grid ele vai trazendo as proximas paginas, semelhante ao que acontece no facebook, dessa forma não é trago o resultado em uma unica consulta e conforme vai havendo a navegação os registros são sendo solicitados.

espero ter ajudado.

abraços
GOSTEI 0
POSTAR