Abertura Lenta na Tabela com ADO

Delphi

30/07/2004

Olá amigos, tou fazendo uns testes de importação de fotos com o access(2000 ou XP) usando QueryADO, aí verifiquei os sequintes detalhes:

Qnd a tb tah vazia tudo ocorre normalmente, mas a medida q eu vou inserindo mais fotos, a aplicação vai ficando mais lente. O pior é q qnd eu fecho a aplicação e abro de novo ela demora a ser mostrada(pq é no momento do OnCreate ou OnShow q eu abro a tabela).

Aí fiz o seguinte teste q a principio poderia cair mais a performance:

Utilizei BDE, isso mesmo. Criei um drive ODBC para o Access 2000, já q o bde naum tem drive nativo pro access2000 só pro 97, e aplicação ficou mais rápida do q o ADO, não só na importação como tb na abertura da tabela, mesmo qnd ela está com muitos registros já inclusos.

Como isso é possivel? Visto q a aplicação passa por duas camadas intermediarias (DBE e ODBC) pra chegar no banco, e no ADO o acesso é direto com o JET. Alguem sabe explicar pq isso acontece? Teria alguma propriedade do ADO pra melhorar essa Performance?


Pabhen

Pabhen

Curtidas 0

Respostas

Walace

Walace

30/07/2004

Sou novato em delphi, mas tive um problema parecido com o seu e o pessoal do fórum me ´induziu´ a usar query no lugar de table.


GOSTEI 0
Pabhen

Pabhen

30/07/2004

Sou novato em delphi, mas tive um problema parecido com o seu e o pessoal do fórum me ´induziu´ a usar query no lugar de table.


mas eu tou usando query


GOSTEI 0
Walace

Walace

30/07/2004

...pq é no momento do OnCreate ou OnShow q eu abro a tabela...


então qdo vc abrir esta tabela (query) faz ela tentar ler um registro que não existe, por exemplo:

select * from cliente where codigo = 0


Como não vai existir um codigo 0 ela vai carregar da forma que vc quer.


GOSTEI 0
Pabhen

Pabhen

30/07/2004

então qdo vc abrir esta tabela (query) faz ela tentar ler um registro que não existe, por exemplo:
select * from cliente where codigo = 0
Como não vai existir um codigo 0 ela vai carregar da forma que vc quer.


Mas a questão naum é só essa:
O q eu keria saber mesmo é pq com o bde acessando o odbc é mais rápido do q usar o ado?


GOSTEI 0
Bon Jovi

Bon Jovi

30/07/2004

Pode ser porque dependendo de configurações do Cursor, ADO traz de uma vez todo o conteúdo solicitado para a máquina cliente, criando um cache local em disco. A configuração default é CursorLocation = clUseClient, que faz isso q eu comentei. Outra opção é clUseServer, não muito recomendado, só pra casos q realmente seja necessário.

Já BDE deve pegar páginas de registros conforme for sendo navegado o DataSet.

Mas enfim, como os colegas acima já comentaram, não tem pq ficar abrindo toda a tabela, isso não é pratico em sistemas cliente/servidor.


GOSTEI 0
Pabhen

Pabhen

30/07/2004

[quote:031297c648=´Bon Jovi´]Pode ser porque dependendo de configurações do Cursor, ADO traz de uma vez todo o conteúdo solicitado para a máquina cliente, criando um cache local em disco. A configuração default é CursorLocation = clUseClient, que faz isso q eu comentei. Outra opção é clUseServer, não muito recomendado, só pra casos q realmente seja necessário.

Já BDE deve pegar páginas de registros conforme for sendo navegado o DataSet.

Mas enfim, como os colegas acima já comentaram, não tem pq ficar abrindo toda a tabela, isso não é pratico em sistemas cliente/servidor.[/quote:031297c648]

Vlw pela explicação, deve ser isso mesmo


GOSTEI 0
POSTAR