Crear Cursores desde cero
hola amigo quisiera saber como hacer un cursor desde cero si, en que evento va que función cumple y todas esa cosas, haber si me podrías echar una manito
1 respuesta
Es un placer saludarte. Espero andes bien y ojala mi contribución sea de tu utilidad y agrado. Te escribe la respuesta en 2 o 3 bloques... porque el editor de texto de la pagina me ha dado algunos dolores de cabeza.! Bien acá va:
¿Cursores? Excelente opción. Foxpro es un poderoso lenguaje donde el manejo de cursores temporales es magnifico.
Un cursor es "casi" igual a una tabla física. Tiene campos, registros, podes agregarle indices... datos, podes eliminarle datos... modificarle datos y realizar operaciones SQL o aritméticas, aplicarle funciones, comandos y validaciones.
Un cursor se diferencia de una tabla física (.dbf) debido precisamente a que no es una extensión física en tu carpeta... si no que existe en una session de datos mientras ésta este abierta y se crea en la memoria de tu maquina. Si vos creas una tabla física (con el diseñador de tablas o por comando create table) la tenes que guardar en tu carpeta... asociada a tu base de datos o como tabla libre... con un nombre + la extensión .dbf (clientes.dbf, proveedores.dbf, etc). A la tabla le agregas campos, indices, registros y los podes modificar y eliminar.
Un cursor puede hacer exactamente lo mismo solo que no es un fichero físico.
Los cursores, según su función, pueden clasificarse en: cursores de lectura y cursores de lectura escritura. Existen 2 formas de crear un cursor:
Por medio de una consulta SQL o por medio del comando CREATE CURSOR...!
1 - CURSOR SQL - Un cursor creado a partir de una consulta SQL, por lo general tiene como función la visualización de los datos de una tabla física. Sirven para extraer datos y consultarlos (de ahí el nombre de "consulta"), así como para realizar operaciones... validaciones, comparaciones. Por ejemplo:
Imaginemos que tenemos una tabla física que se llama "clientes.dbf" asociada a una base de datos en tu proyecto. Imagina que tenes un formulario que es para ver los clientes activos que tenes...! Si das click para llamar al form... cuando el form arranca podes ver en un GRID (o algún otro control) los datos de los clientes (nombre, dirección, teléfono, adeudo). Para ver los datos, usamos una consulta a la tabla física clientes.dbf. Los datos se cargaron al iniciar el form... SE EXTRAJERON de la tabla y se cargaron en un cursor para mostrarlos, así:
En el evento INIT() del form:
**--Seleccionamos la tabla física, la cual debe estar en el entorno de datos
**--del form.
SELECT * FROM clientes WHERE estadocliente = "ACTIVO" INTO CURSOR temp1
**--Seleccionamos el cursor
SELECT temp1
GO TOP
**--Enlazamos al grid el cursor.
THISFORM.Grid1.RecordSource = "temp1"
**--//
THISFORM. Refresh
Y listo.
Ves el cursor se llama temp1 y es una extracción de los datos de la tabla clientes. El * después del comando SELECT indica que se deben tomar todos los registros de todos los campos... es decir, todos los datos del la tabla clientes. WHERE es una declaración para filtrar los datos. En este caso, yo uso WHERE para filtrar los datos cuyo valor del campo estadocliente sea igual a "ACTIVOS". Vos aquí controlas un filtro para tus datos. Podes evaluar cualquier condición para cualquier campo. Y por ultimo INTO CURSOR es para designar el nombre del cursor. En este caso es temp1.
Luego ya podes usar temp1 como una tabla. Si haces
SELECT temp1
BROWSE
PODRÁS ver los datos del cursor.
Ahora... en la mayoría de los casos... es raro usar TODOS los datos de la tabla... por lo general requerimos ver algunos campos solamente. Imagina que solo quiero los nombres de los clientes... y estos están contenidos en un campo "nombres". Entonces, después del SELECT yo nombro los campos que deseo extraer:
SELECT nombre FROM clientes WHERE estadocliente = "ACTIVO" INTO CURSOR temp1
Si deseo, puedo extraer mas campos, separando los mismos por comas:
SELECT nombre, teléfono, dirección FROM...
Ves. Es re fácil. A este punto, el cursor solo es para lectura. No podes agregarle nada ni modificar ni eliminarle nada. Si agregas algún dato a la tabla física y quieres verlo en el cursor... tenes que re generarlo. Si no... estará cargado con los datos anteriores a la modificación.
Si quieres que el cursor sea modifcable, agrega al final de la linea de código el comando READWRITE y listo.
Si quieres cerrar un cursor... debes declarar así EN EL method RELEASE del form.
IF USED('temp1')
USE IN temp1
Endif
**--//
Un
Cursor lo podes crear en cualquier momento... desde cualquier método
que quieras.. por ejemplo, en el evento click de algún botón... o en el
init del form... etc.
Ahora... la segunda forma es:
2 - Cursor CREATE CURSOR.
El comando CREATE CURSOR te permite crear un cursor modificable enel init de un programa o form.
La sintaxis va así:
CREATE CURSOR nombrecursor(código N(3), nombre C(50), fecha D(8), adeudo N(12,2))
SELECT nombrecursor
GO TOP
Ahí creas el cursor. A este, de una, podes aplicarle INSERT, UPDATE, REPLACE, DELETE. Es modificable en tiempo de lectura. :)
Es un fichero que existe en la memoria de tu programa o session y de igual forma se cierra que el cursor SQL.
POR
LO general, se usan para cargar datos temporales... por ejemplo: en un
form de facturación... yo cargo los productos que llevara el cliente.
Todo de forma temporal en un cursor... sin tocar la tabla física. Al
cursor le aplico un INSERT INTO y carga los productos. Si modifico algún
dato... aplico un UPDATE o REPLACE. Si el cliente no llevara un
producto... puedo aplicarle un DELETE y listo.
Ya
Cuando estoy seguro que el cliente llevara... aplico un "volcado" del
cursor en latabla y actualizo. La tabla solo la use para insertar los
datos. El cursor mantuvo los datos de forma temporal. Luego la salir de
la session o del form.. el cursor se destruye y listo.
También,,,
podes usar un cursor de este tipo para mostrar datos... si por ejemplo
queremos cargar los datos de la tabla clientes en un cursor modifcable..
Creamos el cursor con la misma estructura de la tabla... para eso
usamos este código:
LOCAL ARRAY aStruct(1)
AFIELDS(aStruct, "clientes")
CREATE CURSOR temp1 FROM ARRAY aStruct
Y listo. Ya tenes un cursor con la misma estructura de la tabla tanto en campos y tipos de datos...! Pero el cursor esta vacío.
Para insertar los datos de la tabla en el cursor:
SELECT temp1
APPEND FROM DBF(clientes)
**--//
Y listo. Si haces un
SELECT temp1
Browse
Podes ver el cursor.
Ya
Podes usarlo como una tabla... es mas cómodo porque podes modificar e
insertar datos de una...! Es mas parecido a una tabla que el cursor SQL y
es mas versátil.
Bien... esto fue solo una pequeña explicación... algo algo a grandes rasgos hehe pero es lo mas básico. Hay muchos aspectos que tratar.
Espero tus comentarios y cualquier duda... hazla! No tengas reparo en hacerla. Al principio nos puede enredar un poco pero luego así.. preguntando y preguntado... vas conociendo mas!
Un abrazo!
Desde Managua, NIcaragua!
Ravenn :D :D :D
Espero andes bien.
La forma mas adecuada para imprimir un cursor es crear un reporte y mandar el cursor por ahí a imprimir.
¿Has tenido experiencia con los reportes? Tengo un pequeño ejemplo de un formulario de búsquedas que usa un cursor temporal. Ahí esta la forma de como se puede hacer una búsqueda de datos. Así mismo, la forma en mandar a imprimir los datos del cursor por un reporte. Es re fácil.
Dame tu dirección de correo para enviártelo. Así lo comprenderás mejor y por cada duda que te surja, me mandas a avisar para ayudarte a aclarar!
- Compartir respuesta