Retornar de un formulario secundario un Cursor al formulario Principal

187 views
Skip to first unread message

integral

unread,
Feb 27, 2026, 12:05:58 PMFeb 27
to Comunidad de Visual Foxpro en Español
Que tal amigos del Foro

Muy Buenos Días

Tengo el siguiente caso.

Cargo los datos ingresados en el formulario secundario a un Cursor, para luego con dichos campos grabarlos a la tabla del formulario principal en SqlServer 2019 

Luego de buscar varias alternativas para retornar varios campos a un formulario principal de tipo modal.

Encontré un ejemplo que propuso en aquel entonces el colega Walter Ojeda y deseo aplicarlo. ( Ver imagen adjunta) 

RETORNO_WALTER_OJEDA.jpg

Luego de ocultar el formulario al parecer se esta cerrando el cursor y por ende no llega a grabar los datos y marca error...

Agradezco sus comentarios y sugerencias..

Saludos,

Integral

Victor Espina

unread,
Feb 27, 2026, 12:47:18 PMFeb 27
to Comunidad de Visual Foxpro en Español
A mi en lo particular me gusta usar objetos para esto, pues cuando los pasas como parametro los pasas como REFERENCIA, no como valor, por lo que al volver del formulario hijo mantienen los valores almancenados en el.  Ejemplo:

FORMULARIO PRINCIPAL:
====================================

LOCAL oParams
oParams = CREATE("EMPTY")
ADDPROPERTY(oParams,"result", .F.)
ADDPROPERTY(oParams"data", CREATE("EMPTY"))
ADDPROPERTY(oParams.data,"nombre","")
ADDPROPERTY(oParams.data,"apellido","")

DO FORM hijoModal WITH oParams   && oParams pasa como referencia, no como valor
IF NOT oParams.result
   RETURN
ENDIF

LOCAL cSQL
cSQL = "INSERT INTO tabla (nombre, apellido) VALUES (?oData.nombre, ?oData.apellido)"

PRIVATE oData
oData = oParams.data
SQLEXEC(nconn, cSQL)



FORMULARIO HIJO
==========================

INIT:
LPARAMETERS poParams
THISFORM.addProperty("Params", poParams)  && Guardamos la referencia en el formulario para que no se pierda

GUARDAR:
WITH THISFORM.Params
  .result = .T.
  .data.nombre = THISFORM.txtNombre.Value
  .data.apellido = THISFORM.txtApellido.Value
ENDWITH
THISFORM.Release()



Saludos

Victor Espina

Zarlu

unread,
Feb 27, 2026, 2:06:29 PMFeb 27
to Comunidad de Visual Foxpro en Español
Buenas tardes Integral!

Dices...".. Luego de ocultar el formulario al parecer se esta cerrando el cursor..."

Sugerencia: 
Crea el cursor temporal antes de llamar al segundo formulario.  Quizá la DataSession deba ser 1.
Así seguirá disponible cuando se cierre el segundo formulario.

(o más complicado...regresa la estructura e información del cursor en un array para crearlo al retornar)
Suerte
zarlu
Chetumal, Quintana Roo, México

Jose Antonio Blasco

unread,
Mar 2, 2026, 9:59:35 AMMar 2
to publice...@googlegroups.com
Victor, como siempre claro y conciso.

Yo no lo necesitaba ahora, pero siempre viene bien un recordatorio. 

Gracias.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2



--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/cf8ef361-2a0a-467a-8edd-975d9c87ba8fn%40googlegroups.com.

Antonio Meza

unread,
Mar 2, 2026, 12:02:37 PMMar 2
to Comunidad de Visual Foxpro en Español
En mi caso uso lo que comentas Zarlu, la mejor forma es lo que comenta el Maestro Victor, PERO, VFP tiene la gran ventaja con los cursores algo que no hay en otros lenguajes y desaprovechar esa gran ventana pues ya es cuestión de necesidades y gustos.

En mi caso un cursor lo veo como un Objeto, entonces cumple con lo que comenta el maestro Victor, ya que un cursor tiene propiedades y métodos lo mismo que un Objeto, entonces si al final tengo que crear un Objeto y sus propiedades, pues mejor creo un cursor y sus propiedades y de un golpe obtengo todas la ventajas que me da un cursor.

El cursor o tabla se debe obtener en el primer formulario y debe estar con DataSession = 2 (Privada) si o si, pero el segundo formulario Modal debe estar con con DataSession = 1, para que de esta forma pueda interactuar con el cursor o tabla del primer formulario, por lo tanto todos los cambios que se hagan en el segundo formulario en automatico se tendrán en el primero porque estan manipulando el mismo cursor.

De hecho en 2015, escribi en mi blog sobre este tema, se los paso por si les interesa mi opinión personal jejeje

Victor Espina

unread,
Mar 4, 2026, 10:29:01 AMMar 4
to Comunidad de Visual Foxpro en Español
Si... en ese caso el cursor funciona como una especie de "memory buffer" que, dependiendo del caso, podria ser mas "amigable" que usar un objeto tradicional, sobre todo si se el formulario hijo generara varios registros en lugar de solo uno.

Como dices, es lo que hacia grande a VFP: multiples formas de solucionar el mismo problema.

Victor Espina

Zarlu

unread,
Mar 6, 2026, 4:39:59 PMMar 6
to Comunidad de Visual Foxpro en Español
Buenas tardes Maestros!

Creo que al final de cuentas el detalle está en la Data Session del form2.

Con  2 - Private Data Session no se podrá acceder al cursor creado en el form1
y el cursor creado en el form2 se destruirá al cerrar el form2 y no podrá acceder en el form1  (que es lo que comentaba el colega integral que le pasaba)

Entonces el punto es poder recuperar desde un form con Private Data Sessión un cursor.

Crearé un nuevo hilo como aporte de un código que parece funcionar.
Es complicado, para mi lo más sencillo es crear el cursor desde el primer form, pero ahí dejo la idea como las 1001 formas de hacerlo con el zorrito.

Suerte
zarlu
Chetumal, Quintana Roo, México




integral

unread,
Mar 9, 2026, 11:06:52 AM (12 days ago) Mar 9
to Comunidad de Visual Foxpro en Español
Que tal estimados colegas y Maestros

Muy Buenos Dias

Agradezco vuestra colaboración y apoyo a este servidor en la solución de algunos problemas que se van presentando en el camino.

VFP tiene la gran ventaja de trabajar con los Cursores algo que no hay en otros lenguajes.

Por lo demás es cuestión de necesidades y gustos.

Hasta la proxima

Saludos,

Integral
Reply all
Reply to author
Forward
0 new messages