Firebird21 (Pronto nos mudamos, preguntas en el forol)

Por favor ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Búsqueda Avanzada  

Noticias:

Tus inquietudes seran respondidas en breve..

Autor Tema: Problemas al momento de enviar y recibir parametros a un SP  (Leído 722 veces)

0 Usuarios y 1 Visitante están viendo este tema.

dariobecerrabegazo

  • Bit
  • *
  • Karma: +0/-0
  • Mensajes: 1
    • Ver Perfil
Problemas al momento de enviar y recibir parametros a un SP
« en: Noviembre 22, 2017, 12:52:19 am »

Quisiera que me ayuden. Quiero ejecutar un procedimiento almacenado en la que pueda enviar parametros y recibir con el SQLExec() en VFP9, por favor ejemplos. Estoy viendo algunos ejemplos, tales como este:     

    SQLEXEC(m.lnConn, "exec myProc ?lnPercent, ?@lnOutput")

Pero no me funciona como quiero. Cada vez que lo ejecuto me sale una ventanita emergente para ingresar los valores. Eso es lo que no quiero. Quiero enviarle el parámetro y que me retorne un valor por código, sin necesidad de ingresar manualmente.

Gracias.
En línea


Walter

  • Administrator
  • Gigabyte
  • *****
  • Karma: +17/-0
  • Mensajes: 505
    • Ver Perfil
Re:Problemas al momento de enviar y recibir parametros a un SP
« Respuesta #1 en: Noviembre 22, 2017, 07:25:39 am »

Hola

Debes escribir así:

Código: [Seleccionar]
PRIVATE pnPorcentaje, pnOutput
LOCAL lcComando, llComandoOK, lnElementos

pnPorcentaje = 12.34
pnOutput = 567

lcComando = "EXECUTE PROCEDURE MyProc (?pnPorcentaje, ?pnOutput)"

llComandoOK = SQLEXEC(lnConn, lcComando) = 1

IF llComandoOK
   -- Aquí los comandos cuando la función SQLEXEC() tuvo éxito
ELSE
  lnElementos = AERROR(laError)
  IF lnElementos > 0
    =MessageBox("Ocurrió el error: " + Transform(laError[1]) + "  " + laError[2])
  ENDIF
ENDIF

Los parámetros que quieres enviar deben ser PRIVATE, no LOCAL. Es conveniente que guardes el valor que te devuelve la función SQLEXEC() en una variable para saber si esa función tuvo éxito o no.

En el ejemplo de arriba, en la variable llComandoOK obtendrás el resultado de la ejecución de la función SQLEXEC(). Un valor de -1 significa error, un valor de 1 significa ejecución OK. Puedes usar esos valores si quieres, pero yo prefiero guardarlos en una variable de tipo lógico cuyo valor sea .T. si hubo éxito o .F. si hubo algún error, por eso la comparación con el número 1.

En el caso de que hubiera ocurrido algún error, puedes capturarlo con la función AERROR(). Esa función toma como parámetro un array (si no existe, lo crea) que tiene 7 elementos, el primer elemento es el número del error y el segundo elemento es el texto del error.

Si la función tuvo éxito, los valores devueltos por tu stored procedure se guardan en un cursor. Un cursor es una tabla temporaria, se destruye automáticamente cuando tu aplicación termina. Para ver el contenido de ese cursor puedes escribir el comando BROWSE.

La ventana emergente aparece cuando el Visual FoxPro no conoce cuales son los valores de los parámetros y por eso te pide que los introduzcas. El motivo es que tus parámetros eran LOCAL, si los pones como PRIVATE funcionará bien.

Saludos.

Walter.

« Última modificación: Noviembre 22, 2017, 07:39:34 am por Walter »
En línea
 

Enlaces

Blog de Firebird21 WebMaster