Visual Foxpro 6 , Manual del Programador - Microsoft Press Titulo : Visual Foxpro 6 , Manual del Programador Autor : Microsoft Press ISBN : 84-481-2089-2 Editora : Mc Graw Hill Nº Paginas : 847 CONTENIDO Introducción. PARTE 1. Programación con Visual FoxPro. Capí tulo 1. Introducción a la programación. Capí tulo 2. Programar una aplicación. Capí tulo 3. Programación orientada a objetos. Capí tulo 4. Descripción del modelo de eventos. PARTE 2. Trabajar con datos. Capí tulo 5. Diseñar una base de datos. Capí tulo 6. Crear bases de datos. Capí tulo 7. Trabajar con tablas. Capí tulo 8. Crear vistas. PARTE 3. Crear la interfaz. Capí tulo 9. Crear formularios. Capí tulo 10. Usar controles. Capí tulo 11. Diseñar menús y barras de herramientas. PARTE 4. Agrupar todos los elementos. Capí tulo 12. Agregar consultas e informes. Capí tulo 13. Compilar una aplicaci ón. Capí tulo 14. Probar y depurar aplicaciones.
1. VViissuuaall FFooxxpprroo 66 ,, MMaannuuaall ddeell
PPrrooggrraammaaddoorr -- MMiiccrroossoofftt PPrreessss Titulo :
Visual Foxpro 6 , Manual del Programador Autor : Microsoft Press
ISBN : 84-481-2089-2 Editora : Mc Graw Hill N Paginas : 847
CONTENIDO Introduccin. PARTE 1. Programacin con Visual FoxPro.
Captulo 1. Introduccin a la programacin. Captulo 2. Programar una
aplicacin. Captulo 3. Programacin orientada a objetos. Captulo 4.
Descripcin del modelo de eventos. PARTE 2. Trabajar con datos.
Captulo 5. Disear una base de datos. Captulo 6. Crear bases de
datos. Captulo 7. Trabajar con tablas. Captulo 8. Crear vistas.
PARTE 3. Crear la interfaz. Captulo 9. Crear formularios. Captulo
10. Usar controles. Captulo 11. Disear mens y barras de
herramientas. PARTE 4. Agrupar todos los elementos. Captulo 12.
Agregar consultas e informes. Captulo 13. Compilar una aplicacin.
Captulo 14. Probar y depurar aplicaciones.
2. Captulo 15. Optimizar aplicaciones. PARTE 5. Ampliar
aplicaciones. Captulo 16. Agregar OLE. Captulo 17. Programar para
acceso compartido. Captulo 18. Programar aplicaciones
internacionales. PARTE 6. Crear soluciones cliente-servidor.
Captulo 19. Disear aplicaciones cliente-servidor. Captulo 20.
Upsizing de bases de datos de VisualFoxPro. Captulo 21. Implementar
una aplicacin cliente-servidor. Captulo 22. Optimizar el
rendimiento cliente-servidor. PARTE 7. Crear archivos de Ayuda.
Captulo 23. Crear Ayuda grfica. Captulo 24. Crear Ayuda de tipo
.DBF. PARTE 8. Distribuir aplicaciones. Captulo 25. Generar una
aplicacin para su distribucin. Captulo 26. Crear discos de
distribucin. PARTE 9. Acceso a las bibliotecas API. Captulo 27.
Extender Visual FoxPro con bibliotecas externas. Captulo 28. Acceso
a la API de Visual FoxPro. PARTE 10. Crear soluciones
empresariales. Captulo 29. Programar en equipo. Captulo 30.
Soluciones empresariales de Visual FoxPro. PARTE 11. Lo nuevo en
Visual FoxPro. Captulo 31. Interoperabilidad e Internet. Captulo
32. Programacin de aplicaciones y productividad del programador.
Captulo 33. Mejoras para la programacin.
3. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 1 de 83 file://C:temp~hh52BB.htm 30/05/2000 Manual del
programador, Parte 1: Programacin en Visual FoxPro Visual FoxPro es
una eficaz herramienta de administracin de datos, pero adems podr
beneficiarse de toda su eficacia para crear aplicaciones.
Comprender las tcnicas de programacin orientada a objetos y el
modelo controlado por eventos puede aumentar su productividad como
programador. Captulo 1 Introduccin a la programacin Si est
empezando a programar, aprenda el proceso y el mtodo de programacin
en Visual FoxPro. Captulo 2 Programar una aplicacin Cuando programe
una aplicacin, organice sus componentes con el Administrador de
programas, una forma integrada de generar y probar su aplicacin a
medida que la cree. Captulo 3 Programacin orientada a objetos Con
la programacin orientada a objetos, puede crear componentes de
aplicacin independientes que respondan a acciones del usuario y al
sistema y que se puedan mantener y reutilizar fcilmente. Captulo 4
Descripcin del modelo de eventos El modelo de eventos define cundo
y cmo tienen lugar las interacciones con el usuario y el sistema.
Captulo 1: Introduccin a la programacin En Visual FoxPro funcionan
juntas la programacin por procedimientos y la programacin orientada
a objetos para permitirle crear aplicaciones potentes y flexibles.
Conceptualmente, puede imaginarse que la programacin consiste en
escribir una secuencia de instrucciones con el fin de realizar
tareas especficas. A un nivel estructural, la programacin en Visual
FoxPro precisa la manipulacin de los datos almacenados. Si no tiene
experiencia en programacin, este captulo le ayudar a ponerse en
marcha. Si ya conoce otros lenguajes de programacin y desea
compararlos con Visual FoxPro, vea el tema Visual FoxPro y otros
lenguajes de programacin. Si desea una descripcin de la programacin
orientada a objetos, consulte el captulo 3, Programacin orientada a
objetos.
4. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 2 de 83 file://C:temp~hh52BB.htm 30/05/2000 En este
captulo se abordan los temas siguientes: l Ventajas de la
programacin l La mecnica de la programacin en Visual FoxPro l
Conceptos bsicos de programacin l El proceso de la programacin l
Usar procedimientos y funciones definidos por el usuario l Pasos
siguientes Ventajas de la programacin Normalmente, cualquier funcin
que pueda realizar con un programa podr realizarla tambin a mano,
si dispone de suficiente tiempo. Por ejemplo, si desea consultar
informacin sobre un cliente en una tabla de clientes, como por
ejemplo la empresa Ernst Handel, podra hacerlo manualmente si sigue
una secuencia concreta de instrucciones. Para buscar manualmente un
nico pedido en una tabla 1. En el men Archivo, elija Abrir. 2. En
el cuadro Archivos de tipo, elija Tabla. 3. Haga doble clic en
Customer.dbf en la lista de archivos. 4. En el men Ver, elija
Examinar. 5. Desplcese por la tabla, examinando el campo Company de
los registros hasta encontrar Ernst Handel. Mediante programacin
podra conseguir el mismo resultado escribiendo los siguientes
comandos de Visual FoxPro en la ventana Comandos: USE Customer
LOCATE FOR Company = "Ernst Handel" BROWSE Cuando haya localizado
el pedido de esta empresa, tal vez desee incrementar la cantidad
mxima del pedido en un 3%. Para incrementar manualmente la cantidad
mxima del pedido 1. Presione la tecla Tab para desplazarse hasta el
campo max_ord_amt. 2. Multiplique el valor mostrado en el campo
max_ord_amt por 1,03 y escriba el nuevo valor en el campo. Para
conseguir el mismo resultado mediante programacin, escriba el
siguiente comando de Visual FoxPro en la ventana Comandos:
5. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 3 de 83 file://C:temp~hh52BB.htm 30/05/2000 REPLACE
max_ord_amt WITH max_ord_amt * 1,03 Es relativamente sencillo
cambiar la cantidad mxima del pedido para un cliente, ya sea
manualmente o escribiendo las instrucciones en la ventana Comandos.
Sin embargo, suponga que desea incrementar en un 3% la cantidad
mxima de pedido de todos los clientes. Podra hacerlo manualmente,
pero le llevara mucho tiempo y es posible que cometiese errores. Si
especifica las instrucciones correctas en un archivo de programa,
Visual FoxPro podr realizar esta tarea con rapidez y facilidad, sin
cometer ningn error. Programa de ejemplo para incrementar las
cantidades mximas de pedido de todos los clientes Cdigo Comentarios
USE customer Abre la tabla CUSTOMER. SCAN Examina todos los
registros de la tabla y realiza todas las instrucciones
comprendidas entre SCAN y ENDSCAN para cada registro. REPLACE
max_ord_amt WITH ; max_ord_amt * 1.03 Incrementa la cantidad mxima
de pedido en un 3%. (El punto y coma (;) indica que el comando
sigue en la lnea siguiente). ENDSCAN Final del cdigo que se ejecuta
para cada registro contenido en la tabla. La ejecucin de un
programa ofrece numerosas ventajas en comparacin con la introduccin
de distintos comandos en la ventana Comandos: l Los programas se
pueden modificar y volver a ejecutar. l Se pueden ejecutar
programas desde los mens, formularios y barras de herramientas. l
Los programas pueden ejecutar otros programas. En las siguientes
secciones se describe la mecnica, los conceptos y los procesos que
subyacen a ste y otros programas de Visual FoxPro. La mecnica de la
programacin en Visual FoxPro Puede programar en Visual FoxPro
escribiendo cdigo: instrucciones en forma de comandos, funciones u
operaciones que Visual FoxPro puede entender. Puede incluir estas
instrucciones en: l La ventana Comandos. l Archivos de programa l
Ventanas de cdigo de eventos o de mtodos en el Diseador de
formularios o en el Diseador de clases l Ventanas de cdigo de
procedimientos en el Diseador de mens l Ventanas de cdigo de
procedimientos en el Diseador de informes
6. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 4 de 83 file://C:temp~hh52BB.htm 30/05/2000 Usar la
ventana Comandos Puede ejecutar un comando de Visual FoxPro si lo
escribe en la ventana Comandos y presiona ENTRAR. Para volver a
ejecutar el comando, lleve el cursor a la lnea que contiene el
comando y presione nuevamente ENTRAR. Puede ejecutar varias lneas
de cdigo en la ventana Comandos como si constituyeran un programa.
Para ejecutar varias lneas de cdigo en la ventana Comandos 1.
Seleccione las lneas de cdigo. 2. Presione ENTRAR o elija Ejecutar
seleccin en el men emergente. Como la ventana Comandos es una
ventana de edicin, puede modificar comandos con las herramientas
disponibles en Visual FoxPro. Puede modificar, insertar, eliminar,
cortar, copiar o pegar texto en la ventana Comandos. La ventaja que
supone poder escribir cdigo en la ventana Comandos radica en el
hecho de que las instrucciones se ejecutan de inmediato. No es
necesario guardar un archivo y ejecutarlo como un programa. Adems,
las opciones que elige en los mens y los cuadros de dilogo aparecen
en la ventana Comandos como comandos. Puede copiar y pegar estos
comandos en un programa de Visual FoxPro y a continuacin ejecutar
el programa repetidamente, lo cual facilita la ejecucin de miles de
comandos, una y otra vez. Crear programas Un programa de Visual
FoxPro es un archivo de texto que contiene una serie de comandos.
Puede crear un programa en Visual FoxPro de una de las siguientes
maneras: Para crear un programa 1. En el Administrador de
proyectos, seleccione Programas en la ficha Cdigo. 2. Elija Nuevo.
O bien 1. En el men Archivo, elija Nuevo. 2. En el cuadro de dilogo
Nuevo, seleccione Programa. 3. Elija Nuevo archivo. O bien
7. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 5 de 83 file://C:temp~hh52BB.htm 30/05/2000 l En la
ventana Comandos, escriba: MODIFY COMMAND Visual FoxPro abrir una
nueva ventana denominada Programa1. Podr entonces escribir su
programa en esta ventana. Guardar programas Una vez creado un
programa, asegrese de guardarlo. Para guardar un programa l En el
men Archivo, elija Guardar. Si intenta cerrar un programa sin antes
guardarlo, aparecer un cuadro de dilogo en el que se le preguntar
si desea guardar o descartar los cambios realizados en el mismo. Si
guarda un programa creado a partir del Administrador de proyectos,
el programa se agregar al proyecto. Si guarda un programa al que
todava no ha asignado un nombre, se abrir el cuadro de dilogo
Guardar como, en el que podr especificar el nombre del programa.
Cuando haya guardado el programa, podr ejecutarlo o modificarlo.
Modificar programas Despus de guardar el programa, podr
modificarlo. En primer lugar, abra el programa de una de las
siguientes maneras: Para abrir un programa l Si el programa forma
parte de un proyecto, seleccinelo en el Administrador de proyectos
y elija Modificar. O bien l En el men Archivo, elija Abrir.
Aparecer un cuadro de dilogo en el que se muestra una lista de los
archivos disponibles. En la lista Archivos de tipo, elija Programa.
En la lista de archivos, seleccione el programa que desea modificar
y elija Abrir. O bien l En la ventana Comandos, escriba el nombre
del programa que desea modificar: MODIFY COMMAND miprogram O
bien
8. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 6 de 83 file://C:temp~hh52BB.htm 30/05/2000 l En la
ventana Comandos, escriba: MODIFY COMMAND ? Cuando aparezca la
lista de archivos, seleccione el programa que desea modificar y a
continuacin elija Abrir. Despus de abrir el programa, podr realizar
cambios en el mismo. Cuando haya terminado de introducir los
cambios, asegrese de guardar el programa. Ejecutar programas Despus
de crear un programa, podr ejecutarlo. Para ejecutar un programa l
Si el programa forma parte de un proyecto, seleccinelo en el
Administrador de proyectos y elija Ejecutar. O bien l En el men
Programa, elija Ejecutar. Cuando aparezca la lista de programas,
seleccione el programa que desea ejecutar y a continuacin elija
Ejecutar. O bien l En la ventana Comandos, escriba DO y el nombre
del programa que desea ejecutar: DO miprogram Escribir cdigo en las
herramientas de diseo de Visual FoxPro El Diseador de formularios,
el Diseador de clases y el Diseador de mens le permiten integrar
fcilmente cdigo de programas mediante la interfaz de usuario, de
forma que el cdigo apropiado se ejecute como respuesta a las
acciones del usuario. El Diseador de informes le permite crear
informes complejos y personalizados integrando cdigo en el archivo
del informe. Para aprovechar plenamente la eficacia de Visual
FoxPro, debe utilizar estas herramientas de diseo. Si desea ms
informacin sobre el Diseador de informes, consulte el captulo 7,
Disear informes y etiquetas, del Manual del usuario. Para obtener
informacin ms detallada sobre el Diseador de formularios, consulte
el captulo 3, Programacin orientada a objetos, de este manual. Para
obtener informacin ms detallada sobre el Diseador de formularios,
consulte el captulo 9, Crear formularios, y si desea ms informacin
acerca del Diseador de mens, consulte el captulo 11, Disear mens y
barras de herramientas. Conceptos bsicos de programacin
9. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 7 de 83 file://C:temp~hh52BB.htm 30/05/2000 Cuando se
programa, se almacenan datos y se manipulan mediante una serie de
instrucciones. Los datos y los contenedores en los que se almacenan
los datos constituyen la materia prima de la programacin. Las
herramientas utilizadas para manipular esta materia prima son
comandos, funciones y operadores. Almacenar datos Los datos con los
que trabaja probablemente incluyan perodos de tiempo, dinero y
elementos contables, as como fechas, nombres, descripciones, etc.
Cada dato corresponde a un determinado tipo, es decir, pertenece a
una categora de datos que se manipula de maneras similares. Podra
trabajar directamente con estos datos sin almacenarlos, si bien
perdera la mayor parte de la flexibilidad y potencia que ofrece
Visual FoxPro. Visual FoxPro aporta numerosos contenedores de
almacenamiento con el fin de ampliar su capacidad para manipular
fcilmente los datos. Los tipos de datos determinan la manera en que
se almacenan los datos y la forma en que se pueden utilizar tales
datos. Puede multiplicar dos nmeros, pero no puede multiplicar
caracteres. Puede imprimir caracteres en maysculas, pero no puede
imprimir nmeros en maysculas. En la tabla siguiente se muestran
algunos de los principales tipos de datos de Visual FoxPro. Tipos
de datos Tipo Ejemplos Numeric 123 3,1415 7 Character Prueba 123
01/01/98 Logical .T. (verdadero) .F. (falso) Date DateTime
{^1998-01-01} {^1998-01-01 12:30:00 p} Contenedores de datos Los
contenedores de datos le permiten realizar las mismas operaciones
con varios datos. Por ejemplo, sumar las horas que ha trabajado un
empleado, multiplicarlas por el salario por hora y restar los
impuestos para determinar el sueldo que ha percibido el empleado.
Deber realizar estas operaciones para cada empleado y para cada
perodo de pago. Si almacena esta informacin en contenedores y
realiza las operaciones sobre stos, bastar con sustituir los datos
antiguos por los nuevos datos y volver a ejecutar el mismo
programa. En la siguiente tabla se enumeran algunos de los
principales contenedores de datos disponibles en Visual
FoxPro:
10. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 8 de 83 file://C:temp~hh52BB.htm 30/05/2000 Tipo
Descripcin Variables Elementos individuales de datos almacenados en
la memoria RAM (memoria de acceso aleatorio) del PC. Registros de
tabla Varias filas de campos predeterminados, cada uno de los
cuales puede contener un dato definido previamente. Las tablas se
guardan en disco. Matrices Varios elementos de datos almacenados en
la memoria RAM. Manipular datos Los contenedores y los tipos de
datos le ofrecen los mdulos que necesita para manipular los datos.
Los elementos finales son los operadores, las funciones y los
comandos. Usar operadores Los operadores se utilizan para vincular
los datos. A continuacin se muestran los operadores utilizados
habitualmente en Visual FoxPro. Operador Tipos de datos vlidos
Ejemplo Resultado = Todos ? n = 7 Imprime .T. si el valor
almacenado en la variable es 7; de lo contrario, imprime .F. +
Numeric, Character,Date, DateTime ? "Fox" + "Pro" Imprime FoxPro !
or NOT Logical ? !.T. Imprime .F. (falso) *, / Numeric ? 5 * 5 ? 25
/ 5 Imprime 25 Imprime 5 Nota Un signo de interrogacin (?) situado
delante de una expresin imprime el resultado de la expresin y un
carcter de nueva lnea en la ventana de salida activa, que es
normalmente la ventana principal de Visual FoxPro. Recuerde que
debe utilizar el mismo tipo de datos con cada operador. Las
siguientes instrucciones almacenan dos datos numricos en dos
variables. Los nombres de variable empiezan con la letra n, por lo
que se puede determinar de inmediato que contienen datos numricos,
pero puede nombrarlas con cualquier combinacin de caracteres
alfanumricos y caracteres de subrayado. nPrimero = 123 nSegundo =
45
11. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 9 de 83 file://C:temp~hh52BB.htm 30/05/2000 Las
instrucciones siguientes almacenan dos datos de caracteres en dos
variables. Los nombres de variable empiezan con la letra c para
indicar que contienen datos de tipo character. cPrimero = "123"
cSegundo = "45" Las dos operaciones siguientes, suma y
concatenacin, producen resultados distintos, ya que el tipo de
datos es diferente en cada una de ellas. ? nPrimero + nSegundo ?
cPrimero + cSegundo Resultado 168 12345 Puesto que cPrimero
contiene caracteres y nSegundo contiene datos numricos, se producir
un error de tipo de datos incorrecto si se intenta ejecutar el
siguiente comando: ? cPrimero + nSegundo Puede evitar este problema
si utiliza funciones de conversin. Por ejemplo, STR( ) devuelve el
valor de tipo Character equivalente de un valor de tipo Numeric,
mientras que VAL( ) devuelve el equivalente numrico de una cadena
de caracteres formada por nmeros. Estas funciones y LTRIM( ), que
elimina los espacios iniciales, le permiten realizar las
operaciones siguientes: ? cPrimero + LTRIM(STR(nSegundo)) ?
VAL(cPrimero) + nSegundo Resultado 12345 168 Usar funciones Las
funciones devuelven un tipo especfico de datos. Por ejemplo, las
funciones STR( ) y VAL( ) utilizadas en la seccin anterior
devuelven valores de tipo Character y Numeric, respectivamente. Al
igual que ocurre con todas las funciones, estos tipos devueltos
estn documentados con las funciones. Hay cinco maneras de llamar a
una funcin de Visual FoxPro: l Asignar a una variable el valor que
devuelve la funcin. La siguiente lnea de cdigo almacena la fecha
actual del sistema en una variable denominada dHoy: dHoy = DATE( )
l Incluir la llamada a la funcin en un comando de Visual FoxPro. El
siguiente comando establece el directorio predeterminado como el
valor devuelto por la funcin GETDIR( ):
12. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 10 de 83 file://C:temp~hh52BB.htm 30/05/2000 CD
GETDIR( ) l Imprimir el valor devuelto en la ventana de salida
activa. La siguiente lnea de cdigo imprime la hora actual del
sistema en la ventana principal de Visual FoxPro: ? TIME( ) l
Llamar a la funcin sin almacenar en ningn lugar el valor devuelto.
La siguiente llamada de funcin desactiva el cursor: SYS(2002) l
Incluir la funcin dentro de otra funcin. La siguiente lnea de cdigo
imprime el da de la semana: ? DOW(DATE( )) A continuacin se
enumeran otros ejemplos de funciones utilizados en este captulo:
Funcin Descripcin ISDIGIT( ) Devuelve el valor verdadero (.T.) si
el carcter situado al comienzo de una cadena es un nmero; de lo
contrario, devuelve el valor falso (.F.). FIELD( ) Devuelve el
nombre de un campo. LEN( ) Devuelve el nmero de caracteres de una
expresin de caracteres. RECCOUNT( ) Devuelve el nmero de registros
de la tabla que est activa en este momento. SUBSTR( ) Devuelve el
nmero especificado de caracteres a partir de una cadena de
caracteres, empezando en una posicin especificada de la cadena.
Usar comandos Un comando hace que se realice una determinada accin.
Cada comando dispone de una sintaxis especfica que indica lo que se
debe incluir con el fin de que se ejecute correctamente el comando.
Hay tambin clusulas opcionales asociadas a los comandos que
permiten especificar de forma ms detallada la accin que se desea
realizar. Por ejemplo, el comando USE permite abrir y cerrar
tablas: Sintaxis de USE Descripcin USE Cierra la tabla que aparece
en el rea de trabajo actual. USE customer Abre la tabla CUSTOMER en
el rea de trabajo actual y cierra cualquier tabla que ya est
abierta
13. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 11 de 83 file://C:temp~hh52BB.htm 30/05/2000 en el rea
de trabajo. USE customer IN 0 Abre la tabla CUSTOMER en la
siguiente rea de trabajo disponible. USE customer IN 0 ; ALIAS
miCliente Abre la tabla CUSTOMER en la siguiente rea de trabajo
disponible y asigna al rea de trabajo el alias miCliente. A
continuacin se muestran algunos ejemplos de comandos utilizados en
este captulo: Comando Descripcin DELETE Selecciona registros
especificados de una tabla para su eliminacin. REPLACE Sustituye el
valor almacenado en el campo del registro por un nuevo valor. Go
Coloca el puntero de registro en una posicin especfica de la tabla.
Control del flujo del programa Visual FoxPro incluye una categora
especial de comandos que "envuelven" a otros comandos y funciones,
y determinan cundo y con qu frecuencia se ejecutan. Estos comandos
permiten realizar bifurcaciones condicionales y bucles, dos
herramientas de programacin muy eficaces. El siguiente programa
muestra el uso de las bifurcaciones y los bucles condicionales.
Estos conceptos se describen de forma ms detallada despus del
ejemplo. Suponga que su empresa cuenta con 10.000 empleados y desea
conceder a todos aqullos que ganan 3.000.000 de pesetas o ms un
aumento salarial del 3%, y a todos los que ganan menos de 3.000.000
de pesetas un aumento del 6%. El siguiente ejemplo de programa le
permite hacerlo. Este programa presupone que en el rea de trabajo
actual est abierta una tabla que contiene un campo numrico
denominado salario. Si desea obtener informacin sobre las reas de
trabajo, consulte "Usar mltiples tablas" en el captulo 7, Trabajar
con tablas.. Programa de ejemplo para aumentar el salario de los
empleados Cdigo Observaciones SCAN El cdigo comprendido entre SCAN
y ENDSCAN se ejecuta tantas veces como registros haya en la tabla.
Cada vez que se ejecuta el cdigo, el puntero de registro se
desplaza al siguiente registro de la tabla. IF salario >=
3000000 REPLACE salary WITH ; salario * 1,03 Para cada registro, si
el salario es mayor o igual que 3.000.000, este valor se sustituye
por un nuevo salario que es un 3% superior.
14. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 12 de 83 file://C:temp~hh52BB.htm 30/05/2000 El signo
de punto y coma (;) que aparece despus de WITH indica que el
comando contina en la siguiente lnea. ELSE REPLACE salario WITH ;
salario * 1,06 Para cada registro, si el salario no es mayor o
igual que 3.000.000, se sustituye este valor por un nuevo salario
que es un 6% superior. ENDIF ENDSCAN Final de la instruccin
condicional IF. Final del cdigo que se ejecuta para cada registro
de la tabla. Este ejemplo utiliza comandos de bifurcacin y bucle
condicional para controlar el desarrollo del programa. Bifurcacin
condicional La bifurcacin condicional permite someter a prueba
condiciones y, a continuacin, en funcin del resultado de la prueba,
realizar distintas operaciones. Visual FoxPro ofrece dos comandos
que permiten realizar una bifurcacin condicional: l IF ... ELSE ...
ENDIF l DO CASE ... ENDCASE El cdigo comprendido entre la
instruccin inicial y la instruccin ENDIF o ENDCASE slo se ejecuta
si una condicin lgica se evala como verdadera (.T.). En el programa
de ejemplo, el comando IF se utiliza para distinguir entre dos
estados: o el salario es de 3.000.000 pesetas o ms, o no lo es. Se
adoptan diferentes medidas, dependiendo del estado. En el siguiente
ejemplo, si el valor almacenado en la variable nTempAgua es menor
que 100, no se realizar ninguna accin: * definir una variable lgica
como Verdadera si se cumple una condicin. IF nTempAgua >= 100
lEbullicin = .T. ENDIF Nota Un asterisco al principio de una lnea
de un programa indica que la lnea es un comentario. Los comentarios
ayudan al programador a recordar la funcin que debe realizar cada
segmento de cdigo, si bien Visual FoxPro los pasa por alto. Si se
desea comprobar varias condiciones posibles, un bloque DO CASE ...
ENDCASE puede resultar ms eficaz que varias instrucciones IF y
adems es ms fcil realizar un seguimiento del mismo. Bucles Un bucle
le permite ejecutar una o ms lneas de cdigo tantas veces como sea
necesario. En Visual
15. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 13 de 83 file://C:temp~hh52BB.htm 30/05/2000 FoxPro
hay tres comandos que permiten realizar bucles: l SCAN ... ENDSCAN
l FOR ... ENDFOR l DO WHILE ... ENDDO Utilice SCAN cuando realice
una serie de acciones para cada uno de los registros de una tabla,
como en el ejemplo de programa descrito anteriormente. El bucle
SCAN permite escribir el cdigo una vez y ejecutarlo para cada
registro a medida que el puntero de registro se desplaza por la
tabla. Utilice FOR cuando sepa cuntas veces debe ejecutarse la
seccin de cdigo. Por ejemplo, sabe que una tabla contiene un nmero
especfico de campos. Puesto que la funcin FCOUNT( ) de Visual
FoxPro devuelve este nmero, puede utilizar un bucle FOR para
imprimir los nombres de todos los campos de la tabla: FOR nRecuento
= 1 TO FCOUNT( ) ? FIELD(nRecuento) ENDFOR Utilice DO WHILE cuando
desee ejecutar una seccin de cdigo mientras cumpla una determinada
condicin. Tal vez no sepa cuntas veces debe ejecutarse el cdigo,
pero s sabe cundo debe detenerse la ejecucin. Por ejemplo,
supongamos que dispone de una tabla en la que figuran los nombres y
las iniciales de una serie de personas y desea utilizar las
iniciales para consultar los nombres de las personas. Surgira un
problema la primera vez que intentase agregar una persona cuyas
iniciales fuesen las mismas que las de otra persona contenida en la
tabla. Para resolver este problema, podra agregar un nmero a las
iniciales. Por ejemplo, el cdigo de identificacin de Miguel Surez
podra ser MS. La siguiente persona cuyas iniciales fuesen las
mismas, Margarita Snchez, sera MS1. Si a continuacin anexase Mara
Sanz a la tabla, su cdigo de identificacin sera MS2. Un bucle DO
WHILE permite localizar el nmero correcto que se debe adjuntar a
las iniciales. Programa de ejemplo que utiliza DO WHILE para
generar un nmero de identificacin nico Cdigo Comentarios nAqu =
RECNO() Guardar la posicin del registro. cIniciales =
LEFT(nombre,1) + ; LEFT(apellido,1) nSufijo = 0 Obtener las
iniciales de la persona a partir de las primeras letras de los
campos nombre y apellido. Si es necesario, establecer una variable
que contenga el nmero que se debe agregar al final de las iniciales
de una persona. LOCATE FOR id_persona = cIniciales Comprobar si hay
otra persona en la tabla cuyas iniciales son las mismas. DO WHILE
FOUND( ) Si en otro registro de la tabla hay un valor id_persona
que coincide con cIniciales, la
16. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 14 de 83 file://C:temp~hh52BB.htm 30/05/2000 funcin
FOUND( ) devolver el valor verdadero (.T.) y se ejecutar el cdigo
contenido en el bucle DO WHILE. Si no se encuentra ninguna
coincidencia, la siguiente lnea de cdigo que se ejecute ser la lnea
que figura a continuacin de ENDDO. nSufijo = nSufijo + 1 cIniciales
= ; LEFT(cIniciales,2); + ALLTRIM(STR(nSufijo)) Preparar un sufijo
nuevo y anexarlo al final de las iniciales. CONTINUE CONTINUE hace
que se vuelva a evaluar el ltimo comando LOCATE. El programa
comprueba si el nuevo valor contenido en cIniciales ya existe en el
campo id_persona de otro registro. Si es as, FOUND( ) seguir
devolviendo el valor .T. y se volver a ejecutar el cdigo contenido
en el bucle DO WHILE. Si el nuevo valor contenido en cIniciales es
efectivamente nico, FOUND( ) devolver el valor .F. y la ejecucin
del programa continuar con la lnea de cdigo que figura a
continuacin de ENDDO. ENDDO Final del bucle DO WHILE. GOTO nAqu
REPLACE id_persona WITH cIniciales Volver al registro y almacenar
el cdigo de identificacin nico en el campo id_persona. Puesto que
no hay manera de saber de antemano cuntas veces se encontrarn los
cdigos de identificacin coincidentes que ya se estn utilizando, se
utiliza el bucle DO WHILE. El proceso de la programacin Cuando
entienda los conceptos bsicos, la programacin ser un proceso
reiterativo. Los pasos se repiten numerosas veces, perfeccionndose
el cdigo a medida que se avanza. Al principio, someter el cdigo a
prueba frecuentemente mediante un sistema de prueba y tanteo.
Cuanto ms conozca el lenguaje, mayor ser la rapidez con que pueda
programar y podr realizar ms pruebas preliminares mentalmente.
Entre los pasos bsicos de la programacin cabe citar los siguientes:
l Definir el problema. l Desglosar el problema en elementos
discretos. l Construir los elementos. l Comprobar y perfeccionar
los elementos. l Ensamblar los elementos.
17. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 15 de 83 file://C:temp~hh52BB.htm 30/05/2000 l
Comprobar el programa en su conjunto. A continuacin se enumeran
algunos aspectos que debe tener presentes al empezar a programar: l
Defina claramente el problema antes de intentar resolverlo. Si no
lo hace, acabar por realizar numerosos cambios, desechar cdigo,
tendr que empezar de nuevo o bien terminar con un resultado que no
es realmente lo que deseaba. l Desglose el problema en pasos
manejables, en lugar de intentar resolver todo el problema de una
sola vez. l Pruebe y depure secciones de cdigo a medida que
desarrolla el programa. Compruebe que el cdigo hace lo que quiere
que haga. La depuracin es el proceso de encontrar y solucionar
problemas que impiden que el cdigo se ejecute correctamente. l
Perfeccione los datos y el almacenamiento de datos para facilitar
la manipulacin de estos datos a travs del cdigo del programa. Esto
suele implicar estructurar las tablas de forma adecuada. En el
resto de esta seccin se describen los pasos que debe seguir para
construir un pequeo programa Visual FoxPro. Definir el problema
Antes de poder resolver un problema, debe formularlo claramente.
Algunas veces, si ajusta la formulacin del problema podr ver ms
opciones para resolverlo. Suponga que obtiene muchos datos de
distintos orgenes. Si bien la mayora de los datos son estrictamente
numricos, algunos valores contienen guiones y espacios en blanco
adems de nmeros. Suponga que quiere eliminar todos los espacios en
blanco y los guiones de dichos campos y guardar los datos numricos.
En lugar de intentar eliminar los espacios en blanco y los guiones
de los datos originales, podra formular el objetivo del programa
como: Objetivo Reemplazar los valores existentes de un campo por
otros valores que contengan todo lo que contenan los valores
originales, excepto los espacios en blanco y los guiones. Esta
formulacin evita la dificultad que supone manipular una cadena de
caracteres cuya longitud sigue cambiando a medida que trabaja con
ella. Descomponer el problema Puesto que tiene que indicar
instrucciones especficas a Visual FoxPro en trminos de operaciones,
comandos y funciones, debe descomponer el problema en pasos
discretos. La tarea ms discreta para este problema sera examinar
cada carcter de la cadena. Hasta que pueda examinar un carcter
individualmente, no podr determinar si desea guardarlo. Una vez que
examine un carcter, deber comprobar si se trata de un guin o de un
espacio en blanco. En este momento, quiz desee refinar la
declaracin del problema. Y si obtuviera ms adelante datos que
contienen parntesis de apertura y de cierre? Y si desea deshacerse
de los smbolos de moneda, las comas y los puntos? Cuanto ms genrico
pueda hacer el cdigo, ms
18. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 16 de 83 file://C:temp~hh52BB.htm 30/05/2000 trabajo
se ahorrar de ahora en adelante; lo principal es ahorrar trabajo.
He aqu una formulacin del problema vlida para una variedad mucho
mayor de datos: Objetivo refinado Reemplazar los valores existentes
en un campo por otros valores que contengan nicamente los
caracteres numricos de los valores originales. Con esta formulacin,
ahora puede volver a plantear el problema a nivel de carcter: si el
carcter es numrico, guardar el carcter; si el carcter es no
numrico, pasar al siguiente carcter. Cuando haya construido una
cadena que slo contenga los elementos numricos de la cadena
inicial, podr reemplazar la primera cadena y pasar al siguiente
registro hasta que haya terminado con todos los datos. Para
resumir, el problema se descompone en los siguientes elementos: 1.
Examinar cada carcter. 2. Decidir si el carcter es numrico o no. 3.
Si es numrico, copiarlo a la segunda cadena. 4. Cuando haya
terminado con todos los caracteres de la cadena original,
reemplazar la cadena original con la cadena que slo contiene
valores numricos. 5. Repetir estos pasos para todos los registros
de la tabla. Construir los elementos Cuando sepa qu debe hacer,
puede empezar a formular los elementos en trminos de comandos,
funciones y operadores de Visual FoxPro. Como los comandos y
funciones se usan para manipular datos, tiene algunos datos de
prueba para trabajar con ellos. Los datos de prueba sirven para
simular los datos verdaderos lo mejor posible. Para este ejemplo
puede almacenar en una variable una cadena de prueba introduciendo
el siguiente comando en la ventana Comandos: cTest = "123-456-7 89
0" Examinar cada carcter En primer lugar desea buscar un nico
carcter en la cadena. Para obtener una lista de funciones que se
pueden utilizar para manipular cadenas, vea Funciones de carcter.
Ver tres funciones que devuelven determinadas secciones de una
cadena: LEFT( ), RIGHT( ) y SUBSTR( ). De estas tres funciones,
SUBSTR( ) devuelve caracteres de cualquier parte de la cadena.
SUBSTR( ) usa tres argumentos o parmetros: la cadena, la ubicacin
inicial dentro de la cadena y el nmero de caracteres que se deben
devolver de la cadena, empezando por la ubicacin inicial. Para
comprobar si SUBSTR( ) va a hacer lo que usted quiere, podra
escribir los siguientes comandos en la
19. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 17 de 83 file://C:temp~hh52BB.htm 30/05/2000 ventana
Comandos: ? SUBSTR(cTest, 1, 1) ? SUBSTR(cTest, 3, 1) ?
SUBSTR(cTest, 8, 1) Resultado 1 3 - Puede ver que en la ventana
principal de Visual FoxPro se muestran el primer, el tercer y el
octavo caracteres de la cadena de prueba. Para hacer eso mismo
varias veces, utilice un bucle. Puesto que la cadena de prueba
tiene un nmero determinado de caracteres (14), puede utilizar un
bucle FOR. El contador del bucle FOR se incrementa cada vez que se
ejecuta el cdigo del bucle, por lo que puede utilizar el contador
de la funcin SUBSTR( ). Puesto que en la ventana Comandos no puede
comprobar las construcciones de bucles, deber probar la siguiente
seccin de cdigo en un programa de ejemplo. Para crear un programa
nuevo 1. Escriba el siguiente comando en la ventana Comandos:
MODIFY COMMAND numonly 2. En la ventana que aparecer, escriba las
siguientes lneas de cdigo: FOR nCnt = 1 TO 14 ? SUBSTR(cTest, nCnt,
1) ENDFOR Ahora que ha creado un programa, ya puede ejecutarlo.
Para ejecutar un programa 1. En la ventana del programa abierto,
presione CTRL+E. 2. Si aparece un cuadro de dilogo Guardar, elija
Aceptar. Cuando ejecute este programa, los caracteres individuales
de la cadena de prueba se imprimirn en lneas distintas en la
ventana principal de Visual FoxPro. Comprobar parte del
programa
20. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 18 de 83 file://C:temp~hh52BB.htm 30/05/2000 Ya ha
completado la primera tarea. Ahora puede examinar cada carcter de
la cadena. Decidir si el carcter es numrico Cuando tenga un nico
carcter de la cadena, debe saber si se trata de un nmero. Puede
hacerlo con ISDIGIT( ). Puede probar los siguientes comandos en la
ventana Comandos: ? ISDIGIT('2') ? ISDIGIT('-') ?
ISDIGIT(SUBSTR(cTest, 3, 1)) Resultado .T. .F. .T. De este
resultado se desprende que 2 es un nmero, no es un nmero y el
tercer carcter, 3, es un nmero. Si el carcter es numrico, copiarlo
a la segunda cadena Ahora que puede examinar los caracteres y
determinar si son o no numricos, necesita una variable
21. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 19 de 83 file://C:temp~hh52BB.htm 30/05/2000 para
almacenar los valores numricos: cNumOnly. Para crear la variable,
debe asignarle un valor inicial, una cadena de longitud cero:
cNumOnly = "" A medida que el bucle FOR recorre la cadena, es
conveniente crear otra variable para almacenar temporalmente cada
carcter de la cadena a medida que sta se manipula: cCharacter =
SUBSTR(cTest, nCnt, 1) Sugerencia Normalmente es mejor almacenar en
una variable de memoria el resultado de un clculo, evaluacin o
funcin. Entonces puede manipular la variable en lugar de tener que
repetir el clculo o la evaluacin. La siguiente lnea de cdigo puede
utilizarse cada vez que se encuentra un nmero para sumar el nmero a
la segunda cadena: cNumOnly = cNumOnly + cCharacter Hasta ahora, el
programa es el siguiente: cNumOnly = "" FOR nCnt = 1 TO 14
cCharacter = SUBSTR(cTest, nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly
= cNumOnly + cCharacter ENDIF ENDFOR Prueba de los elementos Si
agrega un par de comandos al final para imprimir las cadenas y
ejecutar el programa, podr ver que el programa funciona con la
cadena de prueba: cNumOnly = "" FOR nCnt = 1 TO 14 cCharacter =
SUBSTR(cTest, nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly = cNumOnly +
cCharacter ENDIF ENDFOR ? cTest ? cNumOnly Resultado 123-456-7 89 0
1234567890 El resultado parece correcto. Pero si cambia la cadena
de prueba mientras comprueba los elementos, puede tener problemas.
Escriba el siguiente comando en la ventana Comandos y ejecute de
nuevo el programa:
22. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 20 de 83 file://C:temp~hh52BB.htm 30/05/2000 cTest =
"456-789 22" El programa generar un mensaje de error. El bucle FOR
ha intentado ejecutarse 14 veces, pero en la cadena slo haba 10
caracteres. Necesita una forma de ajustar las longitudes variables
de las cadenas. Use LEN( ) para devolver el nmero de caracteres de
una cadena. Si sustituye este comando en el bucle FOR, ver que el
programa funciona correctamente con ambas cadenas de prueba:
cNumOnly = "" FOR nCnt = 1 TO LEN(cTest) cCharacter = SUBSTR(cTest,
nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly = cNumOnly + cCharacter
ENDIF ENDFOR ? cTest ? cNumOnly Agrupar los elementos Para
completar la solucin de programacin para este problema, quiz desee
volver a leer sus datos de una tabla. Cuando tenga una tabla,
explore los registros y aplique su cdigo de programa a un campo de
la tabla, en lugar de a una variable. En primer lugar, podra crear
una tabla temporal que contuviera diversas cadenas de prueba. Dicha
tabla podra contener un nico campo de caracteres llamado Testfield
y cuatro o cinco registros: Contenido de Testfield 123-456-7 89 0
-9221 9220 94321 99- 456-789 22 000001 98-99-234 Cuando sustituya
el nombre de la cadena de prueba por el nombre del campo, el
programa ser similar al siguiente: FOR nCnt = 1 TO LEN(TestField)
cCharacter = SUBSTR(TestField, nCnt, 1) IF ISDIGIT(cCharacter)
cNumOnly = cNumOnly + cCharacter ENDIF ENDFOR ? TestField ?
cNumOnly Puede ajustar manualmente el puntero de registro si
examina la tabla y se desplaza por ella. Cuando el puntero de
registro est en cada uno de los registros, el programa funcionar de
la forma deseada. O bien, ahora puede envolver el cdigo de
desplazamiento por la tabla en el resto de su programa: SCAN
cNumOnly = "" FOR nCnt = 1 TO LEN(TestField) cCharacter =
SUBSTR(TestField, nCnt, 1) IF ISDIGIT(cCharacter)
23. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 21 de 83 file://C:temp~hh52BB.htm 30/05/2000 cNumOnly
= cNumOnly + cCharacter ENDIF ENDFOR ? TestField ? cNumOnly ?
ENDSCAN Resultado 123-456-7 89 0 1234567890 456-789 22 45678922
-9221 9220 94321 99- 922192209432199 000001 98-99-234 0000019899234
Comprobar todo el programa En lugar de imprimir la cadena al final
del programa, quiz desee guardarla en la tabla. Para ello, utilice
la siguiente lnea de cdigo: REPLACE TestField WITH cNumOnly El
programa completo ser el siguiente: SCAN cNumOnly = "" FOR nCnt = 1
TO LEN(TestField) cCharacter = SUBSTR(TestField, nCnt, 1) IF
ISDIGIT(cCharacter) cNumOnly = cNumOnly + cCharacter ENDIF ENDFOR
REPLACE TestField WITH cNumOnly ENDSCAN Cuando tenga el programa
completo, necesitar probarlo con los datos de ejemplo antes de
probarlo con los datos reales. Aumentar la robustez del programa Un
programa robusto hace lo que usted quiere que haga, pero tambin se
anticipa a posibles problemas y se encarga de ellos. Este programa
hace lo que usted quiere, pero hace algunas suposiciones que deben
ser verdaderas para que funcione: l Hay una tabla abierta en el rea
de trabajo actual. l La tabla tiene un campo de caracteres llamado
TestField. Si la tabla no est abierta en el rea de trabajo actual o
si la tabla no tiene un campo de caracteres con
24. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 22 de 83 file://C:temp~hh52BB.htm 30/05/2000 el nombre
esperado, el programa generar un mensaje de error y no realizar la
tarea prevista. Programa para eliminar los caracteres no numricos
de todos los registros de un campo Cdigo Comentarios lFieldOK = .F.
Esta variable determina si existen las condiciones necesarias para
que el programa funcione. Inicialmente se establece la variable
como falsa (.F.) para suponer que las condiciones necesarias no
existen. FOR nCnt = 1 TO FCOUNT( ) IF FIELD(nCnt) = ;
UPPER("TestField") IF TYPE("TestField") = "C" lFieldOK = .T. ENDIF
EXIT ENDIF ENDFOR Esta seccin de cdigo recorre todos los campos de
la tabla actual hasta que encuentra un campo de caracteres llamado
TestField. En cuanto se encuentra el campo correcto, lFieldOK se
establece como verdadera (.T.) y EXIT finaliza el bucle (no hay
ninguna razn para continuar con la comprobacin una vez identificado
el campo correcto). Si ningn campo cumple el criterio, lFieldOK
seguir siendo falso (.F.). IF lFieldOK La seccin de conversin del
programa slo se ejecuta si en la tabla activa actualmente hay un
campo de caracteres llamado TestField. SCAN cNumOnly = "" FOR nCnt
= 1 TO LEN(TestField) cCharacter = ; SUBSTR(TestField, nCnt, 1) IF
ISDIGIT(cCharacter) cNumOnly = cNumOnly + ; cCharacter ENDIF ENDFOR
El cdigo de conversin. REPLACE TestField WITH ; cNumOnly ENDSCAN
ENDIF Fin de la condicin IF lFieldOK. La mayor limitacin de este
programa es que slo puede utilizarlo para un campo. Si desea
eliminar los caracteres no numricos de un campo distinto de
TestField, tendr que recorrer el programa y cambiar cada aparicin
de TestField por el nombre del otro campo. Convertir el programa a
un procedimiento, segn se explica en las prximas secciones, permite
hacer que el cdigo que ha escrito sea ms genrico y ms reutilizable,
con lo que ahorrar trabajo ms adelante.
25. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 23 de 83 file://C:temp~hh52BB.htm 30/05/2000 Usar
procedimientos y funciones definidas por el usuario Los
procedimientos y funciones permiten mantener en un nico lugar el
cdigo que utiliza con frecuencia y llamarlo a travs de su aplicacin
siempre que lo necesite. Esto hace que su cdigo sea ms fcil de leer
y mantener, ya que en un procedimiento el cambio se realiza una
sola vez, no varias veces como ocurre en un programa. En Visual
FoxPro, los procedimientos son similares a ste: PROCEDURE miproc *
Esto es un comentario, pero podra ser cdigo ejecutable ENDPROC
Tradicionalmente, los procedimientos contienen cdigo que usted
escribe para realizar una operacin y funciones que calculan y
devuelven un valor. En Visual FoxPro, las funciones son similares a
los procedimientos: FUNCTION mifuncin * Esto es un comentario, pero
podra ser cdigo ejecutable ENDFUNC Puede incluir procedimientos y
funciones en un archivo de programa distinto o al final de un
archivo de programa que contenga cdigo normal de programa. En un
archivo de programa no puede tener cdigo ejecutable de programa a
continuacin de los procedimientos y las funciones. Si incluye sus
procedimientos y funciones en un archivo de programa distinto, podr
hacer accesibles estos procedimientos y funciones desde su programa
si utiliza el comando SET PROCEDURE TO. Por ejemplo, para un
archivo llamado FUNPROC.PRG, utilice el siguiente comando en la
ventana Comandos: SET PROCEDURE TO funproc.prg Llamar a un
procedimiento o a una funcin Hay dos formas de llamar a un
procedimiento o a una funcin en sus programas: l Utilizar el
comando DO. Por ejemplo: DO miproc O bien l Incluir detrs del
nombre de la funcin un par de parntesis. Por ejemplo: mifuncin( )
Cada uno de estos mtodos puede ampliarse enviando o recibiendo
valores desde el procedimiento o la funcin.
26. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 24 de 83 file://C:temp~hh52BB.htm 30/05/2000 Enviar
valores a un procedimiento o a una funcin Para enviar valores a
procedimientos o funciones se incluyen parmetros. Por ejemplo, el
procedimiento siguiente acepta un solo parmetro: PROCEDURE miproc(
cString ) * La lnea siguiente muestra un mensaje MESSAGEBOX
("miproc" + cString) ENDPROC Nota Incluir los parmetros dentro de
los parntesis en la lnea de definicin de un procedimiento o una
funcin, por ejemplo PROCEDURE miproc(cString), indica que el
parmetro tiene alcance local al procedimiento o la funcin. Tambin
puede permitir que una funcin o un procedimiento acepte parmetros
de alcance local mediante LPARAMETERS. Los parmetros funcionan de
manera idntica en una funcin. Para enviar un valor como un parmetro
de este procedimiento o a una funcin, podra utilizar una cadena o
una variable que contuviera una cadena, como se muestra en la tabla
siguiente. Transferencia de parmetros Cdigo Comentarios DO miproc
WITH cTestString DO miproc WITH "cadena de prueba" Llama a un
procedimiento y transfiere una variable de caracteres o un literal
de cadena. mifuncin("cadena de prueba") mifuncin( cTestString )
Llama a una funcin y transfiere una copia de una cadena literal o
una variable de caracteres. Nota Si llama un procedimiento o funcin
sin usar el comando DO, la configuracin de UDFPARMS controla cmo se
transfieren los parmetros. De forma predeterminada, UDFPARMS se
establece como VALUE, por lo que se transferirn copias de los
parmetros. Cuando utilice DO, se emplear el parmetro real (el
parmetro se transfiere por referencia) y cualquier cambio realizado
en el procedimiento o en la funcin se reflejarn en los datos
originales, cualquiera que sea la configuracin de UDFPARMS. Puede
enviar mltiples valores a un procedimiento o funcin si los separa
mediante comas. Por ejemplo, el siguiente procedimiento espera tres
parmetros: una fecha, una cadena de caracteres y un nmero.
PROCEDURE miproc( dDate, cString, nTimesToPrint ) FOR nCnt = 1 to
nTimesToPrint ? DTOC(dDate) + " " + cString + " " + STR(nCnt)
ENDFOR ENDPROC Podra llamar a este procedimiento mediante la
siguiente lnea de cdigo: DO miproc WITH DATE(), "Hola", 10
27. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 25 de 83 file://C:temp~hh52BB.htm 30/05/2000 Recibir
valores desde una funcin El valor devuelto de forma predeterminada
es verdadero (.T.), pero puede utilizar el comando RETURN para
devolver cualquier valor. Por ejemplo, la siguiente funcin devuelve
una fecha correspondiente a dos semanas despus de la fecha que se
ha pasado como parmetro. FUNCTION plus2weeks PARAMETERS dDate
RETURN dDate + 14 ENDFUNC La siguiente lnea de cdigo almacena el
valor devuelto desde esta funcin en una variable: dDeadLine =
plus2weeks(DATE()) En la tabla siguiente se muestran las formas en
que puede almacenar o mostrar valores devueltos por una funcin.
Manipular valores devueltos Cdigo Comentarios var = mifuncin( )
Almacena en una variable el valor devuelto por la funcin. ?
mifuncin( ) Imprime en la ventana activa de salida el valor
devuelto por la funcin. Comprobar parmetros en un procedimiento o
en una funcin Es conveniente comprobar que los parmetros enviados a
su procedimiento o a su funcin son los que espera recibir. Puede
utilizar las funciones TYPE( ) y PARAMETERS( ) para comprobar el
tipo y el nmero de parmetros enviados a su procedimiento o a su
funcin. El ejemplo de la seccin anterior necesita recibir un
parmetro de tipo Fecha. Puede utilizar la funcin TYPE( ) para
asegurarse de que el valor que su funcin recibe es del tipo
adecuado. FUNCTION plus2weeks( dDate ) IF TYPE("dDate") = "D"
RETURN dDate + 14 ELSE MESSAGEBOX( "requiere un parmetro de tipo
Fecha" ) RETURN {} && Devuelve una fecha vaca ENDIF ENDFUNC
Si un procedimiento espera menos parmetros de los que recibe,
Visual FoxPro generar un mensaje de error. Por ejemplo, si
especific dos parmetros pero llam al procedimiento con tres
parmetros, obtendr un mensaje de error. Pero si un procedimiento
espera ms parmetros de los que recibe, los parmetros adicionales
simplemente se inicializarn como falso (.F.). Puesto que no hay
ninguna forma de decir si el ltimo parmetro se estableci como falso
(.F.) o se omiti, el siguiente
28. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 26 de 83 file://C:temp~hh52BB.htm 30/05/2000
procedimiento comprueba que se ha enviado el nmero correcto de
parmetros: PROCEDURE SaveValue( cStoreTo, cNewVal, lIsInTable ) IF
PARAMETERS( ) < 3 MESSAGEBOX( "No se han pasado suficientes
parmetros". ) RETURN .F. ENDIF IF lIsInTable REPLACE (cStoreTo)
WITH (cNewVal) ELSE &cStoreTo = cNewVal ENDIF RETURN .T.
ENDPROC Convertir el programa NUMONLY en una funcin NUMONLY.PRG, el
programa de ejemplo descrito en la seccin El proceso de la
programacin, puede hacerse ms robusto y til si crea una funcin para
la parte del programa que elimina los caracteres no numricos de una
cadena. Procedimiento de ejemplo para devolver caracteres numricos
de una cadena Cdigo Comentarios FUNCTION NumbersOnly( cMixedVal )
Principio de la funcin, que acepta una cadena de caracteres.
cNumOnly = "" FOR nCnt = 1 TO LEN(cMixedVal) cCharacter = ;
SUBSTR(cMixedVal, nCnt, 1) IF ISDIGIT(cCharacter) cNumOnly = ;
cNumOnly + cCharacter ENDIF ENDFOR Crea una cadena que slo tiene
los caracteres numricos de la cadena original. RETURN cNumOnly
Devuelve la cadena que slo tiene caracteres numricos. ENDFUNC Fin
de la funcin. Adems de permitirle utilizar este cdigo en mltiples
situaciones, esta funcin mejora la legibilidad del programa: SCAN
REPLACE FieldName WITH NumbersOnly(FieldName) ENDSCAN O, ms
sencillo an: REPLACE ALL FieldName WITH NumbersOnly(FieldName)
29. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 27 de 83 file://C:temp~hh52BB.htm 30/05/2000 Cmo
avanzar La programacin por procedimientos, junto con la programacin
orientada a objetos y las herramientas de diseo de Visual FoxPro,
pueden ayudarle a programar una verstil aplicacin de Visual FoxPro.
El resto de este manual explica temas con los que se encontrar a
medida que programe aplicaciones de Visual FoxPro. Para obtener ms
informacin acerca de la programacin orientada a objetos, consulte
el captulo 3, Programacin orientada a objetos. Para aprender a
disear formularios con el Diseador de formularios, consulte el
captulo 9,Crear formularios. Captulo 2: Programar una aplicacin Una
aplicacin de Visual FoxPro incluye normalmente una o ms bases de
datos, un programa principal que configura el entorno del sistema
para la aplicacin y una interfaz de usuario compuesta por
formularios, barras de herramientas y mens. Las consultas y los
informes permiten que los usuarios extraigan informacin de sus
datos. Este captulo trata los temas siguientes: l Disear la
aplicacin l Crear bases de datos l Crear clases l Proporcionar
acceso a la funcionalidad l Proporcionar acceso a la informacin l
Pruebas y depuracin l Para obtener informacin acerca de la
programacin de aplicaciones con el Generador de aplicaciones y el
Marco de aplicaciones mejorado, vea Programar aplicaciones con el
Marco de aplicaciones. Disear la aplicacin Un diseo apropiado
ahorra tiempo, esfuerzo, dinero y permite mantener la cordura al
programar. Cuanto ms implique a los usuarios en el proceso de
diseo, mejor. No importa lo cuidadosamente que se disee; aun as,
acabar refinando las especificaciones a medida que avance el
proyecto y los usuarios le proporcionen informacin adicional.
Algunas de las decisiones de diseo que tome afectarn a la forma en
que crear elementos de la aplicacin. Quin utilizar la aplicacin?
Cul es el centro de actividad del usuario? Con qu cantidad de datos
se supone que se trabajar? Se utilizarn servidores de datos de
apoyo o los datos sern exclusivamente locales para un nico usuario
o para mltiples usuarios a travs de una red? Considere estos
factores antes de avanzar demasiado en el proyecto. Actividades
frecuentes de usuario
30. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 28 de 83 file://C:temp~hh52BB.htm 30/05/2000 Incluso
si sus usuarios finales trabajan con clientes, pedidos y piezas, lo
que determinar la forma en que la aplicacin deber tratar los datos
es el modo en que los usuarios trabajan con esa informacin. Un
formulario de entrada de pedidos, como el de Tastrade.app (en el
directorio ...SamplesVfp98 Tastrade de Visual Studio), puede ser
necesario para algunas aplicaciones, pero no sera una buena
herramienta para administrar inventarios o para hacer un
seguimiento de las ventas, por ejemplo. Tamao de la base de datos
Deber pensar ms en el rendimiento si trata con grandes conjuntos de
datos. En el captulo 15, Optimizar aplicaciones, se explican los
mtodos para optimizar el rendimiento. Tambin puede desear ajustar
el modo en que los usuarios pueden desplazarse por los datos. Si
tiene veinte o treinta registros en una tabla, est bien que permita
que los usuarios desplacen el puntero de registro de una tabla un
registro cada vez. Si tiene veinte o treinta mil registros, deber
proporcionar otros sistemas para obtener los datos deseados:
agregar listas o cuadros de dilogos de bsqueda, filtros, consultas
personalizadas, etc. El captulo 10, Usar controles, explica la
forma de utilizar una lista para seleccionar registros especficos
de una tabla. En el captulo 8, Crear vistas, se explica la creacin
de consultas parametrizadas. Usuario individual frente a mltiples
usuarios Es conveniente crear la aplicacin pensando que mltiples
usuarios tendrn acceso simultneo a la base de datos. Visual FoxPro
facilita la programacin para acceso compartido. En el captulo 17,
Programar para acceso compartido, se describen tcnicas para
permitir que varios usuarios tengan acceso simultneo a la base de
datos. Consideraciones internacionales Si sabe que su aplicacin slo
se utilizar en el entorno de un nico idioma, no debe preocuparse de
la internacionalizacin. Por otra parte, si desea ampliar su
mercado, o si sus usuarios deben trabajar con datos o
configuraciones de entorno internacionales, deber tener en cuenta
estos factores al crear la aplicacin. En el captulo 18, Programar
aplicaciones internacionales, se explican los puntos que debe tener
en cuenta cuando programe aplicaciones internacionales. Datos
locales frente a datos remotos Si su aplicacin trata con datos
remotos, deber administrarlos de forma diferente a como
administrara los datos nativos de Visual FoxPro. En el captulo 8,
Crear vistas, se explica la forma de crear vistas para datos
locales o remotos. En la parte 6 del Manual del programador, Crear
soluciones cliente-servidor, se explica cmo disear aplicaciones que
trabajen sin problemas con datos remotos. Descripcin general del
proceso El proceso de crear una aplicacin es muy repetitivo. Puesto
que no hay dos aplicaciones exactamente iguales, lo que har
probablemente ser definir prototipos y refinar algunos componentes
varias veces antes de obtener un producto final. Las expectativas
de los usuarios finales, o sus solicitudes, tambin pueden cambiar,
lo que har necesario redefinir aspectos de la aplicacin. Adems,
nadie escribe cdigo libre de errores, por lo que las pruebas y la
depuracin conducen a algn tipo de rediseo o
31. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 29 de 83 file://C:temp~hh52BB.htm 30/05/2000
rescritura. El proceso de creacin de una aplicacin Adems de tener
en cuenta la imagen general durante la fase de diseo, tendrn que
decidir cules son las funciones necesarias, qu datos estn
implicados y cmo debe estar estructurada la base de datos. Tendr
que disear una interfaz para que el usuario tenga acceso a la
funcionalidad de la aplicacin. Puede crear informes y consultas
para que los usuarios puedan extraer informacin til de sus datos.
Iniciar la programacin Despus de haber pensado qu componentes son
necesarios en la aplicacin, es posible que quiera configurar un
conjunto de directorios y un proyecto para organizar los archivos
componentes que desea crear para la aplicacin. Puede crear el
conjunto de directorios mediante el Explorador de Windows y puede
crear el proyecto en el Administrador de proyectos o usar el
Asistente para aplicaciones para configurarlos a la vez. Este nuevo
Asistente para aplicaciones abre el Generador de aplicaciones para
que pueda personalizar an ms un proyecto y los componentes que
inicie en el Asistente. Por compatibilidad con versiones
anteriores, puede elegir el Asistente para aplicaciones (5.0)
anterior. Usar el Administrador de proyectos
32. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 30 de 83 file://C:temp~hh52BB.htm 30/05/2000 El
Administrador de proyectos permite compilar la aplicacin completa.
En la fase de programacin de la aplicacin, el Administrador de
proyectos facilita el diseo, la modificacin y la ejecucin de los
componentes individuales de su aplicacin. El Administrador de
proyectos Cuando utilice el Administrador de proyectos, podr: l
Modificar y ejecutar partes de su aplicacin (formularios, mens,
programas) con tan slo algunos clics. l Arrastrar clases, tablas y
campos desde el Administrador de proyectos hasta el Diseador de
formularios o el Diseador de clases. l Arrastrar clases entre
bibliotecas de clases. l Ver y modificar fcilmente sus tablas y
bases de datos. l Agregar descripciones para los componentes de la
aplicacin. l Arrastrar y colocar elementos entre proyectos. Para
obtener informacin detallada acerca del uso del Administrador de
proyectos, consulte el captulo 1, Introduccin, del Manual del
usuario. Para obtener informacin acerca de la compilacin de
aplicaciones, consulte el captulo 13, Compilar una aplicacin, en
este manual. Crear bases de datos Puesto que una aplicacin de base
de datos depende tanto de los datos subyacentes, la mejor forma de
empezar a disear su aplicacin es comenzar por los datos. Puede
configurar su propia base de datos y determinar cules sern las
relaciones entre las tablas, qu reglas comerciales va a exigir,
etc. antes
33. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 31 de 83 file://C:temp~hh52BB.htm 30/05/2000 de disear
cualquier componente de interfaz o de manipulacin de datos. La
creacin de una estructura slida de la base de datos har que el
trabajo de programacin sea mucho ms sencillo. En el captulo 5,
Disear bases de datos, el captulo 6, Crear bases de datos y el
captulo 7, Trabajar con tablas, se explican los temas de diseo y
uso de Visual FoxPro para disear tablas y bases de datos efectivas
y eficaces. Crear clases Puede crear una aplicacin robusta,
orientada a objetos y controlada por eventos utilizando nicamente
las clases de base de Visual FoxPro. Es posible que no tenga que
crear una clase, pero desear hacerlo. Adems de hacer que el cdigo
sea ms manejable y sencillo de mantener, una biblioteca de clases
slida le permite crear rpidamente prototipos e incorporar funciones
a una aplicacin. Puede crear clases en un archivo de programa, en
el Diseador de formularios (mediante el comando Guardar como clase
del men Archivo) o en el Diseador de clases. El captulo 3,
Programacin orientada a objetos, trata algunos de los beneficios de
la creacin de clases y detalla su creacin con el Diseador de clases
o mediante programacin. Proporcionar acceso a la funcionalidad La
satisfaccin del usuario se ver influenciada en gran medida por la
interfaz que le proporcione para la funcionalidad de su aplicacin.
Puede tener un modelo de clases muy limpio, cdigo muy elegante y
soluciones muy inteligentes para los problemas difciles de su
aplicacin, pero esto casi siempre est oculto a los clientes. Lo que
ellos ven es la interfaz que usted les proporciona.
Afortunadamente, las herramientas de diseo de Visual FoxPro
facilitan la creacin de interfaces atractivas y ricas en
caractersticas. La interfaz de usuario consiste principalmente en
formularios, barras de herramientas y mens. Puede asociar toda la
funcionalidad de su aplicacin con controles o comandos de men en la
interfaz. En el captulo 9, Crear formularios, se describe la
creacin de formularios y conjuntos de formularios. La utilizacin de
controles de Visual FoxPro en los formularios se trata en el
captulo 10, Usar controles. Consulte el captulo 11, Disear mens y
barras de herramientas, para dar los ltimos retoques a la
aplicacin. Proporcionar acceso a la informacin Probablemente
muestre cierta informacin para los usuarios en formularios, pero
tambin desear ofrecer a los usuarios la posibilidad de especificar
exactamente la informacin que desean ver, as como la opcin de
imprimirla en informes o etiquetas. Las consultas, especialmente
las consultas que aceptan parmetros definidos por el usuario,
permiten a los usuarios tener ms control sobre sus datos. Los
informes permiten a los usuarios imprimir imgenes totales,
parciales o de resumen de sus datos. Los controles ActiveX y la
automatizacin permiten que su aplicacin comparta informacin y
funciones con otras aplicaciones. El Diseador de consultas y el
Diseador de informes se describen en los captulos 4 a 7 del Manual
del usuario. En el captulo 12 de este manual, Agregar consultas e
informes, se explica la integracin de consultas e informes en una
aplicacin. El captulo 16, Agregar OLE describe la integracin
de
34. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 32 de 83 file://C:temp~hh52BB.htm 30/05/2000 OLE en
una aplicacin. Probar y depurar La prueba y depuracin es algo que
la mayora de los programadores hace en cada paso del proceso de
desarrollo. Es conveniente probar y depurar a medida se va
avanzando. Si crea un formulario, querr asegurarse de que ste hace
lo que se desea antes de continuar con otros elementos de su
aplicacin. En el captulo 14, Probar y depurar aplicaciones, se
explica el uso de las herramientas de depuracin de Visual FoxPro
para depurar sus aplicaciones y se ofrecen sugerencias para que el
proceso resulte ms sencillo. Captulo 3: Programacin orientada a
objetos Aunque Visual FoxPro admite la programacin estndar por
procedimientos, se ha ampliado la capacidad del lenguaje para
proporcionar la potencia y la flexibilidad propias de la
programacin orientada a objetos. El diseo orientado a objetos y la
programacin orientada a objetos representan un cambio de
perspectiva con respecto a la programacin estndar por
procedimientos. En lugar de pensar en el flujo del programa desde
la primera hasta la ltima lnea de cdigo, se debe pensar en la
creacin de objetos: componentes autocontenidos de una aplicacin que
tienen funcionalidad privada adems de la funcionalidad que se puede
exponer al usuario. En este captulo se tratan los temas siguientes:
l Descripcin de los objetos de Visual FoxPro l Descripcin de las
clases de Visual FoxPro l Adaptar la clase a la tarea l Crear
clases l Agregar clases a formularios l Definir clases mediante
programacin Descripcin de los objetos de Visual FoxPro En Visual
FoxPro, los formularios y los controles son objetos que puede
incluir en sus aplicaciones. Puede manipular estos objetos a travs
de sus propiedades, eventos y mtodos. Las mejoras en el lenguaje
orientado a objetos de Visual FoxPro proporcionan un mayor control
sobre los objetos de las aplicaciones. Asimismo, facilitan la
creacin y el mantenimiento de bibliotecas de cdigo reutilizable,
proporcionando: l Cdigo ms compacto. l Incorporacin ms sencilla del
cdigo a las aplicaciones sin necesidad de elaborar esquemas de
asignacin de nombres. l Menos complejidad al integrar cdigo de
distintos archivos en una aplicacin.
35. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 33 de 83 file://C:temp~hh52BB.htm 30/05/2000 La
programacin orientada a objetos es en gran medida un modo de
empaquetar cdigo de manera que se pueda volver a utilizar y
mantener ms fcilmente. Los paquetes principales se llaman clases.
Clases y objetos: los bloques funcionales de las aplicaciones Las
clases y los objetos estn estrechamente relacionados, pero no son
lo mismo. Una clase contiene informacin sobre cul debe ser la
apariencia y el comportamiento de un objeto. Una clase es el plano
o esquema de un objeto. Por ejemplo, el esquema elctrico y de diseo
de un telfono sera algo similar a una clase. El objeto o una
instancia de la clase sera el telfono. La clase determina las
caractersticas del objeto. Los objetos tienen propiedades Un objeto
tiene ciertas propiedades o atributos. Por ejemplo, un telfono
tiene un color y un tamao determinados. Cuando se instala un
telfono en la oficina, tiene una determinada posicin sobre la mesa.
El receptor puede estar colgado o descolgado. Los objetos que se
crean en Visual FoxPro tambin tienen propiedades que estn
determinadas por la clase en la que se basa el objeto. Estas
propiedades pueden establecerse en tiempo de diseo o en tiempo de
ejecucin. Por ejemplo, en la tabla siguiente se indican algunas
propiedades que puede tener una casilla de verificacin. Propiedad
Descripcin Caption Texto descriptivo que aparece junto a la casilla
de verificacin. Enabled Especifica si un usuario puede elegir o no
la casilla de verificacin. ForeColor Color del texto del ttulo.
Left Posicin del extremo izquierdo de la casilla de verificacin.
MousePointer Apariencia del puntero del mouse (ratn) cuando est
situado sobre la casilla de verificacin. Top Posicin de la parte
superior de la casilla de verificacin.
36. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 34 de 83 file://C:temp~hh52BB.htm 30/05/2000 Visible
Especifica si la casilla de verificacin es visible o no. Los
objetos tienen eventos y mtodos asociados Cada objeto reconoce y
puede responder a determinadas acciones denominadas eventos. Un
evento es una actividad especfica y predeterminada, iniciada por el
usuario o por el sistema. Los eventos, en la mayor parte de los
casos, se generan por interaccin del usuario. Por ejemplo, con un
telfono, se desencadena un evento cuando un usuario descuelga el
receptor. Los eventos tambin se desencadenan cuando el usuario
presiona los botones para efectuar una llamada. En Visual FoxPro,
las acciones del usuario que desencadenan eventos incluyen clics,
movimientos del mouse y pulsaciones de teclas. Inicializar un
objeto y encontrar una lnea de cdigo que produce un error son
eventos iniciados por el sistema. Los mtodos son procedimientos
asociados a un objeto. Los mtodos se diferencian de los
procedimientos normales de Visual FoxPro en que estn vinculados
inseparablemente a un objeto y tienen nombres distintos que los
procedimientos normales de Visual FoxPro. Los eventos pueden tener
mtodos asociados. Por ejemplo, si escribe cdigo de mtodo para el
evento Click, ese cdigo se ejecutar cuando se produzca el evento
Click. Los mtodos tambin pueden existir independientemente de los
eventos. Se debe llamar a estos mtodos de forma explcita en el
cdigo. El conjunto de eventos es limitado, aunque amplio. No es
posible crear nuevos eventos. Sin embargo, el conjunto de mtodos
puede ampliarse indefinidamente. La tabla siguiente muestra algunos
de los eventos asociados a una casilla de verificacin: Evento
Descripcin Click El usuario hace clic en la casilla de verificacin.
GotFocus El usuario activa la casilla de verificacin al hacer clic
en ella o al llegar a ella a travs de la tecla TAB. LostFocus El
usuario selecciona otro control. La tabla siguiente muestra algunos
mtodos asociados a una casilla de verificacin: Mtodo Descripcin
Refresh El valor de la casilla de verificacin se actualiza para
reflejar los cambios que se puedan haber producido en el origen de
datos subyacente. SetFocus El enfoque se establece en la casilla de
verificacin como si el usuario hubiera presionado la tecla TAB
hasta activar la casilla de verificacin. Consulte el captulo 4,
Descripcin del modelo de eventos si desea obtener una explicacin
del orden
37. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 35 de 83 file://C:temp~hh52BB.htm 30/05/2000 en que se
producen los eventos. Descripcin de las clases de Visual FoxPro
Todas las propiedades, eventos y mtodos de un objeto se especifican
en la definicin de clase. Adems, las clases tienen las siguientes
caractersticas que las hacen especialmente tiles para crear cdigo
reutilizable y fcil de mantener: l Encapsulamiento l Subclases l
Herencia Ocultar la complejidad innecesaria Cuando instale un
telfono en la oficina, lo ms probable es que no le interese el
funcionamiento interno del aparato para la recepcin de llamadas, la
realizacin o la finalizacin de conexiones con centralitas
electrnicas o la conversin de las pulsaciones de tecla en seales
electrnicas. Lo nico que necesitar saber es que puede levantar el
auricular, marcar los nmeros apropiados y hablar con la persona con
la que desea hablar. La complejidad de realizar esa conexin queda
oculta. La ventaja de ignorar los detalles internos de un objeto
para poder centrarse en los aspectos del objeto que necesita
utilizar se denomina abstraccin. La complejidad interna puede estar
oculta El encapsulamiento, que empaqueta el cdigo de mtodos y
propiedades en un mismo objeto, contribuye a la abstraccin. Por
ejemplo, las propiedades que determinan los elementos de un cuadro
de lista y el cdigo que se ejecuta al elegir un elemento de la
lista pueden encapsularse en un nico control que se agrega a un
formulario. Aprovechar la potencia de las clases existentes Una
subclase puede tener toda la funcionalidad de una clase existente,
adems de la funcionalidad y los controles adicionales que quiera
darle. Si la clase es un telfono bsico, podr tener subclases que
tengan toda la funcionalidad del telfono original y todas las
caractersticas especializadas que desee darles. Las subclases le
permiten reutilizar cdigo.
38. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 36 de 83 file://C:temp~hh52BB.htm 30/05/2000 La
creacin de subclases es un modo de reducir la cantidad de cdigo que
hay que escribir. Puede comenzar definiendo un objeto que sea
similar al deseado y personalizarlo. Simplificar el mantenimiento
de cdigo Con la herencia, si realiza un cambio en una clase, ese
cambio se reflejar en todas las subclases que se basen en ella.
Esta actualizacin automtica ahorra tiempo y trabajo. Por ejemplo,
si un fabricante de telfonos quisiera cambiar los telfonos de tipo
marcacin por aparatos de pulsacin, se ahorrara mucho trabajo si
pudiera hacer el cambio en el diagrama original y hacer que todos
los telfonos fabricados anteriormente con ese diagrama heredaran
automticamente la nueva caracterstica, en lugar de tener que
agregarla a todos los telfonos existentes individualmente. La
herencia facilita el mantenimiento del cdigo. La herencia no
funciona con el hardware, pero s en el software. Si descubre un
error en una clase, en lugar de tener que cambiar el cdigo de todas
las subclases podr corregirlo una nica vez en la clase y el cambio
se propagar a todas las subclases pertenecientes a ella.
39. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 37 de 83 file://C:temp~hh52BB.htm 30/05/2000 Jerarqua
de clases de Visual FoxPro A la hora de crear clases definidas por
el usuario, resulta til comprender la jerarqua de clases de Visual
FoxPro. Jerarqua de clases de Visual FoxPro Contenedores y no
contenedores Los dos tipos principales de clases de Visual FoxPro y
por extensin, de objetos de Visual FoxPro, son las clases de
contenedor y las clases de control. Clases de contenedor y clases
de control
40. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 38 de 83 file://C:temp~hh52BB.htm 30/05/2000 Clases de
contenedor Los contenedores pueden incluir otros objetos y permiten
el acceso a los objetos que contienen. Por ejemplo, si crea una
clase de contenedor que consta de dos cuadros de lista y dos
botones de comando y, a continuacin, agrega a un formulario un
objeto basado en esta clase, cada objeto individual podr
manipularse en tiempo de ejecucin y en tiempo de diseo. Puede
cambiar fcilmente las posiciones de los cuadros de lista o los
ttulos de los botones de comando. Tambin puede agregar objetos al
control en tiempo de diseo; por ejemplo, puede agregar etiquetas
para identificar los cuadros de lista. La tabla siguiente muestra
los posibles componentes de cada clase de contenedor: Contenedor
Puede contener Grupos de botones de comando Botones de comando
Contenedor Cualquier control Control Cualquier control
Personalizado Cualquier control, marcos de pgina, contenedor,
personalizado Conjuntos de formularios Formularios, barras de
herramientas Formularios Marcos de pgina, cualquier control,
contenedores, personalizado Columnas de cuadrcula Encabezados de
columnas, cualquier objeto excepto conjuntos de formularios,
formularios, barras de herramientas, cronmetros y otras
columnas
41. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 39 de 83 file://C:temp~hh52BB.htm 30/05/2000
Cuadrculas Columnas de cuadrcula Grupos de botones de opcin Botones
de opcin Marcos de pgina Pginas Pginas Cualquier control,
contenedores, personalizado Proyecto Archivos, servidores Barras de
herramientas Cualquier control, marcos de pgina, contenedor Clases
de control Las clases de control estn ms encapsuladas que las
clases de contenedor, pero por esa misma razn es posible que sean
menos flexibles. Las clases de control no tienen un mtodo
AddObject. Adaptar la clase a la tarea Es conveniente poder usar
clases en muchos contextos distintos. Un diseo inteligente le
permitir decidir con mayor efectividad qu clases desea disear y qu
funcionalidad va a incluir en la clase. Decidir cundo crear clases
Puede crear una clase para cada control y cada formulario que
utilice, aunque ste no es el modo ms efectivo de disear
aplicaciones. Es muy probable que acabe con mltiples clases que
tengan prcticamente la misma funcin y que deban mantenerse por
separado. Encapsular funcionalidad genrica Cree una clase de
control para funcionalidad genrica. Por ejemplo, los botones de
comando que permiten al usuario mover el puntero de registro en una
tabla, un botn para cerrar un formulario y un botn de ayuda pueden
guardarse como clases y agregarse a formularios en cualquier
momento que desee que los formularios tengan esta funcionalidad.
Puede exponer las propiedades y los mtodos en una clase de modo que
el usuario pueda integrarlos en el entorno de datos concreto de un
formulario o un conjunto de formularios. Proporcionar una
apariencia y un uso coherentes Puede crear clases de conjunto de
formularios, de formulario y de control con una apariencia
caracterstica, de modo que todos los componentes de la aplicacin
tengan la misma apariencia. Por ejemplo, podra agregar grficos y
patrones de color especficos a una clase de formulario y utilizarla
como plantilla para todos los formularios que cree. Podra crear una
clase de cuadro de texto con una apariencia caracterstica, como un
efecto de sombreado, y usar esta clase en la aplicacin en cualquier
momento que desee agregar un cuadro de texto. Decidir qu tipo de
clase va a crear
42. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 40 de 83 file://C:temp~hh52BB.htm 30/05/2000 Visual
FoxPro permite crear distintos tipos de clases, cada uno con sus
propias caractersticas. Especifique el tipo de clase que desea
crear en el cuadro de dilogo Nueva clase o en la clusula AS del
comando CREATE CLASS. Clases de base de Visual FoxPro En el
Diseador de clases puede crear subclases para la mayora de las
clases de base de Visual FoxPro. Clases de base de Visual FoxPro
ActiveDoc Custom Label PageFrame CheckBox EditBox Line ProjectHook
Column* Form ListBox Separator CommandButton FormSet
OLEBoundControl Shape CommandGroup Grid OLEContainerControl Spinner
ComboBox Header* OptionButton* TextBox Container Hyperlink Object
OptionGroup Timer Control Image Page* ToolBar * Estas clases son
parte integral de un contenedor primario y no pueden usarse como
subclases en el Diseador de clases. Todas las clases de base de
Visual FoxPro reconocen el siguiente conjunto mnimo de eventos:
Evento Descripcin Init Ocurre cuando se crea el objeto. Destroy
Ocurre cuando el objeto se libera de la memoria. Error Ocurre
siempre que tiene lugar un error en procedimientos de evento o de
mtodo de la clase. Todas las clases de base de Visual FoxPro tienen
el siguiente conjunto mnimo de propiedades: Propiedad Descripcin
Class El tipo de clase de que se trata. BaseClass La clase de base
de la que se deriva, como Form, Commandbutton, Custom, etc.
43. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 41 de 83 file://C:temp~hh52BB.htm 30/05/2000
ClassLibrary La biblioteca de clases en la que est almacenada.
ParentClass La clase de la que se deriva la clase actual. Si la
clase se deriva directamente de una clase de base de Visual FoxPro,
la propiedad ParentClass es la misma que la propiedad BaseClass.
Extensin de las clases de base de Visual FoxPro Puede convertir en
subclases estas clases para establecer sus propias propiedades de
control predeterminadas. Por ejemplo, si quiere que los nombres
predeterminados de controles que agregue a formularios de sus
aplicaciones reflejen automticamente sus convenciones de nombres,
puede crear clases basadas en las clases de base de Visual FoxPro
para hacerlo. Puede crear clases de formulario con una apariencia o
un comportamiento personalizado para que sirvan como plantillas
para todos los formularios que cree. Tambin podra convertir en
subclases las clases de base de Visual FoxPro para crear controles
con funcionalidad encapsulada. Si quiere que un botn libere
formularios cuando haga clic en l, puede crear una clase basada en
la clase de botn de comando de Visual FoxPro, establecer como ttulo
"Salir" e incluir el siguiente comando en el evento Click:
THISFORM.Release Puede agregar este nuevo botn a cualquier
formulario de la aplicacin. Botn de comando personalizado agregado
a un formulario Crear controles con mltiples componentes Las
subclases no estn limitadas a clases de base nicas. Puede agregar
mltiples controles a una nica definicin de clase de contenedor.
Muchas de las clases de la biblioteca de clases de ejemplo de
Visual FoxPro estn incluidas en esta categora. Por ejemplo, la
clase VCR de Buttons.vcx, ubicada en la carpeta
...SamplesVfp98Classes de Visual Studio, contiene cuatro botones de
comando para desplazarse por los registros de una tabla. Creacin de
clases no visuales
44. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 42 de 83 file://C:temp~hh52BB.htm 30/05/2000 Una clase
basada en la clase personalizada de Visual FoxPro no tiene un
elemento visual de tiempo de ejecucin. Puede crear mtodos y
propiedades para la clase personalizada en el entorno del Diseador
de clases. Por ejemplo, podra crear una clase personalizada llamada
StrMethods e incluir en ella una serie de mtodos para manipular
cadenas de caracteres. Podra agregar esta clase a un formulario con
un cuadro de edicin y llamar a los mtodos cuando lo necesitara. Si
tuviera un mtodo llamado WordCount, podra llamarlo cuando lo
necesitara: THISFORM.txtCount.Value = ;
THISFORM.StrMethods.WordCount(THISFORM.edtText.Value) Las clases no
visuales (como el control personalizado y el control cronmetro)
tienen una representacin visual, nicamente en tiempo de diseo, en
el Diseador de formularios. Establezca la propiedad de imagen de la
clase personalizada como el archivo .bmp que desea mostrar en el
Diseador de formularios cuando se agregue la clase personalizada a
un formulario. Crear clases Puede crear nuevas clases en el
Diseador de clases y puede ver cmo ver el usuario cada objeto a
medida que lo disea. Para crear una clase nueva l En el
Administrador de proyectos, seleccione la ficha Clases y elija
Nuevo. O bien l En el men Archivo, elija Nuevo, seleccione Clase y
elija Nuevo archivo. O bien l Utilice el comando CREATE CLASS. El
cuadro de dilogo Nueva clase le permite especificar el nombre de la
nueva clase, la clase en la que se basa la nueva clase y la
biblioteca en la que se almacenar. Crear una clase nueva
45. Manual del programador, Parte 1: Programacin en Visual
FoxPro Pgina 43 de 83 file://C:temp~hh52BB.htm 30/05/2000 Modificar
una definicin de clase Cuando haya creado una clase, podr
modificarla. Los cambios realizados a una clase afectan a todas las
subclases y a todos los objetos basados en esta clase. Puede
agregar una mejora a una clase o reparar un error en la clase, y
todas las subclases y los objetos basados en dicha clase heredarn
el cambio. Para modificar una clase en el Administrador de
proyectos 1. Seleccione la clase que desea modificar. 2. Elija
Modificar. Se abrir el Diseador de clases. Tambin puede modificar
una definicin de clase visual mediante el comando MODIFY CLASS.
Importante No cambie la propiedad Name de una clase si la usan
otros componentes de la aplicacin. De lo contrario, Visual FoxPro
no podr encontrar la clase cuando la necesite. Subclases de una
definicin de clase Hay dos formas de crear una subclase de una
clase definida por el usuario. Para crear una subclase de una clase
definida por el usuario 1. En el cuadro de dilogo Nueva clase, haga
clic en el botn de tres puntos situado a la derecha del cuadro
Basada en. 2. En el cuadro de dilogo Abrir, elija la clase en la
que desea basar la nueva clase. O bien l Utilice el comando CREATE
CLASS. Por ejemplo, para basar una nueva clase, x, en parentclass
de Mylibrary.vcx, use el cdigo siguiente: CREATE CLASS x OF y AS
parentclass ; FROM mylibrary Utilizar el Diseador de clases Cuando
especifica la clase en la que est basada la nueva clase y la
biblioteca en la que se va a almacenar, se abre el Diseador de
clases. Diseador de clases