Erro - Out of Memory

Delphi

30/04/2003

Olá.
Estou fazendo uma aplicação em Delphi 4, que está acessando base de dados em MySQL.
É um processamento de espelho de ponto, que vai inserindo as batidas dos funcionários e fazendo os respectivos cálculos.
Mas chega num ponto que a Aplicação dá uma Mensagem ´Out of Memory´
e não dá mais para mexer em nenhuma informação da base.

Alguém já pegou esse erro? Sabe por onde posso começar?

PS.: Faço o processamento de cada funcionário por vez, para não ter muitas informações na memória naquele momento. Mas abre e fecho as tabelas para cada funcionário. :(

Obrigada, pela atenção!!


Eneblis

Eneblis

Curtidas 0

Respostas

Henry Lima

Henry Lima

30/04/2003

Vc esta usando query ou table?


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

30/04/2003

Coloca o fragmento de código onde ocorre o problema para verificarmos melhor. Pode estar relacionado a muitos fatores, mas normalmente é na criação e liberação de objetos em run-time.


GOSTEI 0
Eneblis

Eneblis

30/04/2003

[quote:e27e21a710=´Henry Lima´]Vc esta usando query ou table?[/quote:e27e21a710]

Somente querys!


GOSTEI 0
Henry Lima

Henry Lima

30/04/2003

Você esta liberando os forms da memória? Como você esta fazendo para chamar os formulários? Se os formulário não estão sendo criados na hora que são chamados e liberados da memória quando são fechados, pode ser isso, como vc esta fazendo com os formulários?

Coloque um pedaço do código que vc esta usando para que nós possamos dar uma análisada mais afundo. Também uso MySql e nunca aconteceu comigo, e olha que uso tabelas enormes em rede ainda e nunca deu isso.


GOSTEI 0
Eneblis

Eneblis

30/04/2003

[quote:817c1d46d7=´Aroldo Zanela´]Coloca o fragmento de código onde ocorre o problema para verificarmos melhor. Pode estar relacionado a muitos fatores, mas normalmente é na criação e liberação de objetos em run-time.[/quote:817c1d46d7]

Oi Aroldo, o código-fonte é um pouco extenso, ele faz várias chamadas, mas é +/- assim:

[size=9:817c1d46d7][size=7][color=darkred:817c1d46d7]
while not dm.Empresa.Eof do
begin
dm.Carrega_Funcionario(dm.EmpresaCODIGO.Value);
Label6.Caption := dm.EmpresaFantasia.AsString;
Progresso.MinValue := 0;
Progresso.MaxValue := dm.Funcionario.RecordCount;
Progresso.Progress := 0;
Application.ProcessMessages;
while not (dm.Funcionario.Eof) do
begin
Application.ProcessMessages;
Carrega_Espelho(dm.FuncionarioEMPRESA.Value, dm.FuncionarioMATRICULA.Value, di, df);
Escreve_Mensagem(´Processando Espelho de...: ´+dm.FuncionarioNOME.AsString);
Inseri_Dias;
Totaliza_Calculo;
Label11.Caption := ´Atualiza BH´;
Atualiza_BH;
MaskEdit1.Enabled := False;
ComboBox1.Enabled := False;
Progresso.Progress := Progresso.Progress+1;
Application.ProcessMessages;
dm.Funcionario.Next;
end;
Label11.Caption := ´Próxima Empresa´;
dm.Empresa.Next;
end;{fim while}[/color:817c1d46d7][/size:817c1d46d7][/size]

PS.: Dentro do procedimento ´Inseri_Dias´ tem mais quatro procedures que são chamadas.


GOSTEI 0
Eneblis

Eneblis

30/04/2003

[quote:da7f86ebaf=´Henry Lima´]Coloque um pedaço do código que vc esta usando para que nós possamos dar uma análisada mais afundo. Também uso MySql e nunca aconteceu comigo, e olha que uso tabelas enormes em rede ainda e nunca deu isso.[/quote:da7f86ebaf]

Que bom que você trabalha com MySQL.
Eu uso um formulário e através de um botão, mando gerar o espelho, usando várias chamadas de 6 procedures.

O código está +/- assim:
[color=red:da7f86ebaf][size=7:da7f86ebaf] while not dm.Empresa.Eof do
begin
Label11.Caption := ´Carregando Funcionários´;
dm.Carrega_Funcionario(dm.EmpresaCODIGO.Value);
Label6.Caption := dm.EmpresaFantasia.AsString;
Progresso.MinValue := 0;
Progresso.MaxValue := dm.Funcionario.RecordCount;
Progresso.Progress := 0;
Application.ProcessMessages;
while not (dm.Funcionario.Eof) do
begin
Application.ProcessMessages;
Carrega_Espelho(dm.FuncionarioEMPRESA.Value, dm.FuncionarioMATRICULA.Value, di, df);
Escreve_Mensagem(´Processando Espelho de...: ´+dm.FuncionarioNOME.AsString);
Inseri_Dias;
Totaliza_Calculo;
Atualiza_BH;
MaskEdit1.Enabled := False;
ComboBox1.Enabled := False;
Progresso.Progress := Progresso.Progress+1;
Application.ProcessMessages;
dm.Funcionario.Next;
end;
dm.Empresa.Next;
end;{fim while}[/size:da7f86ebaf][/color:da7f86ebaf]


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

30/04/2003

Colega,

Eu realmente não consegui perceber algum motivo para o seu problema. Estou postanto apenas para subir o tópico novamente e ver se algum colega tem alguma idéia.
Se você puder adicionar mais detalhes, talvez possamos avançar na solução.


GOSTEI 0
POSTAR