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-----
De: Alvaro [mailto:[EMAIL PROTECTED]]
Enviada em: terça-feira, 24 de setembro de 2002 00:11
Para: Lista Centura
Assunto: [sqlwin] DLLs / Rotina de Erro

 

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

 

Responder a