Es un placer saludarte. Espero poder ayudarte.
Al parecer estas interesado en el uso de cursores temporales. Dejame felicitarte por tan buena elección. Vas por excelente camino.
En términos sencillos y sin preámbulos... un cursor es una tabla temporal en la cual podes extraer, mediante condiciones, y mantener los datos de una tabla física de una forma mas versátil. Es una extensión visual de tu tabla física. El cursor no existe físicamente... existe solo mientras la instancia donde se creo esté activa y mientras no mandes a cerrarlo (con el comando USE). Se almacena en la memoria aleatoria e tu maquina.
Visual FoxPro puede manejar de una forma muyyyyyyyyyy potente los cursores. Es una de sus caracterisicas mas fundamentales e importantes.
Existes 2 tipos de cursores: los que son solo de LECTURA y los que son de LECTURA/ESCRITURA. (Aunque los de solo lectura pueden transformarse a escritura también).
¿Cómo crear un cursor temporal?
Existen 2 formas de crear un cursor... en base al tipo de cursor deseado.
1 - Si necesitas extraer los datos de una tabla para consultarlos.. por ejemplo cargar un grid... o algunos textos, lo correcto es hacer la consulta mediante el comando SELECT SQL.
**--Realizamos la consulta
SELECT * FROM tabla1 INTO CURSOR temp1
**--//
En este caso, select extrae los campos deseados. Ves que hay un * seguidamente... eso significa que el SELECT va a entraer toda la información de TODOS LOS CAMPOS que tiene la tabla. No obstante.. muchas veces (mayoría) no necesitamos todos los campos.. si no uno o 2 o 3 campos específicos. Si usas * el cursor va a cargar todos los campos y el cursor puede ponerse algo "pesado".
Para extraer solo algunos campos... seguidamente del select nombra los campos:
SELECT código, nombre, apellido FROM tabla1 INTO CURSOR temp1
Ves! :) Ahora... FROM indica la fuente de donde se extraen los datos.. es decir, es el nombre de la tabla. Luego tenes INTO CURSOR que representa el destino donde se alojara la consulta, es decir, el nombre del cursor. En este caso se llama temp1.
Bien.. ahora que ya tenemos temp1 cargado... ya podemos usarlo para cargar un grid o algunos textos... etc. Funciona como una tabla... solo que temporal. No podes insertarle registros ni editar los existentes.
Para cargar un grid, va así:
THISFORM.Grid1.RecordSource = "temp1"
THISFORM.Grid1.Column1.ControlSource = "temp1.código"
THISFORM.Grid1.Column2.ControlSource = "temp1.nombre"
**--y seguís aquí
**--
THISFORM.Grid1.Refresh
**--//
¿Ves qué fácil?