Olá Junior,
 
    Vc tá no caminho. O mais correto é vc ler as informações via cursor pois
assim não consome muita memória para armazenas. Não sei qual componente vc
está usando mas caso aceite, desabilite o fetchAll do dataset de leitura.
Outro artifício q vc pode usar é ao invés de abrir um dataset e dar append
vc montar uma query de insert com os devidos parametros e somente fornecer
os parâmetros do insert para cada registro de origem. Trabalhe com
parâmetros pois a maioria dos componente DBWare otimizam junto ao banco a
execução da DML. Assim a aplicação irá consumir pouca memória pois os dados
estarão sendo lido via cursor e inseridas no banco através de inserts
diretos. 
 
 
[]´s
 
 
Sergio Uetanabaro

  _____  

De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Red Mosquito
Enviada em: quarta-feira, 24 de outubro de 2007 04:06
Para: [EMAIL PROTECTED]; delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] ClientDataSet estourando memória



Delphi 7 com SQLServer – usando ADO

Tenho 5 tabelas. 

NF_COMPRA e ITENS_NF_COMPRA, 

NF_VENDA e ITENS_NF_VENDA e

MOVIMENTO_ESTOQUE

Objetivo: 

-Ler nf_compra e seus respectivos itens e gerar MOVIMENTO_ESTOQUE (entrada)

-Ler nf_venda e seus respectivos itens e gerar MOVIMENTO_ESTOQUE (saida)

-Atualizar o saldo diário do produto cf a inserção de registros em Mov.Est.

Cada tabela tem um ClientDataSet, já que são precisos vários campos das
tabelas

para serem gravados em MOVIMENTO_ESTOQUE.

O problema é que cf vou lendo mais registros a memória do windows vai indo
pro espaço.

Exemplo:

-Dou um select em NF_COMPRA (ex: nf 00001)

-em seguida dou um select somente nos produtos desta NF_COMPRA 00001

-para cada registro em ITENS_NF_COMPRA eu gero um registro em
MOVIMENTO_ESTOQUE

-dou um close nos CDS’s NF_COMPRA e ITENS_NF_COMPRA

-dou um createDS nesses 2 CDS’s

-dou um open nesses 2 CDS’S

(o mesmo procedimento faço com Vendas)

Colocando close+createDS+open a memória aguenta mais tempo.

Se não colocar dá “memória insuficiente” rapidinho

Estou procedendo corretamente ?

Há alguma forma de liberar o CDS da memória ?

Sei que deve haver formas mais fáceis, porém este programa eu já peguei
pronto.

Obrigado pela atenção

Junior

[As partes desta mensagem que não continham texto foram removidas]



 


[As partes desta mensagem que não continham texto foram removidas]

Responder a