Aporte. Recuperar cursor como "Objeto" de Formulario hijo/secundario

99 views
Skip to first unread message

Zarlu

unread,
Mar 6, 2026, 5:05:16 PMMar 6
to Comunidad de Visual Foxpro en Español
Buenas tardes foxeros!

Derivado de un hilo anterior comparto código para recuperar cursor creado en formulario hijo o secundario  con Private Data Session

- El Form1 llama al Form2
- Form2  crea el cursor
- Se almacena la estructura e información del cursor en un objeto collection
- Al cerrar el form2 se destruye el cursor
- Se devuelve el objeto collection al Form1
- Form1 crea un cursor con el objeto recibido

Hay maneras menos complicadas para resolver situaciones en que se requiera recuperar el cursor. Esto es sólo un ejercicio (incluso para retornar más de una variable como objeto)

Adjunto los formularios y un prg que contiene mis pruebas de  la lógica del código.

Suerte
zarlu
Chetumal, Quintana Roo, México

 




cursorobjeto.prg
form2.2SCT
form1.2scx
form1.2SCT
form2.2scx

Victor Espina

unread,
Mar 7, 2026, 7:46:14 AMMar 7
to Comunidad de Visual Foxpro en Español
Mi libreria JSON ofrece una forma de hacer esto:

a) Convertir cursor en string:

cDatos = JSON.stringify("ALIAS":, .T., THISFORM.dataSessionID)

b) Recuperar cursor 

JSON.parseCursor(cDatos, "ALIAS", THISFORM.dataSessionID)


Lo bueno de este metodo es que respeta la estructura exacta del cursor original al recrearlo con parseCursor.

Saludos

Victor Espina

Victor Espina

unread,
Mar 7, 2026, 7:47:27 AMMar 7
to Comunidad de Visual Foxpro en Español
Olvide agregar una nota:  para cursores con muchos registros, el enfoque de Zartu puede ser mas rapido y eficiente que utilizar JSON.

Saludos

Victor Espina

integral

unread,
Mar 9, 2026, 11:23:31 AMMar 9
to Comunidad de Visual Foxpro en Español
Que tal estimados colegas. 

Muy Buenos Días

Me escribe un colega para preguntarme cual fue la solución al problema presentado.

Aquí la solución resumida que halle.

FORM: CUOTAS                         INIT

_SCREEN.BOTON = .T.
********************************************************************************
***  Crea un Cursor en Blanco con los campos a utilizar al Cursor de Origen  ***
********************************************************************************
SELECT moda_pago2, med_pago2, time_pago2, num_oper2, tipo_oper2 FROM Cursor_Temp_Filtro WHERE .F. INTO CURSOR Cur_Trabajador READWRITE

* -- Llamamos al Form Secundario
 DO FORM ".\FORMS\frm_adicional.scx" WITH lnLeft, lnTop, THIS.Name NAME oForm_Adicion LINKED
 

FORM: Secundario                     INIT
LPARAMETERS xLeft , xlnTop, oName


Para cerrar el formulario utilizamos

Thisform.Hide

Al momento de grabar :

m.moda_pago2 = Cur_Trabajador.moda_pago2 
m.med_pago2   = Cur_Trabajador.med_pago2
...
...

DATA_SESSION.png

Y Listo...

Hasta la próxima 

Saludos,

Integral
Reply all
Reply to author
Forward
0 new messages