ErrorSys com erro
Moderador: Moderadores
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
ErrorSys com erro
boa tarde.
Já fiz varias substituições da função errorsys() mas continuo com erro.
Não sei se é erro na função errorsys ou no HARBOUR 3.4
Ocorre alguns erros direto e em lugar que não há a minima possibilidade de falha.
Exemplo ultimo.
Dentro do meu codigo de venda faço varias vezes nao da problema algum, derepende o erro aparece do nada.
.... varias linhas iniciais
.... faço varias aberturas de arquivos e indices, inclusive a linha abaixo abrindo vendedores.
NetUseFile("CDUP0600",{"CDUP0600","CDUP0601","CDUP0602"},.T.,,,,,.T.,,wD_Instal)
.... outras linhas
....
Atualizo uma variavel dentro da NETUSEFILE se não abrir algum, der algum problema, wnetuse se torna falso para nao abrir a tela de venda.
..., foi atualizada e wnetuse é .T.
cheguei aqui e eu erro e detalhe, é sequencial até esta linha, não tem como chegar nela senão passar pela de cima.
If wNetUse=.T.
CDUP0600->(DbGoTop()) //erro desta vez nesta linha 339
mesagem do erro enviado pelo sistema porque a funcao errorsys foi envocada
Descrição..........: Alias does not exist
Linha..............: 339
e não tem como o arquivo não estar aberto o alias existe e da erro.
Se der vai ser uma vez, depois ocorre em outro lugar.
Será algum problema no HARBOUR 3.4 ou algum problema na ERRORSYS.
Já fiz varias substituições da função errorsys() mas continuo com erro.
Não sei se é erro na função errorsys ou no HARBOUR 3.4
Ocorre alguns erros direto e em lugar que não há a minima possibilidade de falha.
Exemplo ultimo.
Dentro do meu codigo de venda faço varias vezes nao da problema algum, derepende o erro aparece do nada.
.... varias linhas iniciais
.... faço varias aberturas de arquivos e indices, inclusive a linha abaixo abrindo vendedores.
NetUseFile("CDUP0600",{"CDUP0600","CDUP0601","CDUP0602"},.T.,,,,,.T.,,wD_Instal)
.... outras linhas
....
Atualizo uma variavel dentro da NETUSEFILE se não abrir algum, der algum problema, wnetuse se torna falso para nao abrir a tela de venda.
..., foi atualizada e wnetuse é .T.
cheguei aqui e eu erro e detalhe, é sequencial até esta linha, não tem como chegar nela senão passar pela de cima.
If wNetUse=.T.
CDUP0600->(DbGoTop()) //erro desta vez nesta linha 339
mesagem do erro enviado pelo sistema porque a funcao errorsys foi envocada
Descrição..........: Alias does not exist
Linha..............: 339
e não tem como o arquivo não estar aberto o alias existe e da erro.
Se der vai ser uma vez, depois ocorre em outro lugar.
Será algum problema no HARBOUR 3.4 ou algum problema na ERRORSYS.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
ErrorSys com erro
Bom dia.
Então pode ser algum cabo, conector ou até mesmo algum hub com defeito e deu alguma pequena perca de pacote.
Vou rever os equipamentos e cabos.
Valeu.
Então pode ser algum cabo, conector ou até mesmo algum hub com defeito e deu alguma pequena perca de pacote.
Vou rever os equipamentos e cabos.
Valeu.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
ErrorSys com erro
Geralmente é rede mesmo como disse o Itamar.
Mas tenho um cliente que acontece erros improváveis, tipo, um arquivo DBF acusando área não aberta quando vc sabe que não tem como não estar devido ao trecho de código, as verificações que são feitas antes, como o colega acima relatou.
Nesse cliente testei a rede pelo ping não cai de jeito nenhum, não dá delay... E o problema ocorre em máquinas alternadas. Detalhe não acontecia isso antes foi de um tempo para cá.
Penso que seja o servidor que bloqueia ou deleta os arquivos, o antivirus ou até mesmo vírus, ou HD judiado ou mesmo o Windows. Neste servidor, não da acesso ao Windows Defender para colocar a pasta na exceção nem para analisar o disco a procura de vírus.
Fica difícil solucionar até por que não quer mudar o servidor de máquina.
Mas tenho um cliente que acontece erros improváveis, tipo, um arquivo DBF acusando área não aberta quando vc sabe que não tem como não estar devido ao trecho de código, as verificações que são feitas antes, como o colega acima relatou.
Nesse cliente testei a rede pelo ping não cai de jeito nenhum, não dá delay... E o problema ocorre em máquinas alternadas. Detalhe não acontecia isso antes foi de um tempo para cá.
Penso que seja o servidor que bloqueia ou deleta os arquivos, o antivirus ou até mesmo vírus, ou HD judiado ou mesmo o Windows. Neste servidor, não da acesso ao Windows Defender para colocar a pasta na exceção nem para analisar o disco a procura de vírus.
Fica difícil solucionar até por que não quer mudar o servidor de máquina.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ErrorSys com erro
Do jeito que mostrou a abertura de arquivos, eu desconfio dela também, independente do resto.
Talvez em rotina de recuperação acescentar também algum tipo de aviso pra você.
Uma situação comum de acontecer isso é deixar máquina parada, ou entrar em suspensão, e outros.
O tempo default de conexões ao servidor é de uns 15 minutos, passou disso o terminal é desconectado, caso não "dê sinal de vida".
Não tem muito o que inventar em abrir arquivos, é tudo igual, exceto na reindexação.
Sempre usei pra DBFs, e ainda uso em um cliente:
Essa rotina chama o individual
E por último a individual abrindo arquivo e índices.
Regra básica de índices: abrir sempre todos os índices na mesma ordem, sendo assim, vai abrir sempre igual no aplicativo inteiro.
CDX mais fácil, vai ser arquivo único com tudo dentro, respeitando o máximo de 50 índices em cada um.
Tenho lá a rotina genérica Encontra( chave, alias, ordem )
Coloquei nela a abertura, caso não esteja aberto, e também acrescentei pra gravar isso como erro.
Eventualmente encontrava algum lugar faltando abrir, mas não gerava erro pro cliente, só pra mim.
Pode ser rede ? pode.... mas se o resto deixar na dúvida, é remover dúvidas.
Abrir tudo no início do aplicativo?
Nunca usei dessa forma, acho muito pior.
Se eu quiser pesquisar fontes que mexem com determinado arquivo, melhor que cada fonte mostre quais são, e não vou perder tempo com outros fontes.
Se abre tudo igual, e testa tudo igual, sabe que o resultado vai ser igual.
Se abre passando parâmetros, como saber se em algum lugar os parâmetros estão diferentes?
Normalmente o apliativo tem diversas bifurcações, e nem sempre passa por todas.
Pode ter mudança de área num deles, ou fechar temporário, ou outra coisa.
No AbreArquivo() tenho algo mais:
Não se trata apenas de abrir, é verificar se já está aberto, talvez fechar antes de reabrir.
De repente está abrindo um aberto, e por isso não abre, mas considera que abriu.
Tudo é possível.
Apenas tenha certeza de que realmente resolveu os possíveis, antes de ir pro fora do normal.
Talvez em rotina de recuperação acescentar também algum tipo de aviso pra você.
Uma situação comum de acontecer isso é deixar máquina parada, ou entrar em suspensão, e outros.
O tempo default de conexões ao servidor é de uns 15 minutos, passou disso o terminal é desconectado, caso não "dê sinal de vida".
Não tem muito o que inventar em abrir arquivos, é tudo igual, exceto na reindexação.
Sempre usei pra DBFs, e ainda uso em um cliente:
Código: Selecionar todos
IF ! AbreArquivos( "clientes", "fornecedores", "banco", "financeiro" )
RETURN
ENDIF
Código: Selecionar todos
lAbriu :+ .T.
FOR EACH cFile IN aList
IF ! AbreUmArquivo( cFIle )
lAbriu := .F.
EXIT
ENDIF
NEXT
IF ! lAbriu
CLOSE DATABASES
ENDIF
RETURN lAbriu
Regra básica de índices: abrir sempre todos os índices na mesma ordem, sendo assim, vai abrir sempre igual no aplicativo inteiro.
CDX mais fácil, vai ser arquivo único com tudo dentro, respeitando o máximo de 50 índices em cada um.
Tenho lá a rotina genérica Encontra( chave, alias, ordem )
Coloquei nela a abertura, caso não esteja aberto, e também acrescentei pra gravar isso como erro.
Eventualmente encontrava algum lugar faltando abrir, mas não gerava erro pro cliente, só pra mim.
Pode ser rede ? pode.... mas se o resto deixar na dúvida, é remover dúvidas.
Abrir tudo no início do aplicativo?
Nunca usei dessa forma, acho muito pior.
Se eu quiser pesquisar fontes que mexem com determinado arquivo, melhor que cada fonte mostre quais são, e não vou perder tempo com outros fontes.
Se abre tudo igual, e testa tudo igual, sabe que o resultado vai ser igual.
Se abre passando parâmetros, como saber se em algum lugar os parâmetros estão diferentes?
Normalmente o apliativo tem diversas bifurcações, e nem sempre passa por todas.
Pode ter mudança de área num deles, ou fechar temporário, ou outra coisa.
No AbreArquivo() tenho algo mais:
Código: Selecionar todos
nSelect := Select( "vaiabrir" )
De repente está abrindo um aberto, e por isso não abre, mas considera que abriu.
Tudo é possível.
Apenas tenha certeza de que realmente resolveu os possíveis, antes de ir pro fora do normal.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ErrorSys com erro
Abre a lista de arquivos
abre um dbf
abre os índices de um dbf
Antigamente eu usava opcionalmente HBNETIO.
Apenas adicionava "NET:" aos nomes de arquivos e índices nessas rotinas, caso fosse HBNETIO.
Parei de usar e removi isso.
Eu apenas estranho quando falam de problema de rede, porque nunca tive isso, mas é possível.
Até numa determnada versão de Windows havia problemas com directory(), porque quiseram otimizar o windows e Microsoft não atualizava a informação. Faz tempo isso.... acho que no começo do W7.
Essa foi a única vez que usei a função interna do harbour pra mexer no windows, pra ver se resolvia.
NUNCA MEXI EM MÁQUINA NENHUMA, é sempre o default.
Se inventar de usar programas que alteram a máquina, tá ferrado, porque nunca mais vai conseguir cancelar as mudanças, e vai ter que reinstalar o Windows pra voltar ao normal.
Código: Selecionar todos
FUNCTION AbreArquivos( ... )
LOCAL nCont, lAbriu := .T., cDbfName, nSelect, acDbfList
acDbfList := hb_AParams()
FOR nCont = 1 TO Len( acDbfList )
cDbfName := Lower( acDbfList[ nCont ] )
nSelect := Select( cDbfName )
SELECT ( nSelect )
IF ! File( cDbfName + ".dbf" )
MsgStop( "Arquivo " + cDbfName + ".dbf não existe!" )
CLOSE DATABASES
lAbriu := .F.
EXIT
ENDIF
USE ( cDbfName )
IF NetErr()
CLOSE DATABASES
MsgStop( "Arquivo " + cDbfName + " não pode ser aberto neste momento!" )
lAbriu := .F.
EXIT
ENDIF
IF ! Used()
CLOSE DATABASES
MsgStop( "Arquivo " + cDbfName + " não pode ser aberto. Pode estar ruim!" )
lAbriu := .F.
EXIT
ENDIF
IF Select( cDbfName ) == 0
CLOSE DATABASES
MsgStop( "Arquivo " + cDbfName + " falha na checagem de Select()" )
lAbriu := .F.
EXIT
ENDIF
IF Upper( Alias() ) != Upper( cDbfName )
CLOSE DATABASES
MsgStop( "Arquivo " + cDbfName + " falha na checagem de Alias()" )
lAbriu := .F.
EXIT
ENDIF
IF ! AbreInd( cDbfName )
lAbriu := .F.
CLOSE DATABASES
EXIT
ENDIF
NEXT
IF lAbriu
GOTO TOP
ENDIF
RETURN lAbriu
Código: Selecionar todos
FUNCTION UseSoDbf( cDbfFile, lExclusivo, lInfinito, lShowMsg )
LOCAL lOk := .T.
hb_Default( @lExclusivo, .F. )
hb_Default( @lInfinito, .F. )
hb_Default( @lShowMsg, .T. )
SELECT ( Select( cDbfFile ) )
DO WHILE .T.
IF lExclusivo
USE ( cDbfFile ) EXCLUSIVE
ELSE
USE ( cDbfFile )
ENDIF
IF NetErr()
USE
IF ! lShowMsg
lOk := .F.
EXIT
ENDIF
IF ! MsgYesNo( cDbfFile + " não disponível ou em uso! Tentar novamente?" )
lOk := .F.
EXIT
ENDIF
ELSEIF ! Used()
IF ! lShowMsg
lOk := .F.
EXIT
ENDIF
IF ! MsgYesNo( cDbfFile + " danificado! Tentar novamente?" )
lOk := .F.
EXIT
ENDIF
ELSE
EXIT
ENDIF
ENDDO
IF lOk .AND. lExclusivo
DeleteOldFiles( cDbfFile + ".cdx", -1 )
ENDIF
RETURN lOk
Código: Selecionar todos
FUNCTION AbreInd( cDbf )
LOCAL oElement, lTxtAguarde, nRecOk, nRecTot, acIndice
MEMVAR xCampo
PRIVATE xCampo
acIndice := IndDbf( cDbf )
IF Len( acIndice ) == 0
RETURN .T.
ENDIF
IF ! File( cDbf + ".cdx" )
//IF ! fLock()
// MsgStop( "Arquivo está em uso! Não pode reindexar!" )
// RETURN .F.
//ENDIF
lTxtAguarde := File( "aguarde.txt" )
IF ! lTxtAguarde
ChecaAguarde( .T., "Reindexação em andamento" )
ENDIF
nRecOk := 0
nRecTot := 1 + ( LastRec() * Len( acIndice ) )
WSave( MaxRow() - 1, 0, MaxRow(), MaxCol() )
Mensagem()
GrafTempo( "Criando " + cDbf + ".cdx" )
FOR EACH oElement IN acIndice
SET INDEX TO // para usar for
GOTO TOP // para usar for
xCampo := oElement[ 2 ]
IF Len( oElement ) == 2
INDEX ON &xCampo TAG ( oElement[ 1 ] ) EVAL GrafInd( nRecOk, nRecTot )
ELSE
INDEX ON &xCampo TAG ( oElement[ 1 ] ) FOR &( oElement[ 3 ] ) EVAL GrafInd( nRecOk, nRecTot )
ENDIF
SET INDEX TO
nRecOk += LastRec()
NEXT
WRestore()
IF ! lTxtAguarde
fErase( "aguarde.txt" )
ENDIF
SET INDEX TO
ENDIF
IF ! dbSetIndex( cDbf + ".CDX" )
RETURN .F.
ENDIF
SET ORDER TO 1
RETURN .T.
Apenas adicionava "NET:" aos nomes de arquivos e índices nessas rotinas, caso fosse HBNETIO.
Parei de usar e removi isso.
Eu apenas estranho quando falam de problema de rede, porque nunca tive isso, mas é possível.
Até numa determnada versão de Windows havia problemas com directory(), porque quiseram otimizar o windows e Microsoft não atualizava a informação. Faz tempo isso.... acho que no começo do W7.
Essa foi a única vez que usei a função interna do harbour pra mexer no windows, pra ver se resolvia.
NUNCA MEXI EM MÁQUINA NENHUMA, é sempre o default.
Se inventar de usar programas que alteram a máquina, tá ferrado, porque nunca mais vai conseguir cancelar as mudanças, e vai ter que reinstalar o Windows pra voltar ao normal.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ErrorSys com erro
Tem esta alteração na minha errorsys.
Foi em 2014, era recomendação, mas depois de 10 anos nem me pergunte sobre isso....
Código: Selecionar todos
// Only retry IF open error 2014.09.24.1810
IF e:OsCode == 64 .AND. e:GenCode == EG_OPEN
//@ 15, 15 SAY "Servidor sumiu. Tentar novamente em 3 segundos"
Inkey(3)
RETURN .T.
ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ErrorSys com erro
Pode ser uma implementação, que no meio de algo muda o SELECT em uso, ou algum abre/fecha adicional.Itamar M. Lins Jr. escreveu:Mas erro de DBGOTO, APPEND, SELECT... ERROS nas FUNÇÕES do HARBOUR DEPOIS DO ARQUIVO DBF ABERTO, como vamos corrigir isso ?
Por exemplo, a implementação pra resolver o problema, abrindo um arquivo não aberto, mas esquecendo de selecionar área nova pra ele, o que acaba fechando algum outro.
Ele comentou de ter feito isso pra contornar o problema, então, de um jeito ou de outro, o aplicativo contém alterações.
No meu aplicativo, por exemplo, eu tenho tabela especial pra determinados produtos.
Só vai entrar nessa rotina se for algum daqueles produtos.
Um erro nela seria eventual, só com os produtos relacionados a essa tabela, e o dbf dessa tabela é usado só nessa situação.
Por isso uso
Código: Selecionar todos
SELECT ( Select( cDbfFile ) )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
ErrorSys com erro
Boa tarde a todos.
Fiquei sem responder devido a fazer teste em uma empresa.
Removi a função ERRORSYS e acabou o problema, nenhum erro mais em dias.
Chego a conclusão que é a função que faz ocorrer o erro.
o teste foi feito em produção, todos usando, nenhuma vez ocorreu erro enviando email (claro pq tirei), mas não ocorreu nem a tela de DOSERROR.
Tenho que modificar a ERRORSYS para ver aonde ocorre a falha.
Grato a todos.
Fiquei sem responder devido a fazer teste em uma empresa.
Removi a função ERRORSYS e acabou o problema, nenhum erro mais em dias.
Chego a conclusão que é a função que faz ocorrer o erro.
o teste foi feito em produção, todos usando, nenhuma vez ocorreu erro enviando email (claro pq tirei), mas não ocorreu nem a tela de DOSERROR.
Tenho que modificar a ERRORSYS para ver aonde ocorre a falha.
Grato a todos.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ErrorSys com erro
Errorsys é pra mostrar erro, não é pra resolver erro através dela.
Eu até envio erro por email, mas não é pela errorsys.
Ela apenas grava o erro, e abre o bloco de notas na tela.
E sim, o erro fica lá aberto na tela, pra todo mundo ver.
O que faço é salvar em HB_OUT.LOG, o arquivo default do harbour.
Ao entrar no aplicativo, se existe conteúdo, se tem internet, envia o email.
Eu até envio erro por email, mas não é pela errorsys.
Ela apenas grava o erro, e abre o bloco de notas na tela.
E sim, o erro fica lá aberto na tela, pra todo mundo ver.
O que faço é salvar em HB_OUT.LOG, o arquivo default do harbour.
Ao entrar no aplicativo, se existe conteúdo, se tem internet, envia o email.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
ErrorSys com erro
Boa noite, creio que me expressei mal.
Sei que a errosys não conserta erro, verdade.
O problema está quando ela é acionada, ocorre em momentos e linha de código que já revisei a tempos não há como ocorrer erro aonde ela apontou, então fui radical e tirei a função até da compilação porque tenho ela em um fonte separado errosys.prg, feito isto o sistema parou de ocorrer erro, ou seja, nem a tela de doserror.
Então suponho que deve haver um probleminha no código que adaptei, até eu revisar, ficarei sem receber mensagens de algum erro verdadeiro.
Sei que a errosys não conserta erro, verdade.
O problema está quando ela é acionada, ocorre em momentos e linha de código que já revisei a tempos não há como ocorrer erro aonde ela apontou, então fui radical e tirei a função até da compilação porque tenho ela em um fonte separado errosys.prg, feito isto o sistema parou de ocorrer erro, ou seja, nem a tela de doserror.
Então suponho que deve haver um probleminha no código que adaptei, até eu revisar, ficarei sem receber mensagens de algum erro verdadeiro.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ErrorSys com erro
Veja se ajuda.
Basicamente salva em disco, mas permite chamar a gravação pra outras coisas.
É interessante a parte de mostrar conteúdo de variáveis, apenas tome cuidado pra não expor senhas.
Uma coisa interessante que uso em FLAGSHIP
A minha entra, e a do flagship continua.
Certos erros, só com as duas juntas.
Com certeza não é a mesma deste post, ainda mais que flagship é linux
Código: Selecionar todos
/*
ERRORSYS *
...
2014.04.04.1355 - Nome do usuário JPA
2014.07.06.2130 - Ajuste ref. dos error 64 pra tentar contornar
2014.07.22.2130 - Ajuste ref. dos error 64 situações específicas
2014.08.08.1026 - Não tenta novamente em erro gravação
2014.09.24.1825 - Tenta somente se for erro 64 ref servidor
2014.10.28.0910 - Ajuste no texto
2016.06.30.1120 - Formatação do fonte
*/
#include "fileio.ch"
#include "error.ch"
#include "hbgtinfo.ch"
#include "hbmemory.ch"
#ifndef WIN_SW_SHOWNORMAL
#define WIN_SW_SHOWNORMAL 1 // Harbour 3.4
#define WIN_SW_SHOWMINNOACTIVE 7 // Harbour 3.4
#endif
// put messages to STDERR
#command ? <list,...> => ?? hb_Eol() ; ?? <list>
#command ?? <list,...> => OutErr(<list>)
* Note: automatically executes at startup
PROCEDURE ERRORSYS
ErrorBlock( { | e | JoseQuintasError( e ) } )
RETURN
STATIC FUNCTION JoseQuintasError( e )
LOCAL nCont, cMessage
// by default, division by zero yields zero
IF ( e:GenCode == EG_ZERODIV )
RETURN 0
ENDIF
// build error message
cMessage := ErrorMessage(e)
hb_Default( @cMessage )
IF ! Empty( e:OsCode )
cMessage += ";(DOS Error " + Ltrim( Str( e:OsCode ) ) + ")"
ENDIF
IF cMessage == NIL
cMessage := ""
ENDIF
// Only retry IF open error 2014.09.24.1810
IF e:OsCode == 64 .AND. e:GenCode == EG_OPEN
//@ 15, 15 SAY "Servidor sumiu. Tentar novamente em 2 segundos"
Inkey(5)
RETURN .T.
ENDIF
// For network open error, set NetErr() and subsystem default
IF ( e:GenCode == EG_OPEN .AND. e:OsCode == 32 .AND. e:CanDefault )
NetErr( .T. )
RETURN ( .F. ) // NOTE
ENDIF
// for lock error during APPEND BLANK, set NetErr() and subsystem default
IF ( e:GenCode == EG_APPENDLOCK .AND. e:CanDefault )
NetErr( .T. )
RETURN ( .F. ) // NOTE
ENDIF
Errorsys_WriteErrorLog( "SYSTEM ERROR", 1 ) // com id maquina
@ MaxRow(), 0 SAY ""
? cMessage
Errorsys_WriteErrorLog( cMessage )
nCont := 2
DO WHILE ( ! Empty( ProcName( nCont ) ) )
cMessage := "Called from " + Trim( ProcName( nCont ) ) + "(" + Ltrim( Str( ProcLine( nCont ) ) ) + ")"
? cMessage
Errorsys_WriteErrorLog( cMessage )
nCont++
ENDDO
Errorsys_WriteErrorLog( ArgumentList( e ) )
Errorsys_WriteErrorLog( Replicate( "-", 80 ) )
ShellExecuteOpen( "notepad.exe", hb_Cwd() + "hb_out.log" )
// give up
ErrorLevel( 1 )
QUIT
RETURN .F.
STATIC FUNCTION ErrorMessage( e )
LOCAL cMessage := ""
// start error message
BEGIN SEQUENCE WITH __BreakBlock()
cMessage := if( e:Severity > ES_WARNING, "Error ", "Warning " )
ENDSEQUENCE
// add subsystem name IF available
IF ( ValType( e:SubSystem ) == "C" )
cMessage += e:SubSystem
ELSE
cMessage += "???"
ENDIF
// add subsystem's error code IF available
IF ( ValType( e:SubCode ) == "N" )
cMessage += ( "/" + Ltrim(Str( e:SubCode ) ) )
ELSE
cMessage += "/???"
ENDIF
// add error description IF available
IF ( ValType( e:Description ) == "C" )
cMessage += ( " " + e:Description )
ENDIF
// add either filename or operation
IF ! Empty( e:Filename )
cMessage += (": " + e:Filename )
ELSEIF ! Empty( e:Operation )
cMessage += ( ": " + e:Operation )
ENDIF
RETURN cMessage
FUNCTION Errorsys_WriteErrorLog( cText, nDetail )
LOCAL hFileOutput, cFileName, nCont, nCont2
hb_Default( @cText, "" )
hb_Default( @nDetail, 0 )
IF nDetail > 0
Errorsys_WriteErrorLog()
Errorsys_WriteErrorLog( "Error on " + Dtoc( Date() ) + " " + Time() )
Errorsys_WriteErrorLog( "EXE Name; " + hb_Argv(0) )
// Errorsys_WriteErrorLog( "JPA: " + AppVersaoExe() )
Errorsys_WriteErrorLog( "Memory:" + Ltrim( Str( Memory(0) / 1024 / 1024, 5, 2 ) ) + " GB" )
Errorsys_WriteErrorLog( "Mem.VM:" + Ltrim( Str( Memory( HB_MEM_VM ) / 1024 / 1024, 5, 2 ) ) + " GB" )
// Errorsys_WriteErrorLog( "Login JPA: " + AppUserName() )
Errorsys_WriteErrorLog( "Alias: " + Alias() )
Errorsys_WriteErrorLog( "Folder: " + hb_cwd() )
Errorsys_WriteErrorLog( "Windows: " + OS() )
Errorsys_WriteErrorLog( "Computer Name: " + GetEnv( "COMPUTERNAME" ) )
Errorsys_WriteErrorLog( "Windows User: " + GetEnv( "USERNAME" ) )
Errorsys_WriteErrorLog( "Logon Server: " + Substr( GetEnv( "LOGONSERVER" ), 2 ) )
Errorsys_WriteErrorLog( "User Domain: " + GetEnv( "USERDOMAIN" ) )
Errorsys_WriteErrorLog( "Harbour: " + Version() )
Errorsys_WriteErrorLog( "Compiler: " + HB_Compiler() )
Errorsys_WriteErrorLog( "GT: " + hb_GtInfo( HB_GTI_VERSION ) )
Errorsys_WriteErrorLog()
Errorsys_WriteErrorLog()
ENDIF
cFileName := "hb_out.log"
IF ! File( cFileName )
hFileOutput := fCreate( cFileName, FC_NORMAL )
fClose( hFileOutput )
ENDIF
hFileOutput := fOpen( cFileName, FO_READWRITE )
fSeek( hFileOutput, 0, FS_END )
fWrite( hFileOutput, cText + Space(2) + hb_Eol() )
IF nDetail > 1
nCont := 1
nCont2 := 0
DO WHILE nCont2 < 5
IF Empty( ProcName( nCont ) )
nCont2++
ELSE
cText := "Called from " + Trim( ProcName( nCont ) ) + "(" + Ltrim( Str( ProcLine( nCont ) ) ) + ")"
fWrite( hFileOutput, cText + hb_Eol() )
ENDIF
nCont++
ENDDO
fWrite( hFileOutput, hb_Eol() )
ENDIF
fClose( hFileOutput )
RETURN NIL
STATIC FUNCTION ArgumentList( e )
LOCAL xArg, cArguments := ""
IF ValType( e:Args ) == "A"
FOR EACH xArg IN e:Args
cArguments += [(] + Ltrim( Str( xArg:__EnumIndex() ) ) + [) = Tipo: ] + ValType( xArg )
IF xArg != NIL
cArguments += [ Valor: ] + Alltrim( hb_ValToExp( xArg ) )
ENDIF
cArguments += hb_Eol()
NEXT
ENDIF
RETURN cArguments
STATIC FUNCTION ShellExecuteOpen( cFileName, cParameters, cPath, nShow )
wapi_ShellExecute( Nil, "open", cFileName, cParameters, cPath, hb_DefaultValue( nShow, WIN_SW_SHOWNORMAL ) )
RETURN Nil
É interessante a parte de mostrar conteúdo de variáveis, apenas tome cuidado pra não expor senhas.
Uma coisa interessante que uso em FLAGSHIP
Código: Selecionar todos
#ifdef FlagShip
OldHandler := ErrorBlock()
ErrorBlock( { | e | JoseQuintasError( e ), iif( OldHandler == Nil, Nil, Eval( OldHandler, e ) ) } )
#endif
Certos erros, só com as duas juntas.
Com certeza não é a mesma deste post, ainda mais que flagship é linux
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
ErrorSys com erro
Boa tarde.
Vou dar uma estudada na sua versão da errorsys e ver o que pode estar havendo.
Valeu
Vou dar uma estudada na sua versão da errorsys e ver o que pode estar havendo.
Valeu
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
