En que evento utilizo para generar el cursor temporal

hola que tal quisiera que explicara paso a paso desde cero si no es mucha molestia sobre los cursores temporales y si pudieras hacer un ejemplo con gusto amigo gracias....!

1 respuesta

Respuesta
1

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?

2 - Cursor lectura/escritura.
La otra forma de crear un cursor temporal es mediante:
Create cursor...
Con est forma... creamos el cursor temporal en el INIT de algún form. Al crearlo, definimos los campos y los tipos de datos... como si fuera una tabla solo que temporal. Este tipo de cursores acepta inserción de datos y edición de los mismo. Son muy utilices cuando necesitas cargar datos y validarlos antes de insertarlos en alguna tabla física.
Por ejemplo: para una aplicación de facturación, se utiliza un cursor temporal creado con create cursor para ir guardando temporalmente los productos que vas a vender... si por ejemplo el cliente decide no llevar 1 producto.. lo eliminas del cursor...! Una vez validado todo... solo "volcás" el cursor en la tabla. Como ves... no tocamos la tabla si no solo para guardar definitivamente los datos. Mientras hacías la factura ibas cargando el cursor temporal y editandolo. Asegurastes la integridad de la información.
Algunos programadores, en estos casos, cometen el error de ir insertando los registros directamente en la tabla física y si eliminan o editan.. lo hacen sobre la tabla física.. eso es un tremendo error! Los datos deben entrar a la tabla ya validados.
Un cursor se crea así:
**--
CREATE CURSOR temp1(código N(10), nombre C(30), apellido C(30), fecha D(8))
Esto siempre se crea en el INIT de los forms. A este punto... creaste solo la estructura... no tiene registros ingresados... pero ya esta activo.
Luego solo vas insertando los registros en el tal cual fuera una tabla con INSERT INTO! O eliminando con DELETE... o editando con REPLACE.
Si te fijas... tenemos temp1 y seguidamente nombramos al campo y el tipo de datos + la exetnsion.
Código: es numérico N y con una extensión de 10. Nombre es carácter C con extensión de 30.
N = NUMÉRICO
C = CARÁCTER
D = FECHA (siempre es extensión 8)
Para insertarle algún registro es normal:
Select temp1
INSERT INTO temp1(código, nombre, apellido) VALUES(100, "Juan Jose", "Perez Ortega")
Para guardar luego el cursor y los datos en la tabla física (una vez ya validado todo), tenes 2 opciones. Podes hacer un escaneo del cursor e ir agregando a la tabla cada registro:
SELECT temp1
SCAN
INSERT INTO tabla1(código, nombre, apellido) VALUES(temp1.código, temp1.nombre, temp1apellido)
Endscan
Tableupdate(.T.)
**--//
O podes volcar todo el cursor directamente en la tabla. No obstante, esta opción es permisible SI Y SOLO SI la tabla física y el cursor tienen EXACTAMENTE LA MISMA ESTRUCTURA, CAMPOS Y TIPOS DE DATOS. Veamos.
Ahora... podes crear un cursor de este tipo basado en la estructura de una tabla ya existente. Por ejemplo... tenemos la tabla1 y queremos un cursor con exactamente la misma estructura. Para eso, en le init del form, colocamos esto
LOCAL ARRAY aStruct(1)
=AFIELDS(aStruct, "tabla1")
CREATE CURSOR temp1 FROM ARRAY aStruct
Select temp1
**---//
Y listo. Ya el cursor tiene la misma estructura de la tabla.
Si quieres rellenar el cursor con todos los datos de la tabla, va así:
SELECT temp1
APPEND FROM DBF("tabla1")
**--
Y ahí ya cargastes el cursor con los datos de la tabla.
Ahora si vos cargas el cursor y quieres volcarlo en la tabla, va así:
SELECT tabla1
APPEND FROM DBF('temp1')
**--//
Y listo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas