Ir para conteúdo
  • Cadastre-se

dev botao

Sistema fecha ao bipar produto no leitor de barras


Ver Solução Respondido por Dangelo2010,

Recommended Posts

  • Membros Pro

Boa tarde!

Tenho um problema que não consigo resolver e gostaria de uma ajuda.

Estou usando Delphi 11, Windows 10, conexão FIREBIRD 4.0 com conexão TSQLConnection

Estou fazendo uma consulta simples para trazer um determinado produto ao bipar no leitor de barras, porem, quando o produto não tem cadastro ele mim informa "Produto não localizado". Até ai tudo bem, porem muitas vezes quando recebo essa mensagem o sistema fecha sozinho do nada, sem mensagem de erro ou "Produto não localizado", isso usando Leitor de Barras, e pode ser qualquer modelo que da o mesmo problema e produtos diferentes ate mesmo com maquinas diferentes. Não são todas as vezes mais acontece. Se digitar o código de barras no campo ele da a mensagem sem nenhum problema, somente quando bipa no leitor que as vezes ocorre do sistema fechar. Estou fazendo assim

procedure TFPDV_Z.EBarrasKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Begin

  Case Key Of
  VK_RETURN : Begin

                SQLConsultaProduto.Cancel;
                SQLConsultaProduto.Close;

                CDSConsultaProduto.Close;
                CDSConsultaProduto.Fields.Clear;
                CDSConsultaProduto.FieldDefs.Clear;
                CDSConsultaProduto.Filtered        := False;
                CDSConsultaProduto.IndexFieldNames := EmptyStr;
                CDSConsultaProduto.IndexName       := EmptyStr;
                CDSConsultaProduto.CommandText     := 'SELECT                                ' +

                                                      '  DESCRICAO,                          ' +
                                                      '  COD_PRODUTO,                        ' +
                                                      '  EAN_TRIBUTADO                       ' +

                                                      'FROM PRODUTO                          ' +
                                                      'WHERE COD_EMPRESA   = :sCOD_EMPRESA   ' +
                                                      'AND   EAN_TRIBUTADO = :sEAN_TRIBUTADO ';

                CDSConsultaProduto.ParamByName('sCOD_EMPRESA').AsInteger  := Modulo.EmpCodEmpresa;
                CDSConsultaProduto.ParamByName('sEAN_TRIBUTADO').AsString := EBarras.Text;
                CDSConsultaProduto.Open;

                If CDSConsultaProduto.RecordCount = 0 Then Begin

                  Application.MessageBox('Produto não localizado.', 'A T E N Ç Ã O', MB_OK + MB_ICONWARNING);
                  EBarras.SetFocus;
                  Abort;
                End;
              End;
  End;
 

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Complementando.

verifica se tu não tem tratamento nas exceções da aplicação por exemplo o applicationevents

outra coisa o correto mesmo era ter um raise exception.create('produto não existe')

assim as threads do windows vão parar senão com showmessage e abort pode ocorrer erros não é um tratamento elegante e correto

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

@Renato Rubinho, explica por favor 😅

A função do Abort não vai só parar ou ela pode fazer algo mais?

1 minuto atrás, Juliomar Marchetti disse:

Complementando.

verifica se tu não tem tratamento nas exceções da aplicação por exemplo o applicationevents

outra coisa o correto mesmo era ter um raise exception.create('produto não existe')

assim as threads do windows vão parar senão com showmessage e abort pode ocorrer erros não é um tratamento elegante e correto

Entendi, agora caiu a ficha. Vou mudar isso

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Moderadores
1 minuto atrás, Dangelo2010 disse:

@Renato Rubinho, explica por favor 😅

A função do Abort não vai só parar ou ela pode fazer algo mais?

se tu tem um tratamento no application.onexception para se ocorrer erros ele feche a aplicação sim

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
2 minutos atrás, Juliomar Marchetti disse:

se tu tem um tratamento no application.onexception para se ocorrer erros ele feche a aplicação sim

 

Eu tenho mais não nessa tela

Primeiro teste que faço o sistema já cai

 

procedure TFPDV_Z.EBarrasKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Begin

  Case Key Of
  VK_RETURN : Begin

                SQLConsultaProduto.Cancel;
                SQLConsultaProduto.Close;

                CDSConsultaProduto.Close;
                CDSConsultaProduto.Fields.Clear;
                CDSConsultaProduto.FieldDefs.Clear;
                CDSConsultaProduto.Filtered        := False;
                CDSConsultaProduto.IndexFieldNames := EmptyStr;
                CDSConsultaProduto.IndexName       := EmptyStr;
                CDSConsultaProduto.CommandText     := 'SELECT                                ' +

                                                      '  DESCRICAO,                          ' +
                                                      '  COD_PRODUTO,                        ' +
                                                      '  EAN_TRIBUTADO                       ' +

                                                      'FROM PRODUTO                          ' +
                                                      'WHERE COD_EMPRESA   = :sCOD_EMPRESA   ' +
                                                      'AND   EAN_TRIBUTADO = :sEAN_TRIBUTADO ';

                CDSConsultaProduto.ParamByName('sCOD_EMPRESA').AsInteger  := Modulo.EmpCodEmpresa;
                CDSConsultaProduto.ParamByName('sEAN_TRIBUTADO').AsString := EBarras.Text;
                CDSConsultaProduto.Open;

                Try

                  If CDSConsultaProduto.RecordCount > 0 Then Begin

                    sCodProduto          := CDSConsultaProduto.FieldByName('COD_PRODUTO').AsInteger;
                    ENomeProduto.Caption := CDSConsultaProduto.FieldByName('DESCRICAO').AsString;
                  End Else Begin

                    EBarras.SetFocus;
                    Raise Exception.Create('Produto não localizado.');
                  End;
                Except

                  EBarras.SetFocus;
                  Raise Exception.Create('Produto não localizado.');
                End;
              End;
  End;

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

  • Consultores
14 minutos atrás, Dangelo2010 disse:

explica por favor

Ela é uma exceção controlada, silenciosa, mas é uma exceção.

Como o Juliomar disse, se você captura as exceções em algum lugar, pode ser o seu problema.

Aparentemente no seu caso é apenas um TEdit que recebe o valor da leitora, acredito que não faça diferença.

Teste tirar para ver se é o problema e , de qualquer forma, aparentemente nem precisaria dele.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 minuto atrás, Renato Rubinho disse:

Ela é uma exceção controlada, silenciosa, mas é uma exceção.

Como o Juliomar disse, se você captura as exceções em algum lugar, pode ser o seu problema.

Aparentemente no seu caso é apenas um TEdit que recebe o valor da leitora, acredito que não faça diferença.

Teste tirar para ver se é o problema e , de qualquer forma, aparentemente nem precisaria dele.

Vou retirar então

Se der certo posto aqui

Obrigado!

Dangelo Porto

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.