Alvaro;
Aqui nos tratamos os erros da seguinte forma, utilizando Oracle, mas acredito que deva funcionar para qualquer BD:
Na Seção:
Application Action On SAM_SqlError Call fTrataErro( ) Return 0
Na Seção :
Internal Function Function: fTrataErro Description: Returns Parameters Static Variables Local variables Number: nCodErro Number: nPosErro String: sErroOracle String: sMsgErro Sql Handle: hsqlErro String: sTemp Actions Call SqlExtractArgs( wParam, lParam, hsqlErro, nCodErro, nPosErro ) Call SqlGetError( hsqlErro, nCodErro, sErroOracle ) If nCodErro < 0 Set nCodErro = nCodErro * (-1) Set sMsgErro = "Ocorreu a seguinte exceção: " If nCodErro = 21017 Set sMsgErro = sMsgErro || " Usuário/Password Inválido Procedimento : Corrija Usuário/Password e tente novamente" Else If nCodErro = 942 Set sMsgErro = sMsgErro || " Tabela ou visão não existe Procedimento : É possível que você não tenha permissão para fazer tal operação. Consulte o responsável pelo sistema e comunique o ocorrido" Else If nCodErro = 1400 Set sMsgErro = sMsgErro || " Campo obrigatório não foi preenchido Procedimento : Preencha todos os campos que são obrigatórios e tente novamente. Se o problema persistir, comunique ao responsável pelo sistema" Else If nCodErro = 1 Set sMsgErro = sMsgErro || " Tentativa de inserir registro duplicado Procedimento : Já existe um registro com as mesmas características que se está tentando inserir ou atualizar. Esta operação não é permitida" Else If nCodErro = 2291 Set sMsgErro = sMsgErro || " Regra de relacionamento violada na tentativa de inserir ou atualizar o registro Procedimento : Um ou mais campos estão relacionados com outras tabelas. Somente valores préviamente cadastrados são permitidos nestes campos" Else If nCodErro = 2292 Set sMsgErro = sMsgErro || " Regra de integridade violada na remoção do registro Procedimento : Um ou mais campos estão relacionados com outras tabelas. Esta operação não é permitida" Else If nCodErro = 2290 Set sMsgErro = sMsgErro || " Regra de validação de campos violada Procedimento : Um ou mais campos estão fora da faixa permitida. Corrija e tente novamente" Else If nCodErro = 1031 Set sMsgErro = sMsgErro || " Privilégio insuficiente Procedimento : Você não tem privilégio para efeturar essa transação. Contacte o CPD para rever seus privilégios" Else If nCodErro = 54 Set sMsgErro = sMsgErro || " Os dados que você está tentando acessar foram bloqueados temporariamente. Procedimento : Tente executar novamente a operação desejada (Incluir, atualizar,excluir...) dentro de alguns segundos." Else If nCodErro = 2396 Call SalMessageBox( "Sua Sessão Expirou o tempo sem atividade. Reinicie a aplicação", "Erro !", MB_Ok | MB_IconHand ) Call SalQuit( ) Else Set sTemp = fGetMsgEntreStrings( sErroOracle, '[', ']' ) If sTemp = sErroOracle Set sMsgErro = "Ocorreu um erro desconhecio, reporte a seguinte mensagem ao CPD : " || sErroOracle Else Set sMsgErro = sTemp Call SalMessageBox( sMsgErro, "Erro !", MB_Ok | MB_IconHand )
-----Mensagem original-----
Pessoal tenho 2 perguntas a fazer:
1) Coloquei essa pergutna na lista e só recebi 1 resposta, estou falando isso porque acho que não entederam o que perguntei e também pelo fato de ser super deságradavel para o usuário ler uma mensagem de erro em inglês, passa a impressão que não temos o controle de toda situação, por esse motivo quero fazer uma rotina de erro. Mas ai vai, preciso criar uma rotina de erro para o SqlServer2000 então pensei em algo mais ou menos assim: Pego no help do SqlServer ou em um tabela todos os erros, ou seja, quando falo em erros são os números e as mensagem, e trato-los Centura, mas uma coisa não entendi ainda, o erro é disparado do SqlServer passa pelas dlls ( não sei bem se são DLLs ) do ODBC e depois é tratado no Centura, é isso ? Estou falando isso pois comparei o número do erro gerado no Centura com o do SqlServer e são diferentes.Mas quando ocorre algum erro de banco no Centura aparece uma janela com as seguintes caracteristicas, e acho que todos aqui devem saber de cor e salteado ( risos ) ala Vinicus Título: Centura Buider - SqlError em baixo está escrito Sql Stament com a instrução que não foi processada, em baixo de novo aparece outro texto ali contendo o erro original do SqlServer, ao lado existe 2 campos Number: e Position e em baixo de tudo tem uma descriçao de uma provável solução ! Concluindo preciso do erro original do Banco, ou se alguém tiver alguma a rotina para me mandar agradecerei.Houve um integrante acho que é o Andreson Martins que me mandou uma em Oracle que aproveito também para agrade-lo e dizer que não entendi muito bem a dele, mas continuo estudando-a. 2) Estou precisando de algumas dlls, que estão discriminadas em algumas alps como: CICSRI15.DLL, tuxri15.dll.
obrigado Alvaro
|