Meu prog esta louco - Está dando a msg Memória insuficiente
Meu programa tem o seguinte código:
frmPresTre := TfrmPresTre.Create(Self);
frmPresTre.qrSimples.Preview;
frmPresTre.qrSimples.Free;
frmPresTre := Nil;
Funciona da seguinte maneira em uma tela o usuário escolhe o aluno que quer imprimi o qrSimples, depois que escolher ele executa esses comandos acima, qdo termina a última linha dos códigos acima ele chama a tela de escolher o aluno novamente e fica nesse loop até o usuário teclar esc na tela.
Até aí tudo bem. O problema é qdo o usr imprime vários relatórios (o programa fica várias vezes neste loop chamando o qrSimples) o programa trava dando a mensagem memória insuficiente.
:cry: :cry: não entendo pq está dando memória insuficiente se estou dando o comando Free :cry: :cry: :cry: :cry:
:cry: Alguém pode me ajudar? :cry:
Obrigada
Debora
frmPresTre := TfrmPresTre.Create(Self);
frmPresTre.qrSimples.Preview;
frmPresTre.qrSimples.Free;
frmPresTre := Nil;
Funciona da seguinte maneira em uma tela o usuário escolhe o aluno que quer imprimi o qrSimples, depois que escolher ele executa esses comandos acima, qdo termina a última linha dos códigos acima ele chama a tela de escolher o aluno novamente e fica nesse loop até o usuário teclar esc na tela.
Até aí tudo bem. O problema é qdo o usr imprime vários relatórios (o programa fica várias vezes neste loop chamando o qrSimples) o programa trava dando a mensagem memória insuficiente.
:cry: :cry: não entendo pq está dando memória insuficiente se estou dando o comando Free :cry: :cry: :cry: :cry:
:cry: Alguém pode me ajudar? :cry:
Obrigada
Debora
Debora
Curtidas 0
Respostas
Vinicius2k
07/10/2003
Debora,
acredito que a melhor forma de liberar um form da memória é com o método Release (form1.Release)... tente mudar seus ´Free´ para ´Release´ talvez resolva o problema...
espero ter ajudado...
acredito que a melhor forma de liberar um form da memória é com o método Release (form1.Release)... tente mudar seus ´Free´ para ´Release´ talvez resolva o problema...
espero ter ajudado...
GOSTEI 0
Macario
07/10/2003
Meu programa tem o seguinte código:
frmPresTre := TfrmPresTre.Create(Self);
frmPresTre.qrSimples.Preview;
frmPresTre.qrSimples.Free;
frmPresTre := Nil;
Veja bem ao chamar o novo form tente usar
frmPresTre := TfrmPresTre.Create(Self);
try
frmPresTre.qrSimples.Preview;
finally
frmPresTre.Free;
e de qualquer maneira vc tem que chamar o metodo close dos forms que vc instancia na memoria
espero que ajude
GOSTEI 0
Beppe
07/10/2003
vc está criando um form mas está liberando um componente contido nele.
Ataliba.
Ataliba.
GOSTEI 0
Debora
07/10/2003
vc está criando um form mas está liberando um componente contido nele.
Ataliba.
O que faço então?
GOSTEI 0
Beppe
07/10/2003
Como o Macario já respondeu. Se ainda der memória insuficiente, seu problema então é levemente mais profundo.
Ou tente isso:
No OnClose do TfrmPresTre:
No OnShow do TfrmPresTre:
Para criá-lo:
TfrmPresTre.Create(Application).ShowModal;
Ataliba.
Ou tente isso:
No OnClose do TfrmPresTre:
Action := caFree;
No OnShow do TfrmPresTre:
qrSimples.Preview;
Para criá-lo:
TfrmPresTre.Create(Application).ShowModal;
Ataliba.
GOSTEI 0
Marcioih
07/10/2003
Debora, só para complementar uma parte!
Se você usar o método Release ao invés de Free como o Vinicius2k disse, você só tira o Formulário da memória, os componentes contidos nele permanecem na memória.
Faça como o Macario falou, não coloque Free no quickreport mas sim no formulário!
frmPresTre := TfrmPresTre.Create(Self);
try
frmPresTre.qrSimples.Preview;
finally
frmPresTre.Free;
Até mais!
Se você usar o método Release ao invés de Free como o Vinicius2k disse, você só tira o Formulário da memória, os componentes contidos nele permanecem na memória.
Faça como o Macario falou, não coloque Free no quickreport mas sim no formulário!
frmPresTre := TfrmPresTre.Create(Self);
try
frmPresTre.qrSimples.Preview;
finally
frmPresTre.Free;
Até mais!
GOSTEI 0
Beppe
07/10/2003
Se você usar o método Release ao invés de Free como o Vinicius2k disse, você só tira o Formulário da memória, os componentes contidos nele permanecem na memória.
Será que ninguém sabe como utilizar Release? Bem, eu nunca vi! :cry:
O Release deve ser usado no caso de você querer liberar o form(e todos os seus subcomponentes) ativo. Ele posta uma mensagem que só executa quando todos os manipuladores de evento deste form tiverem terminada, garantindo assim que nenhum método execute usando dados já liberados(o Free libera instanteneamente).
PS: Quando chamar Release no form principal, chame Application.Terminate em seguida.
Espero que isto clarifique.
Ataliba.
GOSTEI 0
Adilsond
07/10/2003
Tente o seguinte:
frmPresTre := TfrmPresTre.Create(Self);
try
frmPresTre.qrSimples.Preview;
frmPresTre.qrSimples.Free;
frmPresTre.qrSimples.QrPrinter := nil;
finally
FreeAndNil(frmPresTre);
end;
Mas acho que o correto neste seu caso seria voce criar apenas uma vez o seu formulario no início do form que o chamará, executar apenas o preview várias vezes e ao final do form chamador destruir o formulário que contém o relatório.
frmPresTre := TfrmPresTre.Create(Self);
try
frmPresTre.qrSimples.Preview;
frmPresTre.qrSimples.Free;
frmPresTre.qrSimples.QrPrinter := nil;
finally
FreeAndNil(frmPresTre);
end;
Mas acho que o correto neste seu caso seria voce criar apenas uma vez o seu formulario no início do form que o chamará, executar apenas o preview várias vezes e ao final do form chamador destruir o formulário que contém o relatório.
GOSTEI 0
Vinicius2k
07/10/2003
Se você usar o método Release ao invés de Free como o Vinicius2k disse, você só tira o Formulário da memória, os componentes contidos nele permanecem na memória.
algumas palavras sobre Release :
Erro de violação de acesso é ocasionado por ´tentar´ efetuar acesso a um objeto que já foi destruído. Muitas vezes ocorre ao tentar liberar um formulário da memória onde nem todos os processos foram finalizados.
Portanto, sempre utilize o método Release ao invés de free ou destroy para liberar seus formulários.
Acompanhando o raciocínio do colega mmtoor, coloque um fragmento do código pra gente poder entender melhor.
_________________
Atenciosamente,
[]´s
Aroldo Zanela (Moderador)
GOSTEI 0