GARANTIR DESCONTO

Fórum Clientdataset demora para carregar dados do banco #571914

01/12/2016

0

Quando o parâmetro PacketRecords está -1, o form demora 1 minuto para abrir.
Eu mudo ele para 1000 ele fica até que rápido para abrir, mas quando eu filtro por código (aparece direto no form não no grid), ele chega até a travar o meu sistema.
O meu banco está com 6.000 cadastros de produtos.

   DS.DataSet.Filtered := False;
   DS.DataSet.Filter   := 'PROCOD = ' + EdtProcod.Text;
   DS.DataSet.Filtered := True;   


Eles trava no |DS.DataSet.Filtered := True;|

Se eu colocar PacketRecords 5.000 ele demora para carregar o form e demora para carregar o filtro.
Já procurei mas ainda não achei a solução.

Já testei também colocar PacketRecords = 0. Para carregar somente o metadados, mas ele carrega rápido filtra rápido mas os campos voltam em branco.
André Franzoi

André Franzoi

Responder

Post mais votado

01/12/2016

Opa! Uma alternativa é você verificar o select e trazer somente os campos/registros que serão necessários. Não é uma boa prática trazer todos os 6000 registros de uma vez só. Talvez fazer uma janela em que o usuário preenche alguns parâmetros de pesquisa, para depois submeter o SQL e trazer os registros

Jones Granatyr

Jones Granatyr
Responder

Gostei + 2

Mais Posts

01/12/2016

Gutierry Pereira

Boa tarde, isso não é uma boa pratica. O ideal é fazer algo com o citado pelo nosso amigo Jones.
Você ai tem dois problemas o primeiro o excesso de informação trafegado pela rede. Imagino que atualmente você tem apenas um usuário fazendo essa consulta, você esta depreciando recursos do banco de dados, imagina isso com dois 3 e agora com 100 usuario. alem de prejudicar outroas operações seu trafgo na rede será intenço.
segundo ponto vamos aqui supor que cada registro seu tenha 30Kb a cada 1000 registro você tem aproximadamente 3Mb de memoria ocupada, para seus 6000 serão 18 para 20Mb de memoria isso apenas para um cadastro de produtos.

Sua lentidão é por dois problemas, uma fazer tranaferencia de 20Mb na rede não é nada rapido. Outra apresentar isso em uma grid é lento devido ao loop que é feito no dataSet , percorrendo 6mil registro e fazendo todo processo de apresentar.

Espero ter ajudado.
Responder

Gostei + 1

01/12/2016

André Franzoi

Como eu poderia fazer nessa situação.
eu sou novo no delphi e estou com bastante problema com isso
Responder

Gostei + 0

01/12/2016

Jones Granatyr

Olá Franzoi,

Quais componentes você está utilizando? O ideal é você ter uma query com um select mais ou menos do tipo

select * from pessoas where nome like :nome

O ":nome" com os dois pontos é um parâmetro, que o usuário vai digitar na tela e será passado para a consulta. Desta forma, serão retornados somente os registros que se encaixam nessa condição. Outra detalhe é que não é uma boa prática utilizar o asterisco (*) pra retornar os dados
Responder

Gostei + 0

02/12/2016

André Franzoi

Eu utilizo o clientdataset
Responder

Gostei + 0

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

Aceitar