Manual de Programación en Foxpro

El Foxpro en modo programación, es la forma como se puede almacenar un conjunto de órdenes en un archivo llamado programa, el cual posteriormente será ejecutado.


Orden MODIFY COMMAND

Propósito :   Permite crear y editar un programa en Foxpro (con extensión .PRG), o también cualquier archivo de texto.
Sintaxis :
                MODIFY COMMAND [D:][CAMINO]NOMBRE[.EXT]

Si la unidad y el camino no son especificados, se asumirá la unidad y camino por defecto.cuando se usa Modify Command, Foxpro busca el archivo indicado; si el archivo no existe entonces se crea uno, de lo contrario éste será editado. Cada vez que un archivo es grabado la versión previa es grabado en un archivo de seguridad con extensión .BAK. Al crear un programa, para grabarlo presionaremos las teclas [Ctrl]+[W]. Si desea salir sin grabar presionaremos la tecla [Esc].


Orden DO

Propósito :   Permite ejecutar un programa anteriormente creado.
Sintaxis :
                DO [D:][CAMINO]NOMBRE[.EXT]


Orden TYPE

Propósito   :   Permite visualizar el contenido de un archivo programa.
Sintaxis:
               TYPE[D:][CAMINO]NOMBRE[.EXT]


ESTRUCTURA DE UN PROGRAMA

Preámbulo
Contiene informacion tal como: el nombre del programa, que hace, quién lo escribió, la fecha y una breve historia sobre su edición.
Ejemplo:
                *--------------------------------------------------------------------------------------*
                *PROGRAMA : STOCK.PRG
                *DESCRIPCION: CONTROL DE STOCK
                *AUTOR : LUIS LOZADA PORTAL
                *FECHA : 05 DE NOVIEMBRE DE 1998
                *--------------------------------------------------------------------------------------*

Area de Seteos
Define los comandos SET que el programa necesita para trabajar eficientemente. En esta parte se puede especificar la relaciones entre las bases de datos, activar los archivos indexados así como inicialización de las variables de memoria, etc.

Ejemplo:
                  SET STATUS off
                  SET HEADING off
                  USE personal ORDER codi
                  NUM=0

Cuerpo de Programa
Contiene los comandos que hacen trabajar al programa.

Ejemplo:

            LOCATE FOR apel="VARGAS" DISPLAY nomb,apel,sbas

Sección de Cierre
Aquí se cierran las bases de datos y se restablecen los valores de los comandos SET.

Ejemplo:
                    USE SET STATUS on
                    SET HEADING on
                    RETURN


ORDENES DE ENTORNO
Para modificar el entorno de Foxpro y ajustarlo a nuestras necesidades, debemos usar las órdenes Sets denominadas también Seteos.La opción por defecto está en mayúscula.

                             

Sintaxis                                                                     Propósito
 
                      SET STATUS on/OFF

Activa la línea de estado.

 
                      SET HEADING on/off                                         Muestra el nombre de los campos cuando se usa las órdenes LIST o DISPLAY.
   
                      SET TALK on/off Muestra los mensajes interactivos que retornan órdenes como Replace, Index, Copy, Calculate, Locate, etc.
   
                      SET BELL on/off Emite un sonido cuando el cursor alcanza el final de un campo.
   
                      SET SCOREBOARD on/off Muestra el estado de las teclas CapsLock, Ins y Numlock en la fila cero cuando se desactiva la línea de estado.

VARIBLES DE MEMORIA

Definición :  Son espacios de memoria que permiten almacenar datos temporalmente fuera de la estructura de la Base de Datos. Estos espacios de memoria poseen un nombre que los identifica y quedan definidos según el dato que almacenan.

CREACION DE VARIABLES

Ejemplos:

            CLASE="FOXPRO" Variable cuyo nombre es CLASE de tipo carácter y cuyo contenido es "FOXPRO".
             NUM=0 Variable cuyo nombre es NUM de tipo numérica y cuyo contenido es 0.
             FEC={10/19/78} Variable cuyo nombre es FEC de tipo fecha y almacena la fecha 19 de Octubre de 1978.
             VAR=.T. Variable cuyo nombre es VAR de tipo lógico con un estado de verdad .T..

Orden DISPLAY MEMORY

Propósito :   Lista las variables de memoria.
Sintaxis :      
                      DISPLAY MEMORY [TO PRINTER]
                      LIST MEMORY[TO PRINTER]

Se debe evitar que el nombre de una variable sea igual al nombre de un campo o de un comando resrevado por FOXPRO.


Orden STORE

Propósito :   Permite asignar un dato a un conjunto de variables.
Sintaxis:
                STORE [DATO] TO [LISTA DE VARIABLES]

Ejemplo:
Si desea inicializar con 0 a las variables N1, N2 y N3, procederíamos de la siguiente manera:

        N1=0
        N2=0
        N3=0

Mejor hubiera sido inicializar simultáneamente el 0 a éstas variables, así:

         STORE 0 TO N1, N2, N3


Orden WAIT

Propósito :   Permite detener la ejecución de un programa y espera el ingreso de información proveniente del teclado.
Sintaxis :
                     WAIT [expresión] [WINDOW][TIMEOUT(expN)]

Donde:
expresión :    Es un mensaje ilustrativo para el usuario. Si se omite, FOXPRO enviará el mensaje por defecto, que es:                         "Press any key to continue..."

WINDOW :    Se utiliza para enviar el mensaje dentro de una ventana de mensajes, en la esquina superior derecha.

TIMEOUT expn :    Es el tiempo en segundos que estará la orden WAIT sin que se reciba información.

Ejemplos:
1.
Para detener la ejecución de un programa, ingresemos la orden WAIT en cualquier parte del programa, así:
           
                WAIT
               
el programa cuando ejecute la orden WAIT enviará el mensaje por defecto:
                Press any key to continue...
2.Si sedesa especificar un mensaje diferente con la orden WAIT, como por ejemplo:

                WAIT "Presione ENTER para seguir..."
                el programa mostrará exactamente dicho mensaje al momento de ejecutar dicha orden, así:
                Presione ENTER para seguir...


Orden @...SAY...GET

Propósito :
Permite editar una variable o un campo en una posición de la pantalla, permitiendo su modificación. Para activar los GETS definidos previamente se debe hacer uso del comando READ.
Sintaxis :
                @F,C[SAY "mensaje"][GET(variable|campo)][PICTURE(formato)]
Donde:
    F    : Es el número de fila en le rango 0 - 24.

    C    : Es el número de columna en le rango 0 - 79.

    mensaje        : Es un mensaje que ayuda al usuario a ingresar el dato desde el teclado.

    variable|campo :    Variable o campo a editar.

    Picture              :     Permite establecer un formato de entrada o de salida para los datos, además de restringir el                                     tipo de dato que puede ser ingresado a un campo o variable de memoria.
                Formato
:     Especifica un formato mediante el cual se deben ingresar los datos. El formato puede                                     consistir de una función o una máscara y debe estar delimitada por comillas.


Orden READ

Propósito :   Permite activar uno o más @...SAY...GET.
Sintaxis :
                    READ


Formato para Capturar o Presentar Datos

Es la manera como se pueden ingresar o presentar los datos en pantalla usando la orden @...SAY...GET.
Si se utiliza PICTURE (Máscara) se llama Máscara.
Si se utiliza PICTURE (Función) se llama Función.

Máscara

Descripción

A

N

!

9

Permite el ingreso de sólo letras para datos carácter (cada A es para representar un sólo caracter).
Permite el ingreso sólo de letras y dígitos para datos tipo carácter.
Convierte la minúscula a mayúscula (cada símbolo es para un carácter).
Permite el ingreso de sólo dígitos para datos tipo carácter y dígitos y signos para datos númericos.

Función

Descripción

A

!

E

Z

M

Sólo carácteres de tipo alfabético.

Convertir a mayúsculas todos los carácters alfabéticos.

Formato de fecha Europeo (dd/mm/aa).

Sustituye con espacios un campo con valor igual a 0 (cero)

Permite la creación de una lista de opciones múltiples, las mismas que se deben separar por comas.

Una función se usa anteponiéndole el símbolo @


Clausula COLOR en @...SAY

Sintaxis:
            @F,C SAY "Expresión" COLOR

Donde:

Expresión: Puede ser una combinación de campos, variables de memoria, operadores, funciones, mensajes, etc. Si se 
		 necesita mostrar en pantalla mas de una expresión, se deberá convertir todas las expresiones a carácter y luego 
		 conctenarlas. De número a carácter usando STR( ) o de fecha a carácter usando DTOC( ) o DTOS( ).
 
COLOR (color): Se usa para reportar los datos de una expresión con un color diferente al estándar.

COLOR

PROPOSITO

I

U

X

W

N

W/N

B

BG

G

GR

GR+

R

RB

*

+

Video Inverso

Subrayado

Vacío (usado para el ingreso de claves)

Blanco

Negro

Video Normal

Azul

Cyan

Verde

Café

Amarillo

Rojo

Magenta

Parpadeante

Alta intensidad

Los Símbolos+ o * se deben utilizar después de especificar el color para la expresión, así: Color W/N+

Orden @...BOX

Propósito :

Permite dibujar un recuadro en la pantalla.
Sintaxis :
@f1,c1,f2,c2 BOX [(expresion)]
 
Donde:
    f1, c1    : Coordenadas del primer punto ubicado en la esquina superior izquierda.

    f2,c2    : Coordenadas del segundo punto ubicado en la esquina inferior derecha.

    Expresión        : Especifica los caracteres que formarán el cuadro.

    Cuando no se especifica la expresión después de Box, se crea un recuadro de línea simple.

Orden @...CLEAR

Propósito :

Permite borrar un sector de la pantalla.
Sintaxis :
@f1,c1 [CLEAR( TO f2,c2)]

Orden @...FILL

Propósito :

Permite cambiar los colores de una detrminada área de la pantalla.
Sintaxis :
@f1,c1 FILL TO f2,c2 [COLOR(color)]

Ejemplo:

1.    @5,10 FILL TO 15,40 COLOR R


ESTRUCTURAS CONDICIONALES

Una estructura condicional es aquella que al evaluar una condición realiza una determinada acción.

Orden IF...ENDIF

Propósito :

Permite ejecutar una sección del programa evaluando una condición.
 
Sintaxis 1:
IF
                Bloque de Ordenes
ENDIF
Sintaxis 2:
IF
                Bloque de Ordenes1
ELSE
                Bloque de Ordenes2
ENDIF
 
IF ANIDADOS
Se denomina así cuando se usa simultaneamente varias estructuras condicionales IF.
 
Sintaxis 3:
IF
                Bloque de Ordenes1
ELSE
    IF
                     Bloque de Ordenes2
    ELSE
                     Bloque de Ordenes3
    ENDIF
ENDIF

Función FOUND( )

Propósito:
                    Un valor verdaero, si la búsqueda con SEEK tuvo éxito, en caso contrario reporta falso.

Sintaxis:
                Found ( )

Ejemplo:
Hacer un Programa que permita eliminar registros de la base de datos "Alumnos"

	USE Alumnos Order codi
	Cod=spac(6)
	@5,10 SAY "Ingrese Codigo:" GET cod PICT "@!AAAA99"
	read
	SEEK cod
	IF FOUND( )		*Tuvo éxito la búsqueda*
		Delete
		Pack
	ELSE
		@10,10 SAY "Codigo No Registrado"
	ENDIF
	WAIT
	USE
	...

Función SEEK( )

Propósito:
                    Retorna verdadero si la búsqueda. con SEEK fue exitosa, caso contrario reportará falso.

Sintaxis:
                SEEK ( )

Ejemplo:
Hacer un Programa que permita ingresar registros de la base de datos "Alumnos"

	USE Alumnos Order codi
	Cod=spac(6)
	@5,10 SAY "Ingrese Codigo:" GET cod PICT "@!AAAA99"
	read
	IF SEEK (cod)		*Tuvo éxito la búsqueda*
	 	@10,10 SAY "codigo ya Existente"
	ELSE
		:
	Pedir todos los datos
		:
	APPEND BLANK
	REPLACE
		:
	ENDIF

Orden DO WHILE

Propósito :

Permite la ejecución de un grupo de ordenes mientras que la condición sea cierta.
Sintaxis :
DO WHILE
                    :
         
                    :
          [LOOP]
                    [EXIT]
ENDDO
 
Donde:
    LOOP    : Regresa a evaluar la condición.

    EXIT    : Direcciona la salida con el DO WHILE hacia la siguiente orden que siga a ENDDO.
 
Bucle Infinito
DO WHILE .T.
                ?"FOX"
ENDDO
Ingresa en pantalla la palabra FOX infinidad de veces. Para detener ésta impresión presionar la tecla ESC.
Bucle Infinito
X=0
DO WHILE X<3
                X=X+1
                ?"FOX"
ENDDO
Imprimirá en pantalla la palabra FOX tres veces.
 
Ejemplos:
Hacer un programa que permita consultar registros de la B/D "Alumnos"
	USE ALUMNOS ORDER CODI
	OP="S"
	DO WHILE OP="S"
	CLEAR
	COD=SPAC(6)			
	@5,10 SAY "INGRESE CODIGO:" GET COD
 	READ
	IF SEEK (COD)
		DISPLAY
	ELSE
		@10,10 SAY "CODIGO NO REGISTRADO"
	ENDIF	
	OPI=" "
	@20,20 SAY "DESEA CONTINUAR [S/N]:" GET OPI PICT "@M S,N"
	READ
	IF OPI="S"
		LOOP
	ELSE
		EXIT
	ENDIF
	ENDDO

Orden FOR...ENDFOR

Propósito :

Permite ejecutar un bloque de órdenes un número especificado de veces.
Sintaxis :
FOR Var=inicio TO final [STEP incremento]
                            :
                 
                  :
                            [EXIT]
                  [LOOP]
          ENDFOR | NEXT
 
Donde:
    Var    : Variable de memoria a analizar.

    inicio    : Es un valor de inicio para el contador.

    final        : Es el valor final del contador. Cuando var sea igual o mayor que final, el bucle se detendrá y pasará el                         control a la siguiente línea después de ENDFOR.

    incremento :    Es la cantidad en la que se incrementará el contador. Si no se indica, el valor por defecto para el                                incremento es 1.

Orden DO CASE...ENDCASE

Propósito :

    Permite evaluar múltiples condiciones.
Sintaxis :
    DO CASE
                        CASE
                        
                        CASE
                        
                                    :
              [OTHERWISE
                                 ]
    ENDCASE

DO CASE es una estructura condicional múltiple y excluyente, en donde sólo una de las condiciones se podrá ejecutar.

En caso de no cumplirse  ninguna condición y se ha usado OTHERWISE se ejecutarán todas las órdenes comprendidas entre OTHERWISE y ENDCASE, caso contrario se ejecutará la orden que sigue a ENDCASE.


Función INKEY( ) 

Propósito :

Se usa ésta función para obtener el valor númerico correspondiente a una tecla.
Sintaxis :
INKEY ( [ExpN] )

Ejemplo:

1.    Para detener la ejcución de un programa se debe agregar la siguiente línea:

            :
            :
       =inkey(0)         && se asigna al vacío
            :
        para continuar con el programa presionar cualquier tecla.

TECLA

CODIGO TECLA CODIGO
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
INSERT
HOME
28
-1
-2
-3
-4
-5
-6
-7
-8
-9
133
134
22
1
DEL
END
PgDn
PgUp
Sprite 8.jpg (797 bytes)
Sprite 6.jpg (816 bytes)
Sprite 7.jpg (808 bytes)
        Sprite 9.jpg (817 bytes)
ESC
ENTER
BACKSP
TAB
Barra Espac
TAB
7
6
3
18
4
19
24
5
27
13
129
9
32
15

 

1