----- Original Message -----
Sent: Friday, September 13, 2002 11:28
AM
Subject: Re: [sqlwin] Centura Builder-
SqlError
�lvaro,
Para vc capturar todos os erro gerados pelo
banco, vc deve usar o evento
On SAM_SqlError em 'Application
Actions'.
tenho um exempo.
vc vai ter que adaptar esta fun��o ela est�
tratando erros ORACLE
esta on��o � invocada em On
SAM_SqlError
!!CB!! 134
Function:
fcTrataErro
Description: Fun��o que trata os erros retornados do
banco.
Returns
Number:
Parameters
Static
Variables
Local variables
String:
lsTxtErro
String: lsCnst
String:
lsSqlErro
Number: lnNumrErro
Number:
lnPos
Number: lnInicPos
Number:
lnFimPos
Sql Handle: lshErro
Sql Handle:
lshTeste
Actions
Call SalWaitCursor( TRUE
)
Call SqlExtractArgs( wParam, lParam, lshErro, lnNumrErro,
lnPos )
! Excess�es de Erro
If lnNumrErro = 202
OR lnNumrErro = 203
Call SalWaitCursor( FALSE
)
Return TRUE
! Erros do Login - N�o
chamar o objeto Mensagem
! Tratar Usu�rio e senha
informados
If lnNumrErro = 21017
Call
SalMessageBox( "Usu�rio ou Senha Inv�lido.", "XXXXXXX", MB_IconStop + MB_Ok
)
Return FALSE
If lnNumrErro = 20988 OR
lnNumrErro = 20922 OR lnNumrErro = 20911
Call
SalMessageBox( "Senha n�o pode conter caracteres especiais nem come�ar com
n�mero.", "XXXXXXX", MB_IconStop + MB_Ok )
Return
FALSE
! Tratar Falha no Servidor
If lnNumrErro
= 26108 OR lnNumrErro = 23113 OR lnNumrErro = 21034
Call
SalMessageBox( "N�o foi poss�vel localizar o Servidor de Banco de Dados .
Verifique se a conex�o est� correta.", "XXXXXX", MB_IconStop + MB_Ok
)
Return FALSE
If lnNumrErro =
22068
Call SalMessageBox( "N�o foi poss�vel localizar o
Servidor de Banco de Dados do SSSSSSSS. Verifique se a conex�o est� correta.",
"SIGMA", MB_IconStop + MB_Ok )
Return
FALSE
! Tratar Limite de Conex�es
If lnNumrErro
= 22391
Call SalMessageBox( "O limite de conexoes
simultaneas do usuario excedeu o maximo estabelecido.", "XXXXXXXX",
MB_IconStop + MB_Ok )
Return FALSE
!
Tratar Time-Out
If lnNumrErro = 20051 OR lnNumrErro = 21575 OR
lnNumrErro = 22049 OR
lnNumrErro =
24021 OR lnNumrErro = 20600 OR lnNumrErro = 22396 OR
lnNumrErro = 21012 OR lnNumrErro =
24210 OR lnNumrErro = 22396 OR
lnNumrErro = 29115 OR lnNumrErro = 29120 OR lnNumrErro = 20028 OR
lnNumrErro = 20030 OR lnNumrErro =
03114
Call SalMessageBox( "Conex�o com o Banco foi
finalizada. Inicie o aplicativo novamente.", "XXXXXXXX", MB_IconStop + MB_Ok
)
Call SalQuit( )
! Return
ERR_TIMEOUT
! Antes dessa fun��o erros Oracles deve ser somado
com 20.000
Call SqlGetError( lshErro, lnNumrErro, lsTxtErro
)
Set lsSqlErro = SqlGetLastStatement(
)
Call SqlImmediate( "ROLLBACK" )
! Erros
tratados via objeto Mensagem
! Erros de
Constraints
If lnNumrErro = 1 OR (lnNumrErro >= -2292 AND
lnNumrErro <= -2290)
! Pegar a
Constraint
Set lnInicPos = SalStrScan(lsTxtErro,
'(')
Set lnFimPos = SalStrScan(lsTxtErro,
')')
Set lsCnst = SalStrMidX( lsTxtErro, lnInicPos+1,
lnFimPos-lnInicPos-1)
! Retirar o Owner da
Constraint
Set lnInicPos = SalStrScan(lsCnst,
'.')
Set lsCnst = SalStrMidX( lsCnst, lnInicPos+1,
SalStrLength(lsCnst)-lnInicPos)
! Chamar o OLE de
Mensagem
Call gobjMens.Show(
lsCnst,'','','','','')
! Erros de PL/SQL
Else If
(lnNumrErro <= -20000 AND lnNumrErro >= -20999)
!
Chamar o OLE de Mensagem
Call gobjMens.Show(
SalNumberToStrX( lnNumrErro, 0),'','','','','')
! Erros
Gen�ricos de Banco
Else
! Chamar janela de
erro
Call SalMessageBeep( MB_IconStop
)
Call SalModalDialog( dlgErro, hWndMDI, lnNumrErro,
lsTxtErro, lsSqlErro )
Call SalWaitCursor( FALSE
)
Anderson Martins
024-
9942-6748
024-3344-3575 com.
CPM S/A.
----- Original Message -----
Sent: Friday, September 13, 2002 9:28
AM
Subject: RES: [sqlwin] Centura Builder-
SqlError
Quer ter seu pr�prio endere�o na Internet?
Garanta j� o seu e ainda
ganhe cinco e-mails personalizados.
Dom�niosBOL - http://dominios.bol.com.br
Alvaro:
Use o seguinte
comando:
Call SqlExtractArgs( wParam,
lParam, HSQL_ERROR, N_ERROR, N_POS_ERROR )
[ ]'s,
Julio.
Como fa�o para pegar o n�mero do erro do
Banco sem que o centura trate-o.
Na verdade gostaria de criar um
rotina erro onde apareceria as mensagens que eu crei ou
seja, amigaveis para o usu�rio.