Ir para conteúdo
Fórum Script Brasil
  • 0

Insuficiencia De Memoria


Guest Amarildo

Pergunta

Ola pessoal, tenho um aplicativo, onde o usuario passa o coletor de dados para ler o codigo de barras, quando ocorre varias leituras começa aparecer esta mensagem de insuficiencia de memoria e trava meu aplicativo, alguém saberia me orientar o que devo fazer para que não ocorra mais esse problema. Estou usando paradox como base de dados, mais para pesquisar estou usando query. No aguardo por uma ajuda, obrg a todos

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

opa

bom primeiro tem que ver a máquina, qual a

configuração dela? memoria ram, etc...

Segundo tem que ver como está sendo feita

a leitura, será que você não está esquecendo

de liberar algo da memória, tipo um ponteiro

que recebe os dados mais permanece na memória

sem ser liberado?

abs

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Ola Churc , como que faço para liberar a memoria neste caso, estou usando o try para criar a aplicação para fazer a pesquisa, teria alguma orientação para que eu pudesse verificar onde possa estar errado na aplicação, no aguardo, obrg pela atenção

Link para o comentário
Compartilhar em outros sites

  • 0

opa

vai depender de como isso é feito...

teria como você colar a parte do seu código

que é feita a leitura?

E sobre a configuração do computador?

Memória ram baixa demais não poderia ser?

Outra coisa, quando exatamente acontece o

erro, quando faz a leitura, ou quando é inserido

o código no banco de dados?

abs

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Obrg, Churc, encontra-se em anexo o layout da pesquisa na qual estou processando:

procedure TFORMFILTROETIQUETA_SINTONIA.MaskEditCODIGOEANExit(

Sender: TObject);

var vOrdem,vSelect, VSelect1,DATAINICIAL, DATAFINAL : String;

dw:integer;

begin

W_CODIGOEAN := ' ';

IF (FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOEAN.TEXT = '') THEN

BEGIN

MASKEDITCODIGOREFERENCIA.SETFOCUS;

EXIT;

END

ELSE

BEGIN

W_CODIGOEAN := ' ';

W_CODIGOEAN := MASKEDITCODIGOEAN.TEXT;

QUERY1.ACTIVE := TRUE;

QUERY1.Close;

QUERY1.OPEN;

VORDEM := 'ES_CODIGOEANBARRA';

With Query1 do

begin

vOrdem := 'ES_CODIGOEANBARRA';

VSELECT1 := 'SELECT * FROM ESTOQUE '+

'WHERE '+

'(ESTOQUE.ES_CODIGOEANBARRA=:EAN) ';

QUERY1.Close;

QUERY1.SQL.clear;

QUERY1.SQL.Add(vSelect1);

Query1.Params[0].AsSTRING := FORMFILTROETIQUETA_SINTONIA.W_CODIGOEAN;

QUERY1.Open;

FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN;

FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOREFERENCIA.SetFocus;

END;

END;

IF (QUERY1ES_CODIGOEANBARRA.TEXT = W_CODIGOEAN) THEN

BEGIN

FORMMENU.W_OPERACAO := 'FORMFILTROETIQUETA_SINTONIA';

MASKEDITCODIGOREFERENCIA.SetFocus;

Modulo.TEstoque.Cancel;

FormPesquisaESTOQUEX := TFormPesquisaESTOQUEX.CREATE(APPLICATION);

FORMPESQUISAESTOQUEX.QUERY1.ACTIVE := TRUE;

FORMPESQUISAESTOQUEX.QUERY1.Close;

FORMPESQUISAESTOQUEX.QUERY1.OPEN;

REFRESH;

OPERACAO := '4';

VORDEM := 'ES_CODIGOEANBARRA';

FORMPESQUISAESTOQUEX.COMBOBOXORDEM.TEXT := 'POR CODIGO EAN';

FORMPESQUISAESTOQUEX.EDITPESQUISA.TEXT := FORMFILTROETIQUETA_SINTONIA.W_CODIGOEAN;

IF FORMPESQUISAESTOQUEX.COMBOBOXORDEM.TEXT = 'POR CODIGO EAN' THEN

BEGIN

OPERACAO := '4';

VORDEM := 'ES_CODIGOEANBARRA';

With FORMPESQUISAESTOQUEX.Query1 do

begin

vOrdem := 'ES_CODIGOEANBARRA';

VSELECT1 := 'SELECT * FROM ESTOQUE '+

'WHERE '+

'(ESTOQUE.ES_CODIGOEANBARRA=:EAN) ';

FORMPESQUISAESTOQUEX.QUERY1.Close;

FORMPESQUISAESTOQUEX.QUERY1.SQL.clear;

FORMPESQUISAESTOQUEX.QUERY1.SQL.Add(vSelect1);

FORMPESQUISAESTOQUEX.Query1.Params[0].AsSTRING := FORMFILTROETIQUETA_SINTONIA.W_CODIGOEAN;

FORMPESQUISAESTOQUEX.QUERY1.Open;

FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN;

FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOREFERENCIA.SetFocus;

//--- NESTE PARAMETRO IRA ABRIR O FORM DA PESQUISA NO ESTOQUE PARA VISUALIZAR OS

//--- PRODUTOS COM O CODIGO DA PESQUISA SOLICITADO

Application.CreateForm(TFormPesquisaESTOQUEX,FormPesquisaESTOQUEX);

FormPesquisaESTOQUEX.ShowModal;

FormPesquisaESTOQUEX.RELEASE;

FormPesquisaESTOQUEX := NIL;

FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN;

FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOREFERENCIA.SetFocus;

END;

END;

END;

end;

Link para o comentário
Compartilhar em outros sites

  • 0
Por gentileza teria alguém que poderia me auxiliar, obrg
Visitante, quando vejo um código deste tamanho, sem identação e ainda em letras garrafais, dá até uma preguiça de olhar. Para tentar ajudar é necessário copiar o código e identar para conseguir ver a estrutura lógica que você está utilizando. Por favor, tente lembrar de utilizar, no editor da mensagem, o botãozinho com o "#". É bem fácil: cola seu código, depois marca ele e clica no botãozinho com o "#" - falou?!

Pontos a verificar:

1) o tal FormPesquisaESTOQUEX foi removido do auto-create no projeto? Se não foi, remova-o;

2) troque a parte do código:

        Application.CreateForm(TFormPesquisaESTOQUEX,FormPesquisaESTOQUEX);
        FormPesquisaESTOQUEX.ShowModal;
        FormPesquisaESTOQUEX.RELEASE;
        FormPesquisaESTOQUEX := NIL;
por:
        FormPesquisaESTOQUEX := TFormPesquisaESTOQUEX.Create(Self);
        try
          FormPesquisaESTOQUEX.ShowModal;
        finally
          FormPesquisaESTOQUEX.Free;
          FormPesquisaESTOQUEX := NIL;
        end;
digamos que é o procedimento padrão para criar e destruir, dinamicamente, um form apresentado com o método ShowModal (com show não é assim) Agora a origem do problema (vou utilizar o seu código bagunçado para poder identificá-lo): "... IF (QUERY1ES_CODIGOEANBARRA.TEXT = W_CODIGOEAN) THEN BEGIN FORMMENU.W_OPERACAO := 'FORMFILTROETIQUETA_SINTONIA'; MASKEDITCODIGOREFERENCIA.SetFocus; Modulo.TEstoque.Cancel; FormPesquisaESTOQUEX := TFormPesquisaESTOQUEX.CREATE(APPLICATION); FORMPESQUISAESTOQUEX.QUERY1.ACTIVE := TRUE; FORMPESQUISAESTOQUEX.QUERY1.Close; FORMPESQUISAESTOQUEX.QUERY1.OPEN; REFRESH; OPERACAO := '4'; VORDEM := 'ES_CODIGOEANBARRA'; FORMPESQUISAESTOQUEX.COMBOBOXORDEM.TEXT := 'POR CODIGO EAN'; FORMPESQUISAESTOQUEX.EDITPESQUISA.TEXT := FORMFILTROETIQUETA_SINTONIA.W_CODIGOEAN; IF FORMPESQUISAESTOQUEX.COMBOBOXORDEM.TEXT = 'POR CODIGO EAN' THEN BEGIN OPERACAO := '4'; VORDEM := 'ES_CODIGOEANBARRA'; With FORMPESQUISAESTOQUEX.Query1 do begin vOrdem := 'ES_CODIGOEANBARRA'; VSELECT1 := 'SELECT * FROM ESTOQUE '+ 'WHERE '+ '(ESTOQUE.ES_CODIGOEANBARRA=:EAN) '; FORMPESQUISAESTOQUEX.QUERY1.Close; FORMPESQUISAESTOQUEX.QUERY1.SQL.clear; FORMPESQUISAESTOQUEX.QUERY1.SQL.Add(vSelect1); FORMPESQUISAESTOQUEX.Query1.Params[0].AsSTRING := FORMFILTROETIQUETA_SINTONIA.W_CODIGOEAN; FORMPESQUISAESTOQUEX.QUERY1.Open; FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN; FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOREFERENCIA.SetFocus; //--- NESTE PARAMETRO IRA ABRIR O FORM DA PESQUISA NO ESTOQUE PARA VISUALIZAR OS //--- PRODUTOS COM O CODIGO DA PESQUISA SOLICITADO Application.CreateForm(TFormPesquisaESTOQUEX,FormPesquisaESTOQUEX); FormPesquisaESTOQUEX.ShowModal; ..." Percebeu, você está criando o form duas vezes, mas só elimina ele na segunda. Na verdade, a segunda vez só ocorre se passar pelo "IF FORMPESQUISAESTOQUEX.COMBOBOXORDEM.TEXT = 'POR CODIGO EAN' THEN". Mas isso só dá para perceber com o texto identado!!! você vai ter que melhorar sua lógica para resolver este problema. dica: quando você está se referindo a componentes localizados no form em que você está processando, não é necessário referenciar a que form ele pertence. Por ex., se você está tratando a procedure TFORMFILTROETIQUETA_SINTONIA.MaskEditCODIGOEANExit, entende-se que você está codificando no form TFORMFILTROETIQUETA_SINTONIA, deste modo, você poderia economizar digitação em casos como estes:
FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN;
FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOREFERENCIA.SetFocus;
ficariam:
MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN;
MASKEDITCODIGOREFERENCIA.SetFocus;

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...