Está en la página 1de 51

Guis del Usuario Revista Compus

Prácticas FoxPro

INTRODUCCION

En este módulo daremos a conocer al estudiante el lenguaje de programación


Visual Fox Pro 6.0. Se pretende familiarizar al alumno con el entorno de desarrollo de
aplicaciones para base de datos.

Visual Fox Pro pertenece a la familia Xbase lo que hace que su programación sea
sencilla, estructurada y más fácil de entender tanto para programadores principiantes como
programadores expertos.

Es una potente herramienta orientada a objetos para la creación y administración de


bases de datos y para el desarrollo de aplicaciones profesionales. Ofrece todo lo necesario
para organizar la información en tablas, realizar consultas, crear bases de datos
relacionales, programar aplicaciones, informes, etc.

Prof. José de La Rosa Página 1


Guis del Usuario Revista Compus
Prácticas FoxPro

VISUAL FOXPRO

Visual FoxPro es un gestor de base de datos, orientado a la programación de


objetos. Se dice esto porque utiliza objetos prediseñados, a la vez Visual FoxPro es una
aplicación que permite gestionar y manipular información organizada en una base de datos.
Puede elaborar consultas, informes, pantallas, menús y proyectos sobre una o varias
tablas.
Desarrolla aplicaciones en un ambiente orientado a objetos con características
cliente/servidor.

CONCEPTOS BÁSICOS:

Base de Datos: Una base de datos o banco de datos es un conjunto de datos pertenecientes
a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este
sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por
documentos y textos impresos en papel e indexados para su consulta.

Existen unos programas denominados sistemas gestores de bases de datos, abreviado


SGBD, que permiten almacenar y posteriormente acceder a los datos de forma rápida y
estructurada. Las propiedades de estos SGBD, así como su utilización y administración, se
estudian dentro del ámbito de la informática. Las Bases de datos se agrupan en tablas.

Tablas o entidades: Tabla en las bases de datos, se refiere al tipo de modelamiento de


datos, donde se guardan los datos recolectados por un programa. Su estructura general se
asemeja a la vista general de un programa de Hoja de cálculo.

Las tablas se componen de dos estructuras:

Campo: Corresponde al nombre de la columna. Debe ser único y además de tener un tipo
de dato asociado.

Registro: Corresponde a cada fila que compone la tabla. Allí se componen los datos y los
registros. Eventualmente pueden ser nulos en su almacenamientos.

En la definición de cada campo, debe existir un nombre único, con su tipo de dato
correspondiente. Esto es útil a la hora de manejar varios campos en la tabla, ya que cada
nombre de campo debe ser distinto entre sí.

A los campos se les puede asignar, además, propiedades especiales que afectan a los
registros insertados. El campo puede ser definido como índice o autoincrementable, lo cual

Prof. José de La Rosa Página 2


Guis del Usuario Revista Compus
Prácticas FoxPro

permite que los datos de ese campo cambien solos o sean el principal indicar a la hora de
ordenar los datos contenidos.

Cada tabla creada debe tener un nombre único en la cada Base de Datos, haciéndola
accesible mediante su nombre o su sinónimo (dependiendo del tipo de base de datos
elegida).

Ingreso al programa:
− Haga clic en el botón de Inicio.
− Elija Programas.
− Luego Microsoft Visual FoxPro.
− Luego el icono de Microsoft Visual FoxPro 6.0

Descripción del Entorno del Programa:

Barra de Título
Barra de Menús

Barra de
Herramientas

Ventana de
Comandos

Barra de Estado

BARRA DE MENÚS: Contiene órdenes para.

Archivo: Abrir, guardar, cerrar, revertir, importar, exportar, imprimir y preparar


página, abrir archivos utilizados recientemente y salir de un archivo o de
Visual FoxPro.

Edición: Deshacer operaciones, seleccionar y editar texto, buscar y reemplazar


características; vínculos e información sobre el objeto.

Ver: Visualizar las barras de herramientas.

Prof. José de La Rosa Página 3


Guis del Usuario Revista Compus
Prácticas FoxPro

Herramientas: Asistentes, ortografía, macros, examinador de clases, ventanas de


seguimiento y de depuración y opciones.

Programa: Ejecutar, cancelar, reanudar, suspender y compilar.

Proyecto: Nuevo, agregar, modificar, ejecutar, quitar y cambiar nombre de archivos;


incluir, establecer principal y editar descripción; información de proyecto,
errores y generar; limpiar proyecto.

Ventana: Visualizar ventanas.

Ayuda: Contenido, búsqueda de ayuda y soporte técnico.

BARRA DE HERRAMIENTAS: Posee íconos para los accesos directos.

VENTANA COMANDOS: Se puede introducir órdenes para realizar unas tareas


específicas.

EL ADMINISTRADOR DE PROYECTOS:

EL Administrador de proyectos está organizado de forma muy parecida a un archivador.


Consta de varias fichas, tales como: TODO, DATOS, DOCUMENTOS, CLASES,
CODIGO y OTROS. Estas fichas le proporcionan un rápido y fácil acceso a los objetos
que utilizará en el proyecto. Cuando se desarrolla una aplicación se utilizan las técnicas de
ratón “señalar y pulsar” o “arrastrar y colocar” para poder acceder y manipular los
componentes de la aplicación.

PASOS PARA CREAR UN PROYECTO:

- Desde el Menú de Archivo de Visual FoxPro, seleccione NUEVO


- Debajo del Botón de tipo de Archivo, selecciones PROYECTO

Prof. José de La Rosa Página 4


Guis del Usuario Revista Compus
Prácticas FoxPro

- Pulse el botón NUEVO ARCHIVO

- Introduzca el nombre del proyecto.


- Pulse el Botón CREAR.
- Establezca la vía de acceso del Proyecto desde la ventana de Comandos con la orden
SET DEFAULT TO ejemplo: SET DEFAULT TO D:\VFP\PROYEC1

Una recomendación, cree un directorio para su aplicación y dentro de el, uno para
las tablas, otro para los informes, formularios y recursos (archivos BMP, librerías, etc.), es
importante mantener un orden, le ahorrara dolores de cabeza para ubicar un archivo, o
diferenciar cuales son externos (que deben acompañar al ejecutable, como son las tablas,
librerías, archivos BMP, etc.)

COMANDOS BÁSICOS PARA TRABAJAR CON PROYECTOS:

Create Project: Crea un nuevo Proyecto

Modify Project: Modifica la estructura del proyecto.

He aquí algunos de los elementos que se fijan en la configuración del sistema:

SAFETY = OFF && no avisa antes de sobrescribir archivos

Prof. José de La Rosa Página 5


Guis del Usuario Revista Compus
Prácticas FoxPro

TALK= OFF && no despliega el progreso

ECHO= OFF && inicialmente desactiva el rastreo

DEBUG= ON && habilita el rastreo y la depuración

RESOURCE=FOXUSER && elige un archivo de recursos

RESOURCE=OFF && no se use hasta que se solicite

COMMAND= DO PROG && corre PROG al inicio

Otros comandos de configuración son:

SET CENTURY ON/OFF

SET CLOCK ON/OFF

SET DATE

SET DELETE ON/OFF

SET ECHO ON/OFF

SET SYSMENU

CREACIÓN DE UNA BASE DE DATOS:

En un proyecto, una base de datos se crea colocando la información en tablas con sus
respectivas relaciones utilizando de ventana de diseño.

Desde el administrador de proyectos, pulse la ficha DATOS.

- Desde la lista de apartados de datos seleccione BASE DE DATOS.


- Pulse el Botón NUEVO.

Prof. José de La Rosa Página 6


Guis del Usuario Revista Compus
Prácticas FoxPro

- Escriba el Nombre de la nueva base de datos.


- Pulse el botón CREAR (Debe aparecer la Ventana de Diseño de la Base de Datos )
Al comenzar un nuevo proyecto, el generador estará vacío. Se deben crear las
tablas para almacenar la información en contenedor (Ventana de Diseño) de la Base de
Datos y Luego se establecen la relaciones entre cada una de ellas.

Contendedor de
la Base de Datos

Barra de herramientas
para BD

Comandos Básicos para el manejo de de una Base de Datos


Create Database Crea una nueva Base de Datos.
Modify Database Modifica la estructura de la Base de Datos.
Open Database Abre una Base de Datos guardada.
Close Database Cierra la Base de Datos.
Descripción de los botones de la Barra de herramientas (Diseñador de Base de
Datos):

Crear una nueva tabla.

Agregar una tabla existente

Eliminar una tabla seleccionada

Modificar una tabla seleccionada

Prof. José de La Rosa Página 7


Guis del Usuario Revista Compus
Prácticas FoxPro

Creación de Vistas remotas

Creación de Vistas locales

Editar Procedimientos almacenados en la Base de Datos

Creación de Conexiones con vistas remotas

Examinar el contenido la tabla (BROWSE)


Los nombres de las tablas deben ser de una a ocho caracteres de largo y deben tener la
extensión predeterminada .dbf (database file: archivo de Base de Datos)

CREACIÓN DE TABLAS:
Las tablas pueden agregarse a una base de datos utilizando dos herramientas : El Asistente
de Tablas o el Generador de Tablas. Para realizarlo seguirm los pasos siguientes:
− Click en el botón de Nueva tabla, aparecerá la ventana Nueva Tabla.

− Se selecciona Nueva Tabla, luego aparece la ventana de guardar el archivo,


seleccione el directorio y el nombre de la tabla y luego presione el boton de guardar.
− Nos aparecerá la ventana del Diseñador de tablas:

Comandos básicos para el manejo d las tablas:


Create <Nombre> Crea una nueva tabla.
Use <Nombre> Selecciona la tabla respectiva.
Use <Nombre> Alias <Alias> Abre la tabla y selecciona el área de trabajo en la cual se
desea trabajar.

Prof. José de La Rosa Página 8


Guis del Usuario Revista Compus
Prácticas FoxPro

Use Cierra las tablas en el área de trabajo activo.


Modify Structure Modifica la estructura de la tabla abierta.
Select <N> Selecciona el área N de trabajo.
CREACIÓN DE CAMPOS:
Los campos no deben de contener caracteres especiales, fuera del carácter "Guión bajo", y
tampoco puede empezar con un número. Pueden ser cuales quiera de varios tipos:
Ingreso de campos: Igual que en las versiones anteriores, la definición de campos es igual.
Se introduce el nombre del campo, el tipo de datos que soportar y el tamaño. Los nombres
de los campos pueden tener hasta 254 caracteres sin espacios en blanco.

Tipos de Campos
Los campos no deben de contener caracteres especiales, fuera del carácter "Guión bajo", y
tampoco puede empezar con un número. Pueden ser cuales quiera de varios tipos:

Tipo Descripción Ejemplo


Carácter Texto alfanumérico La dirección de un cliente
Monetario Unidades monetarias Precio de compra
Numérico Números enteros o decimales de Cantidad de artículos pedidos
hasta 20 dígitos
Flotante Este no lo utilizaremos en este Población en el mundo.
manual pues sólo sirve por
compatibilidad con dBASE V, es
equivalente al formato numérico.
Fecha Día, mes y año, el formato puede Fecha en que se realizó un pedido
depender del estado del comando
SET DATE
FechaHora datos cronológicos que constan de Fecha y hora en que un empleado
día, mes, año, horas, minutos y llegó al trabajo
segundos
Doble Puede guardar un valor numérico de Datos procedentes de experimentos
signo flotante de doble precisión que requieren un elevado grado de
precisión
Entero Valores numéricos no decimales Número de línea de un pedido
(números enteros)
Lógico Verdadero o Falso Si se ha completado o no un pedido
Memo Texto alfanumérico de longitud Notas de un registro telefónico sobre
indeterminada, similar a un las llamadas
procesador de texto

Prof. José de La Rosa Página 9


Guis del Usuario Revista Compus
Prácticas FoxPro

General Permite guardar datos tipo OLE, por Hoja de cálculo de Excel, un control
ejemplo imágenes, sonidos u otros ActiveX
creados por una aplicación diferente.
Carácter Igual que Character, pero los valores Las contraseñas de usuario
(binario) no se traducen cuando cambia la almacenadas en una tabla y usadas
tabla de códigos en distintos países
Memo Igual que Memo, pero los valores no Un archivo de comandos de inicio
(binario) se traducen cuando cambia la tabla de sesión empleado en distintos
de códigos países

Definición del Display:


Formato: Es el formato de salida del campo, ejemplo si fuera númerico 9,999.99 o si fuera
carácter !!!!!!!!!!!!, para que solo acepte mayusculas
Máscara de entrada: Igual que el Format, lo único que es para la entrada de datos.
Título: Descripción mas precisa del campo, es de utilidad al diseñar los Formularios.

Definición de reglas de validación a nivel de campo:


La validación son triggers o eventos que se ejecutan a nivel de campo. Ejemplo: una
validación de un campo que solo acepte números positivos. (id > 0)
Regla: Es la regla de validación, ejemplo: id > 0, si queremos que acepte valores positivos.
Mensaje: Es el mensaje personalizado que queremos que aparezca en pantalla a la hora de
violarse la regla de validación del campo. Ejemplo : ‘Solo se aceptan números positivos’
(nota: el texto debe escribirse entre comillas).
Valor Predeterminado: (nota: hay que respetar el tipo de dato del Campo)

Proceso de Indexación:
Cuando haya creado una tabla, puede ordenar los datos para acelerar la obtención de datos
mediante índices. Con los índices, puede procesar rápidamente los registros para
mostrarlos, consultarlos o imprimir. También puede seleccionar registros, controlar si se
introducen valores duplicados en un campo y admitir relaciones entre tablas.
VFP ofrece cuatro tipos de índice diferentes, cada uno con características predeterminadas:
− Principal
− Candidato
− Normal
− Único

Prof. José de La Rosa Página 10


Guis del Usuario Revista Compus
Prácticas FoxPro

Los índices principales, aseguran que sólo se introducen valores únicos en un campo y
determinan el orden en el que se procesan los registros. Puede crear un índice principal
para cada tabla si la tabla está incluida en la base de datos. Si la tabla ya tiene un índice
principal, agregue un índice candidato. Este índice es el que define el campo clave

Los índices candidatos, también imponen valores únicos y determinan en qué orden se
procesan los registros, como un índice primario. Puede tener varios índices candidatos por
tabla en bases de datos y en tablas libres.

Los índices normales, determinan el orden en que se procesan los registros pero permite
que se introduzcan valores duplicados en un campo. Puede agregar más de un índice
normal a una tabla.

Por compatibilidad con versiones anteriores, también puede crear un índice único que
selecciona y ordena un subconjunto de registros según la primera aparición de un valor en
el campo que especifique. Si quiere seleccionar registros de esta manera, es posible que
quiera crear una consulta o una vista en lugar de ello.
Por ejemplo si en este momento necesitáramos una lista de precios probablemente la
querríamos en orden alfabético y en otras ocasiones según el código, solucionaremos
ambos casos creando dos índices:

Relación entre Tablas:

Relación temporal: Es la que consigue usando el comando SET RELATION, su mismo


nombre lo indica la relación se efectúa solo por un instante, al dar la orden CLOSE DATA
se pedrera inmediatamente.

Relación permanente: se consigue al construir la base de datos, este tipo de relación es


persistente.

Comandos para vincular tablas:


SET RELATION TO
Crea una relación entre una base de datos padre, la que deberá estar abierta en el área de
trabajo actualmente seleccionada, y una base de datos hija, ya abierta en otra área de
trabajo.

SINTAXIS

Prof. José de La Rosa Página 11


Guis del Usuario Revista Compus
Prácticas FoxPro

SET RELATION TO [<expresión1> INTO <expresión numérica1>|<expresión carácter1>]

Luego que creamos una tabla nos saldrá la siguiente ventana:

Si presionamos que SI nos aparecerá una nueva ventana en la cuál vamos a empezar a
rellenar los registros para dicha tabla.

Comandos para el manejo de registros:


Cuando utilizamos inicialmente una tabla de FoxPro, tú estás ubicado en el primer registro
de la tabla. Puedes mover este puntero de registro imaginario alrededor de la tabla, en
diversas formas:
Skip Mueve el puntero hacia adelante un registro
Skip -<N> mueve el puntero hacia los N registros atrás. (Retroceder)
Go TOP Mueve el puntero al primer registró
Go bottom Mueve el puntero al último registro en la tabla
Go +<N> Mueve el puntero del registro a los N registros adelante. (Avanzar)
* Prueba estos comandos primero digita uno de ellos y luego digita list y verás los
resultados.
Mencionaremos otros comandos que son de gran ayuda al momento de manipular los
datos:

APPEND Agrega registros a la base de datos seleccionada.


APPEND FROM Agrega registros desde otra tabla al final de los registros de la tabla
seleccionada.
APPEND BLANK Agrega un registro en blanco en la tabla abierta.
DELETE Borra el registro activo.
DELETE ALL Borra todos los registros de la tabla abierta.
DELETE ALL FOR <CONDICION> Borra todos los registros que cumplan con la
Condición.

Prof. José de La Rosa Página 12


Guis del Usuario Revista Compus
Prácticas FoxPro

COPY FILE Copia cualquier tipo de archivos


COPY STRUCTURE Almacena la estructura de una base de datos en una nueva base
COPY TO Copia datos de una base de datos a un archivo
COUNT Determina el nùmero de registro en la base de datos
DISPLAY FILES Muestra información de base de datos
DISPLAY MEMORY Despliega la información de las variables de memoria
DISPLAY STATUS Despliega información de la condición de FOX
DISPLAY STRUCTURE Muestra la estructura de una base de datos
MODIFY COMMAND Abre una ventana de modificación de texto
REPLACE Actualiza los registros en una base de datos.

Otro tipo de comandos útiles para la manipulación de tablas y registros son las
FUNCIONES, las cuales se dividen en:
) Cadenas o manejo de caracteres: este grupo de funciones gestiona el manejo de
caracteres.
) Matemáticas: permiten efectauar operaciones con valores numéricos.
) Manejo de fechas y hora: se encarga de gesstionar las variables de tipo fecha.
) Lógicas: Se encargan de efectuar operaciones de tipo lógico.
) Funciones de converción de tipos: conviertes variables de un tipo a otro.

Funciones:
Son procesos internos programadores que pueden ser llamados desde cualquier punta de
Visual Fox lo que diferencia de los mandatos de las funciones es que estas devuelven un
valor. Aceptan una serie de parámetros, y se reconocen por el uso de paréntesis para
encerrar los argumentos, por ejemplo DATE( ) y TIME ( ).
Las funciones se dividen de la siguiente forma:
• Tipos de datos
• Funciones de manejo de cadenas de caracteres.
• Funciones de conversión de tipos
• Funciones de fecha y hora
• Funciones de manejo de valores numéricos
• Funciones definidas por los usuarios (FDU)

Prof. José de La Rosa Página 13


Guis del Usuario Revista Compus
Prácticas FoxPro

Antes de mostrar ejemplos definiremos dos componentes que se hacen necesarios en la


manipulación de datos:
Constante: Son valores predefinidos que no cambian nunca por ejemplo: valor1=15478,
cadena=”abcd”.
Variable: Se utilizan como identificadores de secciones de memoria donde se guarda
información, por ejemplo: var1=campo1, var2=tabla.campo.
Las variables se pueden definir como: publicas, privadas y locales ejemplo:
PUBLIC nombre, apellidos
PRIVATE sueldo

Operadores relacionales:
Los operadores se utilizan en tiempo de ejecuciòn para unir dos o màs elementos del
lenguaje.
Operadores aritméticos
( ) Agrupa subexpresiones
**, ^ Exponenciación
*, / Multiplicaciòn y división
% Módulo (resto de la división)
+, - Suma y resta

Operadores relacionales:
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
= igual a
<>, #, ¡=Distinto de
$ Contenido en

Ahora te daremos unos ejemplos con funciones en Visual FoxPro.


* Declaración de variables
cadena1 = SPACE(15)
cadena2 = SPACE(15)
número = 0

Prof. José de La Rosa Página 14


Guis del Usuario Revista Compus
Prácticas FoxPro

cuenta = 0
* Asignación de datos
cadena1 = “abcd efgh ijkl”
* utilizando la función LEN para contar el número de la cadena
? LEN(Cadena1) && imprime en pantalla 14
? Cadena2= SUSBTR(cadena1,1,4) && imprime en pantalla abad
? DTOC(DATE())
? SIN (0)

Índices:
Cuando se insertan registros en una tabla estos no se encuentran ordenados, para ello es
necesario utilizar comandos que nos permitan ordenar los registros de acorde a la
información que necesitamos.

Comando SORT
Clasifica un archivo de base de datos
SINTAXIS
SORT TO <archivo> ON <campo> [/A] [/D] [/C]
[,<campo2> [/A] [/D] [/C]..]
[ASCENDING | DESCENDING]
[<alcances>]
[FOR <expresión lógica1>] [WHILE <expresión lógica2>]
[FIELDS <lista de campos>]
EJEMPLO:
USE persona
SORT TO persona_ordenada ON nombre
USE persona_ordenada
Persona persona_ordenada
Juan Martínez Eduardo Garay
Roxana Cuellar Juan Martínez
Margarita Rosales Margarita Rosales
Pedro López Pedro López
Eduardo Garay Roxana Cuellar
Comando INDEX ON

Prof. José de La Rosa Página 15


Guis del Usuario Revista Compus
Prácticas FoxPro

Crea un índice en un archivo de índices compuestos o bien un archivo de índice simple.


SINTAXIS
INDEX ON campo TO nombre de archivo IDX | TAG etiqueta
[OF archivo CDX][FOR expresión lógica] [COMPACT][ASCENDING | DESCENDING]
[CANDIDATE |UNIQUE ][ADDITIVE]
EJEMPLO:
USE persona
INDEX ON nombre TO persona.idx
El comando INDEX ON crea una archivo índice llamado persona.idx, el cual tendrá el
índice de el archivo persona.
Una mejor forma de crear un índice y en el cual Fox trabaja a una mejor capacidad es
creando un índice compuesto.
INDEX ON nombre TAG persona
De la forma anterior se crea un archivo índice persona.CDX.
También se pueden crear índices combinados con dos o más campos por ejemplo: INDEX
ON UPPER(LEFT(apellido,10) + LEFT(nombre,10)) TO nombre.

Consultas:
Las consultas son pedidos de información a Base de Datos. Se utilizan las consultas
cuando queremos realizar pedidos de datos a una base de datos.
Creando una consulta: Para crear una nueva consulta se puede de ingresar al menú
Archivo, luego seleccionar el submenú Nuevo, y de la ventana que nos muestra seleccionar
la opción Consulta, seguidamente de Nuevo Archivo.

Creación de Consultas Por Asistente

Paso 1 - Seleccionar campos.

Prof. José de La Rosa Página 16


Guis del Usuario Revista Compus
Prácticas FoxPro

En este caso como las tablas ya están relacionadas, según las estructuras de los índices
indicados, el paso siguiente es el Paso 3 de filtro de registro. En Valor Vamos a Poner un dato de
la tabla que corresponde al Código.
Paso 4 - Ordenar registros

Paso 4a -Limitar registros 5.Finalizar

Guarda la consulta con el nombre: consulta1


Informes:
Los informes son la representación gráfica de las consultas y tablas que posee una Base de
datos, utilice el Diseñador de informes para crear y modificar informes.
Para crear rápidamente un diseño sencillo de info.
me, elija Informe rápido del menú Informe. Informe rápido le solicita la entrada de los
campos y el diseño que desea para su informe.

Prof. José de La Rosa Página 17


Guis del Usuario Revista Compus
Prácticas FoxPro

Opciones de la ventana
Bandas
De forma predeterminada, el Diseñador de informes muestra tres bandas: Encabezado de
página, Detalle y Pie de página. En la parte inferior de cada banda hay una barra
separadora. El nombre de la banda aparece en la barra gris junto a una flecha azul, que
indica que la banda está encima, no debajo, de la barra gris.
Puede agregar las siguientes bandas a su informe.
Banda Se imprime Contenido típico
Encabezado de Una vez por columna Título de columna
columna
Pie de columna Una vez por columna Resumen, totales
Encabezado de Una vez por grupo Precede los datos siguientes
grupo
Pie de grupo Una vez por grupo Valores calculados para grupos de datos
Título Una vez por informe Título
Fecha o número de página
Logotipo de la compañía
Cuadro alrededor del título
Resumen Una vez por informe Totales
Texto como Suma total

Regla:
El Diseñador de informes tiene una regla vertical y otra horizontal que puede utilizar para
colocar de forma más precisa los objetos en las bandas. Utilice las reglas junto con el
comando Ver del menú Mostrar posición para ayudarle en la colocación de los objetos.
La escala de la regla viene determinada por las configuraciones de medidas de su sistema.
Puede cambiar de la escala predeterminada del sistema (pulgadas o centímetros) a píxeles
desde dentro de Visual FoxPro. Si desea cambiar al valor predeterminado del sistema,
cambie la configuración de medidas de su sistema operativo.

Creación de Reportes Con Asistente.

Paso 1 - Seleccionar campos Paso 2 – Agrupar Registros

Prof. José de La Rosa Página 18


Guis del Usuario Revista Compus
Prácticas FoxPro

Paso 3. Estilo Paso 4 - Distribución

Paso 5 - Orden---codi_peli Paso 6. Finalizar

3. PROGRAMACIÓN:
Conceptos:
Usualmente se agrupa el código fuente en archivos de programa. Un archivo de programa
esta compuesto de varias sentencias, que incluyen comandos, funciones y estructuras de
control de flujo.
El compilador traduce el contenido de estos archivos de texto ASCII a código interpretado.
En cuanto el compilador ha traducido el código fuente crea un archivo con extensión .FXP
que es el que va a utilizar a partir de ese momento. Cada vez que el programador
introduce algún cambio en el archivo .PRG el compilador compara la fecha de ambos
archivos y crea una nueva versión compilada del programa.

Prof. José de La Rosa Página 19


Guis del Usuario Revista Compus
Prácticas FoxPro

Haciendo el código legible:


• Espacios en blanco: Significan áreas vacías dentro del
código de programa, también espacios, tabulaciones o líneas vacías.
• Sangrado: Sangrar es la mejor manera de optimizar el
código. Es una práctica común sangrar dentro de comandos pares anidados, por
ejemplo:
DO… ENDDO
IF… ENDIF
SCAN..ENDSCAN
DOCASE...ENDCASE
WITH…ENDWITH
• Mayúsculas y minúsculas: Muchos programadores
utilizan mayúsculas y minúsculas para distinguir entre los elementos del programa;
mayúsculas para los comandos y minúsculas para las variables.
• Comentarios: Los comentarios pueden existir en una
línea precedidos por un asterisco y después de una línea de código, si están
separados de && consecutivos.
• Continuar líneas largas de código: Puede continuar líneas
largas de código en la siguiente línea insertando un “;” al final de la línea.

Una de las técnicas más útiles en la programación son los encabezados de programa, por
ejemplo:
* Nombre del programa : nombre
* Autor : Héctor Hernández
* Propósito : Dibujar cuadros en la pantalla
* Fecha : 12/12/2001

Comandos de Asignación:
Para crear variables de memoria y darles valores al mismo tiempo, escriba lo siguiente:
Input: Imprime por pantalla un mensaje y me da la opción para capturar un valor en una
variable.
X=3
STORE “lunes” TO día

Prof. José de La Rosa Página 20


Guis del Usuario Revista Compus
Prácticas FoxPro

Para solamente crearlas:


PUBLIC a, b, c
PRIVATE x, y, z
LOCAL nombre, trabaja
DIMENSION nombres(3)
Declaración de Variables.
Las variables temporales se pueden declarar utilizando los comandos anteriores,
únicamente, hay que tomar en cuenta la forma en que se van a declarar o escribir, como
ejemplo: Nom_Empleado; NomEmpleado, si son variables de memoria se le puede
anteponer una ‘m ó x’ de la forma siguiente, mNom_Empleado; xNom_Empleado,
también se pueden declarar variables haciendo saber el tipo de datos que maneja por
ejemplo: cNom_Empleado, nSueldo_Empleado; dFecha_Ingreso, etc.

Operadores:
Los operadores + y – son, por supuesto, usados para añadir y substraer números, pero
también se pueden usar en campos de caracteres. El operador más eslabona dos
expresiones de caracteres, campos o variables de memoria, de forma que Fred + Smith;
producirá: FredSmith. El operador menos quita espacio rezagado.

Operadores cíclicos y ramificaciones:


Las operaciones cíclicas y de ramificación son los mecanismos para crear la lógica de un
programa, ejemplo:
FOR I=1 TO 10
?I && Imprime los números del 1 al 10
ENDFOR
SELECT clientes
SCAN
? Clientes.nombre&&Lee un archivo desde el inicio hasta el final
ENDSCAN
SELECT clientes
GO TOP
DO WHILE NOT EOF()
? Clientes.nombre&& Lee un archivo desde el inicio hasta el final
SKIP

Prof. José de La Rosa Página 21


Guis del Usuario Revista Compus
Prácticas FoxPro

ENNDO
Puede salir de estas construcciones cíclicas en cualquier momento mediante el comando:
EXIT.
La ramificación en VF es controlada con la construcción IF.. ENDIF, por ejemplo:
IF I >10
? [El contador excedió 10]
ENDIF
Los contadores se utilizan a menudo para salir de operaciones cíclicas:
L=1
DO WHILE L=LEN(nombrelista)
IF [CRUZ]$ nombrelista(L)
SEEK nombrelista(L)
IF nombre= [John]
DO prgnombre
LOOP
ENDIF
ENDIF
ENDDO
Se recomienda que cuando se utiliza un operador cíclico, un operador condicional, o
cualquier otro operador que abra y cierre una estructura se escriba el comando primero y
luego se realice el proceso, esto para no perderse en la programación.

Tipos de comandos
Vamos a dividir los comandos según su funcionalidad en los siguientes tipos:
1. Base de datos: Todos los que sirven para manipular bases de datos, tablas y
campos.
2. Entorno: Entorno del sistema operativo y de Visual Fox Pro.
3. Acceso compartido a datos: Acceso multiusuario a tablas y base de datos.
4. Entrada y salida: Los que permiten la interfaz entre la computadora y el usuario.
5. Programación: Los que tienen relación con el entorno de desarrollo de aplicaciones.

4. FORMULARIOS:
Creando un Formulario:
Click en: Archivo > Nuevo > ( ) Formulario > Nuevo archivo

Prof. José de La Rosa Página 22


Guis del Usuario Revista Compus
Prácticas FoxPro

Diseñador de formulario

Conceptos básicos:
Objeto: Una instancia de una clase que combina datos y procedimientos. Por ejemplo, un
control de un formulario en ejecución es un objeto.
Formulario: Se utilizan para visualizar e introducir cualquier tipo de información y son el
medio de comunicación entre el usuario y los datos.
Propiedades: Un atributo de un control, campo u objeto de base de datos que se establece
para definir una de las características del objeto o un aspecto de su comportamiento. Por
ejemplo, la propiedad Visible afecta a la visibilidad en tiempo de ejecución de un control.
Puede cambiar los valores de las propiedades de objeto mediante la ventana Propiedades.
Evento: Una acción, reconocida por un objeto, para la cual puede escribir código de
respuesta. Los eventos pueden estar generados por una acción del usuario, como hacer clic
con el mouse o presionar una tecla, por código de programa o por el sistema, como ocurre
con los cronómetros.
Método: Una acción que un objeto es capaz de realizar. Por ejemplo, los cuadros de lista
tienen métodos llamados AddItem, RemoveItem y Clear para mantener el contenido de las
listas.
Barra de herramientas: Una serie de botones en los que se hace clic para realizar tareas
frecuentes. Las barras de herramientas pueden flotar en su propia ventana o bien puede
acopladas en los extremos superior, inferior o laterales de la ventana principal de Visual

Prof. José de La Rosa Página 23


Guis del Usuario Revista Compus
Prácticas FoxPro

FoxPro. Puede personalizar las barras de herramientas suministradas con Visual FoxPro,
así como crear barras de herramientas propias mediante la clase de base ToolBar incluida
con Visual FoxPro.

BARRAS DE HERRAMIENTAS:
Nos muestra los controles básicos y disponibles del Visual FoxPro,
estos son llamados clases bases.
Tipos de Controles: Los controles son aquellos objetos que se
colocan en un formulario.

VENTANA DE PROPIEDADES: Nos permite editar


las propiedades de un formulario o sus objetos. La
ventana de propiedades se compone de dos partes, la
sección de controles ubicado en la parte superior, en el
cual dentro de una lista desplegable se encuentran todos
los objetos seleccionados.
En la parte inferior se encuentran las propiedades
existentes, las cuales se pueden dividir en fichas.
VENTANA DE CÓDIGO (SCRIPT):
Al hacer doble clic en un objeto determinado, se
muestra la ventana de código. En esta ventana es donde se escriben las sentencias propias
de Visual FoxPro para detallar la aplicación generada.

Objetos y propiedades básicas


Form
El formulario es un objeto de tipo contenedor.

Prof. José de La Rosa Página 24


Guis del Usuario Revista Compus
Prácticas FoxPro

Los conjuntos de formularios acogen a uno o más formularios, o incluso barra de


herramientas. Ala hora de ejecutar el conjunto de formularios, se activan todos los
formularios definidos en el mismo.

Propiedad Uso
Caption Título de la ventana o forma
Autocenter Centra el formulario
ShowTips Para que se muestren los Tooltips
Closable Visualiza el botón cerrar de la ventana
MaxButton Visualiza el botón maximizar
MinButton Visualiza el botón minimizar
ControlBox Visualiza el menú de control de la ventana
Eventos o Métodos Uso
Init Se dispara a la hora que se inicializan todos los objetos del
formulario
Load Se dispara antes que se inicialicen los objetos del formularios
(antes que el init)
Destroy Se dispara al cerrar el formulario
Unload Se dispara después de Destroy

Viñetas y cuadros de texto


Las viñetas o Labels se utilizan para escribir etiquetas a los objetos.

Propiedad Uso
Caption Título de la ventana o forma
Alignment Especifica la alinación del texto
Name Nombre del objeto
BackColor Color de fondo
ForeColor Color de la letra

Evento o Método Uso


Click Se dispara al dar clic en el objeto
MouseDown El evento MouseDown se desencadena al presionar un botón del
mouse
MouseUp Ocurren cuando el usuario presiona (MouseDown) o suelta
(MouseUp) un botón del mouse

Los cuadros de texto sirven para capturar los datos de los campos.

Propiedades Uso
ControlSource Es la variable o nombre del campo al cual se hace referencia
Value Contenido de la variable o campo referenciado al ControlSource
Visible Si el control es visible al usuario
Enabled Si el control esta habilitado o no
Evento o Método Uso
Click Se dispara al dar clic en el objeto
GotFocus Cuando el control toma el enfoque

Prof. José de La Rosa Página 25


Guis del Usuario Revista Compus
Prácticas FoxPro

LostFocus Cuando el control pierde el enfoque

Botones de comando
Un control que está asociado a un comando. Cuando hace clic en el botón de comando en
tiempo de ejecución, el comando asociado al botón se ejecuta.
Propiedades Uso
Captio Etiqueta del comando
Visible Si el control es visible al usuario
Enabled Si el control esta habilitado

Evento o Método Uso


Click Se dispara al dar clic en el objeto
SetlFocus El cursor se va al objeto
LostFocus Cuando el control pierde el enfoque
Refresh Refresca el objeto
Init Se dispara a la hora que se se inicializa el objeto

Botones de opción y casillas de verificación


Un control OptionButton muestra una opción que se puede activar o desactivar.

Propiedades Uso
ControlSource Es la variable o nombre del campo al cual hace referencia
Value Contenido de la variable o campo referenciado en ControlSource
Visible Si el control es visible al usuario
Enabled Si el control esta habilitado o no

Evento o Método Uso


InteractiveChange Se dispara cuando modificamos el campo
Init Se dispara a la hora en que se inicializa el objeto
Click Se dispara al dar click en el objeto
Valid Se dispara después de presionar Enter o Tab, se utiliza para
validar
Refresh Refresca el objeto

Un control CheckBox muestra una X cuando está activado; la X desaparece cuando el


control CheckBox se desactiva. Utilice este control para ofrecer al usuario una opción de
tipo Verdadero o Falso o Sí o No. Puede usar controles CheckBox en grupos para mostrar
múltiples opciones entre las cuales el usuario puede seleccionar una o más. También puede
establecer el valor de CheckBox mediante programación con la propiedad Value.

Listas y cuadros combinados


Los cuadros de lista y los cuadros combinados presentan al usuario una lista de opciones.
De forma predeterminada, las opciones se muestran verticalmente en una única columna,
aunque también puede establecer múltiples columnas. Si el número de elementos supera a
los que se pueden mostrar en el cuadro combinado o el cuadro de lista, aparecen
automáticamente barras de desplazamiento en el control. El usuario puede entonces
desplazarse por la lista hacia arriba o hacia abajo o de izquierda a derecha.
Los cuadros de lista y los cuadros combinados son una manera efectiva de presentar al
usuario gran cantidad de opciones en un espacio limitado.

Prof. José de La Rosa Página 26


Guis del Usuario Revista Compus
Prácticas FoxPro

Propiedades Uso
ControlSource Variable a que hace referencia (campo donde se almacena el
valor de la lista)
RowSource Tabla o query de los elementos de la lista
rowSourceType Tipo de la fuente (si es tabla o query)
Visible Si el control es visible al usuario
Enabled Si el control esta habilitado o no
BoundColumn Valor que retorna la lisa (número de la columna de Rowsource)
BoundTo Especifica si el valor de la lista esta determinado por los valores
o por la propiedad ListIndex

Evento o Método Uso


Click Se dispara al dar clic en el objeto
SetlFocus El cursor se va al objeto
LostFocus Cuando el control pierde el enfoque
Refresh Refresca el objeto
Init Se dispara a la hora que se se inicializa el objeto

Cuadrícula:
Un control que crea una cuadrícula y que le permite presentar los datos en un formato
tabular. Los controles de tipo cuadrícula contienen encabezados de columna, columnas y
controles de columna.

Propiedades Uso
RecordSource Nombre de la tabla
Visible Si el control es viisible al usuario
Enabled Si el control esta habilitado o no
ColumnCount Número de columnas del Gris
DeleteMark Permite registro para borrar (Aparece en la parte izquierda del
Gris

Evento o Método Uso


Click Se dispara al dar clic en el objeto
SetlFocus El cursor se va al objeto
LostFocus Cuando el control pierde el enfoque
Refresh Refresca el objeto
Init Se dispara a la hora que se inicializa el objeto

Imágenes, controles OLE, timer, Marcos de página


Un control que le permite incluir imágenes en un formulario.
Hipervinculo con cualquier tipo de aplicación.
Un control Timer puede ejecutar código a intervalos periódicos produciendo un evento
Timer.
Un marco de página es un objeto contenedor que contiene páginas. A su vez, las páginas
contienen controles. Las propiedades pueden establecerse a nivel de marco de página, de
página o de control.
Uso de Clases

Prof. José de La Rosa Página 27


Guis del Usuario Revista Compus
Prácticas FoxPro

Los diseñadores ActiveX pueden proporcionar interfaces visuales para tareas que, de otro
modo, requerirían una gran cantidad de código. Por ejemplo, el diseñador UserConnection
incluido en la Edición Empresarial de Visual Basic proporciona herramientas visuales para
definir consultas de bases de datos complejas. En tiempo de ejecución, dichas consultas se
pueden invocar con muy poco código.
Similitudes entre los diseñadores ActiveX y los diseñadores integrados
Los diseñadores ActiveX son como los diseñadores de formularios en los siguientes
aspectos:
• Los diseñadores ActiveX producen clases a partir de las cuales puede crear objetos.
Estas clases aparecen en la ventana Proyecto, igual que las clases de formulario.
• Las clases creadas con un diseñador ActiveX tienen sus propios módulos de
código, en los que puede escribir código para los procedimientos de evento
proporcionados por el diseñador.
• Puede personalizar una clase si agrega propiedades, métodos y eventos a los
proporcionados por el diseñador ActiveX.
• Los objetos creados a partir de las clases diseñadas pueden tener características
diferentes en tiempo de diseño y en tiempo de ejecución.
• La ventana de diseño del diseñador ActiveX está totalmente integrada en el entorno
de desarrollo. Puede modificar su tamaño y configurarla de la misma forma que las
ventanas de diseño incorporadas.
• Puede agregar al proyecto tantas instancias de un diseñador ActiveX como
considere necesario, de la misma forma que puede agregar tantos diseñadores de
formularios como quiera.

Prof. José de La Rosa Página 28


Guis del Usuario Revista Compus
Prácticas FoxPro

Prof. José de La Rosa Página 29


Guis del Usuario Revista Compus
Prácticas FoxPro

PRACTICAS VISUAL FOXPRO

PRACTICA BASE DE DATOS:


Realizar las siguientes tablas para la base de datos Pizzería:

Para llevar a cabo la Práctica Realiza los Siguientes pasos:

1. Crea un nuevo Proyecto con el nombre Pizza


2. en el administrador de proyectos en la Ficha Datos, Selecciona la opción
Databases, y después la opción Nuevo, para crear la base de datos con el nombre
Pizzería.
3. En el diseñador de Base de datos da un clic en la opción Nueva tabla. y haz lo sig;

En la Ficha
Índices,
selecciona
Clave_pizza
como principal.

4. Guarda esta tabla con el nombre de Pizza

Prof. José de La Rosa Página 30


Guis del Usuario Revista Compus
Prácticas FoxPro

5. Ahora deberás crear otra tabla nueva con los siguientes campos.

En la Ficha
Índices, selecciona
Clave_tamaño
como principal

6. Guarda esta tabla con el nombre de tamaños.

7. Ahora deberás crear una tercera tabla con los datos siguientes:

8. Guarda esta tabla con el nombre de Venta.

9. por ultimo deberás crear otra tabla como sigue:

10. Esta tabla la guardas con el nombre factura

Prof. José de La Rosa Página 31


Guis del Usuario Revista Compus
Prácticas FoxPro

11. Crea las relaciones entre las tablas de tal form que te queden de la siguiente
manera:

12. Ahora debemos introducir los datos a las tablas, comenzaremos por la tabla Pizza
y la llenaremos como sigue:

Clave_Pizza Nombre
an Anchoas
pe Peperoni
ha Hawaiana
sa salami

13. seguimos con la tabla Tamaño

Clave_tamaño Tamaño
ch Chica
me Mediana
gr Grande

14. Y Continuamos con la tabla Venta

Clave_Pizza Clave_Tamaño Precio


an ch $ 20.00
an me $ 25.00
an gr $ 30.00
pe ch $ 60.00
pe me $ 65.00
pe gr $ 80.00
ha ch $ 55.00
ha me $ 60.00
ha gr $ 68.00
sa ch $ 63.00
sa me $ 87.00
sa gr $ 98.00

15. ahora crearemos una tabla a partir de una consulta, en la ventana explorador de
proyectos en la pestaña datos selecciona consulta y después nuevo

16. Visual Fox te preguntara que tablas quieres agregar para la realización de tu
consulta, para eso tu debes agregar las siguientes tablas: Tamaña, Venta y Pizza.

Prof. José de La Rosa Página 32


Guis del Usuario Revista Compus
Prácticas FoxPro

17. Una vez con las tablas agregadas, en la ventana diseñador de consultas en la ficha
campos, debemos escoger cuales son los campos que nosotros queremos que nos
muestre la consulta, pues bien vamos a seleccionar los siguientes: Pizza.nombre,
tamaño.tamaño, Venta.Precio, por ultimo agregaremos una expresión como
campo para esto en la misma ventana busca la opción funciones y expresiones y
aparecerá la ventana siguiente:

18. Cuando esta ventana aparezca lo primero que debemos de hacer es seleccionar de
la parte funciones Cadena, la opción “texto”, Luego en la parte de abajo donde
dice Desde tabla Selecciona la tabla Pizza, en el cuadro campos aparecerán los
campos de la tabla pizza de ese cuadro da doble clic al campo clave_pizza, una
vez esto hecho en el cuadro expresión deberá de aparecer el siguiente texto:
“Pizza.cleve.pizza”, una ves con esto ve otra vez a la lista Cadena y ahora
selecciona el símbolo +, el símbolo aparecerá dentro de las comillas, salte de las
comillas y pon un guion(-), la expresión deberá quedar: “Pizza.cleve.pizza+”-,
ahora con lo que ya vimos has que la expresión final quede de la siguiente forma,
recuerda que para sacar los campo de Tamaño primero debes seleccionar la tabla
tamaño de Desde tabla.

Prof. José de La Rosa Página 33


Guis del Usuario Revista Compus
Prácticas FoxPro

19. Una vez que tengas la Expresión da un clic al botón aceptar y después un clic en
Agregar. Te deberá quedar como en la pantalla siguiente:

20. Realizar consultas diferentes para la base de datos:

PRACTICAS CON PROGRAMACIÓN:


Objetivos
Luego de completar este laboratorio, el estudiante será capaz de:

• Identificar los elementos del entorno integrado de desarrollo de Microsoft Visual


FoxPro 6.0.

Prof. José de La Rosa Página 34


Guis del Usuario Revista Compus
Prácticas FoxPro

• Implementar soluciones mediante programación clásica.


• Declarar y asignar valores tanto a las variables de memoria como a los arreglos.
• Analizar como es el flujo de control de un programa.
• Crear funciones y procedimientos definidos por el usuario.

Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá crear una carpeta
D:\P_VFP\PROGRAMA, para guardar sus trabajos correspondientes a este laboratorio.

Aplicación Nº 1
En este primer ejercicio vamos a escribir un programa que lea tres números enteros
y determine el número mayor, el número central y el número menor. Debemos asumir que
los tres números son siempre distintos.

Para el desarrollo de la presente aplicación ingresar a Microsoft Visual FoxPro. En


la Ventana de Comandos digite la siguiente orden:

Modify Command Aplicacion01

A continuación se debe presentar el Editor de programas. En dicha ventana proceda


a ingresar el código que se indica:

Close All
Clear
Input “Ingrese el valor de A?” To nA
Input “Ingrese el valor de B?” To nB
Input “Ingrese el valor de C?” To nC
If nA > nB Then
nMay = nA
nMen = nB
Else
nMay = nB
nMen = nA
EndIf
If nC > nMay Then
nCen = nMay
nMay = nC
Else
If nC > nMen Then
nCen = nC
Else
nCen = nMen
nMen = nC
EndIf
EndIf
? “Mayor =” + Str(nMay)
? “Central =” + Str(nCen)
? “Menor =” + Str(nMen)

Prof. José de La Rosa Página 35


Guis del Usuario Revista Compus
Prácticas FoxPro

Para ejecutar su programa dar click en el botón Ejecutar ( ! ) de la Barra de


herramientas Estándar, o realizar la combinación Ctrl. + E

Para volver a ejecutar su programa digitar la siguiente orden desde la Ventana de


Comandos:

Do Aplicaion01

Aplicación Nº 2
Un restaurante ofrece un descuento del 10% para consumos entre S/. 30.00 y S/.
50.00; un descuento del 20% para consumos mayores a S/. 50.00 nuevos soles; para todos
los demás casos no se aplica ningún tipo de descuento. El ejercicio consiste en elaborar una
programa que permita determinar el importe a pagar por el consumidor.

Para el desarrollo de la presente aplicación abrir una nueva ventana de edición e


ingresar el siguiente código:

Close All
Clear
Do While .T.
Input “Consumo S/.” To nConsumo
If Type (“nConsumo”) = “N”
Exit
EndIf
EndDo
Do Case
Case nConsumo >= 30 And nConsumo <= 50
nImporte = nConsumo * 0.9
Case nConsumo > 50
nImporte = nConsumo * 0.8
Otherwise
nImporte = nConsumo
EndCase
? “Importe a pagar S/.” + Str(nImporte)

Aplicación Nº 3
El ejercicio consiste en escribir un programa que lea “ n ” enteros y calcule la suma
total, la media aritmética, el máximo y el mínimo de los datos.

Para el desarrollo de la presente aplicación, de manera análoga que para los casos
anteriores abrir una nueva ventana de edición e ingresar el siguiente código:

Close All
Clear
Input “Ingrese cantidad de números?” To nN
Declare aVector(nN)
For nI = 1 To nN
Input “Número [” + Str(nI) + “]?” To aVector(nI)
Next
nMax = aVector[1]

Prof. José de La Rosa Página 36


Guis del Usuario Revista Compus
Prácticas FoxPro

nMin = aVector[1]
nSuma = 0
For nI = 1 To nN
nSuma = nSuma + aVector[nI]
If aVector[nI] > nMax Then
nMax = aVector[nI]
EndIf
If aVector[nI] < nMin Then
nMin = aVector[nI]
EndIf
Next
nMedia = nSuma / nN
? “Suma =” + Str(nSuma)
? “Media =” + Str(nMedia, 10, 2)
? “Máximo=” + Str(nMax)
? “Mínimo=” + Str(nMin)

Aplicación Nº 4
A continuación vamos a escribir una función que reciba como argumento de
entrada una cadena de caracteres y la devuelva en forma inversa, por ejemplo si se ingresa
la cadena CORAZON deberá retornar NOZAROC.

Para el desarrollo de esta aplicación proceda de manera similar a los casos


anteriores e ingresar el código que se muestra:

Close All
Clear
Accept “Ingrese una cadena?” To cCadena
? “Cadena invertida =” + CadInv(cCadena)

Function CadInv
Parameters cCadena
nN = Len(Alltrim(cCadena))
Declare cTemporal(nN)
For nI = 1 To nN
cTemporal(nI) = SubStr(cCadena, nI, 1)
Next
cInvertida = “”
For nJ = nN To 1 Step -1
cInvertida = cInvertida + cTemporal(nJ)
Next J
Return cInvertida

PRACTICAS CON FORMULARIOS


Objetivos
Luego de completar este laboratorio, el estudiante será capaz de:

• Implementar soluciones mediante programación orientada a objetos.


• Manejar las diferentes propiedades y eventos del formulario.
• Añadir controles a un formulario.

Prof. José de La Rosa Página 37


Guis del Usuario Revista Compus
Prácticas FoxPro

• Establecer las propiedades de los controles.


• Trabajar con procedimientos de eventos.

Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá crear una carpeta
D:\P_VFP\FORMULARIO, para guardar sus trabajos correspondientes a este laboratorio.

Aplicación Nº 1
Este ejercicio consiste en elaborar un formulario que permita leer un número entero
y visualice su tabla de multiplicar. Para construir la tabla de multiplicar vamos a utilizar un
control cuadro de edición, el cual tiene propiedades similares a un cuadro de texto, pero
permite escribir texto en líneas diferentes.

Para el desarrollo de esta aplicación, proceda a ubicar los siguientes controles en el


formulario:

1 etiqueta
1 caja de texto
1 cuadro de edición
1 botón de comandos

En seguida proceda a establecer las propiedades según se indica:

Form1
Name FrmTabla
Caption Tabla de multiplicar
MaxButton .F.-Falso
MinButton .F.-Falso

Label1
Name LblNumero
Caption Ingrese un número:

Prof. José de La Rosa Página 38


Guis del Usuario Revista Compus
Prácticas FoxPro

Text1
Name TxtNumero
Alignment 2-Centro

Edit1
Name EdtTabla
ScrollBars 2-Vertical

Command1
Name CmdLimpiar
Caption \<Limpiar
Default .T.-Verdadero

Una vez diseñada la interfaz, proceda a ingresar el código que se indica a


continuación:

Objeto: TxtNumero Procedimiento: InteractiveChange

nN = Val(Thisform.TxtNumero.Value)
cS = “”
For nI = 0 To 12
nP = nN * nI
cS = cS + Str(nN) + “ * ” + Str(nI) + “ = ” + Str(nP) ;
+ Chr(13)
Next
Thisform.EdtTabla.Value = cS
Thisform.Refresh

Objeto: CmdLimpiar Procedimiento: Click

Thisform.TxtNumero.Value = “”
Thisform.EdtTabla.Value = “”
Thisform.Refresh

Aplicación Nº 2
Este ejercicio consiste en elaborar una aplicación que permita cambiar el aspecto de
una caja de texto. El usuario debe elegir el tipo de fuente a utilizar, el estilo, el color y el
tamaño. El diseño de la interfaz debe ser similar a:

Prof. José de La Rosa Página 39


Guis del Usuario Revista Compus
Prácticas FoxPro

Para el desarrollo de esta aplicación, proceda a ubicar los siguientes controles en el


formulario:

5 etiquetas
1 caja de texto
1 cuadro combinado
1 lista
3 casillas de verificación
1 grupo de botones de opción
1 botón de comando

En seguida proceda a establecer las propiedades según se indica:

Form1
Name FrmEditor
AutoCenter .T.-Verdadero
Caption Editor
MaxButton .F.-Falso
MinButton .F.-Falso

Label1
Name LblTexto
Caption Texto

Label2
Name LblFuente
Caption Fuente

Label3
Name LblTamaño
Caption Tamaño
Label4
Name LblEstilo
Caption Estilo

Label5
Name LblColor

Prof. José de La Rosa Página 40


Guis del Usuario Revista Compus
Prácticas FoxPro

Caption Color

Combo1
Name CboFuente

List1
Name LstTamaño

Text1
Name TxtTexto
ForeColor 255, 0, 0

Check1
Name ChkNegrita
Caption Negrita
FontBold .T.-Verdadero

Check2
Name ChkCursiva
Caption Cursiva
FontItalic .T.-Verdadero

Check3
Name ChkSubrayado
Caption Subrayado
FontUnderline .T.-Verdadero

OptionGroup1
ButtonCount 3

Option1
Name OptRojo
ForeColor 255, 0, 0

Option2
Name OptVerde
ForeColor 0, 255, 0

Option3
Name OptAzul
ForeColor 0, 0, 255

Command1
Name CmdSalir
Caption \<Salir
Default .T.-Verdadero

Prof. José de La Rosa Página 41


Guis del Usuario Revista Compus
Prácticas FoxPro

Una vez establecidas las propiedades de la interfaz, proceda a ingresar el código


que se muestra a continuación:

Objeto: FrmEditor Procedimiento: Init

Thisform.CboFuente.AddItem(“Arial”)
Thisform.CboFuente.AddItem(“Arial Black”)
Thisform.CboFuente.AddItem(“Courier New”)
Thisform.CboFuente.AddItem(“Garamond”)
Thisform.CboFuente.AddItem(“Impact”)
Thisform.CboFuente.AddItem(“MS Sans Serif”)
Thisform.CboFuente.AddItem(“Technical”)
Thisform.CboFuente.AddItem(“Times New Roman”)
For nI = 8 To 20 Step 2
Thisform.LstTamaño.AddItem(Alltrim(Str(nI)))
Next

Objeto: FrmEditor Procedimiento: QueryUnload

#DEFINE vfpYesNo 4
#DEFINE vfpYes 6
#DEFINE vfpQuestion 32
If MessageBox(“¿Desea terminar la aplicación?”, ;
vfpQuestion + vfpYesNo, “Pregunta”) = vfpYes Then
Release Thisform
Else
NoDefault
EndIf

Objeto: CboFuente Procedimiento: Click

Thisform.TxtTexto.FontName = Thisform.CboFuente.Value
Thisform.Refresh

Objeto: LstTamaño Procedimiento: Click

nTamaño = Val(Thisform.LstTamaño.Value)
Thisform.TxtTexto.FontSize = nTamaño
Thisform.Refresh

Objeto: ChkNegrita Procedimiento: Click

If Thisform.ChkNegrita.Value = 1 Then
Thisform.TxtTexto.FontBold = .T.
Else
Thisform.TxtTexto.FontBold = .F.
EndIf
Thisform.Refresh
Objeto: ChkCursiva Procedimiento: Click

Prof. José de La Rosa Página 42


Guis del Usuario Revista Compus
Prácticas FoxPro

If Thisform.ChkCursiva.Value = 1 Then
Thisform.TxtTexto.FontItalic = .T.
Else
Thisform.TxtTexto.FontItalic = .F.
EndIf
Thisform.Refresh

Objeto: ChkSubrayado Procedimiento: Click

If Thisform.ChkSubrayado.Value = 1 Then
Thisform.TxtTexto.FontUnderline = .T.
Else
Thisform.TxtTexto.FontUnderline = .F.
EndIf
Thisform.Refresh

Objeto: OptRojo Procedimiento: Click

Thisform.TxtTexto.ForeColor = RGB(255, 0, 0)
Thisform.Refresh

Objeto: OptVerde Procedimiento: Click

Thisform.TxtTexto.ForeColor = RGB(0, 255, 0)


Thisform.Refresh

Objeto: OptAzul Procedimiento: Click

Thisform.TxtTexto.ForeColor = RGB(0, 0, 255)


Thisform.Refresh

Objeto: CmdSalir Procedimiento: Click

Thisform.QueryUnload

Bases de Datos con formulario:

Movimiento entre registros:


Realizar la siguiente base de datos denominada COMPAÑÍA, y relacionar las tablas:

Prof. José de La Rosa Página 43


Guis del Usuario Revista Compus
Prácticas FoxPro

Crear el siguiente formulario:

A todas las cajas de texto asigne la propiedad ENABLED = .f.


Oculte los Botones, Guardar y Guardar Cambios, con la propiedad VISIBLE=.f.

Codigo para los Botonos:


Boton Primero Procedimiento:Click
Go top
Thisform.refresh

Boton Anterior Procedimiento:Click


If .Not. bof () then
Skip -1
Else
Go bottom
EndIf
Thisform.refresh

Boton Siguiente Procedimiento:Click


If .Not. eof() then
Skip +1
Else
Go Top
EndIf
Thisform.refresh

Boton Primero Procedimiento:Click


Go Bottom
Thisform.refresh

Boton Salir Procedimiento:Click


Release Thisform

Prof. José de La Rosa Página 44


Guis del Usuario Revista Compus
Prácticas FoxPro

Boton Eliminar Procedimiento:Click


Mensaje= MESSAGEBOX(“Desea eliminar el Registro”,4+32+256,”Eliminar”)
Do Case
Case mensaje=6
Delete
Pack
Go Top
Thisform.refresh

Case mensaje=7
Thisform.refresh
EndCase

Boton Agregar Procedimiento:Click


*Habilite todas las cajas de texto con la propiedad Enabled y muestre el boton Guardar con
*la propiedad Visible Ejm:
*Thisform.txtcod_empleado.enabled=.t.
*Thisform.cguardar.visible=.t.
Go Bottom
Thisform.refresh
Append blank
Thisform.refresh

Boton Guardar Procedimiento:Click


Mensaje= MESSAGEBOX(“Desea Guardar el Registro”,4+32+256,”Guardar”)
Do Case
Case mensaje=6
Thisform.refresh
Case mensaje=7
Delete
Pack
EndCase
*Desabilite todas las cajas de texto con la propiedad Enabled y oculte el Botón Guardar
*con la propiedad Visible Ejm:
*Thisform.txtcod_empleado.enabled=.f.
*Thisform.cguardar.visible=.f.

Thisform.refresh

Boton Editar Procedimiento:Click


*Habilite todas las cajas de texto con la propiedad Enabled y muestre el boton Guardar
*Cambios con la propiedad Visible Ejm:
*Thisform.txtcod_empleado.enabled=.t.
*Thisform.cguardar.cambios.visible=.t.

Mensaje= MESSAGEBOX(“Desea Guardar el Registro”,4+32+256,”Guardar”)


Do Case
Case mensaje=6
Thisform.refresh
Case mensaje=7

Prof. José de La Rosa Página 45


Guis del Usuario Revista Compus
Prácticas FoxPro

Delete
Pack
EndCase
Thisform.refresh

Boton Guardar Camhios Procedimiento:Click


*Desabilite todas las cajas de texto con la propiedad Enabled y oculte el Botón Guardar
*Cambios con la propiedad Visible Ejm:
*Thisform.txtcod_empleado.enabled=.f.
*Thisform.cguardarcambios.visible=.f.
Thisform.refresh

Laboratorio Nº 02
Realizaremos el siguiente formulario de Facturación, para ello las indicaciones se
encuentran en la parte inferior:

Carguemos Visual FoxPro


1. Para simular una Entidad vamos a crear las siguientes tablas en la Base de Datos
Ventas, a las tablas Artículos y Clientes ingresar algunos registros.

Articulo.dbf Clientes.DBF
Artcod C 3 ClieCod C 3
ArtDet C 40 ClieNom C 40
ArtPre N 10 3 ClieRuc C 8
ArtStk N 4

GuiaEnc.DBF Guiadet.DBF
Nguia C 6 Nguia C 6
ClieCod C 3 ArtCod C 3
IGV N 7 2 ArtDet C 40
Total N 10 2 PreUni N 7 2
Cant N 5
SubTotal N 10 2

Prof. José de La Rosa Página 46


Guis del Usuario Revista Compus
Prácticas FoxPro

Temporal.DBF
Nguia C 6
ArtCod C 3
ArtDet C 40
PreUni N 7 2
Cant N 5
SubTotal N 10 2
Nota: Indexar la tabla GuiaEnc, campo Nguia con etiqueta Nguia

2. Creamos Nuevo formulario luego insertamos los objetos que se muestran en el


grafico inferior.

3. Para el Entorno de Datos asignamos las cinco tablas creadas anteriormente

4. En tiempo de Diseño

Modificamos las propiedades de los objetos según la tabla siguiente:


Objeto: Propiedad Valor Objeto: Propiedad Valor
ControlSource Clientes.Clienom Alignment 2. Centro
Name CmbCliente DisableBackColor A Criterio del Usuario
Combo1 Row SourceType Campos Text1 DisableForeColor A Criterio del Usuario
Row Source Clientes.Clienom Enabled FALSO
Style 2. Lista desplegable Name txtNguia
Value 1 FontName A Criterio del Usuario
Alignment 2. Centro Column Count 4
DisableBackColor A Criterio del Usuario Deleted mark .F. Falso
Text2 DisableForeColor A Criterio del Usuario Grid1 Name grdDetalle
Enabled FALSO RecordSource Temporal
Name TxtTotal BackColor A Criterio del Usuario
FontName A Criterio del Usuario GridLineColor Azul

Prof. José de La Rosa Página 47


Guis del Usuario Revista Compus
Prácticas FoxPro

Antes de continuar con más cambios, vamos a insertar objetos Combo y Spinner en la
columna1 y columna2 del Grid respectivamente, para ello prepare el control de
Formularios luego:

Seleccione el objeto: Grid


Presione sobre ella : Botón Derecho
Seleccione : Modificar
Hacemos Click en : Combo
Luego Click sobre ab debajo de: Header1 de la primera columna del grid
Hacemos Click en : Spinner
Luego Click sobre ab debajo de: Header1 de la Segunda columna del grid
Salimos de edición haciendo Click fuera del Grid

Presionamos Botón derecho sobre el Grid


Propiedades
Hacemos Clic en: grdDetalle
Seleccionamos : Column1
Current Control
Clic en Text1
seleccionamos Combo1

Similar debe hacerlo para Spinner de la Segunda Columna

Continuamos cambiando el valor de las propiedades de los siguientes objetos:

Objeto: Propiedad Valor Objeto: Propiedad Valor


ControlSource Temporal.Artdet ControlSource Temporal.Artpre
Column1 CurrentControl Combo1 Column3 Name ColPreUni
Name ColDescripcion ReadOnly .T. Verdadero
ControlSource Temporal.Artdet ControlSource Temporal.SubTotal
Column2 CurrentControl Spinner1 Column2 Name ColSubTotal
Name ColDescripcion ReadOnly .T. Verdadero

Alignment 2. Medio Centro Alignment 2. Medio Centro


Header1 Caption Descripcion Header3 Caption Precio
FontBold .T. Verdadero FontBold .T. Verdadero
Alignment 2. Medio Centro Alignment 2. Medio Centro
Header2 Caption Cantidad Header4 Caption SubTotal
FontBold .T. Verdadero FontBold .T. Verdadero

ControlSource Temporal.Cant
ControlSource Temporal.ArtDet KeyboardHighValue 99
Name CmbDescripcion KeyboardLowValue 1
Combo1 RowSourceType 6. Campos Spinner1 Name SpnCantidad
RowSource Articulo.ArtDet Style 2. Lista Desplegable
Style 2. Lista Desplegable SpinnerHighValue 99
Value 1 SpinnerLowValue 1
Value 1

Prof. José de La Rosa Página 48


Guis del Usuario Revista Compus
Prácticas FoxPro

Más propiedades
Nota: Caption de Labels ver el Grafico

Objeto: Propiedad Valor Objeto: Propiedad Valor


Command1 Caption \<Nuevo Command3 Caption \<Guardar
Name cmdNuevo Name cmdGuardar
Command2 Caption \<Agregar Command4 Caption \<Salir
Name cmdAgregar Name cmdSalir

Command2 Caption \<Agregar Command4 Caption \<Salir


Text1 Name txtNguia Text2 Name txtSubTotal
Diseño en tiempo de Ejecución:

Digitaremos los siguientes códigos, según como se indican a continuación

Objeto: Formulario Principal (Form1) Evento Init


Public srec
set multilock on
set talk off
set safety off
set exclusive on

SELECT GUIAENC
= cursorsetprop("buffering",3)
set order to tag Nguia
go bottom
thisform.txtnguia.value = right("00000"+alltrim(str(val(nguia)+1)),6)
append blank
replace nguia with thisform.txtnguia.value

Select temporal
dele all
set dele on
append blank
replace nguia with thisform.txtnguia.value
srec=recno()
thisform.grdDetalle.refresh
thisform.txttotal.value=0
Evento Destroy
SELECT GUIAENC =Tablerevert (.t.)
SELECT TEMPORAL

Objeto: Cmbdescripcion Evento: Click


If len(allt(thisform.grddetalle.coldescripcion.cmbdescripcion.value))>0
thisform.grddetalle.colcantidad.spncantidad.setfocus
else
thisform.grddetalle.coldescripcion.cmbdescripcion.setfocus
endif
thisform.refresh

Prof. José de La Rosa Página 49


Guis del Usuario Revista Compus
Prácticas FoxPro

Evento: Interactivechange
SELECT temporal
go srec
replace artcod with articulo.artcod
replace preuni with articulo.artpre
replace subtotal with thisform.grddetalle.colcantidad.spncantidad.value*preuni
sum subtotal to ntotal
go srec
thisform.txttotal.value=ntotal
thisform.grddetalle.colcantidad.spncantidad.value=1
thisform.refresh

Evento: LostFocus
if len(allt(thisform.grddetalle.coldescripcion.cmbdescripcion.value))>0
thisform.grddetalle.colcantidad.spncantidad.setfocus
else
thisform.grddetalle.coldescripcion.cmbdescripcion.setfocus
endif
thisform.refresh

Objeto: spnCantidad Evento: InteractiveChange


select temporal
replace subtot with thisform.grddetalle.colcantidad.spncantidad.value*preuni
nrec=recno()
sum subtotal to ntotal
go nrec
thisform.txttotal.value=ntotal
thisform.refresh

Evento: LostFocus
thisform.grddetalle.coldescripcion.cmbdescripcion.setfocus

Objeto: cmbCliente Evento: Click


SELECT GUIAENC
replace cliecod with cliente.cliecod
thisform.grddetalle.coldescripcion.cmbdescripcion.setfocus
THISFORM.REFRESH

Objeto: cmdAgregar Evento: Click


public srec
SELECT TEMPORAL
if len(allt(artdet))>0
append blank
srec=recno()
thisform.grddetalle.colcantidad.spncantidad.value=1
endif
replace nguia with thisform.txtnguia.value
thisform.grddetalle.coldescripcion.cmbdescripcion.setfocus
thisform.refresh

Prof. José de La Rosa Página 50


Guis del Usuario Revista Compus
Prácticas FoxPro

Objeto: cmdNuevo Evento: Click


Public srec
select temporal
dele all
set dele on
append blank
replace nguia with thisform.txtnguia.value
srec=recno()
thisform.grddetalle.refresh
thisform.txttotal.value=0
thisform.refresh

Objeto: cmdGuardar Evento: Click


SELECT GUIAENC
replace igv with thisform.txttotal.value*0.18
replace total with thisform.txttotal.value
=tableupdate(.t.)

SELECT TEMPORAL
Scan
insert into guiadet(nguia,artcod,artdet,preuni,cant,subtotal);
values(temporal.nguia,temporal.artcod,temporal.artdet,;
temporal.preuni,temporal.cant,temporal.subtotal)
EndScan

SELECT GUIAENC
set order to tag Nguia
go bottom
thisform.txtnguia.value=right("00000"+alltrim(str(val(nguia)+1)),6)

Objeto: cmdSalir Evento: Click


SELECT GUIAENC
=tablerevert(.t.)
SELECT TEMPORAL
release thisform

Guardar y Probar la Ejecución.


Realizar los cambios respectivos, hasta presentar similar al presente modelo.

Queda para el usuario hacer los últimos toques, para que resulte un buen diseño.

Prof. José de La Rosa Página 51