Deberías estar dentro de una transacción del lado del cliente y usar TRY / CATCH y en base al resultado hacer el COMMIT o ROLLBACK correspondiente.
Este es un ejemplo muy simple para capturar el error que dispara el server cuando usas SQL P.T.
n = SQLEXEC(nHandle,"exec miStoreProcedure")
IF n < 0
AERROR(laErr)
MESSAGEBOX(laErr[2])
ENDIF
>Salud2 a todo2!!!!
>
>Quisiera por favor solicitar su valiosa ayuda en un problema que estoy teniendo con un sistema que esta desarrollado con "paso a travez de sql" usando una base de datos sybase...cuando se realiza un "insert" o "update" las tablas de sistema tienen Triggers que evaluan ciertas condiciones para que un registro pueda ser insertado o actualizado...
>
>
>en algunos casos se invoca un procedimiento almacenado para actualizar una tabla 'x' y si dicha tabla tiene a su ves un trigger relacionado y este se "disparara" un mensaje correspondiente a la accion que no puede relacionarse...e aqui un ejemplo del codigo de un trigger :
>
>if NOT EXISTS(select 1
> from TAFU_CUEN_AHOR_MUNI t1, inserted t2
> where t1.CODI_BANC = t2.CODI_BANC
> and t1.NUME_CUEN_AHOR = t2.NUME_CUEN_AHOR)
> begin
> select @errno = 30002,
> @errmsg = 'No existe referencia en "TAFU_CUEN_AHOR_MUNI". No se creo registro en "TAFU_INGR_CUEN_AHOR".'
> raiserror @errno @errmsg
> rollback transaction
> RETURN
> end
>
>
>El problema que tengo es que algunas veces "el mensaje de error" no se muestra en visual foxpro, simplemente aparece un tipo MESSAGEBOX "vacio"....
>y de esta manera el usuario del sistema no puede saber que debe hacer....quita tiempo este asunto ya que hay que tomar el procedimiento + sus parametros y "correrlos" manualmente para entonses ver el mensaje de error.
>
>¿alguna sugerencia, o mejor practica para resolver este problema?
>
>de antemano muchas gracias