uso de memoria muito alto em tabela gigante

24/01/2006

seguinte galera... tenho uma tabela com uns 2000 registros .. dependendo ateh mais....

e preciso tratar uns campos .. ex substituir as virgulas por espaço, deixar tudo em minusculo, tira acento das palavras e talz ...
isso rola normal com poucos registros mas qndo sao mtos... ixi.. quase q impossivel...

os campos sao todos do tipo MEMO ... e cada campo tem +/- uns 1300 caracteres :)

soh q qndo mando rodar esse comando... o computador fica EXTREMAMENTE LENTO ... o consumo de memoria vai la encima...
e depois de muito tempo da out of memory pra executar a função...

alguem sabe oq posso fazer pra agilizar esse processo... e fazer com q isso funcione melhor?

obrigado :P


    for i:= 0 to TempTable.RecordCount-1 do begin
      TempTable.Edit;
      {substitui a virgula por espaço}
      x := ReplaceStr(TempTable.FieldByName(edit6.Text).AsString,´,´,´ ´);
      {remove os acentos das palavras e poe tudo minusculo}
      x := Lowercase(AnsiToAscii(x));
      {insere nos registros as palavras tratadas}
      TempTable.FieldByName(edit6.Text).AsString := x;
      TempTable.Post;
      TempTable.Next;
    end;



Salsa

Respostas

24/01/2006

Aroldo Zanela

Colega,

O primeiro passo é substituir o FOR por um laço WHILE, pois da forma que você codificou, a cada iteração do laço o sistema tem de obter a quantidade de registro. Isto é totalmente desnecessário e degradante.
Qual é o banco de dados?
A propósito, são 2000 ou 2000000 de registros?


Responder Citar

25/01/2006

Salsa

eu troquei por...

TempTable.First;
while TempTable.Eof do begin


mas ele nao percorre os registros pq?


Responder Citar

25/01/2006

Salsa

desculpe eskeci q era while not hehee
entao ... ele vai percorrendo... qndo chega nos 50¬ dos registros... ele da falta de memoria....

tudo bem q ele tah fazendo varias coisas ali na funçao mas meu tah usando mto memoria.. nao tem como livrar essa memoria nao...???


*o banco q to usando eh o access


Responder Citar

25/01/2006

Aroldo Zanela

Colega,

Tem como mandar uma cópia do banco para testar aqui? (zanela_zanela@yahoo.com.br)


Responder Citar