Jump to content
Fivewin Brasil

Bloquear o Error Dos 64 no Errsysw.prg


kapiaba

Recommended Posts

Na funcao ERRSYSW.PRG voce pode fazer a sua intervenção pelas propriedades do objeto de erro, assim:

if (oError:GenCode == 64)

// AQUI VOCE COLOCA SEU CODIGO PARA ABRIR O LINK

oError:canRetry := .T.
ErrorSys()
return .T.

EndIf

Eu faço uma intervenção semelhante no ERRSYSW.PRG quando da ALIAS não existe eu mando abrir a tabela.

abraços

Link to comment
Share on other sites

Esse FOR está sem sentido algum ai no seu fonte... rs...

Quanto ao range dos codigos de erro é de acordo com sua necessidade... Mas acredito que esteja correto (tirando o FOR)

Fiz assim Eduardo, o que voce acha?
      FOR i := 1 to 88
 
         IF ( e:genCode ) > 1 .AND. ( e:genCode ) <= 88
 
            ? [ENTROU NO ERRO DE REDE... ]
 
            QUIT
 
         ENDIF
 
      NEXT

Baseado nesta numeração:

http://fivewin.com.br/index.php?/topic/19563-erro-do-dos-64-dbfcdx1010/

Obg. abs.

Link to comment
Share on other sites

Um ERRSYSW.PRG assim, seria ideal...




/***
* Errorsys.prg
* Standard Clipper 5.0 error handler
* Copyright (c) 1990 Nantucket Corp. All rights reserved.
*
* Compile: /m/n/w
*/

#include "error.ch"

// put messages to STDERR
#command ? <list,...> => ?? Chr(13) + Chr(10) ; ?? <list>
#command ?? <list,...> => OutErr(<list>)

// used below
#define NTRIM(n) ( LTrim(Str(n)) )

/***
* ErrorSys()
*
* Note: automatically executes at startup
*/

proc ErrorSys()
Private ErrorSys
ErrorSys := 9876543210
ErrorBlock( {|e| DefError(e)} )
return .t.

/***
* DefError()
*/
static func DefError(e)
local i, cMessage, aOptions, nChoice, nCreate := 0

// by default, division by zero yields zero
if ( e:genCode == EG_ZERODIV )
return (0)
end

// neste caso retorna sempre sem erro
if ( e:osCode = 5 )
return (0)
end
if ( e:osCode >= 50 .and. e:osCode <= 55 )
return (0)
end

// 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
end

// for lock error during APPEND BLANK, set NETERR() and subsystem default
if ( e:genCode == EG_APPENDLOCK .and. e:canDefault )
NetErr(.t.)
return (.f.) // NOTE
end

// build error message
cMessage := ErrorMessage(e)

// build options array
// aOptions := {"Parar", "Sair"}
aOptions := {"Sair"}

if (e:canRetry)
AAdd(aOptions, "Denovo") // return (.t.)
end

if (e:canDefault)
return (.f.) // AAdd(aOptions, "Padr„o")
end

// Dispositivo nao existente na rede
if e:osCode = 5
return (.t.)
end
if (e:osCode >= 50 .and. e:osCode <= 55)
return (.t.)
end

// put up alert box
nChoice := 0
while ( nChoice == 0 )
if ( Empty(e:osCode) )
nChoice := Alert( cMessage, aOptions )
else
nChoice := Alert( cMessage + ;
DOSErro(e:osCode) , ;
aOptions )
endif
if ( nChoice == NIL )
exit
endif
end

//if '1003' $ cMessage .or. 'Variavel nao encontrada' $ cMessage
// if Alert ( '!!! ATENCAO !!!;;' + ;
// 'Um campo esta faltando na estrutura de uma tabela. Escolha a op‡„o necessaria para que o mesmo seja criado ou abandone e contacte o suporte.;'+ ;
// 'Favor verificar antes de continuar!', {"Continua","Abandona"} ) = 1
// close databases
// CriArq('U')
// endif
//endif

if ( !Empty(nChoice) )
// do as instructed
if ( aOptions[nChoice] == "Parar" )
Close DataBases
Break(e)
elseif ( aOptions[nChoice] == "Denovo" )
return (.t.)
elseif ( aOptions[nChoice] == "Padr„o" )
return (.f.)
end
end

// display message and traceback
if ( !Empty(e:osCode) )
cMessage += DOSErro( e:osCode )
end

i := 2
do while ( !Empty(ProcName(i)) )
if procline(i) > 0
LogSystem( Trim(ProcName(i)), cMessage, NTRIM(ProcLine(i)) )
exit
endif
i++
end
ErrorLevel(1)
quit

return (.f.)

/***
* ErrorMessage()
*/
static func ErrorMessage(e)
local cMessage
// start error message
cMessage := if( e:severity > ES_WARNING, "Erro ", "Cuidado " )
// add subsystem name if available
if ( ValType(e:subsystem) == "C" )
cMessage += e:subsystem()
else
cMessage += "???"
end
// add subsystem's error code if available
if ( ValType(e:subCode) == "N" )
cMessage += ("/" + NTRIM(e:subCode))
else
cMessage += "/???"
end
// add error description if available
if ( ValType(e:description) == "C" )
errdesc := alltrim( e:description )
if errdesc = 'Bound error' ; retry = .f. ; errdesc := 'Ultrapassou tamanho do vetor'
elseif errdesc = 'Variable does not exist' ; retry = .f. ; errdesc := 'Variavel nao encontrada'
elseif errdesc = 'Argument error' ; retry = .f. ; errdesc := 'Erro no argumento'
elseif errdesc = 'Corruption detected' ; retry = .f. ; errdesc := 'Arquivo corrompido'
elseif errdesc = 'Alias does not exist' ; retry = .f. ; errdesc := 'Arquivo nao esta em uso'
elseif errdesc = 'Open error' ; retry = .f. ; errdesc := 'Erro de abertura do arquivo'
elseif errdesc = 'Print error' ; retry = .t. ; errdesc := 'Impressora desligada ou desconectada'
elseif errdesc = 'Workarea not in use' ; retry = .t. ; errdesc := 'Area de trabalho nao aberta'
elseif errdesc = 'Workarea not indexed' ; retry = .t. ; errdesc := 'Area de trabalho sem indice('+dbf()+')'
elseif errdesc = 'Limit exceeded' ; retry = .t. ; errdesc := 'Limite ultrapassado'
elseif errdesc = 'No exported variable' ; retry = .t. ; errdesc := 'Variavel n„o exportvel'
elseif errdesc = 'No exported method' ; retry = .t. ; errdesc := 'M‚todo n„o exportvel'
elseif errdesc = 'Data type error' ; retry = .t. ; errdesc := 'Tipo de dado impr¢prio'
elseif errdesc = 'Lock required' ; retry = .t. ; errdesc := 'Travamento solicitado'
elseif errdesc = 'Exclusive required' ; retry = .t. ; errdesc := 'Exclusividade solicitada'
elseif errdesc = 'Unrecoverable error' ; retry = .t. ; errdesc := 'Erro inrecupervel'
elseif errdesc = 'Conventional memory exhausted'; retry = .t. ; errdesc := 'Sem mem¢ria Convencional'
elseif errdesc = 'field numeric overflow' ; retry = .f. ; errdesc := 'ultrapassado limite do campo num‚rico.'
elseif errdesc = 'expression error' ; retry = .f. ; errdesc := 'erro de express„o.'
elseif errdesc = 'type mismatch' ; retry = .f. ; errdesc := 'erro de tipo.'
elseif errdesc = 'zero divide' ; retry = .f. ; errdesc := 'imposs¡vel divis„o por zero.'
elseif errdesc = 'run error' ; retry = .t. ; errdesc := 'erro de execu‡„o de programa externo.'
elseif errdesc = 'undefined identifier' ; retry = .f. ; errdesc := 'identificador n„o foi definido pr‚viamente.'
elseif errdesc = 'not an array' ; retry = .f. ; errdesc := 'n„o ‚ um array.'
elseif errdesc = 'missing EXTERNAL' ; retry = .f. ; errdesc := 'procedimento externo n„o foi encontrado.'
endif
cMessage += (" " + errdesc ) // e:description)
end
// add either filename or operation
if ( !Empty(e:filename) )
cMessage += (": " + e:filename)
elseif ( !Empty(e:operation) )
cMessage += (": " + e:operation)
end
return (cMessage)

FUNCTION DOSErro( qual )
private FALHA[ 89 ]
if qual = 0 .or. qual > 89
qual = 89
endif
FALHA[ 1 ] = "Numero de funcao invalida"
FALHA[ 2 ] = "ARQUIVO nao encontrado"
FALHA[ 3 ] = "Path nao encontrado"
FALHA[ 4 ] = "Muitos ARQUIVOs abertos"
FALHA[ 5 ] = "Acesso negado"
FALHA[ 6 ] = "HANDLE invalido"
FALHA[ 7 ] = "Bloco de controle de memoria destruido"
FALHA[ 8 ] = "Memoria insuficiente"
FALHA[ 9 ] = "Endereco de bloco de memoria invalido"
FALHA[ 10 ] = "Dispositivo invalido"
FALHA[ 11 ] = "Formatacao invalida"
FALHA[ 12 ] = "Codigo de acesso invalido"
FALHA[ 13 ] = "Dados invalidos"
FALHA[ 14 ] = "Reservado"
FALHA[ 15 ] = "Acionador de disco invalido"
FALHA[ 16 ] = "Tentou remover do diretorio corrente"
FALHA[ 17 ] = "Dispositivo nao e o mesmo"
FALHA[ 18 ] = "Nao ha mais ARQUIVO"
FALHA[ 19 ] = "Disco protegido contra gravacao"
FALHA[ 20 ] = "Unidade de disco desconhecida"
FALHA[ 21 ] = "Impossivel leitura de disco"
FALHA[ 22 ] = "Comando desconhecido"
FALHA[ 23 ] = "Informacao errada"
FALHA[ 24 ] = "Comprimento da estrutura esta ruim"
FALHA[ 25 ] = "Erro na pesquisa"
FALHA[ 26 ] = "Unidade de armazenagem desconhecida"
FALHA[ 27 ] = "Setor nao encontrado"
FALHA[ 28 ] = "Papel de saida da impressora"
FALHA[ 29 ] = "Gravacao invalida"
FALHA[ 30 ] = "Leitura invalida"
FALHA[ 31 ] = "Falha geral"
FALHA[ 32 ] = "Violacao de divisao"
FALHA[ 33 ] = "Violacao de bloqueio"
FALHA[ 34 ] = "Mudanca de disco invalida"
FALHA[ 35 ] = "Ineficaz FCB"
FALHA[ 36 ] = "Reservado"
FALHA[ 37 ] = "Reservado"
FALHA[ 38 ] = "Reservado"
FALHA[ 39 ] = "Reservado"
FALHA[ 40 ] = "Reservado"
FALHA[ 41 ] = "Reservado"
FALHA[ 42 ] = "Reservado"
FALHA[ 43 ] = "Reservado"
FALHA[ 44 ] = "Reservado"
FALHA[ 45 ] = "Reservado"
FALHA[ 46 ] = "Reservado"
FALHA[ 47 ] = "Reservado"
FALHA[ 48 ] = "Reservado"
FALHA[ 49 ] = "Reservado"
FALHA[ 50 ] = "Nao suporta rede requerida"
FALHA[ 51 ] = "Nao suporta pedido da rede"
FALHA[ 52 ] = "Nome da rede duplicado"
FALHA[ 53 ] = "Nome da rede nao encontrado"
FALHA[ 54 ] = "Rede ativa"
FALHA[ 55 ] = "Dispositivo nao existente na rede"
FALHA[ 56 ] = "Limite de comandos da NETBIOS excedido"
FALHA[ 57 ] = "Erro no adaptador do hardware da rede"
FALHA[ 58 ] = "Resposta da rede incorreta"
FALHA[ 59 ] = "Erro inesperado na rede"
FALHA[ 60 ] = "Adaptador remoto imcompativel"
FALHA[ 61 ] = "Fila de impressao esta cheia"
FALHA[ 62 ] = "Fila de impressao esta cheia"
FALHA[ 63 ] = "ARQUIVO de impressao eliminado"
FALHA[ 64 ] = "Nome da rede eliminado"
FALHA[ 65 ] = "Acesso negado"
FALHA[ 66 ] = "Incorreto tipo de dispositivo da rede"
FALHA[ 67 ] = "Nome da rede nao encontrado"
FALHA[ 68 ] = "Limite excedido para o nome da rede"
FALHA[ 69 ] = "Limite de sessao do NETBIOS excedido"
FALHA[ 70 ] = "Pausa temporaria"
FALHA[ 71 ] = "Pedido de rede negado"
FALHA[ 72 ] = "Redirecionamento Impressora / disco pausado"
FALHA[ 73 ] = "Reservado"
FALHA[ 74 ] = "Reservado"
FALHA[ 75 ] = "Reservado"
FALHA[ 76 ] = "Reservado"
FALHA[ 77 ] = "Reservado"
FALHA[ 78 ] = "Reservado"
FALHA[ 79 ] = "Reservado"
FALHA[ 80 ] = "ARQUIVO ja existente"
FALHA[ 81 ] = "Reservado"
FALHA[ 82 ] = "Impossivel criar diretorio"
FALHA[ 83 ] = "Ocorreu falha em INT 24H"
FALHA[ 84 ] = "Muitos redirecionamentos"
FALHA[ 85 ] = "Redirecionamento duplicado"
FALHA[ 86 ] = "Senha invalida"
FALHA[ 87 ] = "Parametro invalido"
FALHA[ 88 ] = "Defeito no dispositivo da rede"
FALHA[ 89 ] = "Nenhum erro ocorrido !"
RETURN( ", "+FALHA[ qual ] )

FUNCTION LogSystem
PARAMETER name, info, line
ret_line := "chr(13)+chr(10)"
errfile := "error.log"
IF !FILE(errfile)
errhandle = FCREATE(errfile)
FWRITE(errhandle,"Segue lista de erros ocorridos"+&ret_line.)
FWRITE(errhandle,"pelo detector de erros System Error"+&ret_line.)
FWRITE(errhandle,"Programa Utilitrio."+&ret_line.+&ret_line.)
FWRITE(errhandle,"Erros: "+&ret_line.)
ELSE
errhandle = FOPEN(errfile,1)
length = FSEEK(errhandle,0,2)
FSEEK(errhandle,length)
ENDIF
FWRITE(errhandle,DTOC(DATE())+" "+TIME()+" Descoberto ("+info+")"+&ret_line.)
FWRITE(errhandle," na linha "+line+" no m¢dulo "+name+"."+&ret_line.+&ret_line.)
FCLOSE(errhandle)
RETURN(.T.)

FUNCTION LogBackup( MINHA_INFO )
ret_line := "chr(13)+chr(10)"
errfile := "backup.log"
IF !FILE(errfile)
errhandle = FCREATE(errfile)
FWRITE(errhandle,"Segue lista de processos detectados."+&ret_line.+&ret_line.)
FWRITE(errhandle,"Data Hora Operador Processo"+&ret_line.)
FWRITE(errhandle,replicate("-",80)+&ret_line.+&ret_line.)
ELSE
errhandle = FOPEN(errfile,1)
length = FSEEK(errhandle,0,2)
FSEEK(errhandle,length)
ENDIF
FWRITE(errhandle,DTOC(DATE())+" "+TIME()+" "+M->OPERADOR+" "+MINHA_INFO+&ret_line.)
FCLOSE(errhandle)
//MEMOEDIT(10,10,20,70,MEMOREAD(errfile))
RETURN(.T.)

Link to comment
Share on other sites

Resolvido assim:




// Error handler system adapted to FiveWin
// ErrSysW.prg // Modificado em: 17/01/2014 - Joao Display tava ruim.

#include "error.ch"
#include "FiveWin.ch"

external _fwGenError // Link FiveWin generic Error Objects Generator

#define NTRIM(n) ( LTrim( Str( n ) ) )

#ifdef __CLIPPER__
#define DLG_TITLE "FiveWin: The CA-Clipper for Windows Library"
#else
#ifdef __HARBOUR__
#define DLG_TITLE "PlenoWin - Contato Sistemas - Erros do Programa"
#command QUIT => ( PostQuitMessage( 0 ), __Quit() )
#else
#define DLG_TITLE "FiveWin for Xbase++"
#endif
#endif

/*************
* ErrorSys()
*
* Note: automatically executes at startup
*/
proc ErrorSys()
ErrorBlock( { | e | ErrorDialog( e ) } )
return

proc ErrorLink()
return


/*************
* ErrorDialog()
*/
static function ErrorDialog( e ) // -> logical or quits App.

local oDlg, oLbx, oFont
local lRet // if lRet == nil -> default action: QUIT
local n, j, cMessage, aStack := {}
local oSay, hLogo, oEditar, oSaida, oFnt
local nButtons := 1
local cErrorLog := ""
local aVersions := GetVersion()
local aTasks
local aRDDs, nTarget, uValue
local oOldError
local cRelation
local lIsWinNT := IsWinNT()
LOCAL Nome_Arq, nRegistro, cMsg, cTexto

PUBLIC cVersaoNota, DeOndePartiu

// by default, division by zero yields zero
if ( e:genCode == EG_ZERODIV )
return 0
end

// for network open error, set NETERR() and subsystem default
if ( e:genCode == EG_OPEN .and. ;
( e:osCode == 32 .or. e:osCode == 5 ) .and. ;
e:canDefault )
NetErr( .t. )
return .f. // Warning: Exiting!
end

// for lock error during APPEND BLANK, set NETERR() and subsystem default
if ( e:genCode == EG_APPENDLOCK .and. e:canDefault )
NetErr( .t. )
return .f. // OJO SALIDA
endif

if Left( ProcName( 7 ), 10 ) == "ERRORDIALO"
SET RESOURCES TO
ErrorLevel( 1 )
QUIT
endif

IF .NOT. EMPTY( e:OsCode )

ENDIF

ErrorBlock( {|e| MsgStop( ErrorMessage(e) + " em Errorsys, linha:" + ;
Str( ProcLine( 1 ), 3 ) ), __quit() } )



// Incluido em 27/06/2013 By Joao Santos - Sao Paulo - Brasil
IF UPPER(e:Description)="CORRUPTION DETECTED" .OR. ;
UPPER(e:Description)="DETECTADO ÖNDICE CORROMPIDO" .OR. ;
UPPER(e:Description)="DETECTADO INDICE CORROMPIDO"

IF DeOndePartiu = [PARTIUDERMAIL] // Veio de RMAIL.PRG

//? OemToAnsi( UPPER(e:Description) )
//? LEFT(RIGHT(e:FileName,12),8)+".CDX"
//? [DeOndePartiu],DeOndePartiu
MsgInfo( OemToAnsi( "ATEN€ÇO USUµRIO: " )+CRLF+ ;
OemToAnsi( "O PROGRAMA DA NOTA FISCAL ELETRâNICA " )+CRLF+ ;
OemToAnsi( "DETECTOU QUE UM DOS INDICES DA µREA, " )+CRLF+ ;
OemToAnsi( "DE EMAIL, ESTµ CORROMPIDO(CORRUP€ÇO)." )+CRLF+ ;
OemToAnsi( "VOU FECHAR OS BANCOS DOS EMAILS... " )+CRLF+ ;
OemToAnsi( "E TENTAR RECUPERAR OS INDICES..... " )+CRLF+ ;
OemToAnsi( "DESCRIۂO: " + UPPER(e:Description) )+CRLF+ ;
OemToAnsi( "ÖNDICE........: " + LEFT(RIGHT(e:FileName,12),8)+".CDX" )+CRLF+ ;
OemToAnsi( "VOU DESLIGAR O PROGRAMA DA NF-e... " )+CRLF+ ;
OemToAnsi( "ENTRE PELO ICONE DA NF-e NOVAMENTE..." )+CRLF+ ;
OemToAnsi( "TECLE <ENTER> PARA CONTINUAR... " ), ;
OemToAnsi( "Banco de Dados dos Emails Corruptos. " ) )

DBCLOSEALL()

MsgMeter( { | oMeter, oText, oDlg, lEnd | ;
BuildIndex( oMeter, oText, oDlg, @lEnd ) },;
"Indexando Servidores, Espere..." )

/*
If LEFT(RIGHT(e:FileName,12),8)$"tablaaindizar"
// Pode-se usar o //fErase(cFileIndice)
// chamar o indexador aqui se quiser parar pelo nome do arquivo
Endif
*/

QUIT

// ERRO NO BANCO DE DADOS DO PLENO NADA POSSO FAZER, POIS TEM Q SAIR DA REDE
ELSE

MsgInfo( OemToAnsi( "ATEN€ÇO USUµRIO: " )+CRLF+ ;
OemToAnsi( "O PROGRAMA DA NOTA FISCAL ELETRâNICA " )+CRLF+ ;
OemToAnsi( "DETECTOU QUE UM DOS INDICES DO PLENO " )+CRLF+ ;
OemToAnsi( "ESTµ CORROMPIDO(CORRUP€ÇO DE ÖNDICE). " )+CRLF+ ;
OemToAnsi( "DESCRIۂO: " + UPPER(e:Description) )+CRLF+ ;
OemToAnsi( "ÖNDICE...: " + LEFT(RIGHT(e:FileName,12),8)+".CDX" )+CRLF+ ;
OemToAnsi( "SAIA DA NOTA FISCAL ELETRâNICA E ENTRE" )+CRLF+ ;
OemToAnsi( "NOS PAR¶METROS DO PLENO E REINDEXE " )+CRLF+ ;
OemToAnsi( "TODOS OS BANCOS DE DADOS DO PLENO. " )+CRLF+ ;
OemToAnsi( "ISTO UM AVISO DE ALGUM PROBLEMA. " )+CRLF+ ;
OemToAnsi( "TECLE <ENTER> PARA CONTINUAR... " ), ;
OemToAnsi( "Banco de Dados do Pleno com Problemas." ) )

ENDIF

ENDIF

// Incluido em 26/07/2013 By Joao Santos - Problemas na ANDALUZIA/Gilmaria.
IF UPPER(e:Description) = "LOCK REQUIRED" .OR. ;
UPPER(e:Description) = "TRAVAMENTO REQUERIDO" .OR. ;
UPPER(e:Description) = "FALHA NO TRAVAMENTO" .OR. ;
UPPER(e:Description) = "FALHA NO TRAVAMENTO DO APPEND" .OR. ;
UPPER(e:Description) = "USO EXCLUSIVO REQUERIDO" .OR. ;
UPPER(e:Description) = "Erro DBFCDX/1002 erro ao Abrir" .OR. ;
UPPER(e:Description) = "Erro DBFCDX/1002 erro Open (DOS Erro 2)" .OR. ;
UPPER(e:Description) = "Error DBFCDX/1002 Open error" .OR.;
UPPER(e:Description) = "Error DBFCDX/1002 Open error (DOS Error 2)" .OR.;
UPPER(e:Description) = "(DOS Error 2) DBFCDX/1002 ERRO DE ABERTURA" .OR.;
UPPER(e:Description) = "Erro DBFCDX/1001 erro ao Abrir" .OR.;
UPPER(e:Description) = "Erro DBFCDX/1001 erro Open (DOS Erro 2)" .OR.;
UPPER(e:Description) = "Error DBFCDX/1001 Open error" .OR.;
UPPER(e:Description) = "Error DBFCDX/1001 Open error (DOS Error 2)" .OR.;
UPPER(e:Description) = "(DOS Error 2) DBFCDX/1001 ERRO DE ABERTURA"


MsgInfo( OemToAnsi( "ATEN€ÇO USUµRIO: " )+CRLF+ ;
OemToAnsi( "O PROGRAMA DA NOTA FISCAL ELETRâNICA " )+CRLF+ ;
OemToAnsi( "DETECTOU PROBLEMAS NA ABERTURA DA REDE." )+CRLF+ ;
OemToAnsi( " " )+CRLF+ ;
OemToAnsi( "DESCRIۂO: "+UPPER(e:Description) )+CRLF+ ;
OemToAnsi( "ÖNDICE...: "+LEFT(RIGHT(e:FileName,12),8)+".CDX" )+CRLF+ ;
OemToAnsi( " " )+CRLF+ ;
OemToAnsi( "SAIA DA NOTA FISCAL ELETRâNICA E ENTRE " )+CRLF+ ;
OemToAnsi( "NOS PAR¶METROS DO PLENO E REINDEXE " )+CRLF+ ;
OemToAnsi( "TODOS OS BANCOS DE DADOS DO PLENO. " )+CRLF+ ;
OemToAnsi( "ISTO UM AVISO DE ALGUM PROBLEMA. " )+CRLF+ ;
OemToAnsi( "SE PERSISTIR ESTE ERRO, RECOMENDAMOS, " )+CRLF+ ;
OemToAnsi( "CHAMAR SEU TCNICO DE INFORMµTICA E " )+CRLF+ ;
OemToAnsi( "PEDIR PARA ELE VER SUA PLACA DE REDE, " )+CRLF+ ;
OemToAnsi( "BEM COMO SEUS PENTES DE MEMàRIA E O " )+CRLF+ ;
OemToAnsi( "CABO DE REDE DE SEU COMPUTADOR. " )+CRLF+ ;
OemToAnsi( "TECLE <ENTER> PARA CONTINUAR... " ), ;
OemToAnsi( "Possivel Problema na Sua Rede/Micro. " ) )

DBCLOSEALL()

QUIT

ENDIF

cErrorLog += "Aplicação" + CRLF
cErrorLog += "=========" + CRLF
cErrorLog += " Caminho e Nome: " + GetModuleFileName( GetInstance() )

#ifdef __CLIPPER__
cErrorLog += " (16 bits)" + CRLF
#else
cErrorLog += " (32 bits)" + CRLF
#endif

cErrorLog += " Tamanho: " + Transform( FSize( GetModuleFileName( ;
GetInstance() ) ), "9,999,999 bytes" ) + CRLF
#ifdef __CLIPPER__
cErrorLog += " Máximo de Arquivos Permitidos: ( SetHandleCount() ) " + ;
Str( SetHandleCount(), 3 ) + CRLF
#endif

cErrorLog += " Tempo em Execucao: " + TimeFromStart() + CRLF

cErrorLog += " Erro Ocorrido em: " + ;
DToC( Date() ) + ", " + Time() + CRLF

// Error object analysis
cMessage = " Descricao do Erro: " + UPPER( ErrorMessage( e ) ) + CRLF
cErrorLog += cMessage

IF .NOT. EMPTY( e:osCode ) // INCLUIDO EM: 17/01/2014 - Joao

Alert( cMessage + DOSErro(e:osCode) )

ENDIF

if ValType( e:Args ) == "A"
cErrorLog += " Argumentos:" + CRLF
for n = 1 to Len( e:Args )
cErrorLog += " [" + Str( n, 4 ) + "] = " + ValType( e:Args[ n ] ) + ;
" " + cValToChar( e:Args[ n ] ) + CRLF
next
endif

cErrorLog += CRLF + "Lista dos Erros" + CRLF
cErrorLog += "===============" + CRLF
n := 2 // we don't disscard any info again !
while ( n < 74 )
if ! Empty(ProcName( n ) )
AAdd( aStack, " Erro em: " + ProcFile( n ) + " => " + Trim( ProcName( n ) ) + ;
"(" + NTRIM( ProcLine( n ) ) + ")" )
cErrorLog += ATail( aStack ) + CRLF
endif
n++
end

cErrorLog += CRLF + "Sistema" + CRLF
cErrorLog += "=======" + CRLF

#ifdef __CLIPPER__
cErrorLog += " Processador: " + GetCPU() + CRLF
#else
cErrorLog += " Processador: " + GetCPU() + " " + ;
AllTrim( Str( GetCPUSpeed() ) ) + " Mhz" + CRLF
#endif

cErrorLog += " Memória: " + ;
cValToChar( Int( nExtMem() / ( 1024 * 1024 ) ) + 1 ) + ;
" mb" + CRLF + CRLF

cErrorLog += " Recursos do Sistema Livre: " + AllTrim( Str( GetFreeSystemResources( 0 ) ) ) + " %" + CRLF + ;
" Recursos GDI: " + AllTrim( Str( GetFreeSystemResources( 1 ) ) ) + " %" + CRLF + ;
" Recursos de Usuário: " + AllTrim( Str( GetFreeSystemResources( 2 ) ) ) + " %" + CRLF + CRLF

cErrorLog += " Versão do Compilador: " + Version() + CRLF

#ifdef __CLIPPER__
cErrorLog += " Versão do Windows e MS-Dos: " + ;
AllTrim( Str( aVersions[ 1 ] ) ) + "." + ;
AllTrim( Str( aVersions[ 2 ] ) ) + ", " + ;
AllTrim( Str( aVersions[ 3 ] ) ) + "." + ;
AllTrim( Str( aVersions[ 4 ] ) ) + CRLF + CRLF
#else
cErrorLog += " Versão do Windows: " + ;
AllTrim( Str( aVersions[ 1 ] ) ) + "." + ;
AllTrim( Str( aVersions[ 2 ] ) ) + ", Build " + ;
AllTrim( Str( aVersions[ 3 ] ) ) + ;
" " + aVersions[ 5 ] + CRLF + CRLF
#endif

aTasks = GetTasks()
cErrorLog += " Total de Aplicativos em Execução no Windows: " + ;
AllTrim( Str( Len( aTasks ) ) ) + CRLF
for n = 1 to Len( aTasks )
cErrorLog += " " + Str( n, 3 ) + " " + aTasks[ n ] + CRLF
next

// Warning!!! Keep here this code !!! Or we will be consuming GDI as
// we don't generate the error but we were generating the bitmap

//hLogo = FWBitMap()

if e:canRetry
nButtons++
endif

if e:canDefault
nButtons++
endif

cErrorLog += CRLF + "Variaveis em Uso" + CRLF + "================" + CRLF
cErrorLog += " Módulo Tipo Valor" + CRLF
cErrorLog += " ==========================" + CRLF

n := 2 // we don't disscard any info again !
while ( n < 74 )

if ! Empty( ProcName( n ) )
cErrorLog += " " + Trim( ProcName( n ) ) + CRLF
for j = 1 to ParamCount( n )
cErrorLog += " Param " + Str( j, 3 ) + ": " + ;
ValType( GetParam( n, j ) ) + ;
" " + cGetInfo( GetParam( n, j ) ) + CRLF
next
for j = 1 to LocalCount( n )
cErrorLog += " Local " + Str( j, 3 ) + ": " + ;
ValType( GetLocal( n, j ) ) + ;
" " + cGetInfo( GetLocal( n, j ) ) + CRLF
next
endif

n++
end

cErrorLog += CRLF + "RDD's Usados" + CRLF + "============" + CRLF
aRDDs = RddList( 1 )
for n = 1 to Len( aRDDs )
cErrorLog += " " + aRDDs[ n ] + CRLF
next

cErrorLog += CRLF + "Banco de Dados em Uso" + CRLF + "=====================" + CRLF
for n = 1 to 255
if ! Empty( Alias( n ) )
cErrorLog += CRLF + Str( n, 3 ) + ": " + If( Select() == n,"=> ", " " ) + ;
PadR( Alias( n ), 15 ) + Space( 20 ) + "Nome do RDD: " + ;
( Alias( n ) )->( RddName() ) + CRLF
cErrorLog += " ==============================" + CRLF
cErrorLog += " RecNo RecCount BOF EOF" + CRLF
cErrorLog += " " + Transform( ( Alias( n ) )->( RecNo() ), "99999" ) + ;
" " + Transform( ( Alias( n ) )->( RecCount() ), "99999" ) + ;
" " + cValToChar( ( Alias( n ) )->( BoF() ) ) + ;
" " + cValToChar( ( Alias( n ) )->( EoF() ) ) + CRLF + CRLF
cErrorLog += " Indices em Uso " + Space( 23 ) + "Nome da Tag:" + CRLF
for j = 1 to 15
if ! Empty( ( Alias( n ) )->( IndexKey( j ) ) )
cErrorLog += Space( 8 ) + ;
If( ( Alias( n ) )->( IndexOrd() ) == j, "=> ", " " ) + ;
PadR( ( Alias( n ) )->( IndexKey( j ) ), 35 ) + ;
( Alias( n ) )->( OrdName( j ) ) + ;
CRLF
endif
next
cErrorLog += CRLF + " Relacionamentos em Uso" + CRLF
for j = 1 to 8
if ! Empty( ( nTarget := ( Alias( n ) )->( DbRSelect( j ) ) ) )
cErrorLog += Space( 8 ) + Str( j ) + ": " + ;
"TO " + ( Alias( n ) )->( DbRelation( j ) ) + ;
" INTO " + Alias( nTarget ) + CRLF
// uValue = ( Alias( n ) )->( DbRelation( j ) )
// cErrorLog += cValToChar( &( uValue ) ) + CRLF
endif
next
endif
next

n = 1
cErrorLog += CRLF + "Classes em Uso:" + CRLF
cErrorLog += "===============" + CRLF
while ! Empty( __ClassName( n ) )
cErrorLog += " " + Str( n, 3 ) + " " + __ClassName( n++ ) + CRLF
end

cErrorLog += CRLF + "Analise da Memória" + CRLF
cErrorLog += "==================" + CRLF

#ifdef __CLIPPER__
cErrorLog += " Static memory:" + CRLF
cErrorLog += " data segment: 64k" + CRLF
#endif

#ifdef __CLIPPER__
cErrorLog += " Initial size: " + ;
LTrim( Str( nInitDSSize() ) ) + ;
" bytes (SYMP=" + LTrim( Str( nSymPSize() ) ) + ;
", Stack=" + LTrim( Str( nStackSize() ) ) + ;
", Heap=" + LTrim( Str( nHeapSize() ) ) + ")" + CRLF
cErrorLog += " PRG Stack: " + ;
LTrim( Str( 65535 - ( nStatics() * 14 ) - nInitDSSize() ) ) + ;
" bytes" + CRLF
#endif

#ifdef __CLIPPER__
cErrorLog += " " + LTrim( Str( nStatics() ) ) + " Variáveis Estáticas: " + ;
LTrim( Str( nStatics() * 14 ) ) + " bytes" + CRLF + CRLF
#else
cErrorLog += " " + LTrim( Str( nStatics() ) ) + " Variáveis Estáticas" + ;
CRLF + CRLF
#endif

cErrorLog += " Consumo de Memória Dinâmica:" + CRLF
cErrorLog += " Valor Atual: " + Str( MemUsed() ) + " bytes" + CRLF
cErrorLog += " Valor Alto: " + Str( MemMax() ) + " bytes" + CRLF
// nSymNames() no longer returns a real value! 15/April/97
/*
cErrorLog += " SYMBOLS segment" + CRLF
cErrorLog += " " + LTrim( Str( nSymNames() ) ) + " SymbolNames: " + ;
LTrim( Str( nSymNames() * 16 ) ) + " bytes"
*/

// Generates a file with an Error Log

BEGIN SEQUENCE
oOldError = ErrorBlock( { || DoBreak() } )
MemoWrit( "Error.log", cErrorLog )
END SEQUENCE

ErrorBlock( oOldError )

DEFINE FONT oFnt NAME "Ms Sans Serif" SIZE 00, -14 BOLD

// 350, 300 MUDEI
DEFINE DIALOG oDlg SIZE 400, 265 + If( lIsWinNT, 50, 50 ) ;
TITLE DLG_TITLE COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

oDlg:lHelpIcon := .F.

@ 0, 0 SAY oSay PROMPT OemToAnsi( cMessage ) OF oDlg ;
FONT oFont SIZE 250, 20 COLORS CLR_BLACK, CLR_WHITE

@ 1, 0 SAY "Edite e Envie Por Email o Arq. Error.Log Anote: " ;
CENTERED SIZE 175, 20 COLOR CLR_BLACK, CLR_WHITE

@ 1.5, 0 SAY "Tel: (11)2941-6446/3569-6446 - Email: contato@pleno.com.br " ;
CENTERED SIZE 175, 20 COLOR CLR_BLACK, CLR_WHITE

@ 1.9, 2 SAY "Ou joao@pleno.com.br ou marcos@cardim.com.br " ;
SIZE 175, 20 COLOR CLR_BLACK, CLR_WHITE

oSay:nStyle = nOR( oSay:nStyle, 128 ) // SS_NOPREFIX
oSay:nTop = 3
oSay:nLeft = 22
oSay:nBottom = 25
oSay:nRight = 148

@ 37, 6 SAY "Listagem de Erros" OF oDlg FONT oFont PIXEL ;
COLORS CLR_BLACK, CLR_WHITE

@ 146, 6 SAY "ERRO NA NOTA FISCAL ELETRONICA: "+cVersaoNota OF oDlg ;
FONT oFont PIXEL COLORS CLR_BLACK, CLR_WHITE SIZE 150, 11

n = aStack[ 1 ]

@ 45, 3 LISTBOX oLbx VAR n ITEMS aStack OF oDlg ;
SIZE 195, 79 + If( lIsWinNT, 18, 0 ) PIXEL

if nButtons == 1 .or. nButtons == 3
@ 110 + If( lIsWinNT, 24, 24 ), 80 BUTTON oSaida PROMPT("&Saida" ) ;
OF oDlg ACTION oDlg:End() SIZE 30, 11 PIXEL FONT oFont DEFAULT
else
@ 110 + If( lIsWinNT, 24, 24 ), 42 BUTTON oSaida PROMPT("&Saida" ) OF oDlg ;
ACTION oDlg:End() SIZE 30, 11 PIXEL FONT oFont
endif

if e:CanRetry
@ 110 + If( lIsWinNT, 24, 24 ), If( nButtons == 2, 82, 13 ) BUTTON "&Repetir" ;
OF oDlg ACTION ( lRet := .t., oDlg:End() ) ;
SIZE 30, 11 FONT oFont PIXEL
endif

if e:CanDefault
@ 110 + If( lIsWinNT, 24, 24 ), 132 BUTTON "&Padrão" OF oDlg ;
ACTION ( lRet := .f., oDlg:End() ) ;
SIZE 30, 11 FONT oFont PIXEL
endif

@ 32, 138 BUTTON oEditar PROMPT "&Editar Error.log " OF oDlg ;
FONT oFont PIXEL SIZE 50, 10 ;
ACTION WinExec( "Notepad.exe error.log" )

oEditar:cToolTip := OemToAnsi( "Editar o Erro Usando o Bloco de " + ;
"Notas Para Enviar Via Email" )

SET FONT OF oSaida TO oFnt

ACTIVATE DIALOG oDlg CENTERED ;
ON PAINT DrawBitmap( hDC, hLogo, 6, 6 )

oFnt:End()

DeleteObject( hLogo )

if lRet == nil .or. ( !LWRunning() .and. lRet )
SET RESOURCES TO
ErrorLevel( 1 )
QUIT // must be QUIT !!!
endif

return lRet

//----------------------------------------------------------------------------//

static function DoBreak()

BREAK

return nil

//----------------------------------------------------------------------------//

static func ErrorMessage( e )

// start error message
local cMessage := if( empty( e:OsCode ), ;
if( e:severity > ES_WARNING, "Error ", "Warning " ),;
"(DOS Error " + NTRIM(e:osCode) + ") " )

// add subsystem name if available
cMessage += if( ValType( e:SubSystem ) == "C",;
e:SubSystem() ,;
"???" )

// add subsystem's error code if available
cMessage += if( ValType( e:SubCode ) == "N",;
"/" + NTRIM( e:SubCode ) ,;
"/???" )
// add error description if available
if ( ValType( e:Description ) == "C" )
cMessage += " " + e:Description
end

// add either filename or operation
cMessage += if( ! Empty( e:FileName ),;
": " + e:FileName ,;
if( !Empty( e:Operation ),;
": " + e:Operation ,;
"" ) )
return cMessage

//----------------------------------------------------------------------------//
// returns extended info for a certain variable type

static function cGetInfo( uVal )

local cType := ValType( uVal )

do case
case cType == "C"
return '"' + cValToChar( uVal ) + '"'

case cType == "O"
return "Class: " + uVal:ClassName()

case cType == "A"
return "Len: " + Str( Len( uVal ), 4 )

otherwise
return cValToChar( uVal )
endcase

return nil

//----------------------------------------------------------------------------//

#define HKEY_LOCAL_MACHINE 2147483650 // 0x80000002

function GetCPU()

local oReg := TReg32():New( HKEY_LOCAL_MACHINE,;
"HARDWARE\DESCRIPTION\System\CentralProcessor\0",;
.f. )
local cCpu := oReg:Get( "ProcessorNameString" )

oReg:Close()

return cCpu

//----------------------------------------------------------------------------//

FUNCTION DOSErro( qual )

private FALHA[ 89 ]

if qual = 0 .or. qual > 89
qual = 89
endif

FALHA[ 1 ] = "Numero de funcao invalida"
FALHA[ 2 ] = "ARQUIVO nao encontrado"
FALHA[ 3 ] = "Path nao encontrado"
FALHA[ 4 ] = "Muitos ARQUIVOs abertos"
FALHA[ 5 ] = "Acesso negado"
FALHA[ 6 ] = "HANDLE invalido"
FALHA[ 7 ] = "Bloco de controle de memoria destruido"
FALHA[ 8 ] = "Memoria insuficiente"
FALHA[ 9 ] = "Endereco de bloco de memoria invalido"
FALHA[ 10 ] = "Dispositivo invalido"
FALHA[ 11 ] = "Formatacao invalida"
FALHA[ 12 ] = "Codigo de acesso invalido"
FALHA[ 13 ] = "Dados invalidos"
FALHA[ 14 ] = "Reservado"
FALHA[ 15 ] = "Acionador de disco invalido"
FALHA[ 16 ] = "Tentou remover do diretorio corrente"
FALHA[ 17 ] = "Dispositivo nao e o mesmo"
FALHA[ 18 ] = "Nao ha mais ARQUIVO"
FALHA[ 19 ] = "Disco protegido contra gravacao"
FALHA[ 20 ] = "Unidade de disco desconhecida"
FALHA[ 21 ] = "Impossivel leitura de disco"
FALHA[ 22 ] = "Comando desconhecido"
FALHA[ 23 ] = "Informacao errada"
FALHA[ 24 ] = "Comprimento da estrutura esta ruim"
FALHA[ 25 ] = "Erro na pesquisa"
FALHA[ 26 ] = "Unidade de armazenagem desconhecida"
FALHA[ 27 ] = "Setor nao encontrado"
FALHA[ 28 ] = "Papel de saida da impressora"
FALHA[ 29 ] = "Gravacao invalida"
FALHA[ 30 ] = "Leitura invalida"
FALHA[ 31 ] = "Falha geral"
FALHA[ 32 ] = "Violacao de divisao"
FALHA[ 33 ] = "Violacao de bloqueio"
FALHA[ 34 ] = "Mudanca de disco invalida"
FALHA[ 35 ] = "Tentativa de abrir mais arquivos do que o definido no comando FCBS."
FALHA[ 36 ] = "Estouro no buffer de compartilhamento."
FALHA[ 37 ] = "Reservado"
FALHA[ 38 ] = "Reservado"
FALHA[ 39 ] = "Reservado"
FALHA[ 40 ] = "Reservado"
FALHA[ 41 ] = "Reservado"
FALHA[ 42 ] = "Reservado"
FALHA[ 43 ] = "Reservado"
FALHA[ 44 ] = "Reservado"
FALHA[ 45 ] = "Reservado"
FALHA[ 46 ] = "Reservado"
FALHA[ 47 ] = "Reservado"
FALHA[ 48 ] = "Reservado"
FALHA[ 49 ] = "Reservado"
FALHA[ 50 ] = "Nao suporta rede requerida"
FALHA[ 51 ] = "Nao suporta pedido da rede"
FALHA[ 52 ] = "Nome da rede duplicado"
FALHA[ 53 ] = "Nome da rede nao encontrado"
FALHA[ 54 ] = "Rede ocupada."
FALHA[ 55 ] = "Dispositivo nao existente na rede"
FALHA[ 56 ] = "Limite de comandos da NETBIOS excedido"
FALHA[ 57 ] = "Erro no adaptador do hardware da rede"
FALHA[ 58 ] = "Resposta da rede incorreta"
FALHA[ 59 ] = "Erro inesperado na rede"
FALHA[ 60 ] = "Adaptador remoto imcompativel"
FALHA[ 61 ] = "Fila de impressao esta cheia"
FALHA[ 62 ] = "Fila de impressao esta cheia"
FALHA[ 63 ] = "ARQUIVO de impressao eliminado"
FALHA[ 64 ] = "Nome da rede eliminado"
FALHA[ 65 ] = "Acesso negado"
FALHA[ 66 ] = "Incorreto tipo de dispositivo da rede"
FALHA[ 67 ] = "Nome da rede nao encontrado"
FALHA[ 68 ] = "Limite excedido para o nome da rede"
FALHA[ 69 ] = "Limite de sessao do NETBIOS excedido"
FALHA[ 70 ] = "Pausa temporaria"
FALHA[ 71 ] = "Pedido de rede negado"
FALHA[ 72 ] = "Redirecionamento Impressora / disco pausado"
FALHA[ 73 ] = "Reservado"
FALHA[ 74 ] = "Reservado"
FALHA[ 75 ] = "Reservado"
FALHA[ 76 ] = "Reservado"
FALHA[ 77 ] = "Reservado"
FALHA[ 78 ] = "Reservado"
FALHA[ 79 ] = "Reservado"
FALHA[ 80 ] = "ARQUIVO ja existente"
FALHA[ 81 ] = "Reservado"
FALHA[ 82 ] = "Impossivel criar diretorio"
FALHA[ 83 ] = "Ocorreu falha em INT 24H"
FALHA[ 84 ] = "Muitos redirecionamentos"
FALHA[ 85 ] = "Redirecionamento duplicado"
FALHA[ 86 ] = "Senha invalida"
FALHA[ 87 ] = "Parametro invalido"
FALHA[ 88 ] = "Defeito no dispositivo da rede"
FALHA[ 89 ] = "Nenhum erro ocorrido !"

RETURN( ", "+FALHA[ qual ] )

Link to comment
Share on other sites

Melhorando... Quem melhorar mais, favor postar as alterações. Obg. abs.




IF .NOT. EMPTY( e:osCode ) // INCLUIDO EM: 17/01/2014 - Joao

//Alert( cMessage + DOSErro(e:osCode) )
MsgStop( OemtoAnsi( "ATEN€ÇO USUµRIO: " )+CRLF+CRLF+ ;
( UPPER( cMessage ) )+CRLF+CRLF+ ;
( DOSErro( e:osCode ) )+CRLF+CRLF+ ;
OemToAnsi( "RESOLVA O PROBLEMA NA REDE... " )+CRLF+ ;
OemToAnsi( "TECLE <ENTER> PARA CONTINUAR... " ), ;
OemToAnsi( "ERRO DE REDE OU NO SEU COMPUTADOR" ) )

QUIT

ENDIF


FUNCTION DOSERRO( QUAL )

PRIVATE FALHA[ 89 ]

IF QUAL = 0 .OR. QUAL > 89
QUAL = 89
ENDIF

FALHA[ 1 ] = "NUMERO DE FUNCAO INVALIDA"
FALHA[ 2 ] = "ARQUIVO NAO ENCONTRADO"
FALHA[ 3 ] = "PATH NAO ENCONTRADO"
FALHA[ 4 ] = "MUITOS ARQUIVOS ABERTOS"
FALHA[ 5 ] = "ACESSO NEGADO"
FALHA[ 6 ] = "HANDLE INVALIDO"
FALHA[ 7 ] = "BLOCO DE CONTROLE DE MEMORIA DESTRUIDO"
FALHA[ 8 ] = "MEMORIA INSUFICIENTE"
FALHA[ 9 ] = "ENDERECO DE BLOCO DE MEMORIA INVALIDO"
FALHA[ 10 ] = "DISPOSITIVO INVALIDO"
FALHA[ 11 ] = "FORMATACAO INVALIDA"
FALHA[ 12 ] = "CODIGO DE ACESSO INVALIDO"
FALHA[ 13 ] = "DADOS INVALIDOS"
FALHA[ 14 ] = "RESERVADO PARA USO FUTURO 14"
FALHA[ 15 ] = "ACIONADOR DE DISCO INVALIDO"
FALHA[ 16 ] = "TENTOU REMOVER DO DIRETORIO CORRENTE"
FALHA[ 17 ] = "DISPOSITIVO NAO E O MESMO"
FALHA[ 18 ] = "NAO HA MAIS ARQUIVO"
FALHA[ 19 ] = "DISCO PROTEGIDO CONTRA GRAVACAO"
FALHA[ 20 ] = "UNIDADE DE DISCO DESCONHECIDA"
FALHA[ 21 ] = "IMPOSSIVEL LEITURA DE DISCO"
FALHA[ 22 ] = "COMANDO DESCONHECIDO"
FALHA[ 23 ] = "INFORMACAO ERRADA"
FALHA[ 24 ] = "COMPRIMENTO DA ESTRUTURA ESTA RUIM"
FALHA[ 25 ] = "ERRO NA PESQUISA"
FALHA[ 26 ] = "UNIDADE DE ARMAZENAGEM DESCONHECIDA"
FALHA[ 27 ] = "SETOR NAO ENCONTRADO"
FALHA[ 28 ] = "PAPEL DE SAIDA DA IMPRESSORA"
FALHA[ 29 ] = "GRAVACAO INVALIDA"
FALHA[ 30 ] = "LEITURA INVALIDA"
FALHA[ 31 ] = "FALHA GERAL"
FALHA[ 32 ] = "VIOLACAO DE DIVISAO"
FALHA[ 33 ] = "VIOLACAO DE BLOQUEIO"
FALHA[ 34 ] = "MUDANCA DE DISCO INVALIDA"
FALHA[ 35 ] = "TENTATIVA DE ABRIR MAIS ARQUIVOS DO QUE O DEFINIDO NO COMANDO FCBS."
FALHA[ 36 ] = "ESTOURO NO BUFFER DE COMPARTILHAMENTO."
FALHA[ 37 ] = "RESERVADO PARA USO FUTURO 37"
FALHA[ 38 ] = "RESERVADO PARA USO FUTURO 38"
FALHA[ 39 ] = "RESERVADO PARA USO FUTURO 39"
FALHA[ 40 ] = "RESERVADO PARA USO FUTURO 40"
FALHA[ 41 ] = "RESERVADO PARA USO FUTURO 41"
FALHA[ 42 ] = "RESERVADO PARA USO FUTURO 42"
FALHA[ 43 ] = "RESERVADO PARA USO FUTURO 43"
FALHA[ 44 ] = "RESERVADO PARA USO FUTURO 44"
FALHA[ 45 ] = "RESERVADO PARA USO FUTURO 45"
FALHA[ 46 ] = "RESERVADO PARA USO FUTURO 46"
FALHA[ 47 ] = "RESERVADO PARA USO FUTURO 47"
FALHA[ 48 ] = "RESERVADO PARA USO FUTURO 48"
FALHA[ 49 ] = "RESERVADO PARA USO FUTURO 49"
FALHA[ 50 ] = "NAO SUPORTA REDE REQUERIDA"
FALHA[ 51 ] = "NAO SUPORTA PEDIDO DA REDE"
FALHA[ 52 ] = "NOME DA REDE DUPLICADO"
FALHA[ 53 ] = "NOME DA REDE NAO ENCONTRADO"
FALHA[ 54 ] = "REDE OCUPADA."
FALHA[ 55 ] = "DISPOSITIVO NAO EXISTENTE NA REDE"
FALHA[ 56 ] = "LIMITE DE COMANDOS DA NETBIOS EXCEDIDO"
FALHA[ 57 ] = "ERRO NO ADAPTADOR DO HARDWARE DA REDE"
FALHA[ 58 ] = "RESPOSTA DA REDE INCORRETA"
FALHA[ 59 ] = "ERRO INESPERADO NA REDE"
FALHA[ 60 ] = "ADAPTADOR REMOTO IMCOMPATIVEL"
FALHA[ 61 ] = "FILA DE IMPRESSAO ESTA CHEIA"
FALHA[ 62 ] = "FILA DE IMPRESSAO ESTA CHEIA"
FALHA[ 63 ] = "ARQUIVO DE IMPRESSAO ELIMINADO"
FALHA[ 64 ] = "NOME DA REDE ELIMINADO"
FALHA[ 65 ] = "ACESSO NEGADO"
FALHA[ 66 ] = "INCORRETO TIPO DE DISPOSITIVO DA REDE"
FALHA[ 67 ] = "NOME DA REDE NAO ENCONTRADO"
FALHA[ 68 ] = "LIMITE EXCEDIDO PARA O NOME DA REDE"
FALHA[ 69 ] = "LIMITE DE SESSAO DO NETBIOS EXCEDIDO"
FALHA[ 70 ] = "PAUSA TEMPORARIA"
FALHA[ 71 ] = "PEDIDO DE REDE NEGADO"
FALHA[ 72 ] = "REDIRECIONAMENTO IMPRESSORA / DISCO PAUSADO"
FALHA[ 73 ] = "RESERVADO PARA USO FUTURO 73"
FALHA[ 74 ] = "RESERVADO PARA USO FUTURO 74"
FALHA[ 75 ] = "RESERVADO PARA USO FUTURO 75"
FALHA[ 76 ] = "RESERVADO PARA USO FUTURO 76"
FALHA[ 77 ] = "RESERVADO PARA USO FUTURO 77"
FALHA[ 78 ] = "RESERVADO PARA USO FUTURO 78"
FALHA[ 79 ] = "RESERVADO PARA USO FUTURO 79"
FALHA[ 80 ] = "ARQUIVO JA EXISTENTE"
FALHA[ 81 ] = "RESERVADO PARA USO FUTURO 81"
FALHA[ 82 ] = "IMPOSSIVEL CRIAR DIRETORIO"
FALHA[ 83 ] = "OCORREU FALHA EM INT 24H"
FALHA[ 84 ] = "MUITOS REDIRECIONAMENTOS"
FALHA[ 85 ] = "REDIRECIONAMENTO DUPLICADO"
FALHA[ 86 ] = "SENHA INVALIDA"
FALHA[ 87 ] = "PARAMETRO INVALIDO"
FALHA[ 88 ] = "DEFEITO NO DISPOSITIVO DA REDE"
FALHA[ 89 ] = "NENHUM ERRO OCORRIDO !"

RETURN( "FALHA: " + FALHA[ QUAL ] )


Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...