Monografias.com > Computación > Software
Descargar Imprimir Comentar Ver trabajos relacionados

Introducción a la Programación en Visual Foxpro9




Enviado por lankansi



    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:ONERRORBACKUPS"

    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

    Machala – El Oro –
    Ecuador.

    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.

    Categorias
    Newsletter