You are on page 1of 41

Fox Pro http://www.monografias.com/trabajos4/foxpro/foxpro.shtml Es un sistema orientado a objeto para la generacin de Base de Datos y el desarrollo de 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 de trabajo 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 opcin 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 Ubiquese en la ficha Datos y luego en Base de Datos y presione el botn Nuevo

La ventana del Diseador de Base da datos aparecer :

Puede utilizar la barra de herramientas del Diseador para el control de la Base de Datos. Descripcin de los botones de la Barra de herramientas (Diseador de Base de Datos): Crear una nueva tabla.

Agregar una tabla existente Eliminar una tabla seleccionada Modificar una tabla seleccionada Creacin de Vistas remotas Creacin de Vistas locales Editar Procedimientos almacenados en la Base de Datos Creacin 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 extensin predeterminada .dbf (database file: archivo de Base de Datos) Crear una nueva tabla:

1. Click en el botn 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.

La ventana del Diseador de tablas aparecer en pantalla: Esta es la parte mas importante de la tabla, es aqu donde se define la estructura de datos que contendr dicha tabla. El primer paso es definir los campos, tipos, tamao, Formato y Reglas de validacin. Definicin de campos: Igual que en las versiones anteriores, la definicin de campos es igual. Se introduce el nombre del campo (name) el tipo de datos que soportar (Type) y el tamao. Los nombres de los campos pueden tener hasta 254 caracteres sin espacios en blanco Format (Formato): Es el formato de salida del campo, ejemplo si fuera nmerico 9,999.99 o si fuera carcter !!!!!!!!!!!!, para que solo acepte mayusculas

Input mask (Mscara de entrada): Igual que el Format, lo nico que es para la entrada de datos. Captin (Ttulo): Descripcin mas precisa del campo, es de utilidad al disear los Formularios. Definicin del Display Definicin de reglas de validacin a nivel de campo La validacin son triggers o eventos que se ejecutan a nivel de campo. Ejemplo: una validacin de un campo que solo acepte nmeros positivos. (id > 0) Rule (Regla): Es la regla de validacin, 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 validacin del campo. Ejemplo : Solo se aceptan nmeros 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 definicin de los campos, pasamos a la definicin de Indices de la tabla, que ser muy importante a la hora de crear las relaciones entre las tablas. Los ndices facilitan la ubicacin en la tabla de un registro especfico 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 aade 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 automticamente junto con las tablas. La estructura interna de los IDX y los CDX es diferente. Nombre del Indice (name) Introducir el Nombre del archivo ndice. Es conocido tambin como TAG (etiqueta). Type ( tipo de Indice) Primary : Llave primaria. Candidate : Llave candidata Unique : Llave nica.

Regular : Llave fornea. El ndice Primary o Principal: garantiza que solo se introduzcan valores nicos en un campo y determina el orden en el que se procesan los registros. Cada tabla puede tener nicamente un ndice Principal. El ndice Candidate o Candidato: puede ser un candidato para utilizarse como ndice principal, refuerza la unicidad de los valores. El ndice Unique o Unico: almacena un lista de cada valor nico en la tabla ndices. El ndice Regular o Normal: puede ser utilizado para ordenar y buscar datos en consultas e informes. No refuerza la unicidad de los datos c. Nombre de la Expresin Nombre de los campos que conforman la clave primaria: Ejemplo : id, o si son varios campos : id + linea Nota: si los campos no son del mismo hay que forzarlos al tipo de dato deseado, ejemplo: si id es carcter y linea, entoces el nombre de la expresion sera: Id + STR(linea) STR() convierte de nmero a carcter y VAL() convierte de carcter a nmerico. Despus de detallar los ndices, se define los eventos de La validacin a nivel de registro y los eventos que se ejecuten a la hora de Insertar un registro, de actualizar o borrar.

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 omisin. 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 accin que tambin podemos hacer si abrimos una ventana de MSDOS y tecleamos DIR A:. Es decir a pesar de que se pueden tener acceso a la mayora 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 Aadir 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 lgicamente y fsicamente. Para borrar lgicamente un registro : Administrador de Proyectos | Base de Datos | Tablas | Seleccionamos la Tabla | Examinar luego con el ratn 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 lgicamente: Primero desde la Ventana de Comandos debemos teclear : SET DELETE ON y luego desde el Administrador de Proyectos | Datos | Base de Datos | Tablas | Examinar . Tambin desde la Ventana de Comandos con el comando BROWSE Si queremos incluso los registros borrados lgicamente tecleamos en la Ventana de Comandos SET DELETE OFF y luego tecleamos BROWSE. Para desmarcar los registros borrados lgicamente (desde la Ventana de Comandos): Suponemos que anteriormente haban sido borrados los empleados cuyo sueldo era 15000: DELETE FOR sueldo=15000 Para desmarcar estos registros : RECALL FOR sueldo=15000 Para borrar fsicamente registros de una tabla primero deben estar borrados lgicamente 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 condicin. List fields cedula,nombre. Muestra en el entorno de trabajo todas las cdulas y nombres de la tabla seleccionada. Sum cantidad (suponemos que la tabla activa tiene un campo de tipo numrico 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 condicin 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 interrogacin 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 condicin. Seek("Luis") ERROR Set order to nombre (CORRECTO) Primero se debe activar el ndice Seek("Luis") y luego hacer la bsqueda La funcin Set filter: Esta funcin provoca que Visual FoxPro se comporte como si no existieran los registros que no coinciden con la expresin de filtro, y en las operaciones que se realicen solo se tomarn en cuenta las registros que cumplen con la condicin 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 Ciclcas: Existen una cantidad de mecanismos de ciclos que puede utilizar para moverse a travs de una tabla. El principal es SCAN Por ejemplo: Select Cliente (No hay necesidad de hacer go top) Scan Sueldo=sueldo + 5000 Endscan Las lneas de cdigo entre Scan y Endscan se ejecutarn 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 instruccin 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 validacin asociadas a la tabla use el comando DROP nombretabla por ejemplo: Open Database inscripciones Drop table alumnos Uso de Funciones: Str() convierte a String Val convierte a nmero Date() devuelve la fecha del sistema Hoy=Date() GetDir() Obtiene el directorio por defecto Cd GetDir Imprime el da de la semana ?Dow(Date()) Len() Devuelve el nmero de caracteres de una expresin de caracteres Recno() Obtiene la posicin 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 cdigo ejecutable endproc Function Nombrefuncion *aqu va el cdigo 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 fucin: -Utilizar el Do: Do Miproc -Incluir delante del nombre de la funcin un signo (=) e incluir parentesis despues del nombre de la funcin. Por ejemplo =Mifuncion() Envo 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 parmetros a una funcin es exactamente igual. Para invocar a un procedimiento: Do nombreprocedimiento with parametro =NombreFuncin(parmetro) Con mltiples parmetros: Procedure nombreproc (dDate, eString,Ntimes) *Codigo ejecutable endproc En la llamada: do nombreproc with Date(), "Hola", 10 Comprobacin de Parmetros en un Procedimiento o una funcin Function Semanas (dDate) If type("dDate")="D" Return dDate + 14 Else Messagebox("Requiere un parmetro de fecha") Return{} &&Devuelve una fecha vaca endif endfunc Procedure valores (cStore, dDate2, nDatos) If parameters()<3 Messagebox("No se han pasado suficientes parmetros") Return .f. Else If parameters()=3 *Operar con los parmetros

endif endif endproc Si se especifican dos parmetros pero llam al procedimiento con tres parmetros, obtendr un mensaje de erros. Pero si un procedimiento espera mas parmetros de los que recibe, los parmetros adicionales se inicializarn como falso (.F.) Ejercicio Prctico: 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 Fornea.

Las relaciones entre tablas se crean arrastrando la llave de la tabla a la llave de otra tabla. La figura muestra una relacin entre las tablas regin y departamento, la relacin se leera as : "Una regin tiene muchos departamentos". Generacin de integridad referencial Reglas que rigen la coherencia de datos, especficamente 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 cmo se insertan actualizan o eliminan registros de tablas relacionadas. Desencadenante: cdigo de evento a nivel de registro que se ejecuta despues de una insercin, una actualizacin o una eliminacin. Se ocupan para integridad entre las tablas. El establecimiento de la integridad referencial implica la creacin 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 ningn registro asociado en la tabla primaria. Cambiar valores de una tabla primaria cuando tales cambios supongan dejar registros hurfanos en una tabla relacionada. Eliminar registros de una tabla primaria cuando tengan registros relacionados coincidentes. Si lo desea, puede escribir sus propios desencadenantes y procedimientos almacenados para exigir la integridad referencial. Sin embargo, el Generador de integridad referencial (IR) de Visual FoxPro permite determinar los tipos de reglas que desea exigir, las tablas a las que desea exigirlas y los eventos del sistema que harn que Visual FoxPro las compruebe. El Generador de IR trata mltiples niveles de eliminaciones y actualizaciones en cascada, y es recomendable como herramienta para asegurar la integridad referencial. Para abrir el Generador de IR 1 Abra el Diseador de bases de datos. 2 En el men Base de datos, elija Editar integridad referencial. Al utilizar el Generador de IR para crear reglas que se van a aplicar a la base de datos, Visual FoxPro guarda el cdigo generado para exigir las reglas de integridad referencial como desencadenantes que hacen referencia a procedimientos almacenados. Para ver este cdigo puede abrir el editor de texto de procedimientos almacenados en la base de datos. Si desea

informacin sobre la forma de crear desencadenantes por programa, consulte Uso de desencadenantes en el captulo 7, Trabajo con tablas. Precaucin Cuando haga cambios en el diseo de una base de datos, como modificaciones en sus tablas o alteraciones en los ndices utilizados en una relacin persistente, debe volver a ejecutar el Generador de IR antes de utilizar de nuevo la base de datos. De esta forma se revisarn el cdigo de procedimiento almacenado y los desencadenantes utilizados para exigir la integridad referencial, de forma que reflejen el nuevo diseo. Si no vuelve a ejecutar el Generador de RI, puede que obtenga resultados inesperados, ya que no se habrn actualizado los procedimientos almacenados y los desencadenantes para ajustarlos a las modificaciones. El Generador IR se muestra cuando: y Hace doble clic en una lnea de relacin entre dos tablas del Diseador de bases de datos y elige el botn Integridad Referencial en el cuadro de dilogo Editar relacin. y Elige Integridad referencial en el men contextual del Diseador de bases de datos. y Elige Editar integridad referencial en el men Base de datos. Fichas del generador Reglas para la actualizacin Especifica reglas para aplicar cuando se modifica el valor clave de la tabla primaria. Reglas para la eliminacin Especifica las reglas que se aplican cuando se elimina un registro de la tabla primaria. Reglas para insertar Especifica las reglas que se aplican cuando se inserta un nuevo registro o cuando se actualiza un registro existente en la tabla secundaria. VISTAS LOCALES: Qu es una vista? Una vista es un objeto que se crea empleando la instruccin SELECT de SQL para bases de datos relacionales. Las vistas pueden ser locales o Remotas SELECT campos FROM tablas WHERE condicion GROUP BY campos de agrupamiento ORDER BY campos de ordenamiento

Ejemplo: SELECT cedula, nombre FROM Alumnos ORDER BY nombre Creacin de una vista local.

Clic en el botn para crear vistas locales.

La ventana para agregar las tablas, se utiliza para aadir tablas que se van a ocupar en la instruccin SELECT SQL, en este caso estaramos seleccionando la parte del FROM. Seleccionemos s_region y luego Agregar. La tabla se agregar, luego le damos cerrar (close). Ventana de creacin de la vista: Fields: (Campos) Aqu se seleccionan los campos de la vista (SELECT campos) Join : Relaciones entre tablas Filter : Condicin de filtrado (WHERE condicin) 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 va ODBC. Esta base de datos puede ser Access, ORACLE, SQL-SERVER, entre otros.

Crear una vista remota: Clic en icono para crear vista remotas.

Escoger Nueva Vista (New View)

Si no a creado una conexin es necesario crear en New, si ya esta creada seleccione la conexin y luego OK. Como crear una conexin? Si no ha creado la conexin seleccione New

Siga estos pasos cuidadosamente: 1. Seleccione New Data Source (Nueva Fuente de Datos) y aparecer la configuracin del ODBC:

2. En el folder User DSN Presione el botn Add (Agregar)

Escoja de la ventana el Controlador deseado, Ejemplo: Microsoft Access Driver (*.mdb) y luego el botn Finalizar. Luego aparece la Ventana de ODBC del controlador que selecciono (En este caso en de Access) 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). Despus le aparece la primera Ventana donde escoge las conexiones, le aparecer la conexin que usted ha creado. Nota: Esta conexin que usted a creado servir para sesiones futuras.

Seleccione la conexin creada y luego Aceptar (OK) Luego le aparecer la ventana donde usted escoge las tablas que utilizar:

Luego aparecer la ventana donde se disea la vista:

El procedimiento para crear la vista es igual a la creacin de vista Locales.

Consultas a la BD usando SELECT-SQL

SELECT - SQL usando dos o mas tablas: Sintaxis : SELECT alias1.campo1 ,alias2.campo2 ,alias3.campo3 FROM tabla1 alias1 ,tabla2 alias2 ,tabla3 alias3 WHERE alias1.campo1 = alias2.campo2 alias1.campo2 = alias2.campo3

Ejemplo : Un ejemplo sencillo: si queremos listar el nombre del empleado, el id del departamento, y el nombre del departamento al que pertenece el empleado la query (consulta) sera: SELECT A.nombre AS empleado ,A.dept_id ,B.nombre AS depto FROM s_emp A ,s_dept B WHERE A.id = B.region_id Ejercicios : Seleccionar el No. depto, apellido, salario y cargo para los empleados que ganen mas de 100 y el departamento este en 41, 10 y 50 select dept_id ,nombre ,salario ,cargo from s_emp where salario > 100 and dept_id IN (41,10,50) seleccionar el apellido, del empleado, id del depto, y el nombre del depto. select a.nombre AS empleado ,b.id ,b.nombre AS depto from s_emp a ,s_dept b where a.id = b.dept_id

Seleccionar el apellido del empleado, no del depto, el nombre deldepto para los depto que esten entre 20 y 50 sin incluirlos. select a.nombre AS empleado, b.id, b.nombre AS depto from s_emp a, s_dept b where a.id = b.dept_id and b.id > 20 and b.id < 50 seleccionar el nombre del empleado no. del depto, nombre del depto, para los deptos que comiencen con 4 y ordenados el numero de depto y nombre del empleado desc select a.nombre AS empleado, b.id, b.nombre AS depto from s_emp a, s_dept b where a.id=b.dept_id and ALLTRIM(STR(b.id)) like '4%' order by a.nombre asc, b.id Seleccionar el nombre del cliente para aquellos empleados que el no del depto sean 30, 40, 41, 42 y el ( salario sea mayor que 1000 o el depto sea 50 ) select a.nombre AS cliente, b.nombre AS empleado, b.salario, b.id, b.dept_id from s_customer a,

s_emp b where a.emp_id=b.id and b.dept_id IN (30,40,41,42) and (b.salario > 1000 or b.dept_id='50') Otra soluccion: select a.nombre from s_customer a where a.emp_id IN (Select id from s_emp where dept_id in (30, 40,41,42) and (salario > 1000 or dept_id=50 ) Seleccionar el nombre del cliente, nombre de region y el salario para todos los empleados que el salario sean mayor que 100 select a.nombre AS empleado, b.nombre AS depto, a.salario from s_emp a, s_dept b where a.dept_id=b.id and a.salario > 100 Funciones de grupos salarios minimos y maximos de los empleados select max(salario) sal_max, min(salario) sal_min from s_emp Suma, maximo, minimo salario por Departamento

select dept_id, sum(salario), max(salario), min(salario) from s_emp group by dept_id *--select dept_id, count(dept_id) from s_emp group by dept_id having dept_id > 20 *--select dept_id, sum(salario) from s_emp group by dept_id having sum(salario) between 2000 and 4000 *--select avg(salario), min(salario), max(salario), sum(salario) from s_emp where UPPER(title) like 'SALES%' *---

select count(nombre), dept_id from s_emp where dept_id=31 group by dept_id SELECT COUNT(ID), DEPT_ID FROM S_EMP GROUP BY DEPT_ID SELECT COUNT(ID), CREDIT_RATING FROM S_CUSTOMER GROUP BY CREDIT_RATING *---SELECT SUM(SALARIO), CARGO FROM S_EMP WHERE upper(TITLE) NOT LIKE 'VP%' GROUP BY CARGO *---SELECT SUM(SALARIO), TITLE FROM S_EMP GROUP BY TITLE *---SELECT TITLE, SUM(SALARIO) FROM S_EMP WHERE UPPER(TITLE) NOT LIKE 'VP%'

GROUP BY TITLE HAVING SUM(SALARIO)> 5000 *---Formularios Sencillos Un Formulario Sencillo, es el que es realizado generalmente utilizando una sola tabla. Un ejemplo tpico de formularios sencillos son las pantallas de los catlogos de un Sistema, que solamente tienen la funcin de registrar, modificar, eliminar y consultar datos de una tabla. Por ejemplo vamos a construir una forma sencilla utilizando el Wizard de Visual Foxpro: Abra su proyecto Ubquese en la pestaa de documentos (document) y luego en Formas (Forms). Presione el Botn Nuevo (New). Aparece la siguiente ventana:

Seleccione Wizard. Seleccione Form Wizard y OK. Luego aparece la ventana donde usted escoge la tabla a utilizar y los campos de esa tabla. Una vez seleccionado la tabla y sus respectivos campos, presiones prximo (Next). Se visualizar la siguiente ventana: 10. Seleccione el estilo de la forma y el tipo de botones a utilizar en la forma y luego presione prximo (Next). 11. Aparecer la siguiente ventana:

Para visualizar todas las imgenes faltantes haga click en el menu superior "Bajar Trabajo". 12. Seleccione el ordenamiento de la tabla, aqu por lo general se selecciona el ndice de la tabla ( los ndices aparecen con asterisco *)

13. Introduzca el titulo de la forma y luego Finalizar (Finish) Visual Foxpro Generar la forma, luego usted puede modificar la forma si lo desea. La forma, que creamos con el wizard, quedara de esta forma: Nota: Reconstruya el proyecto en la opcin Build (botn del proyecto). Luego Seleccione Rebuild Proyect y OK. Visual Foxpro, compila su proyecto. Notar que en la pestaa de clases de su proyecto Visual Foxpro le ha agregado una clase que l ocupa para construir formas con el Wizard, el nombre de la clase es WizStyle. Formularios Maestro - Detalle Un formulario maestro detalles es aquel en que entran en juego dos o ms tablas, las cuales tengan una relacin de uno a muchos. Ejemplo la relacin de s_region con s_dept ( una regin puede tener muchos departamentos). Se pueden construir formas mestro-detalle utilizando el Wizard, sin embargo, nosotros utilizaremos la forma manual para personalizar a nuestro gusto la forma. Pasos para construir una forma maestro - detalle Para este ejemplo utilizaremos las tablas s_region y s_dept Abra su proyecto Ubquese en la pestaa de documentos (document) y luego en Formas (Forms).

Presione el Botn Nuevo (New). Seleccione Nueva Forma en blanco. En la forma en blanco presione el botn derecho del ratn y luego Entorno de Datos (Data Environment)

6. Seleccione las tablas s_region, que ser el maestro y luego la tabla s_dept que ser nuestro detalle.

7. Arrastre uno por uno los campos de la tabla s_region a su forma, de tal manera que queden asi:

8. Luego arrastre toda la tabla s_dept al formulario

Ahora vamos a modificar las propiedades del Grid que hemos insertado: seleccionan el grid, botn derecho del ratn y luego propiedades. Se sitan en la pestaa datos, para modificar las siguientes propiedades con el fin de establecer la relacin entre las dos tablas:

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 cdigo es anlogo 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 validacin 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 informacin de la aplicacin de la funcin y/o procedimiento Messagebox) if messagebox("Esta seguro que desea eliminar este cliente",36,"Confirmacion")=6 (Implementada como funcin) 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.direccin 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 Creacin de Clases de Objetos En Visual Foxpro se pueden crear clases de objetos que pueden de uso muy comn, como por ejemplo el botn salir es muy comun en todas las pantallas. Pasos para creacin de clases: Abra su proyecto Ubquese en la pestaa de classes.

Presione el Botn Nuevo (New). Introduzca el nombre de la clase, el tipo de clase (en este caso Boton de comando) y guardarlo como curso.

Inmediatamente aparecer la siguiente pantalla: Personalice el botn y luego cierre la ventana y slvelo.

clases de su proyecto: Cmo hacer uso de la clase :

La clase que usted a creado aparecer en la pestaa

2. presione el botn de ver clases y luego agregar (Add) y seleccione la clase que usted a creado.

Cree o Abra una forma

Aparecer la clase que usted a creado con el botn de salir Para poner el botn en la forma, seleccione el botn en la barra de controles y luego clic en la 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 Cdigo 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) Cdigo 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 Tecnologa ActiveX Cuando usted instala Visual Foxpro, se instalan una serie de controles ActiveX soportados por Visual Foxpro. Un ActiveX, no es ms que un control externo, es parecido a una clase ya que las clases se pueden guardar en un archivo (extensin VCX) y los ActiveX tienen extensin OCX. La diferencia es que los VCX solo puede ocuparse en Visual Foxpro, mientras que los OCX se consideran como tecnologa 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. Cmo hacer uso de los ActiveX en Visual Foxpro: Un OCX es un objeto por lo cual tiene propiedades y eventos implcitos 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) Cmo agregar un ActiveX a la forma: Abra o Cree una nueva forma. Seleccione Ver clases Seleccione ActiveX Control Seleccione el control deseado, en este caso el Outline Control y pngalo en la forma.

5. Vamos a crear una forma maestro detalle utilizando el Outline Control. El Outline control presentar la informacin de las Regiones y vamos a agregar un Grid que sern los departamentos, Algo asi:

Completar Cdigo del Outline control: Mtodo Init Cdigo *------------------------------------* Cargar el OCX *------------------------------------*-------pnIndex = 0 THIS.Additem( "Regiones" ) THIS.Indent( pnIndex ) = pnIndex

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() Jjjjjjjjjjjjjj Kkkk