Programa demora abrir por causa de muitos registros na tabela.Ajuda

Delphi

10/05/2010

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
Eduardo Jr

Eduardo Jr

Curtidas 0

Respostas

Emerson Nascimento

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.

GOSTEI 0
Fábio Cruz

Fábio Cruz

10/05/2010

Outra dica é remover essa instrução do OnCreate
GOSTEI 0
Eduardo Jr

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
GOSTEI 0
Emerson Nascimento

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

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.

SELECT * FROM NOME_TABELA WHERE CampoIndice = -1


Espero ter colaborado.
GOSTEI 0
Carlos Mazzi

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

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.
GOSTEI 0
POSTAR