limitar registro no combobox
Tenho uma rotina que coloca todos os clientes em um combobox em modo de execursão, so que a tabela tem 8 mil clientes e esta muito lento o loop, como posso aumentar a velocidade do loop
a rotina é esta:
[color=red:40001c862b]Combo3.Items.clear;
DM.SDS_Clientes.First;
While not DM.SDS_Clientes.Eof do begin
Combo3.Items.add(DM.SDS_clientes.Fieldbyname(´Nome´).asstring);
DM.SDS_Clientes.Next;
End;[/color:40001c862b]
Estou aberto a ideias... Obrigado a todos
a rotina é esta:
[color=red:40001c862b]Combo3.Items.clear;
DM.SDS_Clientes.First;
While not DM.SDS_Clientes.Eof do begin
Combo3.Items.add(DM.SDS_clientes.Fieldbyname(´Nome´).asstring);
DM.SDS_Clientes.Next;
End;[/color:40001c862b]
Estou aberto a ideias... Obrigado a todos
Dpinho
Curtidas 0
Respostas
Corcos
20/10/2006
não testei
pq não roda um select nome from tabela, armazena em uma variavel e joga a variavel no combo?
talvez seja mais rapido
pq não roda um select nome from tabela, armazena em uma variavel e joga a variavel no combo?
talvez seja mais rapido
GOSTEI 0
Paulocesar1301
20/10/2006
Uma query é o melhor remédio mesmo, mas tente criá-la em tempo de execução... componentes, conexão, abertura, etc... no meu caso me parece rodar um pouco mais rápido...
Se vc recarrega a listagem com freqüência e os nomes não mudam tanto... carregue a tabela para uma pasta temporária e apenas teste a data da base quando for atualizar a listagem (no meu caso prefico o dividir para conquistar... não só em tabelas, mas em bancos tb, agiliza e facilita a manutenção)... uma boa é guardar a hora em que foi atualizada a lista e, de acordo com a experiência que tens quanto à atualização de seu banco colocar um período mínimo para atualização... algo do tipo:
... sei lá, é só uma idéia...
... e, é claro, sempre inclua uma barra de progresso para qualquer coisa que for fazer... mesmo sendo um processo lento, meus clientes ficam despreocupados quando sabem em que pé anda uma tarefa :wink:
Good Vibrations :wink: Good Coding :wink:
Se vc recarrega a listagem com freqüência e os nomes não mudam tanto... carregue a tabela para uma pasta temporária e apenas teste a data da base quando for atualizar a listagem (no meu caso prefico o dividir para conquistar... não só em tabelas, mas em bancos tb, agiliza e facilita a manutenção)... uma boa é guardar a hora em que foi atualizada a lista e, de acordo com a experiência que tens quanto à atualização de seu banco colocar um período mínimo para atualização... algo do tipo:
If (HoraDaUltimaCarga + StrToTime(´00:30:00´)) < Time Then begin If FileAge(CamDoBancoLocal) < FileAge(CamDoBancoNaRede) Then CopyFile(CamDoBancoNaRede, CamDoBancoLocal, False); end;
... sei lá, é só uma idéia...
... e, é claro, sempre inclua uma barra de progresso para qualquer coisa que for fazer... mesmo sendo um processo lento, meus clientes ficam despreocupados quando sabem em que pé anda uma tarefa :wink:
Good Vibrations :wink: Good Coding :wink:
GOSTEI 0
Rodc
20/10/2006
Tenta colocar o Combo3 invisível na hora de adicionar os dados.
Outra possibilidade seria criar um TStringList, adicionar os dados nele, e depois adicionar o StringList todo no combo com Combo3.Items.AddStrings(StringList);
E tenha certeza de ter colocado a propriedade Sort do Combobox como false.
Outra possibilidade seria criar um TStringList, adicionar os dados nele, e depois adicionar o StringList todo no combo com Combo3.Items.AddStrings(StringList);
E tenha certeza de ter colocado a propriedade Sort do Combobox como false.
GOSTEI 0