ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Lentidão ao carregar muitos registros no TListView

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
eduardoserrao
Novato
Novato


Registrado: Segunda-Feira, 28 de Novembro de 2016
Mensagens: 78

MensagemEnviada: Seg Dez 05, 2016 10:41 am    Assunto: Lentidão ao carregar muitos registros no TListView Responder com Citação

Bom dia pessoal,
Estou com um problema ao tentar carregar uma consulta no meu listview, no meu banco de dados tenho 15.000 registros e na hora que tento carregar esses registros meu aplicativo fica lento e se eu tentar tocar na tela ele pede para fechar.
Estou carregando meu listview da seguinte forma:

Código:
procedure TfrmCadProduto.carregarListaProdutos;
var
  Item : TListViewItem;
begin
  lsViewProdutos.Items.Clear;
  DM.qryProdutos.SQL.Clear;
  DM.qryProdutos.SQL.Text := 'SELECT DESCRICAO, VALOR, COD_BARRA, QTDE_ESTOQUE FROM PRODUTO';
  DM.qryProdutos.Active := True;
  while not DM.qryProdutos.Eof do
  begin
    Item := lsViewProdutos.Items.Add;
    Item.Text := DM.qryProdutosDESCRICAO.Text;
    Item.Data[TMultiDetailAppearanceNames.Detail1] := 'Valor Varejo: ' + DM.qryProdutosVALOR.Text ;
    Item.Data[TMultiDetailAppearanceNames.Detail2] := 'Código de Barra: ' + DM.qryProdutosCOD_BARRA.Text;
    Item.Data[TMultiDetailAppearanceNames.Detail3] := 'Quantidade em Estoque: ' + DM.qryProdutosQTDE_ESTOQUE.Text;
    DM.qryProdutos.Next;
  end;
  DM.qryProdutos.Active := False;
end;


Alguém tem alguma ideia de como posso resolver esse problema?

Abraços
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fariaregis
Novato
Novato


Registrado: Sábado, 23 de Mai de 2009
Mensagens: 9

MensagemEnviada: Seg Dez 19, 2016 6:02 pm    Assunto: Responder com Citação

Porque voce vai carregar 15 mil registros de uma so vez ? Nem querendo da para ler 15 mil de uma vez.

Parametriza melhor o seu sql exemplo

SELECT DESCRICAO, VALOR, COD_BARRA, QTDE_ESTOQUE FROM PRODUTO where datainicio and datafim

ou sei la ha inúmeros parâmetros que você pode colocar aqui!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
mac_carvalho
Novato
Novato


Registrado: Sexta-Feira, 23 de Mai de 2014
Mensagens: 12

MensagemEnviada: Qua Jan 25, 2017 9:24 am    Assunto: Responder com Citação

Caramba cara, 15 mil registos na lata??

Bom, vou de acordo com fariaregis. Entretanto, se realmente tem que ser aberto os 15 mil registros, crie uma thered.


http://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html





Att!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wolverinefarah
Colaborador
Colaborador


Registrado: Sábado, 17 de Junho de 2006
Mensagens: 1770

MensagemEnviada: Sex Jan 27, 2017 1:09 pm    Assunto: Responder com Citação

fariaregis escreveu:
Porque voce vai carregar 15 mil registros de uma so vez ? Nem querendo da para ler 15 mil de uma vez.

Parametriza melhor o seu sql exemplo

SELECT DESCRICAO, VALOR, COD_BARRA, QTDE_ESTOQUE FROM PRODUTO where datainicio and datafim

ou sei la ha inúmeros parâmetros que você pode colocar aqui!


Concordo. Bem capaz de possível estouro de memória.
_________________
Fernando Farah
PROGRAMADOR PROGRESS
PROGRAMADOR DELPHI + FIREBIRD
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
eduardoserrao
Novato
Novato


Registrado: Segunda-Feira, 28 de Novembro de 2016
Mensagens: 78

MensagemEnviada: Qua Fev 01, 2017 10:02 am    Assunto: Responder com Citação

Era porque eu estava percorrendo meu TFDQuery para povoar meu listview e ele estava trazendo todos os registros.
Eu adicionei um TDataSetProvider e setei meu TFDQuery na propriedade dataset e adicionei também um TClientDataSet com o packetrecords = 100 e setei meu TDataSetProvider para a propriedade providerName e depois percorri meu TClientDataSet para popular a lista.
desta maneira ele trouxe por demanda.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Sex Fev 03, 2017 2:27 pm    Assunto: Responder com Citação

fariaregis escreveu:
Porque voce vai carregar 15 mil registros de uma so vez ? Nem querendo da para ler 15 mil de uma vez.

Parametriza melhor o seu sql exemplo

SELECT DESCRICAO, VALOR, COD_BARRA, QTDE_ESTOQUE FROM PRODUTO where datainicio and datafim

ou sei la ha inúmeros parâmetros que você pode colocar aqui!


tb concordo. ning em sã consciencia vai ler 15 mil registros.
vc tem q criar uma tela de pesquisa e listar somente pelo criterio da pesquisa. e so lista depois q o usuario digitar alguma coisa, senao vc "mata" seu app
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB