SQL RAISERROR ... Como detectarlo en VFoxpro...???

19/05/2010 - 00:52 por Emilio G. Burgoa | Informe spam
Hola

Estoy programando unos Stored Procedures en SQL Server 2005 y necesito
ejecutarlos desde mi aplicación en VFP9

En los SP esta contemplado el manejo de errores a traves de
RAISERROR() del T-SQLlo cual funciona perfectamente ... pero
necesito detectar el tipo de error desde la aplicacion en VFP9 al llamar el
SP...

Alguien sabe si es posible hacerlo en forma similar como se hace desde
las aplicaciones .Net...las cuales lo hacen a través de las sentencias
TRY...CATCH...ENDTRY

Desde ya muy agradecido por su atención.

Saludos.

Emilio G. Burgoa
San Juan - Argentina

Preguntas similare

Leer las respuestas

#1 extremo
19/05/2010 - 15:13 | Informe spam
Hola

Puedes capturar el ejemplo preguntando por el resultado ejemplo

if sqlexec(miconexion ,"exec miprocedimiento " ,"micursor") = -1
error.
endif

Nunca he desarrollado procedimientos con RAISERROR, no se si al
capturar el error en sql devuelve un -1, si no es asi, lo que se me
ocurre es enviar en tu cursor un dato adicional o un valor especial
declarando que el procedimiento con un output @exitoso envie un valor
de ejecucion exitosa

ejemplo

nExitoso = 0
if sqlexec(miconexion ,"exec miprocedimiento ?nExitoso " ,"micursor")
= -1
error.
endif


if nExitoso = -1
error...
endif

Espero te sirva de orientacion

Bendiciones
Respuesta Responder a este mensaje
#2 Alonzo
19/05/2010 - 16:28 | Informe spam
Todo error que personalices con el RAISERROR este sera devuelto al VFP como
error del lado de servidor. Para capturarlo debes evaluar el estado del
SQLEXEC. Ejem:

If SQLExec(nHanlet,cSQL) = -1 Then
®RROR(aErrorSQL) &&Genera matriz con los errores del lado del
servidor
lnError = aErrorSQL(5) &&Nº del error
lcMsgError = aErrorSQL(2) &&Mensaje del error

Messagebox(lcMsgError)

Endif

Espero te ayude, saludos


"Emilio G. Burgoa" escribió en el mensaje
news:%23%
Hola

Estoy programando unos Stored Procedures en SQL Server 2005 y necesito
ejecutarlos desde mi aplicación en VFP9

En los SP esta contemplado el manejo de errores a traves de
RAISERROR() del T-SQLlo cual funciona perfectamente ... pero
necesito detectar el tipo de error desde la aplicacion en VFP9 al llamar
el SP...

Alguien sabe si es posible hacerlo en forma similar como se hace desde
las aplicaciones .Net...las cuales lo hacen a través de las sentencias
TRY...CATCH...ENDTRY

Desde ya muy agradecido por su atención.

Saludos.

Emilio G. Burgoa
San Juan - Argentina
Respuesta Responder a este mensaje
#3 Emilio G. Burgoa
19/05/2010 - 17:51 | Informe spam
Gracias por la respuesta

Lo que me propones es una buena opcion (ya lo habia analizado...), pero el
planteo es utilizar SP que ya están programados en SQL 2005 utilizando
RAISERROR y no se pueden modificar...

El sqlexec() retorna -1 solo si encuentra un error en el SP que no esta
tratado con RAISERROR o manejado dentro del SP, el mensaje de error se puede
visualizar utilizando la funcion message() del VFP9...en cual te devuelve el
texto del mensaje del error que genera el server SQL...

Buscando encontre un articulo que nos puede ayudar a resolver este tema...en
donde dice que un error en un SP retorna un error ODBC 1516 al cual lo podes
tratar con la funcion aerror() del VFP9...dentro del array los elementos
(1,2) y (1,3) tienen el texto del mensaje y el elemento (1,5) el numero del
error SQL, tanto si el error del sql fue tratado con RAISERROR o nola
diferencia esta en que si lo tratas con RAISERROR pueden enviar mensajes
personalizados, en caso contrarrio envia el texto del mensaje del error del
SQL Server...(recordar siempre que si el error es tratado con RAISERROR
dentro del SP, el sqlexec() se ejecuta en forma correcta...)

He probado esto último que te comento y funciona sin problemas...solo hay
que armar algunas funciones dentro del VFP) para que extraiga en forma
correcta el texto del mensaje...

Saludos.

"extremo" escribió en el mensaje de
noticias:
Hola

Puedes capturar el ejemplo preguntando por el resultado ejemplo

if sqlexec(miconexion ,"exec miprocedimiento " ,"micursor") = -1
error.
endif

Nunca he desarrollado procedimientos con RAISERROR, no se si al
capturar el error en sql devuelve un -1, si no es asi, lo que se me
ocurre es enviar en tu cursor un dato adicional o un valor especial
declarando que el procedimiento con un output @exitoso envie un valor
de ejecucion exitosa

ejemplo

nExitoso = 0
if sqlexec(miconexion ,"exec miprocedimiento ?nExitoso " ,"micursor")
= -1
error.
endif


if nExitoso = -1
error...
endif

Espero te sirva de orientacion

Bendiciones
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida