Membros Pro Dangelo2010 Postado 26 Março Membros Pro Compartilhar Postado 26 Março 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 More sharing options...
Consultores Renato Rubinho Postado 26 Março Consultores Compartilhar Postado 26 Março Boa tarde, Tira o Abort e veja se não tem relação com ele. Já está no fim do bloco, não fará diferença para sua rotina. Link para o comentário Compartilhar em outros sites More sharing options...
Moderadores Juliomar Marchetti Postado 26 Março Moderadores Compartilhar Postado 26 Março 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 Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Dangelo2010 Postado 26 Março Autor Membros Pro Compartilhar Postado 26 Março @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 More sharing options...
Moderadores Juliomar Marchetti Postado 26 Março Moderadores Compartilhar Postado 26 Março 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 Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Dangelo2010 Postado 26 Março Autor Membros Pro Compartilhar Postado 26 Março 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 More sharing options...
Consultores Renato Rubinho Postado 26 Março Consultores Compartilhar Postado 26 Março 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 More sharing options...
Membros Pro Dangelo2010 Postado 26 Março Autor Membros Pro Compartilhar Postado 26 Março 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 More sharing options...
Membros Pro Solution Dangelo2010 Postado 27 Março Autor Membros Pro Solution Compartilhar Postado 27 Março Boa noite! Só para comunicar aqui para vocês que deu certo, retirei tudo que tinha como application.onexception e applicationevents e hoje sistema hoje não fechou sozinho mais Muito obrigado @Renato Rubinho, @Juliomar Marchetti 2 Dangelo Porto Link para o comentário Compartilhar em outros sites More sharing options...
Moderadores Juliomar Marchetti Postado 27 Março Moderadores Compartilhar Postado 27 Março Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
Recommended Posts