Tive que fazer algumas importações faz algum tempo e utilizei o método
que o bruno sugeriu, com pequenas modificações para minimizar o
consumo de memória. Mas ficou muito bom. e bem rápido.

Assino embaixo :)

2008/7/2 Bruno Lichot <[EMAIL PROTECTED]>:
> Salve Lucas,
>
> É o seguinte.
>
> Para fazer estes processamentos em lotes o ideal é ler os dados e navegar
> por eles com clientdatasets mesmo. Só que para navegação não use locate, use
> setkey com índices dinâmicos em memória no CDS que é estupidamente rápido.
> No meu primeiro exemplo do meu link de downloads gratuitos
> (HTTP://cc.codegear.com/author/795118) tem uma aplicações sobre recursos do
> ClientDataSet que implementa em um dos exemplos o setkey. Em tempo, estarei
> no FireBird Developers Day – FDD – dia 19/07
> (WWW.firebirddevelopersday.com.br) fazendo uma palestra sobre estes e outros
> recursos.
>
> Para manipular os dados, ou seja fazer inserts, deletes e updates dos
> registros, o melhor a se fazer e montar dinamicamente os comandos SQL e
> executá-los sempre dentro de uma transação monitorada usando o método
> ExecuteDirect do SQLConnection. No mesmo exemplo que indiquei na aplicação
> servidora, tem uma função na classe principal chamada incluipedidos que faz
> algo parecido desta forma que expliquei.
>
> Faça o processamento em lote separado por tabelas e para cada um deles abra
> uma transação monitorada, processe o lote e feche a transação.
>
> Desta forma ficará rápido o processamento e não trará problemas para o seu
> banco.
>
> Dicas:
> Tenha total controle das conexões que você utilizar, bem como das transações
> monitoradas.
> Cuidado para não deixar objetos instanciados desnecessariamente, feche
> sempre os datasets quando não utilizar mais.
> Verifique o tamanho de buffer em memória do FireBird para que não incorra no
> erro de ter um banco de 100 mb e um espaço em memória de 12 mb. O seu espaço
> em memória deve ser relativo ao tamanho do seu banco e limitado ao que você
> tem de RAM disponível e ao que outros recursos no Server também podem
> consumir. Ou seja não tenha de mais, mas também não tenha de menos.
>
> Abraços,
>
> BL
>
> From: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On
> Behalf Of Lucas Eduardo Barao Neves
> Sent: quarta-feira, 2 de julho de 2008 10:33
> To: delphi-br@yahoogrupos.com.br
> Subject: [delphi-br] Lentidao com ClientDataset
>
>
> Bom dia pessoal, gostaria de uma ajuda de voces,
>
> Estou trabalhando em um sistema de importacao de dados via arquivo TXT. Ele=
> tem mais ou menos a seguinte estrutura:
>
> Arquivo: +- 56000 linhas
> Ele atualizara da seguinte forma:
>
> Tabela 1 - 85000 registros
>
> Para cada sequencial encontrado / criado, ele atualizara uma tabela 2 =3D 1=
> 0000 registros
> Para cada um da tabela 2 ele atualizara ou fara insercoes em uma tabela 3 =
> =3D 900 registroa
> A tabela 3 fara a mesma coisa na tabela 4: 56000 registros (todos os regist=
> ros do TXT)
>
> Ja tentei das seguintes formas:
> Somente com queries, uma para selecao, uma para insercao, uma para alteraca=
> o;
> Somente com queries, somente uma para selecao, insercao e alteracao,
> Somente uma query com ClientDataSet para selecao, insercao e alteracao.
>
> Essas tres primeiras tentativas geravam tantos acessos ao banco de dados qu=
> e chegava uma hora que dava um overflow dentro do banco (o famoso e misteri=
> oso erro SQLDA);
>
> Sendo assim tentei de outra forma:
>
> Um ClientDataSet para cada tabela da situacao informada, todos eles com sel=
> ect * e carregamento na memoria, procura pelo comando Locate.
>
> Dessa forma ate funciona sem dar erro no banco, porem ele esta a uma veloci=
> dade de 1 a 2 registros por segundo!!!!!
>
> Das outras formas eu ate conseguia uma marca maior, o problema e o erro que=
> acontece apos tantas requisicoes com o banco.
>
> Estou utilizando Delphi 6, dbExpress e Firebird 2.0. Sei que e uma mistura =
> assassina, mas e so o que tem aqui na empresa.
>
> Alguem tem sugestoes de o que eu posso fazer para melhorar a performance ne=
> sse sentido? O processo da maneira que esta demora uma noite inteira para t=
> erminar, sendo que no sistema antigo deles, a mesma rotina feita em Clipper=
> e DBF levava em torno de 30 minutos.
>
> Agradeco antecipadamente!
>
> Lucas Neves
>
> Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua
> cara @ymail.com ou @rocketmail.com.
> http://br.new.mail.yahoo.com/addresses
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> CONFIDENTIALITY NOTICE: This email message is for the sole use of the
> intended recipient(s)
> and may contain confidential and privileged information. Any unauthorized
> review, use,
> disclosure or distribution is prohibited. If you are not the intended
> recipient, please
> contact the sender by reply email and destroy all copies of the original
> message.
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 



-- 
Abs
Daniel A. Bastos

------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a