DELPHI OUT OF MEMORY

07/07/2017

0

Tenho tido problemas com Delphi quando preciso popular tabelas. Por exemplo update da tabela A na tabela B quando o volume de registros é grande.
Já fiz a troca da RLINK32.DLL por uma mais nova e o erro permanece.
Uso Firebird na versão 2.5 e ClientDataSet chamado de uma Query

Ao acionar o While not TabelaTal.Eof Do

O sistema roda cerca de 1500 a 2000 e já carrega um Out of Memory.

O que me aconselham?
Onde estou errando?
Israel Lopes

Israel Lopes

Responder

Posts

07/07/2017

Douglas Souza

Fala Israel, tudo bem?

Poste o bloco de código que realiza o processo de update para que eu ter uma ideia do que realmente está acontecendo.

Att, Douglas Claudio.
Responder

07/07/2017

Israel Lopes

Situação 1
var
  componto:string;
  tamanho: integer;
begin
   while not DM_DADOS.cds_lfncm.eof do
   begin
     componto:=dm_dados.cds_LFNCMCODNCM.Asstring;
     edt_ncm.Text:=tirapontos(componto);
     tamanho:=Length(edt_ncm.Text);
     if tamanho=8 then
     begin
       DM_DADOS.cds_lfclfiscal.Close;
       dm_Dados.cds_lfclfiscal.FetchParams;
       DM_dADOS.cds_lfclfiscal.CommandText:=''select * from lfclfiscal where codfisc=:fisc'';
       dm_dados.cds_lfclfiscal.Params.ParamByName(''fisc'').AsString:=edt_ncm.text;
       dm_dados.cds_lfclfiscal.Open;
       if dm_dados.cds_LISTAPRODUTOS.IsEmpty then
       begin
        dm_dados.cds_lfclfiscal.Append;
        dm_dados.cds_LFCLFISCALCODEMP.Value:=99;
        dm_dados.cds_LFCLFISCALCODFILIAL.Value:=1;
        dm_Dados.cds_LFCLFISCALCODFISC.asstring:=edt_ncm.Text;
        dm_Dados.cds_LFCLFISCALDESCFISC.Value:=copy(dm_dados.cds_LFNCMDESCNCM.Value,1,50);
        dm_dados.cds_LFCLFISCALTPREDICMSFISC.AsString:=''B'';
        dm_dados.cds_LFCLFISCALSITPISFISC.Value:=''T'';
        dm_dados.cds_LFCLFISCALSITCOFINSFISC.Value:=''T'';
        dm_dados.cds_LFCLFISCALTIPOST.Value:=''SI'';
        dm_Dados.cds_LFCLFISCAL.ApplyUpdates(0);
        dm_dados.dts_lfclfiscal:=nil;
        dm_dados.cds_LFNCM.Next;
       end;
     end


Situação 2
while not cds_eqproduto.eof do
begin
  DM_DADOS.cds_listaprodutos.Close;
  dm_Dados.cds_listaprodutos.FetchParams;
  DM_dADOS.cds_listaprodutos.CommandText:=''select * from listaprodutos where produto like :prod'';
  dm_dados.cds_LISTAPRODUTOS.Params.ParamByName(''prod'').AsString:=''%''+trim(cds_EQPRODUTODESCPROD.AsString)+''%'';
  dm_dados.cds_listaprodutos.Open;
  if dm_dados.cds_LISTAPRODUTOS.IsEmpty then
  begin
    showmessage(''Produto não localizado'');
  end
  else
  begin
    if dm_dados.cds_LISTAPRODUTOSCODNCM.AsString<>''0'' then
    begin
      cds_eqproduto.Edit;
      cds_EQPRODUTOCODFISC.AsString:=dm_dados.cds_LISTAPRODUTOSCODNCM.AsString;
      cds_EQPRODUTO.applyupdates(0);
      dm_Dados.Transacao.CommitRetaining;
    end
    else
    begin
      showmessage(''Não é permitido a inserção de produtos com NCM igual a 0'');
    end;
  end;
  cds_EQPRODUTO.Next;
end;

Responder

15/08/2017

Douglas Souza

Fala Israel, tudo bem?

Perdoe-me a falta de resposta, mas acredito que você já tenha resolvido o problema.

Se sim, compartilhe a solução ;)

Um forte abraço.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar