Como salir de un PROCEDURE

131 views
Skip to first unread message

OmarE.

unread,
Aug 9, 2012, 12:46:27 PM8/9/12
to publice...@googlegroups.com
Buen dia...Como puedo salir de un procedimiento si no cumple una condicion:

PROCEDURE Pro1

SELECT * FROM Tabla1 INTO CURSOR Cur1

IF RECCOUNT("Cur1") = 0

***Aqui salir del Procedure

ENDIF

De antemano gracias

Pablo Daniel Pafa

unread,
Aug 9, 2012, 12:49:11 PM8/9/12
to publice...@googlegroups.com
debes poner RETURN 


--
 
 
 

OmarE.

unread,
Aug 9, 2012, 12:53:22 PM8/9/12
to publice...@googlegroups.com
Muchas gracias...Bendiciones...Que tengas un excelente dia!!!!

Carlos Miguel FARIAS

unread,
Aug 10, 2012, 7:20:31 AM8/10/12
to publice...@googlegroups.com
Aunque salir en medio de un procedure o function con un return no es elegante, es práctico y limpia la lógica del código.
Lo que hay tener cuidado es no salir del procedure o function cuando se está dentro de un bloque WITH...ENDWITH
Por lo que leído y experimentado, cuando se hace este tipo de salida, se queda colgada una referencia a elementos dentro del bloque que no son "limpiadas" (como con variables locales) que hacen que el programa se vuelva inestable.

Ej.

WITH THISFORM

... algo de código

   IF .campo.value = 1
      RETURN .T.
   ENDIF

... otro algo de código

ENDWITH

Tendría que resolverse con

LOCAL llCampo
llCampo = .F.
WITH THISFORM

... algo de código

   IF .campo.value = 1
      llCampo = .T.
   ELSE
    ... otro algo de código
   ENDIF
ENDWITH
IF llCampo
   RETURN
ENDIF

El uso de WITH ... ENDWITH, además de acortar el código, hace que la ejecución sea más rápida. Pero eso es tema para otro hilo.
Saludos: Miguel, La Pampa (RA)
 
--
 
 
 

HernanCano

unread,
Aug 10, 2012, 11:05:36 AM8/10/12
to publice...@googlegroups.com
Miguel:
la pregunta inicial no se refiere a salir dontro de una estructura WITH / ENDWITH.

La respuesta para Omar es "con un RETURN". Pero luego puedes aclarar que "dentro de una estructura WITH no debe haber un RETURN".

OmarE.

unread,
Aug 10, 2012, 11:18:19 AM8/10/12
to publice...@googlegroups.com
Muchas gracias por la sugerencia...En mi caso no uso WITH...ENDWITH pero lo tendre presente para aplicarlo en un futuro...SALUDOS!!!!!

Arnaldo Toledano

unread,
Aug 10, 2012, 11:26:26 AM8/10/12
to publice...@googlegroups.com
Miguel.

Hay algo que no me cierra con el WITH / ENDWITH.
Porque VFP en este caso no es Predictivo ?
O tengo algo mal configurado o algo por el estilo ?


Arnaldo Toledano
--
 
 
 

--
Arnaldo Toledano Tesys Informática Córdoba Argentina

Fox Learner

unread,
Aug 10, 2012, 12:36:04 PM8/10/12
to publice...@googlegroups.com
Arnaldo,

Como que intentas hacer dentro del With Endwith que dices que no te deja salir?..

Alguna pieza de codigo o pista?

Pablo Daniel Lissa

unread,
Aug 10, 2012, 12:47:24 PM8/10/12
to publice...@googlegroups.com
No creo que Arnaldo tenga problemas. "Hay algo que no me cierra" en Argentina, suele utilizarse para expresar "Hay algo que no me termina de convencer" o "que no termino de entender". Justo acá se confunde y, para algunos que lean el post de Arnaldo, sin la referencia, "algún formulario de su aplicación no se cierra". Jajaja.

Saludos.
------------------------------------------------------------------------------------------------------------------------

Fox Learner

unread,
Aug 10, 2012, 12:53:41 PM8/10/12
to publice...@googlegroups.com
Jajaja! Perdón. Me olvidé que las expresiones (o el sentido de las mismas) puede variar desde México hasta Argentina y cruzando el mar hasta España.. Saludos!

Arnaldo, revisa si no tienes un error de dedo. A mi ya me pasó con el SetAll, que no me desabilitaba algunos controles porque en vez de poner enabled, teclee "enadled" y me pasé horas para encontrar el error jeje

Arnaldo Toledano

unread,
Aug 10, 2012, 1:14:17 PM8/10/12
to publice...@googlegroups.com
Si bien varios solicitan escribir "internacionalmente" por allí me olvido y utilizo modismo.
Adema cuando escribí lo hice pensando en Miguel de La Pampa, Argentina.
En realidad lo que quise decir es lo siguiente.

Cuando escribís.

Thisform   y colocas el punto, VFP te indica que lo que podes escribir a continuación.
Para mi es MUY BUENO, puesto que me evita tipear erróneamente
En el caso de
WITH THISFORM.pf1.pag1.
    y paso a reglón seguido,   VFP deja de Sugerirme que escribir.
Ante esta eventualidad no lo utilizo, para evitar algún error  de tipeo.
Prefiero escribir mas, pero estar seguro de no equivocarme.
MI PREGUNTA.
Es normal que VFP no me sugiera o tengo algo mal configurado ?

Gracias por contestar y "ACLARAR" los modismo.

Arnaldo Toledano
  



El 10/08/2012 01:53 p.m., Fox Learner escribió:
Jajaja! Perdón. Me olvidé que las expresiones (o el sentido de las mismas) puede variar desde México hasta Argentina y cruzando el mar hasta España.. Saludos!

Arnaldo, revisa si no tienes un error de dedo. A mi ya me pasó con el SetAll, que no me desabilitaba algunos controles porque en vez de poner enabled, teclee "enadled" y me pasé horas para encontrar el error jeje
--
 
 
 

Pablo Daniel Lissa

unread,
Aug 10, 2012, 1:31:21 PM8/10/12
to publice...@googlegroups.com, arnaldo....@gmail.com
Ah, al final, ni yo que soy argentino había entendido del todo... En otras palabras, había algo que no me cerraba. Jajaja.

Es normal que dentro del bloque WITH - ENDWITH no funcione, no sé por qué. Lo que sí sé es que podés hacerlo funcionar agregando el tipo al que se hace referencia. Por ejemplo:
WITH thisform as Form

De esta forma, al poner el punto, sí, se muestran las opciones del Form.

Según tengo entendido, es para VFP 9.

Saludos.
------------------------------------------------------------------------------------------------------------------------------------

Pablo Daniel Lissa

unread,
Aug 10, 2012, 1:36:39 PM8/10/12
to publice...@googlegroups.com, arnaldo....@gmail.com
Hago una aclaración más, respecto a la pregunta, para que unificar criterios y se sepa de qué estamos hablando. Nos referimos a Intellisense dentro del bloque WITH - ENDWITH.

Saludos.
---------------------------------------------------------------------------------------------------------------------------------------

Fox Learner

unread,
Aug 10, 2012, 1:37:32 PM8/10/12
to publice...@googlegroups.com
Arnaldo, el tema de este hilo es "Como salir de un procedure". Para no desorganizar, te respondo en otro hilo con el tema porque no funciona el "Intellisense" con la estructura With EndWith.  Saludos!

Curiosamente, la wiki dice que el nombre "intellisense" se le ocurrio a un empleado de MS que andaba con unas cheves encima jeje

Carlos Miguel FARIAS

unread,
Aug 10, 2012, 6:57:55 PM8/10/12
to publice...@googlegroups.com
Es cierto que la pregunta original correspondia a la salida del procedure.
Aclaré lo del bloque WITH ENDWITH, porque en el caso de usarse, en mi caso, me daba errores si salia del procedure con un return.
Para entender el porque de la falla al salir, hay que remitirse a como maneja las variables el vfp, pero eso es harina de otro costal.
Si aclare lo del problema, es porque a mi me llevo muchos dolores de cabeza detectar porque fallaba y en algún lado (no recuerdo donde) encontre la causa.

Saludos: Miguel, La Pampa (RA)

--
 
 
 

Reply all
Reply to author
Forward
0 new messages