Beruflich Dokumente
Kultur Dokumente
aplicaciones.
Desde Visual FoxPro podemos crear Formularios, Base de Datos , Informes,
Vistas, Proyectos entre otros. Podemos crear los elementos de un proyecto por separado y luego
agregarlos a un proyecto existente o crear un proyecto y desde éste ir agregando los elemento
que deba contener. Cuando creamos un proyecto debemos crear una carpeta detrabajo en la se
guarde el proyecto. Para indicarle a Visual Foxpro en cual directorio debe buscar
los archivos del proyecto debemos indicarle el directorio por defecto; en le
menú Herramientas en la opción de Opciones en la ficha de Archivos, aparecerá la ruta por
defecto el directorio de Vfp cambiamos este directorio por la carpeta en la que está nuestro
proyecto y seleccionamos Aceptar. Desde la Ventana de Comandos se utiliza el comando SET
DEFAULT nombrederuta por ejemplo: Set default c:\publico\practica (La Ventana de
Comandos será explicada mas adelante)
CREACION DE LA BASE DE DATOS
1. Ubiquese en la ficha Datos y luego en Base de Datos y presione el botón
Nuevo
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)
Rule (Regla): Es la regla de validación, ejemplo: id > 0, si queremos que
acepte valores positivos.
Message(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).
Default Value : Valor por defecto del campo. (nota: hay que respetar el tipo de dato del
Campo)
Luego de hacer la definición de los campos, pasamos a la definición de Indices de la tabla, que
será muy importante a la hora de crear las relaciones entre las tablas.
Los índices facilitan la ubicaciòn en la tabla de un registro especìfico asì como tambien
determinan el tipo de relaciones que existen entre las tablas
Los índices pueden ser CDX o IDX:
Los índices .IDX son índices compactos se crean: "INDEX ON estado to estado compact" crea
un archivo de índice llamado estado.cdx. Desafortunadamente si alguna vez abre la tabla sin el
índice y añade un registro, éste no se actualizará y tendrá que ser recreado.
Los índices .CDX se crean: "INDEX ON estado tag estado" . Estos archivos se abren
automáticamente junto con las tablas.
La estructura interna de los IDX y los CDX es diferente.
a. Nombre del Indice (name)
b. Introducir el Nombre del archivo índice. Es conocido también como TAG (etiqueta).
c. Type ( tipo de Indice)
Visual Foxpro tiene 37.767 espacios de trabajo, llamadas áreas de trabajo porque una tabla
deber ser seleccionada para volverla la tabla actual. Cuando se inicia Visual FoxPro el área de
trabajo es la 1 por omisión. Para abrir una tabla en el área de trabajo 1 cuando ninguna otra
tabla está abierta, tecleamos en la Ventana de Comandos:
USE nombretabla
No necesariamente debe estar en un área de trabajo para abrir una tabla puede especificar:
USE nombretabla IN 3
Sin embargo con mas frecuencia se utiliza: USE nombre tabla IN 0 lo que significa encuentre el
área de trabajo siguiente en la que no se encuentre abierta una tabla y abre nombretabla ahí.
Cuando se utiliza una tabla Visual FoxPro le asigna un alias, un nombre de hasta 10 caracteres
con el cual se refiere a ella en el programa, generalmente el alias es el mismo nombre que el de
la tabla
Para crear una tabla desde la Ventana de Comandos: CREATE <nombretabla>
Para modificar una tabla Administrador de Proyectos | Datos | Base de Datos| Tablas |
Seleccionamos la tabla | Modificar.
Desde la Ventana de Comandos: Use tabla | MODIFY ESTRUCTURE
En Visual FoxPro existe la Ventana de comandos ésta funge como la ventana de MSDOS que
puede utilizarse desde Windows con la finalidad de permitir utilizar comandos
del lenguaje para ejecutar algunas funciones. Por ejemplo desde Windows desde el explorador
podemos examinar el contenido de un disckette acción que también podemos hacer si abrimos
una ventana de MSDOS y tecleamos DIR A:. Es decir a pesar de que se pueden tener acceso a la
mayoría de los elementos de Visual FoxPro desde el menú muchas veces es útil simplemente
teclear un comando.
Para activar la Ventana de Comandos auque ella aparece por defecto en el en el entorno de
trabajo tecleamos Ctrl. F2
Para agregar registros a una tabla : Administrador de Proyectos | Datos | Base de Datos |
Tablas | Seleccionamos la tabla | Examinar y luego en el menú Ver | Modo Añadir
Desde la Ventana de Comandos: Teniendo la tabla activa escribimos APPEND.
Para ver los registros de una tabla: Administrador de Proyectos | Datos | Base de Datos | Tablas
| Seleccionamos la tabla | Examinar.
Desde la Ventana de Comandos: teniendo la tabla activa escribimos BROWSE.
En Visual Foxpro los registros de una tabla pueden borrarse lógicamente y físicamente.
Para borrar lógicamente un registro : Administrador de Proyectos | Base de Datos | Tablas |
Seleccionamos la Tabla | Examinar luego con el ratón hacemos Click en la primera columna de
izquierda a derecha, la columna en la celda seleccionada se colocará de color negro.
Desde la Ventana de Comandos: DELETE (Teniendo seleccionado el registro)
Para ver los registros de una tabla sin que aparezcan los registros borrados lógicamente:
Primero desde la Ventana de Comandos debemos teclear : SET DELETE ON y luego desde el
Administrador de Proyectos | Datos | Base de Datos | Tablas | Examinar .
También desde la Ventana de Comandos con el comando BROWSE
Si queremos incluso los registros borrados lógicamente tecleamos en la Ventana de Comandos
SET DELETE OFF y luego tecleamos BROWSE.
Para desmarcar los registros borrados lógicamente (desde la Ventana de Comandos):
Suponemos que anteriormente habían sido borrados los empleados cuyo sueldo era 15000:
DELETE FOR sueldo=15000
Para desmarcar estos registros : RECALL FOR sueldo=15000
Para borrar físicamente registros de una tabla primero deben estar borrados lógicamente
Y luego desde la Ventana de Comandos tecleamos el comando PACK, para utilizar este
comando la tabla debe ser abierta en modo exclusivo USE nombretabla EXCLUSIVE .
Algunos comandos para manipular tablas:
List for cedula="12434213" Muestra en el entorno de trabajo la informacion del registro que
cumpla con esta condición.
List fields cedula,nombre. Muestra en el entorno de trabajo todas las cédulas y nombres de la
tabla seleccionada.
Sum cantidad (suponemos que la tabla activa tiene un campo de tipo numérico llamado
cantidad). Muestra en el entorno de trabajo la suma del campo cantidad de la tabla activa.
Sum cantidad for cantidad>1000 Obtiene la suma de los campos cantidad de los registros que
cumplen con la condición indicada
Count to Registros for nota>15 (quermos contar los registros de una tabla cuyo campo nota sea
mayor a 15 puntos, guardar este total en una variable llamada Registros ) Si luego queremos
examinar el contenido de la variable Registros tecleamos ?Registros (signo de interrogación
que cierra y luego el nombre de la variable que queremos examinar)
Comandos SEEK y LOCATE
Los comandos Locate y Seek permiten buscar un registro en particular. Locate funciona en
cualquier campo dentro de una tabla ya sea que esté indexada o no Seek da por hecho que la
clave que está buscando encaja con el índice actual.
Locate for nombre="Luis" La tabla activa posiciona su cursor el registro que cumpla con esta
condiciòn.
Seek("Luis") ERROR
Set order to nombre (CORRECTO) Primero se debe activar el ìndice
Seek("Luis") y luego hacer la bùsqueda
La funciòn Set filter:
Esta funciòn provoca que Visual FoxPro se comporte como si no existieran los registros que no
coinciden con la expresiòn de filtro, y en lasoperaciones que se realicen solo se tomaràn en
cuenta las registros que cumplen con la condiciòn del filtro actual.
Set filter to nota=15
Para desactivar un filtro colocamos set filter to y para
Como moverse en una tabla de VFP
Skip mueve el puntero hacia delante un registro
Skip - 1 mueve el puntero hacia tras un registro
Go top mueve el puntero hacia el primer registro de la tabla
Go bottom mueve el puntero hacia el ùltimo registro de la tabla.
Go 3 mueve el puntero hacia el registro #3 de la tabla
Operaciones Ciclìcas:
Existen una cantidad de mecanismos de ciclos que puede utilizar para moverse a travès de una
tabla. El principal es SCAN
Por ejemplo:
Select Cliente (No hay necesidad de hacer go top)
Scan
Sueldo=sueldo + 5000
Endscan
Las lìneas de còdigo entre Scan y Endscan se ejecutaràn 1 vez por cada registro de la tabla.
Lo mismo se puede hacer con :
Select Cliente
Go top
Do While not eof()
Sueldo=sueldo+5000
Skip
Enddo
La instrucciòn FOR:
For i=1 to 10
Cont=cont+1;
endfor
Para eliminar una tabla:
Para eliminar una tabla con los indices principales, valores predeterminados y reglas de
validaciòn asociadas a la tabla use el comando DROPnombretabla por ejemplo:
Open Database inscripciones
Drop table alumnos
Uso de Funciones:
Str() convierte a String
Val convierte a nùmero
Date() devuelve la fecha del sistema
Hoy=Date()
GetDir() Obtiene el directorio por defecto
Cd GetDir
Imprime el dìa de la semana
?Dow(Date())
Len() Devuelve el nùmero de caracteres de una expresiòn de caracteres
Recno() Obtiene la posiciòn de un registro
Para cerrar abierta en el àrea de trabajo actual utilizamos el comando USE
Uso de Procedimientos y Funciones:
Procedure Nombreprocedure
*Aquí va el còdigo ejecutable
endproc
Function Nombrefuncion
*aquí va el còdigo ejecutable
endfunc
El valor devuelto de forma predeterminada es verdadero (.t.) pero puede utilizarse el
comando Return
Function semanas(dDate)
Return dDate + 14
Endfunc
Si se incluyen los procedimientos y funciones en un archivo de programa disttinto, podrà hacer
accesibles estos procedimientos y funciones desde su programa si utiliza el Set procedure to.
Por ejemplo: Si tiene un archivo llamado: FunProc.prg se utiliza el siguiente comando:
Set Procedure to FunProc.prg
Llamado a un procedimiento o a una fuciòn:
-Utilizar el Do:
Do Miproc
-Incluir delante del nombre de la funciòn un signo (=) e incluir parentesis despues del nombre
de la funciòn. Por ejemplo
=Mifuncion()
Envìo de valores a un Procedimiento o a una Funcion:
Procedure Nombreprocedimiento(eString)
*La linea siguiente muestra un mensaje
messagebox("Mi proc" + eString)
endproc
El paso de paràmetros a una funciòn es exactamente igual.
Para invocar a un procedimiento:
Do nombreprocedimiento with parametro ò
=NombreFunciòn(paràmetro)
Con mùltiples paràmetros:
Procedure nombreproc (dDate, eString,Ntimes)
*Codigo ejecutable
endproc
En la llamada: do nombreproc with Date(), "Hola", 10
Comprobaciòn de Paràmetros en un Procedimiento o una funciòn
Function Semanas (dDate)
If type("dDate")="D"
Return dDate + 14
Else
Messagebox("Requiere un paràmetro de fecha")
Return{} &&Devuelve una fecha vacìa
endif
endfunc
Procedure valores (cStore, dDate2, nDatos)
If parameters()<3
Messagebox("No se han pasado suficientes paràmetros")
Return .f.
Else
If parameters()=3
*Operar con los paràmetros
endif
endif
endproc
Si se especifican dos paràmetros pero llamò al procedimiento con tres paràmetros, obtendrà un
mensaje de erros. Pero si un procedimiento espera mas paràmetros de los que recibe, los
paràmetros adicionales se inicializaràn como falso (.F.)
Ejercicio Práctico:
Cree la siguiente base de datos con el nombre de scott.
RELACIONES ENTRE TABLAS:
Las relaciones mas comunes entre tablas se definen :
De uno a uno : Ejemplo de una llave primaria a otra llave primaria
De uno a muchos : Ejemplo de una llave primaria a una Regular o Foránea.
Las relaciones entre tablas se crean arrastrando la llave de la tabla a la llave de otra tabla.
La figura muestra una relación entre las tablas región y departamento, la relación se leería así :
"Una región tiene muchos departamentos".
Generación de integridad referencial
Reglas que rigen la coherencia de datos, específicamente las relaciones entre las claves
principal y externa de claves de tablas distintas. Visual Foxpro Resuelve la Integridad
Referencial mediante reglas a nivel de campo y a nivel de registro definidas por el usuario. El
Generador de la Integridad Referencial le ayuda a definir reglas para controlar cómo se
insertan actualizan o eliminan registros de tablas relacionadas.
Desencadenante: código de evento a nivel de registro que se ejecuta despues de una
inserción, una actualización o una eliminación. Se ocupan para integridad entre las tablas.
El establecimiento de la integridad referencial implica la creación de un conjunto de reglas para
preservar las relaciones definidas entre las tablas al introducir o eliminar registros.
Si exige la integridad referencial, Visual FoxPro impedirá las acciones siguientes:
` Agregar registros a una tabla relacionada cuando no haya ningún registro asociado en la
tabla primaria.
` Cambiar valores de una tabla primaria cuando tales cambios supongan dejar registros
huérfanos en una tabla relacionada.
` Eliminar registros de una tabla primaria cuando tengan registros relacionados
coincidentes.
La ventana para agregar las tablas, se utiliza para añadir tablas que se van a ocupar en la
instrucción SELECT ± SQL, en este caso estaríamos seleccionando la parte del FROM.
Seleccionemos s_region y luego Agregar. La tabla se agregará, luego le damos cerrar (close).
Ventana de creación de la vista:
Fields: (Campos) Aquí se seleccionan los campos de la vista (SELECT campos)
Join : Relaciones entre tablas
Filter : Condición de filtrado (WHERE condición)
Order by : campos de ordenamiento (ORDER BY)
Group by : campos de Agrupamiento (GROUP BY)
CREACION DE VISTAS REMOTAS:
Una vista remota es una vista que se hace de otra base de datos vía ODBC. Esta base de datos
puede ser Access, ORACLE, SQL-SERVER, entre otros.
Crear una vista remota:
Escriba el nombre del Data Source (Fuente de datos), Luego seleccione la Base de Dato a la que
hace referencia ( en el boton Select Database)
Luego de haber seleccionado la base de datos, acepte todas las ventanas que aparecieron
anteriormente y detengase en la siguiente ventana:
Luego seleccione de la lista de data source el data source que usted acaba de crear.
Luego presione Aceptar (OK).
Después le aparece la primera Ventana donde escoge las conexiones, le aparecerá la conexión
que usted ha creado.
Nota: Esta conexión que usted a creado servirá para sesiones futuras.
Seleccione la conexión creada y luego Aceptar (OK)
Luego le aparecerá la ventana donde usted escoge las tablas que utilizará:
6. Luego aparece la ventana donde usted escoge la tabla a utilizar y los campos de esa tabla.
7. Una vez seleccionado la tabla y sus respectivos campos, presiones a (Next).
8. Se visualizará la siguiente ventana:
7. Arrastre uno por uno los campos de la tabla s_region a su forma, de tal manera que queden
asi:
En la clase se explicaron los procedimientos para Incluir Modificar y Eliminar alumnos a una
base de datos de inscripciones. En este este codigo se estan actualizando clientes el código es
análogo
Boton Incluir:
if thisform.incluir.caption="Incluir"
scatter memvar blank
thisform.incluir.caption="Guardar"
thisform.salir.caption="Cancelar"
thisform.text1.enabled=.t. (Recuerden que los texbox poseen nombres que se
corresponden con la realidad txtcedula,txtnombre«,
aunque en este ejemplo no se planteen así debe
programarse)
thisform.text2.enabled=.t.
thisform.text3.enabled=.t.
thisform.text4.enabled=.t.
else
if thisform.text1.value<>''
if thisform.text2.value<>''
if thisform.text3.value<>''
if thisform.text4.value<>''
append blank
gather memvar
endif (Pueden mostrarse mensajes de validación de llenar todos
los campos antes de incluir un registro)
endif
endif
endif
thisform.incluir.caption="incluir"
thisform.salir.caption="Salir"
thisform.text2.enabled=.f.
thisform.text3.enabled=.f.
thisform.text4.enabled=.f.
endif
thisform.refresh
Boton Modificar:
if thisform.modificar.caption="Modificar"
thisform.text1.enabled=.f.
thisform.text2.enabled=.t.
thisform.text3.enabled=.t.
thisform.text4.enabled=.t.
thisform.modificar.caption="Guardar"
thisform.salir.caption="Cnacelar"
else
gather memvar
thisform.text1.enabled=.t.
thisform.text2.enabled=.f.
thisform.text3.enabled=.f.
thisform.text4.enabled=.f.
thisform.modificar.caption="Modificar"
thisform.salir.caption="Salir"
endif
Boton Eliminar
(Recuerden que en la ayuda de Visual FoxPro está la información de la aplicación de la función
y/o procedimiento Messagebox)
if messagebox("Esta seguro que desea eliminar este cliente",36,"Confirmacion")=6
(Implementada como función)
delete
pack
messagebox("El registro fue eliminado",0,"Aviso")
(implementada como procedimiento)
scatter memvar blank
endif
thisform.refresh
Boton Salir:
if thisform.incluir.caption="Guardar"
thisform.text2.enabled=.f.
thisform.text3.enabled=.f.
thisform.text4.enabled=.f.
thisform.incluir.caption="Incluir"
thisform.Salir.caption="Salir"
else
if thisform.modificar.caption="Guardar"
thisform.text1.enabled=.t.
thisform.text2.enabled=.f.
thisform.text3.enabled=.f.
thisform.text4.enabled=.f.
thisform.modificar.caption="Modificar"
thisform.Salir.caption="Salir"
else
thisform.release
endif
endif
Boton Primero:
go top
m.codigo=clientes.codigo
m.nombre=clientes.nombre
m.telefono=clientes.telefono
m.direccion=clientes.direccion
thisform.refresh
Boton Ultimo:
go bottom
m.codigo=clientes.codigo
m.nombre=clientes.nombre
m.telefono=clientes.telefono
m.direccion=clientes.direccion
thisform.refresh
Boton Siguiente
if eof()
thisform.siguiente.enabled=.f.
go bottom
m.codigo=clientes.codigo
m.nombre=clientes.nombre
m.telefono=clientes.telefono
m.direccion=clientes.dirección
frmactcliente.refresh
else
skip 1
m.codigo=clientes.codigo
m.nombre=clientes.nombre
m.telefono=clientes.telefono
m.direccion=clientes.direccion
if thisform.anterior.enabled=.f.
thisform.anterior.enabled=.t.
endif
endif
thisform.refresh
Boton Anterior
if bof()
thisform.anterior.enabled=.f.
go top
else
skip -1
if thisform.siguiente.enabled=.f.
thisform.siguiente.enabled=.t.
endif
endif
m.codigo=clientes.codigo
m.nombre=clientes.nombre
m.telefono=clientes.telefono
m.direccion=clientes.direccion
thisform.refresh
Creación de Clases de Objetos
En Visual Foxpro se pueden crear clases de objetos que pueden de uso muy común, como por
ejemplo el botón salir es muy comun en todas las pantallas.
Pasos para creación de clases:
1. Abra su proyecto
2. Ubíquese en la pestaña de V.
1.
2. presione el botón de V y luego agregar (Add) y seleccione la clase que usted a
creado.
2. Cree o Abra una forma
En clase se implementó una clase basada en la clase TextBox que cambia el color de fondo y el
color de la letra del Textbox cuando el texbox obtiene o pierde el focus ( utilizando los
procedimientos LosFocus y GotFocus) de esta manera el usuario identifica mas facilmente el
texbox activo
Código del Procedimiento LostFocus de la clase TxtColor (obtenel el focus)
This.backcolor=rgb(0,0,255) (color de fondo azul)
This.forecolor=rgb(255,255,255) (color de las letras blancas)
Código del Procedimiento GosFocus del la clase TextColor (perder el focus)
This.backcolor=rgb(255,255,255) (color de fondo blanca)
This.forecolor=rgb(0,0,0) (color de las letras negras)
Soporte de Tecnología ActiveX
Cuando usted instala Visual Foxpro, se instalan una serie de controles ActiveX soportados por
Visual Foxpro.
Un ActiveX, no es más que un control externo, es parecido a una clase ya que las clases se
pueden guardar en un archivo (extensión VCX) y los ActiveX tienen extensión OCX. La
diferencia es que los VCX solo puede ocuparse en Visual Foxpro, mientras que los OCX se
consideran como tecnología abierta, es decir, pueden ser utilizado por cualquier lenguaje visual
como Visual C++ o Visual Basic, por mencionar algunos.
Estos controles ActiveX, vienen hechos de fabrica, son comercializables y no son modificables,
sin embargo uno puede crear sus propios OCX. Los lenguajes donde se pueden construir estos
OCX actualmente son Visual C++ y Visual Basic. En visual Foxpro 5.0 usted no puede crear
OCX.
Hay que tener mucho cuidado a la hora de comprar un OCX y verificar que lenguajes soporta,
por que algunos OCX no son soportados por algunos lenguajes visuales incluso con Visual
Foxpro.
Cómo hacer uso de los ActiveX en Visual Foxpro:
Un OCX es un objeto por lo cual tiene propiedades y eventos implícitos en él.
En el curso, utilizaremos dos Controles ActiveX :
` OutLine control
` Microsoft Progress Bar Control
OutLine control:
El Outline Control se utiliza para
hacer Arboles como por Ejemplo: Regiones con departamentos (maestro-detalle)
Cómo agregar un ActiveX a la forma:
1. Abra o Cree una nueva forma.
2. Seleccione Ver clases
3. Seleccione ActiveX Control
4. Seleccione el control deseado, en este caso el Outline Control y póngalo en la forma.
5. Vamos a crear una forma maestro detalle utilizando el Outline Control. El Outline control
presentará la información de las Regiones y vamos a agregar un Grid que serán los
departamentos, Algo asi:
! *-------------------------------------
* Cargar el OCX
*-------------------------------------
*--------
pnIndex = 0
THIS.Additem( "Regiones" )
Select s_region
SCAN
pnIndex = pnIndex + 1
datos = ALLTRIM(name)
THIS.Additem(datos)
THIS.Indent( pnIndex ) = 1
THIS.PictureType(pnindex) = 2
THIS.ListIndex = pnindex
THIS.ItemData(pnIndex) = RECNO()
ENDSCAN
GO RECORD THIS.ItemData(THIS.ListIndex)
THISFORM.REFRESH()
El último paso es agregar el Grid con la tabla departamentos y luego establecer la relación con
la tabla de regiones.
Progress Bar Control:
Este control permite hacer una barra de progreso:
Propiedades :
Aplicación
Menú de Reportes
Titulo/Sumario (Title/Summary):
Muestra el área del Titulo y el Sumario del Informe
Ä : Aparece solo en la primera pagina del Reporte
V : Aparece solo en la ultima pagina del Reporte
4. Introduzca las opciones del menu y luego el resultado del menú ( submenu, comando o
procedimiento)
5. A la derecha del resultado se encuentra la opción crear o modificar según el caso. ( crea o
modificar los resultados de la opción del menu).
Tipos de Resultados :
Submenu : Si el menú contiene un submenu
V
ïï
Regiones, para llamar un formulario;
CLEAR EVENT, por lo general va en la opción Salir)
Procedimiento : Si la opción de ese menú invoca varias líneas de comandos ( un
procedimiento).
Opciones de Menú:
En las opciones del menú se especifican:
` Teclas de Acceso directo
` Mensajes del menú
` Condición de habilita/No habilitar