PRACTICAS
Ahora bien, después de haber leído el curso, a continuación veras varios ejemplos para que practiques lo que aprendiste.
1.
Ubiquese en el folder Data y luego en Databases y presione el
botón New

La
ventana del Database Designer aparecerá :

Puede
ocupar el toolbar Database Designer para el
control de la Base de
Datos.
Descripción
de los botones del toolbar:
Crear una
nueva tabla.
Agregar una
tabla existente
Eliminar una
tabla seleccionada
Modificar una
tabla seleccionada
Creación de
Vistas remotas
Creación de
Vistas locales
Editar
Procedimientos almacenados en
la Base de Datos
Creación de
Conexiones con vistas remotas
Examinar el
contenido la tabla (BROWSE)
1. Click en el
boton de Nueva tabla, aparecera la ventana New Table


La
ventana de Table designer aparecera 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, tamaño, Formato y
Reglas de validación en el folder Fields.
Igual que en las versiones anteriores, la definición de
campos es igual. Se introduce el nombre del campo (name) el tipo de
datos que soportará (Type) y el tamaño.
Format : Es el formato de salida del campo,
ejemplo si fuera númerico 9,999.99 o si fuera
carácter !!!!!!!!!!!!, para que solo acepte mayusculas
Input mask : Igual que el Format, lo único que es para la
entrada de datos.
Captión :
Descripción mas precisa
del campo, es de
utilidad al diseñar los
Formularios.
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 : Es la regla de validación, ejemplo: id
> 0, si queremos que acepte
valores positivos.
Message: 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 deficion de los campos, pasamos a la definicion de Indices de la
tabla, que será muy importante a la hora de crear las relaciones entre las
tablas.
Introducir el Nombre del archivo índice. Es conocido
también como TAG.
Primary : Llave
primaria.
Candidate : Llave
candidata
Unique : Llave única.
Regular : Llave foránea.
c. Nombre
de la Expresión
Nombre
de los campos que conforman la llave 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 carácter y linea, entoces el nombre de la
expresion sería:
Id + STR(linea)
STR() convierte de número a carácter y
VAL() convierte de carácter a númerico.
Después
de detallar los índices, se define los eventos de La validación a nivel de
registro y los eventos
que se ejecuten a la hora de Insertar un registro, de actualizar o borrar.

Creación de una vista local.
Clic en el
botón para crear vistas locales.

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)
Crear
una vista remota:
Clic en icono
para crear vista remotas.

Escoger
Nueva Vista (New View)

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

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

2. En
el folder User DSN Presione el botón Add (Agregar) 

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á:

Luego
aparecerá la ventana donde se diseña la vista:

El
procedimiento para crear la
vista es igual a la creación 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
pruebas 2 3
Programación
Multiusuario:
En la
programación multiusuario
hay que tener muy en cuenta el control de la zona critica.
En Visual Foxpro, esto se puede hacer Automaticamente o Manualmente.
En la
forma Automática, Fox controla la zona critica con los enllavamientos
automáticos, lo que nos ahorra
tiempo ya que no
tenemos que preocuparnos por ello. ( esta es la forma
que utilizaremos )
¿Qué
se requiere?
Se
requiere algunas definir
variables de
ambiente en el programa
principal de nuestro Sistema:
*
Definición de para Ambiente Red
SET
EXCLUSIVE OFF Abre las tablas en modo compartido
SET
MULTILOCKS ON Para que se puedan bloquear mas de un registro
SET
DELETE ON Para que los registros marcados no se visualicen
SET
REFRESH TO 5 Refrescamiento cada 5 segundos en el Browse
SET
REPROCESS TO AUTOMATIC Si un registro esta bloqueado o enllavado
Fox intenta acualizarlo hasta que uno presione esc
*SET
REPROCESS TO 5 SECONDS Si despues de 5 segundos no puede actualizarlo
Fox
manda un error.
* Otro
Ambiente
SET ECHO OFF
SET TALK OFF
SET CENTURY ON
SET CLOCK STATUS
SET DATE BRIT
SET PATH TO menu,forms,bmp,prg,data
SET SAFETY OFF
SET PROCEDURE TO
.\prg\utility
Usando
el Buffer con las tablas.
Buffer
Optimista: Dos usuarios pueden estar modificando el registro sin ningún problema.
Pesimista : Solo un usuario puede estar
modificando el registro.
¿Cómo
fijar el Buffer?
* Fijar
el Modo de Buffer y almacenar el resultado lógico en ISuccess
lSuccess = CURSORSETPROP("Buffering", 5, "customer")
IF lSuccess =
.T.
=MESSAGEBOX("Operación Realizada.!",0," Status
de la Operacion ")
ELSE
=MESSAGEBOX("Operación No Realizada.!",0,"
Status de la Operacion ")
ENDIF
Con el
buffer activado podemos hacer uso de los
comandos :
TABLEREVERT(.T.)
TABLEUPDATE(.T.)
TABLEUPDATE(.T.)
Graba
los cambios hechos en la tabla.
SET
MULTILOCKS ON && Debe estar ON para el buffering de la tabla
= CURSORSETPROP('Buffering', 5, 'employee' ) &&
Activar el Buffering de la Tabla
INSERT INTO
employee (cLastName) VALUES ('Smith')
CLEAR
?
'Valor Original de cLastName : '
?? cLastName && muestra valor actual de cLastName
(Smith)
REPLACE
cLastName WITH 'Jones'
?
'Nuevo valor para cLastName : '
?? cLastName && Muestra Nuevo valor de cLastName
(Jones)
= TABLEUPDATE(.T.) && Acepta los cambios
?
'Valor actualizado de cLastName : '
?? cLastName && Muestra actual valor de cLastName
(Jones)
TABLEREVERT(.t.)
Cancela
los cambios hechos a la tabla
USE
Customer && Abre la tabla Customer
= CURSORSETPROP('Buffering', 5, 'customer') && Activa
el buffering de la tabla
CLEAR
? 'Valor
Original cust_id : '
??
cust_id && Muestra el actual valor de cust_id
REPLACE
cust_id WITH '***' && Cambia el contenido del registro
?
'Nuevo valor de cust_id : '
??
cust_id && muestra Nuevo valor de cust_id (***)
= TABLEREVERT(.T.) && Deshace todos los cambios en la
tabla
?
'Valor de cust_id revertido: '
??
cust_id && muestra el valor de cust_id revertido
DISEÑO
DE FORMULARIOS
Guía
rápida visual:
A la
hora de diseñar formularios usted tiene que estar familiarizado con las
ventanas siguientes:
Cómo
crear un nuevo Formulario:
Aparece en cuadro de diálogo Nuevo Formulario. Este
cuadro refleja la posibilidad de utilizar el Asistente para formularios o
construir uno nuevo.
Sugerencia: utilice el Asistente para formularios
para desarrollar formularios simples de
introducción de datos. El
Asistente para formularios hace una serie de preguntas para guiarle durante el
proceso de creación
del formulario. El Asistente permite la creación de un formulario para única
tabla o para tablas uno a muchos.
El
Generador de formularios visualiza Form1 en la ventana DocForm1, indicando que
éste es el primer formulario que tiene abierto en este
proyecto. Podrá cambiar
de nombre Docform1 por el nombre que indique al guardar el formulario. Form1 es
un área de trabajo en blanco.
También
aparecerá la barra de
herramientas con los
controles para la creación de formularios.
Agregar
Objetos a su formulario.
Una
vez que tenga en pantalla una ventana de formulario en blanco, Form1, inserte
objetos para crear su formulario.
MS
Visual Foxpro 5.0 ofrece dos tipos de objetos que se pueden insertar en un
nuevo formulario: objetos contenedores y objetos de control. Podemos accesar a
estos objetos desde la barra de herramientas Controles de formulario o desde el
Administrador de proyectos.
Objetos
contenedores: Un objeto contenedor es un objeto primario que contiene
otros objetos subordinados. Por ejemplo, un formulario es el objeto contenedor
que es propietario de un botón de comando visualizado en el formulario. Otros
objetos contenedores pueden incluir marcos de página, cuadrículas y grupos de
botones de comando.
Objetos
de control: Un objeto de control permite al usuario seleccionar opciones,
introducir datos y escoger acciones. En un formulario, estos objetos pueden
incluir casillas de verificación, botones de comando, cuadros de texto y
cuadrículas.
El objeto
FORM

Propiedades
mas comunes de la Forma :
|
Nombre |
Tipo de dato |
Descripción |
|
Caption |
Carácter |
Titulo
de la ventana o Forma |
|
Autocenter |
Booleano |
Para
centrar la Forma |
|
ShowTips |
Booleano |
Para
que se muestren los Tooltips |
|
Closable |
Booleano |
Visualiza
el boton de Cerrar la Ventana (X) |
|
MaxButton |
Booleano |
Visualiza
el boton de Maximizar la Ventana |
|
MinButton |
Booleano |
Visualiza
el boton de Minimizar la Ventana |
|
ControlBox |
Booleano |
Visualiza
el Menu de Control de la Ventana. |
Eventos
o
Métodos más comunes de
la Forma
|
Nombre |
Descripción |
|
INIT |
Se
dispara a la hora que se inicializa todos los objetos de la forma. |
|
Load |
Se
dispara antes que se inicialicen los objetos de la forma (antes que Init) |
|
Destroy |
Se
dispara al cerrar la forma |
|
Unload |
Se
dispara despues de Destroy. |
Utilización
de múltiples páginas en un formulario simple.
En
VFP, un formulario simple puede contener múltiples páginas que visualicen
diferentes
conjuntos de datos y
controles. En la parte superior del formulario, una ficha representa cada
página. Podemos pulsar en una ficha para mostrar el contenido de la página.
Cómo
crear un formulario de varias páginas.
1.
Pulse el botón Marco de página (page frame) en la barra
de herramientas Controles de formulario.

Propiedades
mas comunes de la páginas :
|
Nombre |
Tipo de dato |
Descripción |
|
Pagecount |
Númerico |
Fija
el número de Folders o páginas (Page1, page2...) |
|
TabStyle |
Númerico |
Justificacion
de las páginas. |
|
Visible |
Booleano |
Si
el control es visible al usuario. |
|
|
|
|
Agregar
cuadros de texto y cuadros de edición:
Cómo agregar objetos en la pagina 1 (page1):
Aparece el cuadro de diálogo propiedadades, donde muestra
Page1 en el cuadro de texto.

Sugerencia: Cada vez que
inserte un objeto en un formulario, marco de página o cuadricula, compruebe en
la ventana Propiedades que ha colocado el objeto en el contenedor apropiado.
Como
Agregar de cuadros de texto directamente de una tabla:
Sugerencia: También puede abrir la ventana
Agregar tabla o vista con el botón derecho del ratón. Utilizando el botón
derecho del ratón, pulse en cualquier parte del Entorno de datos y luego
seleccione Agregar. Para obtener la ventana de Entorno de Datos o la ventana de
propiedades, utilice el botón derecho del ratón pulsando fuera del marco de
página, pero dentro del formulario. Aparece un menú instantáneo desde el que
puede hacer la
selección.

Aparece la ventana Agregar tabla o vista.
En el formulario aparecerá el cuadro de texto.text1
Sugerencia: Para
desplazar un control de texto, pulse sobre él y arrástrelo hacia otro lugar en
le formulario. Para modificar el tamaño del cuadro de texto, pulse sobre él y
luego arrastre algunos de los márgenes.

Propiedades
mas comunes del Text (control de texto):
|
Nombre |
Tipo de dato |
Descripción |
|
Controlsource |
Según
la variable |
Es
la variable o nombre del campo al cual hace referencia. |
|
Value |
Según
la variable |
Contenido
de la variable o campo referenciado en controlsource |
|
Visible |
Booleano |
Si
el control es visible al usuario. |
|
Enabled |
Booleano |
Si
el control esta habilitado o no. |
Control
Botón de Comando:

Propiedades
mas comunes del Botón :
|
Nombre |
Tipo de dato |
Descripción |
|
Caption |
Carácter |
Etiqueta
del comando (Ej. Click Aquí) |
|
Visible |
Booleano |
Si
el control es visible al usuario. |
|
Enabled |
Booleano |
Si
el control esta habilitado o no. |
Eventos
o Métodos más comunes del control
|
Nombre |
Descripción |
|
INIT |
Se
dispara a la hora que se inicializa el objeto |
|
Clic |
Se
dispara al dar click en el objeto |
|
Setfocus |
El
cursor se va al objeto. |
|
Lostfocus |
Se
dispara cuando el objeto pierde el cursor. |
|
Refresh |
Refresca
el objeto. |
Cómo
asociar un procedimiento a un botón:
Control
Botón de Cuadro de Edición:

Se
utiliza para los campos memo.
Propiedades
mas comunes del control de edición
|
Nombre |
Tipo de dato |
Descripción |
|
Controlsource |
Según
la variable |
Es
la variable o nombre del campo al cual hace referencia. |
|
Value |
Según
la variable |
Contenido
de la variable o campo referenciado en controlsource |
|
Visible |
Booleano |
Si
el control es visible al usuario. |
|
Enabled |
Booleano |
Si
el control esta habilitado o no. |
Eventos
o Métodos más comunes del control de edición
|
Nombre |
Descripción |
|
INIT |
Se
dispara a la hora que se inicializa el objeto |
|
Clic |
Se
dispara al dar click en el objeto |
|
Setfocus |
El
cursor se va al objeto. |
|
Lostfocus |
Se
dispara cuando el objeto pierde el cursor. |
|
Valid |
Se
dispara despues de presionar Enter o Tab, se utiliza para validar. |
|
Refresh |
Refresca
el objeto. |

Control
de Opciones:
Propiedades
mas comunes del control de opciones
|
Nombre |
Tipo de dato |
Descripción |
|
Controlsource |
Númerico |
Es
la variable o nombre del campo al cual hace referencia. |
|
Value |
Númerico |
Contenido
de la variable o campo referenciado en controlsource |
|
Visible |
Booleano |
Si
el control es visible al usuario. |
|
Enabled |
Booleano |
Si
el control esta habilitado o no. |
Eventos
o Métodos más comunes del control de opciones
|
Nombre |
Descripción |
|
InteractiveChange |
Se
dispara cuando modificamos el campo |
|
INIT |
Se
dispara a la hora que se inicializa el objeto |
|
Clic |
Se
dispara al dar click en el objeto |
|
Setfocus |
El
cursor se va al objeto. |
|
Lostfocus |
Se
dispara cuando el objeto pierde el cursor. |
|
Valid |
Se
dispara después de presionar Enter o Tab, se utiliza para validar. |
|
Refresh |
Refresca
el objeto. |
Control
Check:
![]()
Propiedades
mas comunes del control Check
|
Nombre |
Tipo de dato |
Descripción |
|
Controlsource |
Booleano |
Es
la variable o nombre del campo al cual hace referencia. |
|
Value |
Booleano |
Contenido
de la variable o campo referenciado en controlsource |
|
Visible |
Booleano |
Si
el control es visible al usuario. |
|
Enabled |
Booleano |
Si
el control esta habilitado o no. |
Eventos
o Métodos más comunes del control Check
|
Nombre |
Descripción |
|
InteractiveChange |
Se
dispara cuando modificamos el campo |
|
INIT |
Se
dispara a la hora que se inicializa el objeto |
|
Clic |
Se
dispara al dar click en el objeto |
|
Setfocus |
El
cursor se va al objeto. |
|
Lostfocus |
Se
dispara cuando el objeto pierde el cursor. |
|
Valid |
Se
dispara despues de presionar Enter o Tab, se utiliza para validar. |
|
Refresh |
Refresca
el objeto. |
Control Grid:

Propiedades
mas comunes del control Grid:
|
Nombre |
Tipo de dato |
Descripción |
|
Recordsource |
Carácter |
Nombre
de la tabla |
|
Visible |
Booleano |
Si
el control es visible al usuario. |
|
Enabled |
Booleano |
Si
el control esta habilitado o no. |
|
ColumnCount |
Númerico |
Numero
de columnas del Grid |
|
Deletemark |
Booleano |
Permite
registro para borrar ( Aparece en la parte izquierda del Grid) |
Eventos
o Métodos más comunes del control Grid:
|
Nombre |
Descripción |
|
INIT |
Se
dispara a la hora que se inicializa el objeto |
|
Clic |
Se
dispara al dar click en el objeto |
|
Setfocus |
El
cursor se va al objeto. |
|
Lostfocus |
Se
dispara cuando el objeto pierde el cursor. |
|
Refresh |
Refresca
el objeto. |
Control
Listas:
![]()
Propiedades
mas comunes del control Listas
|
Nombre |
Tipo de dato |
Descripción |
|
Controlsource |
Según
la variable |
Variable
a que hace referencia (campo donde se almacena el valor de la lista) |
|
RowSource |
Carácter |
Tabla
o query de los elementos de la lista |
|
RowSourceType |
Numérico |
Tipo
de la Fuente (Si es tabla o query.) |
|
Visible |
Booleano |
Si
el control es visible al usuario. |
|
Enabled |
Booleano |
Si
el control esta habilitado o no. |
|
BoundColumn |
Numérico |
Valor
que retorna la lista (Número de la columna del RowSource ) |
|
BoundTo |
Booleano |
Especifica
si el valor de la lista esta determinado por
los valores o por la
propiedad ListIndex |
Eventos
o Métodos más comunes del control Listas
|
Nombre |
Descripción |
|
InteractiveChange |
Se
dispara cuando modificamos el campo |
|
INIT |
Se
dispara a la hora que se inicializa el objeto |
|
Clic |
Se
dispara al dar click en el objeto |
|
Setfocus |
El
cursor se va al objeto. |
|
Lostfocus |
Se
dispara cuando el objeto pierde el cursor. |
|
Valid |
Se
dispara después de presionar Enter o Tab, se utiliza para validar. |
|
Refresh |
Refresca
el objeto. |
Formularios
Sencillos
Un
Formulario Sencillo, es el que es realizado generalmente utilizando una sola
tabla.
Un
ejemplo típico de formularios sencillos son las pantallas de los catálogos de
un Sistema, que solamente tienen la
función de registrar,
modificar, eliminar y consultar datos de una tabla.
Por
ejemplo vamos a construir una forma sencilla utilizando el Wizard de Visual
Foxpro:
1.
Abra su proyecto

Aparece la siguiente ventana:
Seleccione Form Wizard y OK.
Para ver el gráfico
seleccione la opción ¨Bajar trabajo¨ del menú superior
Para ver el gráfico seleccione la opción ¨Bajar trabajo¨ del
menú superior
10.
Seleccione el estilo de la forma y el tipo de botones a utilizar en la forma y
luego presione próximo (Next).
11.
Aparecerá la siguiente ventana:
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, quedaría de esta forma:
Nota: Reconstruya
el proyecto en la opción Build (botón del proyecto). Luego Seleccione Rebuild
Proyect y OK. Visual Foxpro, compila su proyecto.
Notará
que en la pestaña 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 más
tablas, las cuales tengan una relación de uno a muchos. Ejemplo la relación de
s_region con s_dept ( una región 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
1.
Abra su proyecto

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 tablas region a su forma, de tal manera
que queden asi:

8.
Luego arrastre toda la tablas dept al formulario

1.
Ahora vamos a modificar las propiedades del Grid que
hemos insertado: seleccionan el grid, botón derecho del ratón y luego
propiedades. Se sitúan en la pestaña datos, para modificar las siguientes
propiedades con el fin de establecer la relación entre las dos tablas:

10.
colocaremos los botones para Desplazarnos en la tabla, agregar, eliminar , grabar, cancelar y salir.

Código
para los botones :
|
Botón |
Código |
|
Agregar |
INSERT INTO
s_dept ( region_id ) ; VALUES
(s_region.Id) |
|
<< |
SKIP -1 |
|
>> |
SKIP |
|
Eliminar |
DELETE IN
s_dept |
|
Grabar |
SELECT s_dept =TABLEUPDATE(.T.) |
|
Cancelar |
SELECT s_dept =TABLEREVERT(.T.) |
|
Salir |
THISFORM.Release |
Código
a nivel de Forma :
|
Método |
Código |
|
Destroy |
SELECT s_dept =TABLEREVERT(.T.) |
Importante: la tabla
s_dept debe de estar en modo buffer, para que funcionen los comando de TABLEUPDATE() y TABLEREVERT(). El modo buffer de la tabla lo
puede fijar en Entorno de datos y luego en la propiedades
de la tabla s_dept, específicamente en la propiedad BufferModeOverride.
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




Cómo
hacer uso de la clase :
2. presione el botón de ver clases y luego agregar (Add)
y seleccione la clase que usted a creado.

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:

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:

Completar
Código del Outline control:
|
Método |
Código |
|
Init |
*------------------------------------- * 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() ENDSCAN |
|
Click |
SELECT
s_region 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 :
|
Propiedad |
Descripción |
|
Max |
Máximo
valor de la Barra (númerico) |
|
Min |
Mínimo
valor de la Barra (númerico) |
|
Value |
Valor
actual de la barra (númerico) |
Almacenar
objetos OLE en la Base de Datos:
Con
Visual Foxpro se pueden almacenar objetos OLE en la Base de Datos, estos
objetos OLE van desde una simple
imagen BMP de Paintbruhs hasta un
video clip, un documento en
Word, una hoja en
Excel un grafico.
Esto
se llama OLE Automation (automatización OLE)
¿Qué
se necesita para hacer OLE Automation?
Muy
sencillo:
·
El campo de la tabla debe ser tipo General
·
Utilizar el control OLE Bound Control de Visual Foxpro
·
Utilizar el Comando APPEND GENERAL
Sintaxis
de APPEND GENERAL
APPEND
GENERAL Nombre Campo tipo General
[FROM
Nombre Archivo]
[DATA
Nombre de Variable]
[CLASS
Nombre de la Clase OLE]
FROM : Por si deseamos insertar un Archivo
existente en el disco
DATA : Si no es un archivo puede ser una
variable, entonces se especifica
aquí.
CLASS : El nombre de la clase de la aplicación
al que esta asociada el archivo
o la variable.
Toda
aplicación
Windows ( Word, Excel,
Graph,
Paint, WordPad, Block de Notas,
Power Point, entre otras) tienen un nombre de
clase:
Por
mencionar algunos nombres de clases:
|
Aplicación |
Nombre de la clase |
|
Paintbrush
Picture |
PAINT.PICTURE |
|
Documento
de Word 97 |
WORD.DOCUMENT |
|
Hoja
de Calculo de Excel |
EXCEL.SHEET |
Como
conocer el nombre de clase de una aplicación Windows:

Incluir en el Formulario el Objeto OLE:
Diseño de Reportes
Guia rápida visual:
Los
informes muestran datos y resumen datos en un
formulario impreso o en pantalla. Los dos componentes principales de los
informes son los datos y el formato. La fuente de datos del
informe puede ser una tabla de base de dato,
una consulta o una vista.
El primer paso para diseñar un informe es determinar los
datos que se van a mostrar, y el segundo paso es determinar cuál va a ser el
mejor formato para mostrar ese informe. Puede crear listados que se basen en
una única tabla o en informes complejos.
El Generador de Informes es una herramienta flexible y de
fácil uso para la creación, diseño y modificación de informes.
Pasos para Creación de Informes :
I. Selección de los datos
Esta es la parte más importante del informe, la selección
de datos, hay que saber qué es lo que quiere el usuario o que el usuario
muestre el diseño del informe que desea, para comenzar a trabajar.
Los datos pueden ser simples (utilizando una sola tabla),
como listados de regiones, listado de departamentos, entre otros; o pueden ser
algo mas complejos (utilizando mas de una tabla)
Ejemplo Reportes agrupados, reportes consolidados, etc.
Los datos se pueden obtener directamente utilizando las
tablas o utilizando SQL para crear cursores, esta última es la más
recomendada para una aplicación multiusuario.
Existen varios tipos de informes entre ellos
:
- Listados (Ej. Listados de regiones)
Muestra:
-------------------------------
id name
-------------------------------
01 Region 1
02 Region 2
--------------------------------
- Grupos con detalles ( o
maestro detalles)
-------------------------------
Region
Departamento
-------------------------------
Region 1
Departamento a
Departamento b
Region 2
Departamento x
Departamento y
--------------------------------
- Matriciales o consolidados
--------------------------------------------
Rating
Region Excellent Good Poor
--------------------------------------------
Región 1 1 2 0
Región 2 3 0 1
--------------------------------------------
Totales 4 2 1
--------------------------------------------
Creación de Informes usando el entorno de datos:
1. En el administrador de proyectos, seleccione la ficha
Documentos.
2. Seleccione Informes
3. Pulse el botón nuevo
4. Pulse el botón nuevo informe.
Aparece el generador de informes y al
barra de herramientas Controles de informes.
5. Seleccione Entorno de datos y seleccione la tabla
7.
Introduzca los encabezados del reporte
8. Puede ver
como queda el informe con el botón de presentación preliminar:
Presentación Preliminar :

Menú de
Reportes

Titulo/Sumario
(Title/Summary):
Muestra
el área del Titulo y el Sumario del Informe
Titulo : Aparece solo en la primera pagina del
Reporte
Sumario : Aparece solo en la ultima pagina del
Reporte

Agrupamiento
de datos (Data Grouping)
El
agrupamiento de datos se utiliza para informes maestro – detalle.
Variables:
Las
variables son útiles para hacer cálculos con los datos del reporte y luego
presentarlas en el mismo reporte.
Propiedades
de los campos
Cada
campo en el Informe posee propiedades :
Creación
de Informes usando Cursores SQL:
1.
Crear el cursor con el comando SELECT..... FROM .....WHERE....
2.
Crear el Informe manualmente, con los nombres de campos del cursor.
3.
Correr el Reporte.
Ejemplo:
* Se
define una ventana Personalizada
DEFINE WINDOW w_Output ;
FROM 0,0 TO 25,70 ;
TITLE 'Informes
- INATEC' ;
CLOSE FLOAT GROW
ZOOM SYSTEM
USE IN
.\data\s_region IN 0
SELECT id, name
FROM s_region
INTO
CURSOR c_region
*
Si lo queremos por pantalla
REPORT FORM
.\report\pp_detalles ;
PREVIEW WINDOWS
w_output ;
NOEJECT NOCONSOLE
* Por Impresora
REPORT FORM
.\report\pp_detalles ;
TO PRINTER PROMPT ;
NOEJECT NOCONSOLE
* Hacia un Archivo
REPORT FORM
.\report\pp_detalles ;
TO FILE PUTFILE() ;
ASCII
*
Cerrar el cursor
USE IN
c_region
Integración
de la Aplicación
Creación
de Menús:
Guía
rápida Visual:
Tipos
de Menús:
Existen
dos tipos de menús : menú y Shortcut.
Creación
de Menús:
La
creación de menús es un proceso que conlleva diferentes pasos. Primero, debemos
definir las opciones del menú y de los submenús. Luego, asignar funcionalidad a
las opciones de menú. Finalmente, generar el programa de menús.
Puede
usar el generador de menús de Visual Foxpro para que le ayude a construir menús
rápidamente. El Generador de menús le permite definir la
estructura y funcionalidad de su sistema de menús
a través de cuadros de diálogo de fácil uso y de listas desplegables que puede
utilizar para crear y modificar su sitema de menús.
Definición
de las opciones de menú.
Los
menús presentan su aspecto con una lista de opciones para iniciar una
actividad. La mayoría de los elementos de menú muestran submenús u opciones
adicionales cuando el usuario selecciona uno de estos elementos. Antes de
generar un menú para una aplicación, tendrá que determinar que selecciones
tendrá disponibles el usuario final y qué opciones de menús pertenecen a otras
opciones de menús (sub menus).
Cómo
crear un nuevo menú

1.
Pulse la ficha de otros en el Administrador de proyectos.
Aparece la página otros con las categorías de archivo de
Menús, Texto y Otros.
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
Comando : Si la opción
de ese menú invoca un comando (Ejemplo: DO FORM
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
Generación
del menú :
Como invocar al menú creado:
Al
generar el menú se crea un archivo que por lo general tiene extensión MPR que
contiene el código para desplegar el menú.
La
instrucción sería:
DO ruta y nombre del archivo MPR
Ejemplo : DO menu.MPR
·
Para volver a re establecer el menú por default de Visual Foxpro utilice la
instrucción: SET SYSMENU TO DEFAULT
Creación del Ejecutable de la Aplicación.

Primero
se tiene que crear un programa de inicio, al cual se le tiene que decir que ese
es el programa que se ejecutara de primero ( esto se
hace haciendo clic derecho en el programa que designemos como principal y
escoger la opción main ( principal) del menú de opciones)
Contenido
Ejemplo del programa principal:
CLEAR
ALL
*
Variables Publicas
PUBLIC
w_Output, g_año, gid_area, g_nivel, g_cambio, g_login_entry ;
,g_pass_entry, V_MENU_PRE, V_ERROR, g_acceso
*
Definicion de Ventana para los Reportes
DEFINE WINDOW w_Output ;
FROM 0,0 TO 25,70 ;
TITLE 'Informes
- BCN' ;
CLOSE FLOAT GROW
ZOOM SYSTEM
* Ambiente
SET SYSMENU TO
SET ECHO OFF
SET TALK OFF
SET CENTURY ON
SET CLOCK STATUS
SET DATE brit
SET DELETE ON
SET PATH TO
formenu,bmp,prg,data
SET EXCLUSIVE
OFF
SET SAFETY OFF
SET REFRESH TO 5
SET REPROCESS TO
AUTOMATIC
SET MULTILOCK ON
SET LOCK OFF
SET PROCEDURE TO
.\prg\utility
* Fondo de la Pantalla principal
_SCREEN.Picture=".\bmp\fondo.bmp"
_SCREEN.WINDOWSTATE=2
_SCREEN.CLOSABLE=.F.
_SCREEN.CAPTION="Formulación
Presupuestaria"
* Base
de Datos
OPEN DATA
.\SCOTT\scott SHARED
* Llamada al Menu
DO .\menu\menu.mpr
READ EVENT
CLEAR ALL
SET SYSMENU TO
DEFAULT
Creación del Ejecutable

En el
Administrador de proyectos seleccione la opcion Build, luego la opción build Executable
y luego OK.
·
En las opciones es recomendable seleccionar Recompile All y display Error,
para recompilar todos sus
programas y formularios ; y Por si hay un error mostrarlo
al final de la generación del Ejecutable.
Visual
FoxPro 6.0 en la Web
En
este ejercicio pondremos un formulario de Visual FoxPro en la
Web, En el proyecto tenemos el formulario s_region :
Así se
vera el formulario en el Browser:

Con
Visual FoxPro usted puede desplegar su aplicación para que sea vista desde un
Browser ( de Preferencia
Internet Explorer ). La modificación es mínima si
usted ya tiene una aplicación.
Siga
las siguientes instrucciones:
2.
En el evento Run de la clase pondremos el código para la llamada al
formulario que queremos que se mire en la Web.

3. En
el evento ContainerRelease escriba lo siguiente:

4.
Salvamos la clase.
5.
Establecemos como principal (Set Main) las clase que
creamos.

6.
Haremos una pequeña modificación en el formulario, agregaremos la instrucción
CLEAR EVENT en el botón de salir:
(Esto
es muy importante , no se nos debe de olvidar)

7.
Construya el APP de su proyecto:


Según la siguiente hoja, evalúa los datos que puedan
servir para realizar una tabla de
Inventario, construye la estructura, tomando en cuenta
algunos datos que puedan enriquecer la tabla.
Computadoras SYSTEM S.A.
Inventario físico al _____ de __________ del 2001
|
Código |
Descripción |
Marca |
Exist. |
Precio Costo |
Precio Venta |
Proveedor |
|
M025 |
Monitor 14" |
Acer |
50 |
900.00 |
1080.00 |
Procom S.A. |
|
M026 |
Monitor 12" |
Acer |
102 |
850.00 |
1020.00 |
Procom S.A. |
|
M027 |
Monitor Radius |
Acer |
10 |
1100.00 |
1320.00 |
Procom |
|
CA01 |
Case Mini tower Deluxe |
ADS |
300 |
105.00 |
126.00 |
Distribuidora SalCom |
|
CA02 |
Case Desk Top |
ADS |
100 |
125.00 |
150.00 |
Distribuidora SalCom |
|
IMC1 |
Impresor
Color
JET 1000 |
Canon |
25 |
367.00 |
440.40 |
Procom S.A. |
|
IMC2 |
Impresor color JET 2000 |
Canon |
15 |
452.25 |
542.70 |
Procom S.A. |
Agrega 20 registros a la tabla.
Utiliza los comandos Use, Browse, List y Display, según
te indique el instructor y anota en tu cuaderno lo que pasa.
Manipulación de registros
Puedes utilizar diferentes tipos de comando para
manipular los datos de tu tabla, estos comandos pueden utilizarse desde su modo
más simple hasta su forma compuesta utilizando expresiones de dominio, por
ejemplo:
LIST FOR país = "ES" && lista los
registro que país = "ES"
He aquí algunos comandos con sus expresiones de dominio:
DISPLAY ALL
DISPLAY RECORD 5
GOTO 17
GO TOP
GO BOTTOM
SKIP -3
DELETE RECORD 6
LIST FOR
precio
>1200
BROWSE FOR precio >=900 .AND. precio <2500
GO 6
RECALL
PACK
ZAP
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 |
|
COPY FILE |
Copia cualquier tipo de archivos |
|
COPY STRUCTURE |
Almacena la estructura de una base de datos en una
nueva base |
|
COPY TO |
Copia datos de una base de datos a un archivo |
|
COUNT |
Determina el nùmero de registro en la base de datos |
|
DISPLAY FILES |
Muestra
información de base de datos |
|
DISPLAY MEMORY |
Despliega la información de las variables de memoria |
|
DISPLAY STATUS |
Despliega información de la condición de FOX |
|
DISPLAY STRUCTURE |
Muestra la estructura de una base de datos |
|
MODIFY COMMAND |
Abre una ventana de modificación de texto |
|
MODIFY STRUCTURE |
Modifica la estructura de una base de datos |
|
REPLACE |
Actualiza los registros en una base de datos |
Otro tipo de comandos útiles para la manipulación de
tablas y registros son las
FUNCIONES, las cuales se dividen en:
a.
Cadenas o manejo de caracteres:
este
grupo de funciones gestiona el manejo de caracteres.
b.
Matemáticas: permiten efectuar
operaciones con valores numéricos.
c.Manejo de fechas y hora: se
encarga de gestionar las variables de tipo fecha.
d.
Lógicas: Se encargan de efectuar
operaciones de tipo lógico.
e.
Funciones de conversión de
tipos: conviertes variables de un tipo a otro.
Antes de mostrar ejemplos definiremos dos componentes que
se hacen necesarios en la manipulación de datos:
Constante: Son valores predefinidos que no cambian nunca
por ejemplo: valor1=15478, cadena="abcd".
Variable: Se utilizan como identificadores de secciones de memoria donde se guarda información, por ejemplo: var1=campo1, var2=tabla.campo.
Las variables se pueden definir como: publicas,
privadas y locales ejemplo:
PUBLIC nombre, apellidos
PRIVATE sueldo
Operadores relacionales
Los operadores se utilizan en
tiempo de ejecuciòn para unir dos o màs elementos del lenguaje.
Operadores aritméticos
( ) Agrupa subexpresiones
**, ^ Exponenciación
*, / Multiplicaciòn y división
% Módulo (resto de la división)
+, - Suma y resta
Operadores relacionales
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
= igual a
<>, #, ¡=Distinto de
$ Contenido en
Ejemplos con funciones en Visual FoxPro.
* Declaración de variables
cadena1 = SPACE(15)
cadena2 = SPACE(15)
número = 0
cuenta = 0
* Asignación de datos
cadena1 = "abcd efgh ijkl"
* utilizando la función LEN para contar el número de la
cadena
? LEN(Cadena1) &&
imprime en pantalla 14
? Cadena2= SUSBTR(cadena1,1,4)
&& imprime en pantalla abad
? DTOC(DATE())
? SIN (0)
Practica 2
1.
Abre la tabla de inventario.
Ejercicio:
Crea una tabla que guarde los datos de tus compañeros y
pon un índice por el campo que creas conveniente y práctica lo anterior.
También puedes indexar una tabla, desde el generador de
tablas de FoxPro marcando la casilla que se
muestra en la figura:
Primero tienes que seleccionar el campo que servirá
como índice, luego selecciona la ficha de modo que te aparezca la siguiente
pantalla:
Tienes que elegir el tipo de de índice el cual le
indicara a la tabla que tipo de índice tiene. Los tipos de índices son los
siguientes:
Principal: No admites claves duplicadas, actúa como
referente a un registro de una tabla, de forma que no puede haber dos registros
con la misma clave.
Candidato: Este índice tampoco admite claves
duplicadas. Puede haber más de uno por tabla.
Único: En este índice sólo se guardan aquellos valores
que sean distintos entre sí, pero sí admite registros con valores duplicados.
Regular: Es el índice típico. Admite claves duplicadas.
Práctica
1.
Diseña un formulario que represente y baucher de notas y que al escribir
las notas calcule los promedios finales. (Puedes mejorarlo si los datos los vas
almacenando en una tabla).
2.
Realiza un programa que calcule el pago de una planilla donde el pago
mínimo es de $240.00, construye la tabla y has que los datos se almacenen en
ella, toma en consideración, el pago por horas, horas extras, los descuentos
necesarios y las comisiones tomando en consideración la siguiente tabla:
Si
las
ventas < $1700.00 no hay comisión
Si
las ventas>=$1700.00 y <$2500.00 la comisión es del 3%
Si
las ventas>=$2500.00 y <$3200.00 la comisión es del 5%
Si
las ventas>=$3200.00 y <$3700.00 la comisión es del 7%
Si
las ventas>=$3700.00 la comisión es del 10%
3.
Utilizando tu base de datos de
Inventario construye el mantenimiento respectivo sin utilizar el WIZARD.
Crea una carpeta llamada Sistema de clientes, dentro de
ella crea otras subcarpetas y nómbralas así: datos, formularios, gráficos e
informes.
Utilizando el método de carpetas, te aseguras que tu
proyecto se vea ordenado y clasificado.
Ahora cada objeto que crees de este ejemplo aseguraté que
lo guardas en el lugar indicado de lo contrario no funcionará debidamente.
Crea el proyecto
Selecciona Archivo / Nuevo / Proyecto
Guárdalo en la carpeta Sistema de clientes con el nombre
de Clientes.
Crea la base de datos
De tu proyecto elige la ficha datos / Nuevo
Guárdalo en la carpeta Sistema de clientes / datos con el
nombre de Clientes
[EXAMEN]