Prcticas FoxPro
Revista Compus
INTRODUCCION
En este mdulo daremos a conocer al estudiante el lenguaje de programacin 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 programacin sea
sencilla, estructurada y ms fcil de entender tanto para programadores principiantes como
programadores expertos.
Es una potente herramienta orientada a objetos para la creacin y administracin de
bases de datos y para el desarrollo de aplicaciones profesionales. Ofrece todo lo necesario
para organizar la informacin en tablas, realizar consultas, crear bases de datos
relacionales, programar aplicaciones, informes, etc.
Pgina 1
Revista Compus
VISUAL FOXPRO
Visual FoxPro es un gestor de base de datos, orientado a la programacin de
objetos. Se dice esto porque utiliza objetos prediseados, a la vez Visual FoxPro es una
aplicacin que permite gestionar y manipular informacin organizada en una base de datos.
Puede elaborar consultas, informes, pantallas, mens y proyectos sobre una o varias
tablas.
Desarrolla aplicaciones en un ambiente orientado a objetos con caractersticas
cliente/servidor.
CONCEPTOS BSICOS:
Base de Datos: Una base de datos o banco de datos es un conjunto de datos pertenecientes
a un mismo contexto y almacenados sistemticamente para su posterior uso. En este
sentido, una biblioteca puede considerarse una base de datos compuesta en su mayora 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 rpida y
estructurada. Las propiedades de estos SGBD, as como su utilizacin y administracin, se
estudian dentro del mbito de la informtica. 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 clculo.
Las tablas se componen de dos estructuras:
Campo: Corresponde al nombre de la columna. Debe ser nico y adems 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 definicin 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, adems, propiedades especiales que afectan a los
registros insertados. El campo puede ser definido como ndice o autoincrementable, lo cual
Pgina 2
Revista Compus
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, hacindola
accesible mediante su nombre o su sinnimo (dependiendo del tipo de base de datos
elegida).
Ingreso al programa:
Elija Programas.
Ventana de
Comandos
Barra de Estado
Edicin:
Ver:
Pgina 3
Herramientas:
Revista Compus
Programa:
Proyecto:
Ventana:
Visualizar ventanas.
Ayuda:
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 rpido y fcil acceso a los objetos
que utilizar en el proyecto. Cuando se desarrolla una aplicacin se utilizan las tcnicas de
ratn sealar y pulsar o arrastrar y colocar para poder acceder y manipular los
componentes de la aplicacin.
Pgina 4
Revista Compus
Una recomendacin, cree un directorio para su aplicacin y dentro de el, uno para
las tablas, otro para los informes, formularios y recursos (archivos BMP, libreras, etc.), es
importante mantener un orden, le ahorrara dolores de cabeza para ubicar un archivo, o
diferenciar cuales son externos (que deben acompaar al ejecutable, como son las tablas,
libreras, archivos BMP, etc.)
COMANDOS BSICOS 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 configuracin del sistema:
SAFETY = OFF && no avisa antes de sobrescribir archivos
Pgina 5
Revista Compus
Pgina 6
Revista Compus
Contendedor de
la Base de Datos
Barra de herramientas
para BD
Pgina 7
Revista Compus
Pgina 8
Revista Compus
Use
Modify Structure
Select <N>
CREACIN DE CAMPOS:
Los campos no deben de contener caracteres especiales, fuera del carcter "Guin bajo", y
tampoco puede empezar con un nmero. Pueden ser cuales quiera de varios tipos:
Ingreso de campos: Igual que en las versiones anteriores, la definicin de campos es igual.
Se introduce el nombre del campo, el tipo de datos que soportar y el tamao. 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 carcter "Guin bajo", y
tampoco puede empezar con un nmero. Pueden ser cuales quiera de varios tipos:
Tipo
Descripcin
Ejemplo
Carcter
Texto alfanumrico
La direccin de un cliente
Monetario
Unidades monetarias
Precio de compra
Numrico
Flotante
Fecha
FechaHora
Doble
Entero
Lgico
Verdadero o Falso
Memo
Texto alfanumrico de
indeterminada,
similar
procesador de texto
Si se ha completado o no un pedido
longitud Notas de un registro telefnico
a
un sobre las llamadas
Pgina 9
Revista Compus
General
Permite guardar datos tipo OLE, por Hoja de clculo de Excel, un control
ejemplo imgenes, sonidos u otros ActiveX
creados por una aplicacin diferente.
Carcter
(binario)
Memo
(binario)
Principal
Candidato
Normal
nico
Pgina 10
Revista Compus
Los ndices principales, aseguran que slo 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, tambin 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 ms de un ndice
normal a una tabla.
Por compatibilidad con versiones anteriores, tambin puede crear un ndice nico que
selecciona y ordena un subconjunto de registros segn la primera aparicin 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 necesitramos una lista de precios probablemente la
querramos en orden alfabtico y en otras ocasiones segn el cdigo, solucionaremos
ambos casos creando dos ndices:
Relacin entre Tablas:
Relacin temporal: Es la que consigue usando el comando SET RELATION, su mismo
nombre lo indica la relacin se efecta solo por un instante, al dar la orden CLOSE DATA
se pedrera inmediatamente.
Relacin permanente: se consigue al construir la base de datos, este tipo de relacin es
persistente.
Comandos para vincular tablas:
SET RELATION TO
Crea una relacin 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
Pgina 11
Revista Compus
Si presionamos que SI nos aparecer una nueva ventana en la cul vamos a empezar a
rellenar los registros para dicha tabla.
Comandos para el manejo de registros:
Cuando utilizamos inicialmente una tabla de FoxPro, t ests 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 atrs. (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 vers 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
Condicin.
Pgina 12
Revista Compus
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 parmetros, y se reconocen por el uso de parntesis para
encerrar los argumentos, por ejemplo DATE( ) y TIME ( ).
Las funciones se dividen de la siguiente forma:
Tipos de datos
Pgina 13
Revista Compus
cadena=abcd.
Variable:
Agrupa subexpresiones
**, ^ Exponenciacin
*, /
Multiplicacin y divisin
+, -
Suma y resta
Operadores relacionales:
<
Menor que
>
Mayor que
<=
>=
igual a
<>, #, =Distinto de
$
Contenido en
Pgina 14
Revista Compus
cuenta = 0
* Asignacin de datos
cadena1 = abcd efgh ijkl
* utilizando la funcin LEN para contar el nmero de la cadena
? LEN(Cadena1)
persona_ordenada
Eduardo Garay
Roxana Cuellar
Juan Martnez
Margarita Rosales
Margarita Rosales
Pedro Lpez
Pedro Lpez
Eduardo Garay
Comando INDEX ON
Roxana Cuellar
Pgina 15
Revista Compus
Pgina 16
Revista Compus
En este caso como las tablas ya estn relacionadas, segn 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 Cdigo.
Paso 4 - Ordenar registros
5.Finalizar
Informes:
Los informes son la representacin grfica de las consultas y tablas que posee una Base de
datos, utilice el Diseador de informes para crear y modificar informes.
Para crear rpidamente un diseo sencillo de info.
me, elija Informe rpido del men Informe. Informe rpido le solicita la entrada de los
campos y el diseo que desea para su informe.
Pgina 17
Revista Compus
Opciones de la ventana
Bandas
De forma predeterminada, el Diseador de informes muestra tres bandas: Encabezado de
pgina, Detalle y Pie de pgina. 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
Encabezado
Se imprime
de Una vez por columna
Contenido tpico
Ttulo de columna
columna
Pie de columna
Una vez por columna
Encabezado de Una vez por grupo
Resumen, totales
Precede los datos siguientes
grupo
Pie de grupo
Ttulo
Fecha
Logotipo
Resumen
nmero
de
de
la
pgina
compaa
Regla:
El Diseador de informes tiene una regla vertical y otra horizontal que puede utilizar para
colocar de forma ms precisa los objetos en las bandas. Utilice las reglas junto con el
comando Ver del men Mostrar posicin para ayudarle en la colocacin 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 centmetros) a pxeles
desde dentro de Visual FoxPro. Si desea cambiar al valor predeterminado del sistema,
cambie la configuracin de medidas de su sistema operativo.
Creacin de Reportes Con Asistente.
Paso 1 - Seleccionar campos
Pgina 18
Revista Compus
Paso 3. Estilo
Paso 4 - Distribucin
Paso 5 - Orden---codi_peli
Paso 6. Finalizar
3. PROGRAMACIN:
Conceptos:
Usualmente se agrupa el cdigo 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 cdigo interpretado.
En cuanto el compilador ha traducido el cdigo fuente crea un archivo con extensin .FXP
que es el que va a utilizar a partir de ese momento. Cada vez que el programador
introduce algn cambio en el archivo .PRG el compilador compara la fecha de ambos
archivos y crea una nueva versin compilada del programa.
Pgina 19
Revista Compus
Espacios en blanco: Significan reas vacas dentro del cdigo de programa, tambin
espacios, tabulaciones o lneas vacas.
DO ENDDO
IF ENDIF
SCAN..ENDSCAN
DOCASE...ENDCASE
WITHENDWITH
Una de las tcnicas ms tiles en la programacin son los encabezados de programa, por
ejemplo:
* Nombre del programa
: nombre
* Autor
: Hctor Hernndez
* Propsito
* Fecha
: 12/12/2001
Comandos de Asignacin:
Para crear variables de memoria y darles valores al mismo tiempo, escriba lo siguiente:
Input: Imprime por pantalla un mensaje y me da la opcin para capturar un valor en una
variable.
X=3
STORE lunes TO da
Para solamente crearlas:
PUBLIC a, b, c
Pgina 20
Revista Compus
PRIVATE x, y, z
LOCAL nombre, trabaja
DIMENSION nombres(3)
Declaracin 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,
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
ENNDO
Pgina 21
Revista Compus
Pgina 22
Revista Compus
Conceptos bsicos:
Objeto: Una instancia de una clase que combina datos y procedimientos. Por ejemplo, un
control de un formulario en ejecucin es un objeto.
Formulario: Se utilizan para visualizar e introducir cualquier tipo de informacin y son el
medio de comunicacin 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 caractersticas del objeto o un aspecto de su comportamiento. Por
ejemplo, la propiedad Visible afecta a la visibilidad en tiempo de ejecucin de un control.
Puede cambiar los valores de las propiedades de objeto mediante la ventana Propiedades.
Evento: Una accin, reconocida por un objeto, para la cual puede escribir cdigo de
respuesta. Los eventos pueden estar generados por una accin del usuario, como hacer clic
con el mouse o presionar una tecla, por cdigo de programa o por el sistema, como ocurre
con los cronmetros.
Mtodo: Una accin que un objeto es capaz de realizar. Por ejemplo, los cuadros de lista
tienen mtodos 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
FoxPro. Puede personalizar las barras de herramientas suministradas con Visual FoxPro,
Prof. Jos de La Rosa
Pgina 23
Revista Compus
as como crear barras de herramientas propias mediante la clase de base ToolBar incluida
con Visual FoxPro.
BARRAS DE HERRAMIENTAS:
Nos muestra los controles bsicos 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
seccin 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 CDIGO (SCRIPT):
Al hacer doble clic en un objeto determinado, se
muestra la ventana de cdigo. En esta ventana es donde se escriben las sentencias propias
de Visual FoxPro para detallar la aplicacin generada.
Pgina 24
Revista Compus
Uso
Ttulo de la ventana o forma
Centra el formulario
Para que se muestren los Tooltips
Visualiza el botn cerrar de la ventana
Visualiza el botn maximizar
Visualiza el botn minimizar
Visualiza el men de control de la ventana
Uso
Se dispara a la hora que se inicializan todos los objetos del
formulario
Se dispara antes que se inicialicen los objetos del formularios
(antes que el init)
Se dispara al cerrar el formulario
Se dispara despus de Destroy
Uso
Ttulo de la ventana o forma
Especifica la alinacin del texto
Nombre del objeto
Color de fondo
Color de la letra
Evento o Mtodo
Click
MouseDown
Uso
Se dispara al dar clic en el objeto
El evento MouseDown se desencadena al presionar un botn del
mouse
Ocurren cuando el usuario presiona (MouseDown) o suelta
(MouseUp) un botn del mouse
MouseUp
Los cuadros de texto sirven para capturar los datos de los campos.
Propiedades
ControlSource
Value
Visible
Enabled
Evento o Mtodo
Click
GotFocus
Uso
Es la variable o nombre del campo al cual se hace referencia
Contenido de la variable o campo referenciado al ControlSource
Si el control es visible al usuario
Si el control esta habilitado o no
Uso
Se dispara al dar clic en el objeto
Cuando el control toma el enfoque
Pgina 25
LostFocus
Revista Compus
Botones de comando
Un control que est asociado a un comando. Cuando hace clic en el botn de comando en
tiempo de ejecucin, el comando asociado al botn se ejecuta.
Propiedades
Uso
Captio
Etiqueta del comando
Visible
Si el control es visible al usuario
Enabled
Si el control esta habilitado
Evento o Mtodo
Click
SetlFocus
LostFocus
Refresh
Init
Uso
Se dispara al dar clic en el objeto
El cursor se va al objeto
Cuando el control pierde el enfoque
Refresca el objeto
Se dispara a la hora que se se inicializa el objeto
Uso
Es la variable o nombre del campo al cual hace referencia
Contenido de la variable o campo referenciado en ControlSource
Si el control es visible al usuario
Si el control esta habilitado o no
Evento o Mtodo
InteractiveChange
Init
Click
Valid
Uso
Se dispara cuando modificamos el campo
Se dispara a la hora en que se inicializa el objeto
Se dispara al dar click en el objeto
Se dispara despus de presionar Enter o Tab, se utiliza para
validar
Refresca el objeto
Refresh
Pgina 26
Propiedades
ControlSource
RowSource
rowSourceType
Visible
Enabled
BoundColumn
BoundTo
Evento o Mtodo
Click
SetlFocus
LostFocus
Refresh
Init
Revista Compus
Uso
Variable a que hace referencia (campo donde se almacena el
valor de la lista)
Tabla o query de los elementos de la lista
Tipo de la fuente (si es tabla o query)
Si el control es visible al usuario
Si el control esta habilitado o no
Valor que retorna la lisa (nmero de la columna de Rowsource)
Especifica si el valor de la lista esta determinado por los valores
o por la propiedad ListIndex
Uso
Se dispara al dar clic en el objeto
El cursor se va al objeto
Cuando el control pierde el enfoque
Refresca el objeto
Se dispara a la hora que se se inicializa el objeto
Cuadrcula:
Un control que crea una cuadrcula y que le permite presentar los datos en un formato
tabular. Los controles de tipo cuadrcula contienen encabezados de columna, columnas y
controles de columna.
Propiedades
RecordSource
Visible
Enabled
ColumnCount
DeleteMark
Uso
Nombre de la tabla
Si el control es viisible al usuario
Si el control esta habilitado o no
Nmero de columnas del Gris
Permite registro para borrar (Aparece en la parte izquierda del
Gris
Evento o Mtodo
Click
SetlFocus
LostFocus
Refresh
Init
Uso
Se dispara al dar clic en el objeto
El cursor se va al objeto
Cuando el control pierde el enfoque
Refresca el objeto
Se dispara a la hora que se inicializa el objeto
Pgina 27
Revista Compus
Los diseadores ActiveX pueden proporcionar interfaces visuales para tareas que, de otro
modo, requeriran una gran cantidad de cdigo. Por ejemplo, el diseador UserConnection
incluido en la Edicin Empresarial de Visual Basic proporciona herramientas visuales para
definir consultas de bases de datos complejas. En tiempo de ejecucin, dichas consultas se
pueden invocar con muy poco cdigo.
Similitudes entre los diseadores ActiveX y los diseadores integrados
Los diseadores ActiveX son como los diseadores de formularios en los siguientes
aspectos:
Los diseadores 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 diseador ActiveX tienen sus propios mdulos de
cdigo, en los que puede escribir cdigo para los procedimientos de evento
proporcionados por el diseador.
Pgina 28
Revista Compus
Pgina 29
Revista Compus
En la Ficha
ndices,
selecciona
Clave_pizza
como principal.
Pgina 30
Revista Compus
5. Ahora debers crear otra tabla nueva con los siguientes campos.
En la Ficha
ndices, selecciona
Clave_tamao
como principal
Pgina 31
Revista Compus
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
an
pe
ha
sa
Nombre
Anchoas
Peperoni
Hawaiana
salami
Tamao
Chica
Mediana
Grande
Clave_Tamao
ch
me
gr
ch
me
gr
ch
me
gr
ch
me
gr
Precio
$ 20.00
$ 25.00
$ 30.00
$ 60.00
$ 65.00
$ 80.00
$ 55.00
$ 60.00
$ 68.00
$ 63.00
$ 87.00
$ 98.00
15. ahora crearemos una tabla a partir de una consulta, en la ventana explorador de
proyectos en la pestaa datos selecciona consulta y despus nuevo
16. Visual Fox te preguntara que tablas quieres agregar para la realizacin de tu
consulta, para eso tu debes agregar las siguientes tablas: Tamaa, Venta y Pizza.
Prof. Jos de La Rosa
Pgina 32
Revista Compus
17. Una vez con las tablas agregadas, en la ventana diseador 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,
tamao.tamao, Venta.Precio, por ultimo agregaremos una expresin como
campo para esto en la misma ventana busca la opcin 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 opcin texto, Luego en la parte de abajo donde
dice Desde tabla Selecciona la tabla Pizza, en el cuadro campos aparecern los
campos de la tabla pizza de ese cuadro da doble clic al campo clave_pizza, una
vez esto hecho en el cuadro expresin deber de aparecer el siguiente texto:
Pizza.cleve.pizza, una ves con esto ve otra vez a la lista Cadena y ahora
selecciona el smbolo +, el smbolo aparecer dentro de las comillas, salte de las
comillas y pon un guion(-), la expresin deber quedar: Pizza.cleve.pizza+-,
ahora con lo que ya vimos has que la expresin final quede de la siguiente forma,
recuerda que para sacar los campo de Tamao primero debes seleccionar la tabla
tamao de Desde tabla.
Pgina 33
Revista Compus
19. Una vez que tengas la Expresin da un clic al botn aceptar y despus un clic en
Agregar. Te deber quedar como en la pantalla siguiente:
Pgina 34
Revista Compus
Consideraciones
Para el desarrollo del presente laboratorio Ud. deber crear una carpeta
D:\P_VFP\PROGRAMA, para guardar sus trabajos correspondientes a este laboratorio.
Aplicacin N 1
En este primer ejercicio vamos a escribir un programa que lea tres nmeros enteros
y determine el nmero mayor, el nmero central y el nmero menor. Debemos asumir que
los tres nmeros son siempre distintos.
Para el desarrollo de la presente aplicacin ingresar a Microsoft Visual FoxPro. En
la Ventana de Comandos digite la siguiente orden:
Modify Command Aplicacion01
A continuacin se debe presentar el Editor de programas. En dicha ventana proceda
a ingresar el cdigo 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)
Pgina 35
Revista Compus
( ! ) de la Barra de
Pgina 36
Revista Compus
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)
? Mximo= + Str(nMax)
? Mnimo= + Str(nMin)
Aplicacin N 4
A continuacin vamos a escribir una funcin 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 aplicacin proceda de manera similar a los casos
anteriores e ingresar el cdigo 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 programacin orientada a objetos.
Manejar las diferentes propiedades y eventos del formulario.
Aadir controles a un formulario.
Prof. Jos de La Rosa
Pgina 37
Revista Compus
FrmTabla
Tabla de multiplicar
.F.-Falso
.F.-Falso
Name
Caption
LblNumero
Ingrese un nmero:
Label1
Pgina 38
Revista Compus
Text1
Name
Alignment
TxtNumero
2-Centro
Name
ScrollBars
EdtTabla
2-Vertical
Edit1
Command1
Name
Caption
Default
CmdLimpiar
\<Limpiar
.T.-Verdadero
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
Aplicacin N 2
Este ejercicio consiste en elaborar una aplicacin 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
tamao. El diseo de la interfaz debe ser similar a:
Pgina 39
Revista Compus
FrmEditor
.T.-Verdadero
Editor
.F.-Falso
.F.-Falso
Name
Caption
LblTexto
Texto
Name
Caption
LblFuente
Fuente
Name
Caption
LblTamao
Tamao
Name
Caption
LblEstilo
Estilo
Name
LblColor
Label1
Label2
Label3
Label4
Label5
Pgina 40
Caption
Combo1
Name
Revista Compus
Color
CboFuente
List1
Name
LstTamao
Name
ForeColor
TxtTexto
255, 0, 0
Name
Caption
FontBold
ChkNegrita
Negrita
.T.-Verdadero
Name
Caption
FontItalic
ChkCursiva
Cursiva
.T.-Verdadero
Name
Caption
FontUnderline
ChkSubrayado
Subrayado
.T.-Verdadero
Text1
Check1
Check2
Check3
OptionGroup1
ButtonCount
Option1
Name
ForeColor
OptRojo
255, 0, 0
Option2
Name
ForeColor
OptVerde
0, 255, 0
Option3
Name
ForeColor
OptAzul
0, 0, 255
Command1
Name
Caption
Default
CmdSalir
\<Salir
.T.-Verdadero
Pgina 41
Revista Compus
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.LstTamao.AddItem(Alltrim(Str(nI)))
Next
Objeto: FrmEditor
Procedimiento: QueryUnload
#DEFINE vfpYesNo 4
#DEFINE vfpYes
6
#DEFINE vfpQuestion
32
If MessageBox(Desea terminar la aplicacin?, ;
vfpQuestion + vfpYesNo, Pregunta) = vfpYes Then
Release Thisform
Else
NoDefault
EndIf
Objeto: CboFuente
Procedimiento: Click
Thisform.TxtTexto.FontName = Thisform.CboFuente.Value
Thisform.Refresh
Objeto: LstTamao
Procedimiento: Click
nTamao = Val(Thisform.LstTamao.Value)
Thisform.TxtTexto.FontSize = nTamao
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
Pgina 42
Revista Compus
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
Procedimiento: Click
Procedimiento: Click
Thisform.QueryUnload
Bases de Datos con formulario:
Movimiento entre registros:
Realizar la siguiente base de datos denominada COMPAA, y relacionar las tablas:
Pgina 43
Revista Compus
Procedimiento:Click
Boton Anterior
If .Not. bof () then
Skip -1
Else
Go bottom
EndIf
Thisform.refresh
Procedimiento:Click
Boton Siguiente
If .Not. eof() then
Skip +1
Else
Go Top
EndIf
Thisform.refresh
Procedimiento:Click
Boton Primero
Go Bottom
Thisform.refresh
Procedimiento:Click
Boton Salir
Release Thisform
Procedimiento:Click
Pgina 44
Revista Compus
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 Botn 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
Pgina 45
Revista Compus
Delete
Pack
EndCase
Thisform.refresh
Boton Guardar Camhios
Procedimiento:Click
*Desabilite todas las cajas de texto con la propiedad Enabled y oculte el Botn 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 Facturacin, para ello las indicaciones se
encuentran en la parte inferior:
C
C
N
N
C
C
N
N
3
40
10
4
6
3
7
10
Clientes.DBF
ClieCod
ClieNom
3
ClieRuc
2
2
Guiadet.DBF
Nguia
C
ArtCod
C
ArtDet
C
PreUni
N
Cant
N
SubTotal
N
C
C
C
6
3
40
7
5
10
3
40
8
2
2
Pgina 46
Revista Compus
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.
Objeto:
Propiedad
ControlSource
Name
Combo1 Row SourceType
Row Source
Style
Value
Text2
Alignment
DisableBackColor
DisableForeColor
Enabled
Name
FontName
Valor
Clientes.Clienom
CmbCliente
Campos
Clientes.Clienom
2. Lista desplegable
1
Objeto:
Text1
2. Centro
A Criterio del Usuario
A Criterio del Usuario
FALSO
TxtTotal
A Criterio del Usuario
Grid1
Propiedad
Alignment
DisableBackColor
DisableForeColor
Enabled
Name
FontName
Column Count
Deleted mark
Name
RecordSource
BackColor
GridLineColor
Valor
2. Centro
A Criterio del Usuario
A Criterio del Usuario
FALSO
txtNguia
A Criterio del Usuario
4
.F. Falso
grdDetalle
Temporal
A Criterio del Usuario
Azul
Pgina 47
Revista Compus
Objeto:
Propiedad
ControlSource
Column1 CurrentControl
Name
ControlSource
Column2 CurrentControl
Name
Header1
Header2
Alignment
Caption
FontBold
Alignment
Caption
FontBold
ControlSource
Name
Combo1 RowSourceType
RowSource
Style
Value
Valor
Temporal.Artdet
Combo1
Objeto:
Column3
ColDescripcion
Temporal.Artdet
Spinner1
Column2
ColDescripcion
2. Medio Centro
Descripcion
Header3
.T. Verdadero
2. Medio Centro
Cantidad
Header4
.T. Verdadero
Temporal.ArtDet
CmbDescripcion
6. Campos
Articulo.ArtDet
2. Lista Desplegable
1
Spinner1
Propiedad
ControlSource
Name
ReadOnly
ControlSource
Name
ReadOnly
Valor
Temporal.Artpre
ColPreUni
.T. Verdadero
Temporal.SubTotal
ColSubTotal
.T. Verdadero
Alignment
Caption
FontBold
Alignment
Caption
FontBold
2. Medio Centro
Precio
ControlSource
KeyboardHighValue
KeyboardLowValue
Name
Style
SpinnerHighValue
SpinnerLowValue
Value
Temporal.Cant
.T. Verdadero
2. Medio Centro
SubTotal
.T. Verdadero
99
1
SpnCantidad
2. Lista Desplegable
99
1
1
Pgina 48
Revista Compus
Ms propiedades
Nota: Caption de Labels ver el Grafico
Objeto:
Propiedad
Command1 Caption
Name
Command2 Caption
Name
Valor
Objeto: Propiedad
\<Nuevo
cmdNuevo
Command3 Caption
\<Agregar
Command4 Caption
Name
Name
cmdAgregar
Command2 Caption
\<Agregar
Text1
Name
Diseo en tiempo de Ejecucin:
txtNguia
Command4 Caption
Text2
Name
Valor
\<Guardar
cmdGuardar
\<Salir
cmdSalir
\<Salir
txtSubTotal
Evento Init
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
Pgina 49
Revista Compus
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
Pgina 50
Revista Compus
Objeto: cmdNuevo
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
Evento: Click
Objeto: cmdGuardar
SELECT GUIAENC
replace igv with thisform.txttotal.value*0.18
replace total with thisform.txttotal.value
=tableupdate(.t.)
Evento: Click
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
SELECT GUIAENC
=tablerevert(.t.)
SELECT TEMPORAL
release thisform
Evento: Click
Queda para el usuario hacer los ltimos toques, para que resulte un buen diseo.
Pgina 51