No logro ver los mensajes de error de SQL Server creados con RAISERROR

569 views
Skip to first unread message

Marlon Cabrera

unread,
Jun 24, 2010, 11:07:35 AM6/24/10
to publice...@googlegroups.com
Buenos días
 
Compañeros he creado unos procedimientos almacenados en SQL Server y le he metido unos RAISERROR , pero desde Visual Fox no logro coger los errores. He creado en VFP algo como esto
 
 
TRY
   SQLEXEC(MICONECION,cSQL,'resultado')
CATCH TO oException
    AERROR(aErrores)
    DO rutinaerroresSQL
ENDTRY
 
 
Pero eso no me sirve entonces pase a esto
 
TRY
   nResult = SQLEXEC(MICONECION,cSQL,'resultado')
  IF nResult > 0
      cError = message()                   
       DO rutinaerrores
ENDIF
 
Pero no me gusta además no se como descargar el message para el siguiente error.
 
 

Luis Mata

unread,
Jun 24, 2010, 11:16:46 AM6/24/10
to publice...@googlegroups.com
Esto es mas que sufiniente
 
nResult = SQLEXEC(MICONECION,cSQL,'resultado')
  IF nResult < 0
      messagebox("Error no se pudo ejecutar la consulta")
else
    messagebox("Consulta exitosa")
    - MAS EVENTOS -
 
ENDIF

Marlon Cabrera

unread,
Jun 24, 2010, 11:45:31 AM6/24/10
to publice...@googlegroups.com
Bueno eso sí, pero queria traerme el mensaje del SQL Server ya que son varias las opciones para informar por que fue que paso el error, así que queria recuperar el RAISERROR.

Luis Mata

unread,
Jun 24, 2010, 11:44:51 AM6/24/10
to publice...@googlegroups.com
Si consistencias bien tu BD no tendras este problema. revisa tu tabla en la BD prueba en el editor de sql la sentencia que estas tratando de hacer si ves la falla, cortala de raiz.
 
Luis

Marlon Cabrera

unread,
Jun 24, 2010, 12:23:29 PM6/24/10
to publice...@googlegroups.com
Primero muchas gracias por tu apoyo, y segudo te cuento un poco más.
 
El asunto es que el procedimiento almacenado esta hecho para descontar artículos del inventario y cree todas las pistas en la base de datos sobre este dato. Además tiene varias reglas por que son varias las aplicaciones que la usan.
 
Dentro del SP existe una regla la cual es que no se puede dejar la existencia menor a cero, así que antes de restar lo solicitado verifica y si lo solicitado es mayor a la existencia ejecutar un RAISERROR y así hay muchas validaciones más, entonces lo que se quiere es que se regrese siempre el error de la base de datos para que sea consistente con todas las aplicaciones.

extremo

unread,
Jun 24, 2010, 12:33:52 PM6/24/10
to Comunidad de Visual Foxpro en Español
Hola

Yo siempre uso lo siguiente y siempre me entrega el error exacto:

if SQLEXEC(MICONECION,cSQL,'resultado') < 1
aerror(arr)
messagebox("Ocurrio el siguiente error sql:" + chr(13) + arr(2))
endif


Bendiciones

Luis Mata

unread,
Jun 24, 2010, 12:38:21 PM6/24/10
to publice...@googlegroups.com
Ah ya!!!
 
bueno en tu proecdimiento almacenado adiciona este  parametro de entrada
 
en el SQL
 
ALTER PROC MIPROC @... , @Devolverme_el_error varchar(100) output
 
En vfp
 
errordevuleto = ''
r=sqlexec(micon, "exec MIPROC --variables--, ?@errordevuleto")
 
?errordevuleto
 
ahi capturas el error en el sql y se lo retornas al vfp
 
esta variable ?@captura un output del sql
 
Suerte

Marlon Cabrera

unread,
Jun 24, 2010, 1:20:49 PM6/24/10
to publice...@googlegroups.com
Excelente!!! muchas gracias
Reply all
Reply to author
Forward
0 new messages