Programa demora abrir por causa de muitos registros na tabela.Ajuda
Ola!
Estou abrindo o clientdataset clientes no oncreate do meu datamodule com a seguinte instrucao sql :
SELECT * FROM CLIENTES WHERE ATIVO = 'S'
So que eu tenho uns 16.000 registros no meu banco e isso ta levando mais ou menos 2 minutos pro meu programa abrir. Eu tenho um dbgrid onde eu mostro todos os clientes dando a opcao do usuario escolher qual ele quer cadastrar uma receita.
Tem uma opcao melhor(claro q deve ter ne) pra q meu programa nao demore tanto?
obrigado
Estou abrindo o clientdataset clientes no oncreate do meu datamodule com a seguinte instrucao sql :
SELECT * FROM CLIENTES WHERE ATIVO = 'S'
So que eu tenho uns 16.000 registros no meu banco e isso ta levando mais ou menos 2 minutos pro meu programa abrir. Eu tenho um dbgrid onde eu mostro todos os clientes dando a opcao do usuario escolher qual ele quer cadastrar uma receita.
Tem uma opcao melhor(claro q deve ter ne) pra q meu programa nao demore tanto?
obrigado
Eduardo Jr
Curtidas 0
Respostas
Emerson Nascimento
10/05/2010
utilize a propriedade PacketRecords. ele limita o pacote de registros lidos por vez.
por exemplo: se você alterar a propriedade para 200 e query retornar 15.000 registros, serão trazidos em princípio 200 registros. ao navegar na grade e posicionar no registro 201, serão trazidos mais 200, e assim por diante.
por exemplo: se você alterar a propriedade para 200 e query retornar 15.000 registros, serão trazidos em princípio 200 registros. ao navegar na grade e posicionar no registro 201, serão trazidos mais 200, e assim por diante.
GOSTEI 0
Fábio Cruz
10/05/2010
Outra dica é remover essa instrução do OnCreate
GOSTEI 0
Eduardo Jr
10/05/2010
Ola!
Eu mudei pra 200 essa propriedade agora ele mostra minha tela de splash por 3 segundos depois some tudo e demora pra abrir o programa. Antes ele ficava na tela de splash ate abrir o programa.
Ainda ta demorando muito.
obrigado
Eu mudei pra 200 essa propriedade agora ele mostra minha tela de splash por 3 segundos depois some tudo e demora pra abrir o programa. Antes ele ficava na tela de splash ate abrir o programa.
Ainda ta demorando muito.
obrigado
GOSTEI 0
Emerson Nascimento
10/05/2010
talvez você tenha algum comando que varra a tabela, ou que precise ir até o último registro.... ou ainda pode haver outro cds com o mesmo problema. só com o código fonte em mãos pra dizer exatamente o que pode ser....
GOSTEI 0
Wilson Junior
10/05/2010
Se você ainda não "utiliza" esta tabela para mostrar dados para o cliente e quer simplesmente abrí-la, faça o SQL retornar nenhum registro.
Espero ter colaborado.
SELECT * FROM NOME_TABELA WHERE CampoIndice = -1
Espero ter colaborado.
GOSTEI 0
Carlos Mazzi
10/05/2010
Além de tirar do OnCreate, recomendaria que vc, no seu SELECT, que com * from (trazer todos os campos na consulta) se sua tabela tiver 30 campos.. isso tbm, causará lentidão e as vezes não'serão todos os campos que faz sentido mostrar na sua grid ou consulta... tente filtrar mais ... Ex:
"SELECT CLI_CODIGO, CLINOME, CLI_RG from Clientes where ....." , filtrando vc tbm limita mais....usando menos recurso do seu servidor de dados...
Outra dica é criar Indices para consultas, por exemplo .. se vc usar muitas consultas por nome, crie um indice de codigo e nome de cliente, para consultar seus clientes por nome... e assim por diante...
Se ainda nao estiver resolverndo.. da um tok..
Abracos
GOSTEI 0
Eduardo Jr
10/05/2010
Ola!
Obrigado a todos. Eu consegui resolver o problema mudando o select * para select e o nome dos campos q eu quero no agora ta rapidinho.
obrigado mais uma vez.
Obrigado a todos. Eu consegui resolver o problema mudando o select * para select e o nome dos campos q eu quero no agora ta rapidinho.
obrigado mais uma vez.
GOSTEI 0