Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 240 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

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

  • Moderadores
Postado

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_Transparent-02.png
 

 

  • Membros Pro
Postado

@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

  • Moderadores
Postado
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_Transparent-02.png
 

 

  • Membros Pro
Postado
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

  • Consultores
Postado
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.

  • Membros Pro
Postado
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

  • Este tópico foi criado há 240 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
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.