Fórum tClientDataSet muito lento, alguém pode ajudar? #168350
08/07/2003
0
A sql existente no tSQLQuery é simples:
´SELECT * FROM TABCLI ORDER BY NOME´, onde o campo nome já possui índice para agilizar a pesquisa.
Se eu der um Open na query ela é aberta de forma extremamente rápida, afinal é unidirecional, porém quando eu vou abrir o tClientDataSet ele demora muito, mas muito mesmo, algo em torno de 50 a 65 segundos!
Cheguei a colocar na propriedade IndexFieldNames alguns campos(CODIGO_TABCLI, NOME E CODIGO) porém não resultou em nenhuma melhora..
Alguém poderia me dar uma dica ou mesmo me dizer se possui algum ´macete´ neste componente?
Obrigado desde já,
Emanuel.
Emacruz
Curtir tópico
+ 0Posts
08/07/2003
Wagnerps
emacruz vc precisá carregar os 16.300 registros de uma só vez mesmo ?
olha uso DBExpress e tenho um tabela com pouco mais 430.000 registros
e não tenho tanto problema quanto a performance.
Quando carrego o form passo o seguinte comando.
obs: tenho 3 chaves primarias.
dmDados.ClientDataSet.Commandtext := ´SELECT * FROM TABELA WHERE ID1 = 0 and ID2 = 0 and ID3 = 0´ dmDados.ClientDataSet.Close; dmDados.ClientDataSet.Open;
No ClientDataset tem uma propriedade PacketRecords,
o valor Default dela e -1 então quanto vc dá um open ele carrega todos os registros, mas se vc mudar no caso para 10 o ele vai trazer para vc um pacote com 10 Regitros apenas.
depois continuo assim:
Após o insert ou Append na hora de salvar faço o seguinte
dmDados.ClientDataSet.Post; dmDados.ClientDataSet.ApplyUpdates(-1);
Após Salvar Limpo o Dataset
dmDados.ClientDataSet.EmptyDataset;
e continuo a inserção.
Espero ter ajudado.
Falow... :wink:
Gostei + 0
08/07/2003
Emacruz
Meu problema, pelo menos por enquanto, seria no ´Open´ propriamente dito. Não sei nem se estou atribuindo os índices no tClientDataSet de forma errônea... chato mesmo é ver o tSQLQuery abrir a mesma consulta em menos de um segundo entende?
Grato desde já a sua atenção,
Emanuel.
Gostei + 0
08/07/2003
Fred
e outra coisa a query fica fechada!!
so o ClientDataset é aberto! 8)
Gostei + 0
09/07/2003
Emacruz
Gostei + 0
01/08/2003
Flaviodfp
Tente colocar a sua Query o comoando Limit, assim:
´SELECT * FROM TABCLI ORDER BY NOME, Limit 20´
O Limit 20 seria a qtde de linha da sua dbgrid, assim toda vez q o usuário clicar PageUP ou PageDown, a Query irá mostrar os próximos 20 registros ou os 20 resgistros anteriores.
Seria bom se você checasse as tabelas para verificar se existem algum problemas com elas. Eu utlizo o MySQL e este tipo de problema não acontece.
Ats,
Flávio.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)