Introducción a la Programación en Visual Foxpro9

Este proyecto esta dirigido a todas aquellas personas que quieran iniciarse en el mundo de la programación estructurada y basada en objetos, en este manual de apuntes trato de obviar la teoría tediosa y por el contrario incentivar a los estudiantes de informática y público en general al estudio de esta poderosa herramienta de programación mediante ejercicios totalmente prácticos; es necesario tener conocimientos básicos de manejo de bases de datos y de lógica de programación. El Autor.

Antes de comenzar a programas es necesario aprender a declarar variables de memoria, usted se preguntará que es una variable de memoria y para que sirve? Pues bueno una variable es una porción de memoria del computador que sirve para almacenar un valor o un dato concreto. En la vida practica se utilizan variables para poder realizar cálculos matemáticos dentro del programa. En este ejemplo al momento de definir y cargar las variables de memoria cambiaran los valores de las etiquetas que se encuentran en la parte inferior. La instrucción para crear variables de memoria es : ‘STORE’ ó ‘=’, Ej:

La programación del Botón ‘Definir y encerar variables’ del evento ‘Click’ :

* - Definición de variables de tipo LOCALES.

LOCAL DatoFECHA, DatoNUMERO, DatoCADENA

* - Enceramiento de variables.

STORE date() to DatoFECHA

STORE 0 to DatoNUMERO

STORE space(10) to DatoCADENA

* - Cargar datos.

DatoFECHA = Ctod("01/01/2002")

DatoNUMERO = 100

DatoCADENA = "Carlos"

* - Imprimir valores de las variables.

thisform.label1.caption=dtoc(DatoFECHA)

thisform.label2.caption=str(DatoNUMERO)

thisform.label3.caption=DatoCADENA

* - Actualizar formulario.

thisform.refresh

* - Aquí usamos datos fijos y no extraemos datos de ninguna tabla.

* - fin.

La programación del Botón ‘Definir y encerar variables’ del evento ‘Click’ :

* - Definicion de variables de tipo PUBLICAS.

PUBLIC DatoFECHA, DatoNUMERO, DatoCADENA

* - Enceramiento de variables.

STORE date() to DatoFECHA

STORE 0 to DatoNUMERO

STORE space(10) to DatoCADENA

* - Cargar datos de la tabla a las

* - variables de memoria.

select TB1

DatoFECHA = FECHA

DatoNUMERO = NUMERO

DatoCADENA = CADENA

* - Imprimir valores de las variables.

thisform.label1.caption=dtoc(DatoFECHA)

thisform.label2.caption=str(DatoNUMERO)

thisform.label3.caption=DatoCADENA

* - Actualizar formulario.

thisform.refresh

* - Aquí creamos variables de memoria que almacenaran datos de una tabla,

* - la tabla utilizada tiene que abrirse en el entorno de datos previamente.

* - fin.

La programación del Botón ‘Descargar variables de memoria’ del evento ‘Click’ :

* - Eliminar de memoria las variables.

release DatoFECHA, DatoNUMERO, DatoCADENA

* - fin.

Para realizar cálculos y almacenarlos en variables de memoria es muy útil utilizar la instrucción ‘CALCULATE’. Ejemplo:

Botón ‘Calculate SUM’ evento ‘Click’ :

* - OBTENCION DE LA SUMA TOTAL.

local calculo

* - selección de la tabla.

select numeros

calculate sum(valor) to m.calculo for valor>50

* - presentacion de resultados.

thisform.label1.caption = "Suma Total : "+alltrim(str(m.calculo))

* - actualizar formulario principal.

thisform.refresh

* - fin.

Botón ‘Calculate AVG’ evento ‘Click’ :

* - OBTENCION DEL PROMEDIO.

local calculo

* - seleccion de la tabla.

select numeros

calculate avg(valor) to m.calculo for valor<30

* - presentacion de resultados.

thisform.label1.caption = "Promedio : "+alltrim(str(m.calculo))

* - actualizar formulario principal.

thisform.refresh

* - fin.

Botón ‘Calculate MIN’ evento ‘Click’ :

* - OBTENCION DEL NUMERO MENOR.

local calculo

* - selección de la tabla.

select numeros

calculate min(valor) to m.calculo for valor>3

* - presentación de resultados.

thisform.label1.caption = "Numero Menor : "+alltrim(str(m.calculo))

* - actualizar formulario principal.

thisform.refresh

* - fin.

Botón ‘Calculate MAX’ evento ‘Click’ :

* - OBTENCION DEL NUMERO MAYOR.

local calculo

* - selección de la tabla.

select numeros

calculate max(valor) to m.calculo for valor<100

* - presentación de resultados.

thisform.label1.caption = "Numero Mayor : "+alltrim(str(m.calculo))

* - actualizar formulario principal.

thisform.refresh

* - fin

Aquí presento otro ejemplo de la instrucción ‘Calculate’ utilizada generalmente para generar un código y almacenarlo en una variable especifica, aquí también vemos como se implementa el bucle de control ‘IF... ELSE... ENDIF’ y el bucle de control ‘DO CASE’, el proceso es el siguiente:

Botón ‘Generar’ evento ‘Click’:

* - Autor: Juan Carlos Romero Jijón.

* - definir variables.

local NROG, CF

* - encerar variables.

* - cargar datos.

select generar

* - Validación, si hay registros en la tabla.

if reccount()>0 then

* - obtener el numero mayor.

calculate max(val(substr(codigo,4,4))) to NROG

* - incrementar valor mediante un contador.

NROG=NROG+1

* - bucle condicional para controlar los ceros.

do case

case NROG<10

CF="CLI"+"000"+alltrim(str(NROG))

case nrog>9 and nrog<100

CF="CLI"+"00"+alltrim(str(NROG))

case nrog>99 and nrog<1000

CF="CLI"+"0"+alltrim(str(NROG))

case nrog>999 and nrog<10000

CF="CLI"+alltrim(str(NROG))

endcase

else

* - se crea el primer elemento.

CF="CLI"+"0001"

endif

* - devolver valor al text.

thisform.text1.value = CF

* - actualizar formulario principal.

thisform.refresh

* - fin.

A Continuación presento la utilización del bucle de repetición ‘DO WHILE’ que por lo general es utilizado para recorrer los registros de una tabla, es necesario abrir la estructura en el entorno de datos. Ejemplo:

El Botón ‘Calculo de nro. Mayor y su código’ evento ‘Click’:

* - definir variables.

local DATOcodigo, DATOtotal

* - encerar variables.

DATOcodigo=space(3)

DATOvalor=0

DATOtotal=0

* - RECORRER TODOS LOS REGISTROS DE LA TABLA.

* - extraer el nro. factura con su respectivo

* - valor(fact. cuyo total es el mayor).

select factvta

go top

do while not eof()

DATOvalor=total

if DATOtotal<DATOvalor then

DATOcodigo=factura

DATOtotal=total

endif

select factvta

skip

enddo

* - mensaje.

wait windows "Factura : "+DATOcodigo +" "+"Valor : "+alltrim(str(DATOtotal))

* - fin.

En este ejercicio aprenderemos a eliminar los registros lógicamente y físicamente de las estructuras de datos, las instrucciones para eliminar registros son : ‘DELETE’, ‘PACK’ y ‘ZAP’ y ‘RECALL’. ejemplo:

Botón ‘Borrar Todos’ evento ‘Click’:

* - seleccionar la tabla especifica.

select factvta

* - borrar todos los registros.

delete all

wait windows "Registros Eliminados"

* - fin.

Botón ‘Recuperar Todos’ evento ‘Click’:

* - seleccionar la tabla.

select factvta

* - recuperar todos los registros eliminados

* - lógicamente.

recall all

wait windows "Registros Recuperados"

* - fin.

Botón ‘empaquetar registros’ evento ‘Click’:

* - seleccionar la tabla.

select factvta

* - elimina físicamente los registros

* - marcados con la marca de borrado lógico.

pack

wait windows "Registros Eliminados Físicamente"

* - fin.

Botón ‘Zapear registros’ evento ‘Click’:

* - proceso de eliminación físico de todos los

* - registros de la tabla.

select factvta

zap

wait windows "Registros Eliminados Físicamente"

* - fin.

Nota: Para poder realizar procesos con estas instrucciones es necesario que la tabla este en modo exclusivo.

En el siguiente ejemplo elimino registros pero PREVIO UNA CONDICION DE FECHA!. Ejemplo:

Botón ‘Borrar Fechas Coincidentes’ evento ‘Click’:

local datoFECHA

datoFECHA=ctod(thisform.text1.text)

select factvta

delete all for fecha = datoFECHA

wait windows "Registros Coincidentes Eliminados"

Botón ‘Recuperar Fechas Coincidentes’ evento ‘Click’:

local datoFECHA

datoFECHA=ctod(thisform.text1.text)

select factvta

recall all for fecha = datoFECHA

wait windows "Registros Coincidentes Recuperados

Boton ‘Visualizar Registros(browse) evento ‘Click’:

select factvta

browse;

noedit;

noappend;

nodelete

* - fin.

Aquí vamos a realizar un filtro de datos, se utiliza la instrucción ‘SET FILTER TO’, Ejemplo:

Botón ‘Filtrar’ evento ‘Click’:

* - FILTRAR REGISTROS.

PUBLIC DatoFILTRO

DatoFILTRO=upper(alltrim(thisform.text1.value))

select tb1

set filter to upper(alltrim(facturas))=DatoFILTRO

* - fin.

Botón ‘Visualizar Datos’ evento ‘Click’:

* - VISUALIZAR DATOS.

select tb1

browse

* - fin.

Botón ‘Romper Filtro’ evento ‘Click’:

* - ROMPER FILTRO ANTERIOR.

select tb1

set filter to

* - fin.

En este ejemplo creamos índices de tablas mediante la instrucción ‘INDEX ON’, como referencia debo indicar que ya no se utilizan índices IDX sino CDX porque son mas compactos y estables. Ejemplo:

Botón ‘Indexar Campos’ evento ‘Click’:

* - cerrar estructuras.

close tables

* - seleccionar área de trabajo y apertura

* - de tablas.

select 0

use clientes

* - creacion de etiquetas.

index on codigo tag etiqueta1

index on nombres tag etiqueta2

index on apellidos tag etiqueta3

index on ciudad tag etiqueta4

* - mensaje de finalización.

wait windows "Creación de índices FINALIZADA!"

Botón ‘Etiqueta Código’ evento ‘Click’:

* - ordenar por el código.

select clientes

set order to tag etiqueta1

* - fin.

Botón ‘Etiqueta Nombre’ evento ‘Click’:

* - ordenar por el nombre.

select clientes

set order to tag etiqueta2

* - fin.

Botón ‘Etiqueta Apellido’ evento ‘Click’:

* - ordenar por el apellido.

select clientes

set order to tag etiqueta3

* - fin

Botón ‘Etiqueta Ciudad’ evento ‘Click’:

* - ordenar por la ciudad.

select clientes

set order to tag etiqueta4

* - fin.

Botón ‘Mostrar Datos’ evento ‘Click’:

* - seleccionar la tabla.

select clientes

* - visualizar los datos mediante

* - la ventana EXAMINAR.

browse;

noedit;

nodelete;

noappend

* - fin.

Aquí mediante un parámetro ‘Fecha’ realizamos una totalización de registros, utilizamos la función ‘TOTAL ON’, la estructura de la tabla es la siguiente:

Y el código del Botón ‘Totalizar Fecha’ evento ‘Click’:

* - PROCESO DE TOTALIZACION DE DATOS.

local date1

* - cargamos los datos del text a la variable.

date1=ctod(thisform.text1.text)

* - seleccionamos la tabla a totalizar.

select fvta

* - debemos activar un índice, el cual debe

* - estar indexado por el campo que se va a

* - realizar el proceso de totalizacion.

set order to tag date1

* - procedemos a totalizar los datos

* - mediante la fecha.

total on fecha to T-Fecha1 for fecha=date1

* - abrimos la nueva tabla que contiene

* - los resumenes.

use t-fecha1

* - ventana examinar.

browse

* - fin.

Boton ‘Salir’ evento ‘Click’:

* - salir.

close tables

thisform.release

Con el siguiente ejemplo vamos a aprender a crear registros en blanco y a grabar datos en ellos, las instrucciones necesarias para este proceso son ‘APPEND BLANK’ y ‘REPLACE’. Ejemplo:

Botón ‘Definir y cargar variables’ evento ‘Click’:

* - definir variables de tipo PUBLICAS.

PUBLIC DATOfactura, DATOfecha, DATOsubtotal, DATOiva, DATOtotal

* - encerar variables.

store space(3) to DATOfactura

store date() to DATOfecha

store 0 to DATOsubtotal

store 0 to DATOiva

store 0 to DATOtotal

* - cargar datos.

DATOfactura="006"

DATOfecha=ctod("12/12/2002")

DATOsubtotal=500

DATOiva=50

DATOtotal=550

* - fin.

Botón ‘Añadir y grabar registros’ evento ‘Click’:

* - añadir y llenar registro.

select factvta

append blank

* - reemplaza los valores de las variables

* - en los campos respectivos de la tabla.

replace factura with DATOfactura

replace fecha with DATOfecha

replace subtotal with DATOsubtotal

replace iva with DATOiva

replace total with DATOtotal

wait windows "Registro creado satisfactoriamente!"

* - fin.

Botón ‘Visualizar Datos’ evento ‘Click’:

* - visualizar registros.

select factvta

browse;

noedit;

nodelete;

noappend

* - fin.

Aquí comenzamos a utilizar pequeños controles para manejar los errores producidos por los objetos al no encontrar los parámetros adecuados, el evento de mayor relevancia es el ‘EVENTO ERROR’, Ejemplo:

Botón ‘Aceptar’ evento ‘Click’:

* - COPIAR ARCHIVOS.

CLOSE TABLES && CIERRO TODAS LAS ESTRUCTURAS EN USO.

IF SUBSTR(THISFORM.TXTUNIDAD.VALUE,1,1)="A" THEN

COPY FILE *.dbf to A:\

MESSAGEBOX('Se ha realizado con éxito los BACKUPS')

ELSE

COPY FILE *.dbf to "C:\ONERROR\BACKUPS"

MESSAGEBOX('Se ha realizado con éxito los BACKUPS')

ENDIF

* - FIN.

Botón ‘Aceptar’ evento ‘ERROR’:

LPARAMETERS nError, cMethod, nLine

* - MENSAJE DE ERROR.

MESSAGEBOX("Error. No se pueden respaldar los ARCHIVOS!")

* - CANCELO EL PROCESO DE RESTAURACION.

CANCEL

* - FIN.

Algo muy importante que un programador debe dominar son las búsquedas de los registros mediante sus códigos, aquí implementamos 2 instrucciones básicas para llevar a cabo este objetivo : ‘LOCATE y SEEK’, ejemplo:

Botón ‘Buscar’ evento ‘Click’:

* - definición de la variable de búsqueda.

local codBUSQUEDA

* - enceramiento de la variable.

codBUSQUEDA=SPACE(3)

* - captura del codigo ingresado en el TEXTBOX.

codBUSQUEDA=upper(alltrim(thisform.text1.text))

* - selección de la tabla.

select articulo

* - búsqueda del código sin utilización de INDICES.

locate for upper(alltrim(codigo))=codBUSQUEDA

* - si encuentra el codigo,

if found() then

thisform.label1.caption= articulo.descripcio

* - caso contrario.

else

thisform.label1.caption= "ERROR... Este código no EXISTE."

endif

* - actualizar formulario.

thisform.refresh

* - fin.

Botón ‘Buscar’ evento ‘Click’:

PARA PODER UTILIZAR LA INSTRUCCIÓN ‘SEEK’ PREVIAMENTE SE DEBE HABER CONSTRUIDO UN INDICE POR EL CAMPO POR EL CUAL SE VA A REALIZAR LA BUSQUEDA.

* - definicion de la variable de búsqueda.

local codBUSQUEDA

* - enceramiento de la variable.

codBUSQUEDA=SPACE(3)

* - captura del codigo ingresado en el TEXTBOX.

codBUSQUEDA=upper(alltrim(thisform.text1.text))

* - seleccion de la tabla.

select articulo

* - selección del indice.

set order to tag cod1

* - búsqueda del código.

seek codBUSQUEDA

* - si encuentra el código,

if found() then

thisform.label1.caption= articulo.descripcio

* - caso contrario.

else

thisform.label1.caption= "ERROR... Este codigo no EXISTE."

endif

* - actualizar formulario.

thisform.refresh

* - fin.

En este ejemplo combino la versatilidad del ‘GRID’ con la potencia de la instrucción ‘SQL’ para crear vistas temporales de datos; el ‘grid’ es un objeto que por lo general se lo utiliza para presentar datos por pantalla y la instrucción ‘sql’ permite extraer información y combinarla con cálculos para obtener datos procesados.

A continuación les explicaré a breves rasgos el funcionamiento de la instrucción SQL, Sintaxis:

Cláusula ‘SELECT’.- Permite seleccionar los campos que participaran en la selección de datos de la vista, aquí también se pueden usar funciones para realizar cálculos.

Cláusula ‘FROM’.- Permite especificar de que tablas están participando en la selección de datos.

Cláusula ‘WHERE’.- Es la condición que estable el filtrado de los datos.

Cláusula ‘INTO’.- Indica el nombre del cursor de memoria donde se almacenan los registros temporalmente.

Cláusula ‘ORDER BY’.- Indica porque campo se ordenan los datos de la vista.

Botón ‘Crear Vista’ evento ‘Click’:

* - variable de tipo local.

local ssql1

* - Instrucción SQL.

ssql1="select codigo as CODIGO, name as NOMBRE, company as COMPAÑIA, address as DIRECCION from PUBLISHER into cursor TB1 order by CODIGO"

*****************************************************

* - MANEJO DEL GRID.

*****************************************************

* - Nro. de columnas de la cuadricula.

thisform.grid1.columncount=3

* - Modificar el encabezado de las columnas del grid.

thisform.grid1.column1.header1.caption="CODIGO"

thisform.grid1.column2.header1.caption="NOMBRE"

thisform.grid1.column3.header1.caption="COMPAÑIA"

* - Alineación de los títulos de las columnas.

thisform.grid1.column1.header1.alignment=2

thisform.grid1.column2.header1.alignment=2

thisform.grid1.column3.header1.alignment=2

* - Acceso de solo lectura a los datos del grid.

thisform.grid1.readonly=.t.

* - Asignación del origen de los datos del GRID.

thisform.grid1.recordsource=ssql1

* - mascara de entrada de los datos en la columna.

thisform.grid1.column2.inputmask = "@!"

thisform.grid1.column3.inputmask = "@!"

* - modificar tamaño de columnas.

thisform.grid1.column2.width=200

thisform.grid1.column3.width=200

* - Actualización del GRID.

thisform.grid1.refresh

* - Fin.

Objeto ‘Form’ evento ‘Load’:

* - Inicializar el ambiente.

clear macro

set talk off

set echo off

set notify off

set safety off

set delete on

set century on

close tables

* - Abrir tablas.

select 0

use publisher

* - fin.

EXPORTAR DATOS DE UNA TABLA DE FOX A UN ARCHIVO PLANO *.TXT:

* - Los registros se graban en el orden que esté especificado en la

* - etiqueta de índice actual de la tabla.

CLOSE TABLES

SET EXCLUSIVE ON

SET TALK OFF

SET ECHO OFF

SET SAFETY OFF

SET NOTIFY OFF

* ----------------------------------------

* - APERTURA DE TABLAS.

USE PRUEBA

* - ANEXAR DATOS A LA TABLA(*.DBF) DESDE EL ARCHIVO DE DATOS.

COPY TO MITXT1.TXT DELIMITED WITH ","

MESSAGEBOX("Exportación Terminada!","Datos")

CLOSE TABLES

* - FIN.

UTILIZO EL SQL PARA EXPORTAR DATOS A UN FICHERO *.TXT:

SET TALK OFF

SET ECHO OFF

SET SAFETY OFF

SET NOTIFY OFF

* ------------------------------------------------------------------------------------------

SELECT * FROM PRUEBA TO FILE SQL1.TXT

SELECT * FROM PRUEBA TO FILE SQL2.TXT WHERE EDAD>30

IMPORTAR DATOS DESDE UN ARCHIVO DE TEXTO PLANO A UNA ESTRUCTURA *.DBF.

* ----------------------------------------------------------------------------------------------

* - La estructura de la tabla debe crearse en el mismo

* - orden como se encuentran los datos en el *.txt que

* - se va a anexar.

CLOSE TABLES

SET EXCLUSIVE ON

* - APERTURA DE TABLAS.

USE PRUEBA

APPEND FROM MITXT4.TXT DELIMITED WITH '"' WITH CHARACTER ';'

* - VISUALIZO DATOS ANEXADOS A TRAVES DE LA VENTANA.

BROWSE

CLOSE TABLES

* - FIN.

 

 

Autor:

Tclgo. Juan Carlos Romero Jijón

lankansi[arroba]yahoo.com

Machala – El OroEcuador.

Comentarios

Agregar un comentario


Trabajos relacionados

  • Guia de comprension /descomprension de ficheros zip

    Descompresión de un fichero ZIP. Compresión de uno o varios archivos. El proceso de compresión/descompresión de un fich...

  • El programa Excel

    ¿Qué es Excel?. Barra de Menú. Uso de una planilla de cálculos. Los libros de cuentas de Excel. Trabajo con la ventana d...

  • Tablas Pivot con exel

    Analizando y Reportando Con Tablas Pivot. Adicionando y eliminando datos. Añadiendo datos para el análisis. Reorganizand...

Ver mas trabajos de Software

   

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.


Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.