Está en la página 1de 21

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE INGENIERIA Y ARQUITECTURA


ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS
PROGRAMACION II (OTRAS CARRERAS)
CICLO I - 2017

GUIA DE LABORATORIO Nº 4
Programación Estructurada: Secuencial, Condicional, Repetitiva y
Modularidad

Objetivo:
 Conocer la estructura de programas (.prg) creados en VFP9.
 Crear, depurar y ejecutar programas utilizando programación estructurada.
 Crear programas que interactúen con la base de datos “Permisodb”.

Consideraciones
- Debe de continuar trabajando dentro de su proyecto “PermisosUes”.

Abrir su proyecto por medio de la instrucción SET DEFAULT TO y la Carpeta


donde se ubica su proyecto.

En la ventana de Comando, digite las instrucciones de entorno SET:


SET STRICT TO 0
SET CENTURY ON
SET DATE TO British

Creación de programas:

Para crear sus programas estructurados, seleccione la ficha Código y luego


Clic en el botón Nuevo (New):

NUEVO
PROGRAMA
Se muestra la pantalla para digitar el nuevo programa:

Programa Secuencial:
Nombre del programa: Capturar
Objetivo: Capturar una cadena de texto, dicho texto
concatenarlo con una expresión constante y
mostrarlo como salida del programa.
Algoritmo: Se inicia variable.
Se captura una cadena de texto por medio de la
función INPUTBOX() y se guarda el la variable
Cnombre
El texto capturado se concatena con un texto
constante y el resultado se almacena en la variable
Cresultado.
El resultado se muestra en una ventana a través de la
función MESSAGEBOX().

2
Las instrucciones de la figura anterior se detallan a continuación:
---------------------------------------------------------------------------------------------------
* PROGRAMA: CAPTURAR.PRG
* OBJETIVO:CAPTURAR UNA CADENA DE CARACTERES ,
* CONCATENAR Y MOSTRAR EL RESULTADO
cNombre = " "
cNombre = INPUTBOX("DIGITE SU NOMBRE: ")
cResultado = "El programa se ejecuta correctamente " + UPPER(cNombre)

MESSAGEBOX(cResultado, "Aviso")

* Fin del programa *


---------------------------------------------------------------------------------------------------

Guarde el programa con el nombre Capturar

Capturar

VFP9 asigna la extensión .PRG al archivo.

El archivo queda vinculado al Administrador de Proyecto, como se observa en


la siguiente pantalla:

Capturar

3
Ejecución del programa.
Desde la ventana de comando digite la siguiente instrucción:

Capturar

Entrada de dato:

Salida del programa:

Utilice los pasos anteriores para los siguientes programas:

Programas Condicionales:
Creación de un programa con estructuras condicionales:
Crear un programa que permita la captura del carácter M o F y calcule el total de
empleados masculinos o femeninos (según carácter).

Nombre del programa: Tgenero_01


Objetivo: Calcular total de empleados masculinos o total de
femeninos, según elección.
Algoritmo: Capturar la letra F o M (desde el teclado).
Se habilita en memoria la tabla empleado ya que ahí
se encuentra el campo Genero.
Sí es M se aplica la instrucción COUNT y la condición
para Genero = “M”, así que cuenta solo para dicho
genero.
Caso contrario se aplica la instrucción COUNT y la
condición para Genero = “F”, así que cuenta solo
para dicho genero.
El resultado es numérico, se convierte en carácter
para poder mostrarlo.

4
Nombre del programa: Tgenero_01.prg

* CAPTURAR LETRA QUE REPRESENTA EL GNERO Y DEVOVER


* COMO RESULTADO TOTAL DE EMPLEAOS POR ESE GENERO.

* cierre de tablas en uso *


CLOSE DATABASES ALL

* captura de dato de entrada: carácter


cGENERO = INPUTBOX("Digite M:Masculino o F:Femenino","Captura de datos", "F")

* apertura de tabla a consultar


SELECT 0
USE Empleados

IF cGenero = "F"
* cuenta cuantos empleados cumplen con la condición y
* guarda el total en variable nTotal
COUNT FOR Empleados.Genero = cGenero TO nTotal

* convierte numero en carácter


cTotal = STR(nTotal)

* concatena expresiones
CSalida = "Total de personal femenino:" + cTotal

* resultado de salida
MESSAGEBOX(CSalida, "Aviso")

ELSE
COUNT FOR Empleados.Genero = cGenero TO nTotal
cTotal = STR(nTotal)
CSalida = "Total de personal Masculino:" + cTotal
MESSAGEBOX(CSalida, "Aviso")

ENDIF

CLOSE DATABASES ALL

* FIN
Ejecutar desde la ventana de comando: DO Tgenero_01

5
Programa mejorado utilizando un seleccionador de casos:

Nombre del programa: Tgenero_02.prg


* PROGRAMA: TGENERO_02
* CAPTURAR LETRA QUE REPRESENTA EL GENERO Y DEVOVER
* COMO RESULTADO TOTAL DE EMPLEAOS POR ESE GENERO.
* UTILIZANDO SELECCIONADOR DE CASOS

* cierre de tablas en uso *


CLOSE DATABASES ALL

* captura de dato de entrada: carácter


cGenero = INPUTBOX("Digite M:Masculino o F:Femenino","Captura de datos", "F")

* convierte la expresión capturada en mayúscula


cGenero = UPPER(cGenero)

* apertura de tabla a consultar


SELECT 0
USE Empleados

DO CASE
CASE cGenero = "F"
* cuenta cuantos empleados cumplen con la condición y
* guarda el total en variable nTotal
COUNT FOR Empleados.Genero = cGenero TO nTotal

* convierte numero en carácter


cTotal = STR(nTotal)

* concatena expresiones
CSalida = "Total de personal femenino:" + cTotal

* resultado de salida
MESSAGEBOX(CSalida, "Aviso")

CASE cGenero = "M"

COUNT FOR Empleados.Genero = cGenero TO nTotal


cTotal = STR(nTotal)
CSalida = "Total de personal Masculino:" + cTotal
MESSAGEBOX(CSalida, "Aviso")

OTHERWISE
MESSAGEBOX("Debe seleccionar M o F", "Aviso")
ENDCASE
CLOSE DATABASES ALL

6
Programas con ciclos repetitivos:
Crear un programa que permita capturar un rango de edades (una edad inicial y
una final) debe calcule el total de empleados con edad dentro de ese rango.

Nombre del programa: Buscar001.prg


Objetivo: Calcula el total de empleados con edad dentro de un rango
de edades.
Algoritmo: Variable que totaliza igual a cero.
Se captura una edad inicial (en formato carácter).
Se captura una edad final (en formato carácter).
Ambas se convierten en numéricas.
Se abre la tabla Empleado.
En un ciclo repetitivo a cada empleado se le calcula su
edad (año actual menos año de nacimiento).
Se evalúa si la edad del empleado, se encuentra dentro
del rango, si es cierto se cuenta, de lo contrario se verifica
siguiente registro
Se finaliza mostrando el total.

Nombre del programa: Buscar001.prg


* PROGRAMA: BUSCAR001
* OBJETIVO: CALCULAR TOTAL DE EMPLEADOS CON EDAD DENTRO DE RANGO DE AÑOS

SET CENTURY ON
SET DATE TO BRITISH

num = 0

CLOSE DATABASES ALL

* Captura de rango de edades (mínima y máxima) en carácter


cedadini = INPUTBOX("Digite Edad inicial: ")
cedadfin = INPUTBOX("Digite Edad final : ")

* Conversión de rango de edades a números


nedadini = VAL(cedadini)
nedadfin = VAL(cedadfin)

SELECT 0
USE EMPLEADOS

GO TOP
SCAN
nedad = YEAR(DATE()) - YEAR(Empleados.Fecnac)
IF BETWEEN(nedad, nedadini, nedadfin)
num = num + 1
MESSAGEBOX(Empleados.Apellidos + Empleado.Nombres + " Enter para continuar")
ENDIF
ENDSCAN

MESSAGEBOX("Total empleados en rango de " + cedadini + " y " + cedadfin + STR(num))


* FIN

7
Programas con la instrucción Browse:

Browse: Instrucción de VFP que permite desplegar (mostrar) la tabla previamente


abierta por medio de la instrucción USE Nombre de la tabla.

Crear un programa que permita mostrar la tabla empleados utilizando sus


diferentes Indices:
Como recordara los índices son utilizados para:
- Establecer relaciones permanentes.
- Evitar que un registro que representa una llave primaria se pueda repetir.
- Buscar datos
- Ordenar los datos.

La tabla Personas posee dos índices: Pkempleado y Apellidos


Nombre del programa: Indice001.prg
Objetivo: Mostrar el orden en la tabla Empleado aplicando Indices
diferentes.
Algoritmo: Se abre tabla empleados.
Se aplica el índice Pkempleado.
Se examinan los datos.
Se aplica el índice Apellidos.
Se examinan los datos.
Se cierra la tabla.

Nombre del programa: Indice001.prg

* PROGRAMA: INDICE001
* OBJETIVO: MOSTRAR EL ORDEN DE LA TABLA EMPLEADO APLICANDO SUS INDICES
* ESTOS INDICES SON: PKEMPLEADO, APELLIDOS

CLOSE DATABASES ALL

SELECT 0
USE EMPLEADOS

SET ORDER TO PKEMPLEADO


BROWSE NOEDIT

SET ORDER TO APELLIDOS


BROWSE NOEDIT

CLOSE DATABASES ALL

* FIN

8
Crear un programa que permita capturar el Nit de un empleado y buscarlo; sí
existe mostrar el nombre del empleado:

Para crear este programa debe de utilizar una estructura repetitiva y al finalizar la
consulta, preguntar: “Desea continuar (Si o No)”, capturando su respuesta por
medio de la función MESSAGEBOX()

Nombre del programa: Buscar02.prg


* PROGRAMA: BUSCAR002
* OBJETIVO: BUSCAR UN EMPLEADO EN BASE AL NIT
* DE ENCONTRARLO MOSTRAR SU NOMBRE COMPLETO DE LO CONTRARIO
* MOSTRAR EL MENSAJE NO ENCONTRADO

SET STRICT TO 0
SET CENTURY ON
SET DATE TO BRITISH
SET DELETE ON

CLOSE DATA ALL

SELECT 0
USE Empleados
SET ORDER TO PKempleado

cEspecial = " "

nPregunta = 6 && Selecciono el botón Si (Continuar)


DO WHILE nPregunta = 6
cNit = INPUTBOX("DIGITE NIT DEL EMPLEADO: ", "CAPTURA")

IF SEEK(cNit)
cApellidos = ALLTRIM(Empleados.Apellidos)
cNombres = ALLTRIM(Empleados.Nombres)
cEmpleado = cApellidos + ", " + cNombres
MESSAGEBOX("Encontrado: " + cEmpleado, "Resultado")
ELSE
MESSAGEBOX("No encontrado")
ENDIF

nPregunta = MESSAGEBOX("DESEA CONTINUAR (Si o No): ", 4 + 32, "PREGUNTA")


ENDDO

CLOSE DATA ALL

* FIN

9
Ejercicios propuestos:

1. Crear un programa que inserte los datos de un empleado en la tabla Empleados,


utilizando la función InputBox() y las instrucciones SQL.

2. Crear un programa que busque en la tabla empleados un registro a través


del Nit y muestre en una ventana el nombre del empleado, caso contrario el
mensaje: “Empleado no encontrado”.

3. Crear programas que permitan insertar nuevos registros a las tablas:


Deptos, Puestos.

4. Crear programas que permitan modificar registros en las tablas Deptos y


Puestos.

5. Crear un programa que permita buscar un registro por medio de su llave


primaria en la tabla Puestos y sí existe permitir la opción de eliminarlo o no.

10
6. Glosario de comandos en VFP aplicados en los programas

Instrucciones relacionadas a: manejo de base de datos

CLOSE DATA ALL


Cierra varios tipos de archivo.

Parámetro: ALL
Cierra todas las bases de datos, tablas e índices abiertos en la sesión de datos
actual y en todas las sesiones de datos inactivas y selecciona el área de trabajo 1.
CLOSE ALL.

USE (Comando)
Abre una tabla y sus archivos de índice asociados, o una vista SQL.
USE [[DatabaseName!]Table | SQLViewName | ?] [IN nWorkArea | cTableAlias]
[ONLINE] [ADMIN] [AGAIN] [NOREQUERY [nDataSessionNumber]]
[NODATA] [INDEX IndexFileList | ? [ORDER [nIndexNumber | IDXFileName |
[TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]]]] [ALIAS
cTableAlias] [EXCLUSIVE] [SHARED] [NOUPDATE] [CONNSTRING
cConnectionString | (m.nStatementHandle) ]

Parámetros
[DatabaseName!]TableName
Especifica el nombre de la tabla que se va a abrir. Puesto que los espacios en
blanco son importantes en los nombres de archivo de Microsoft Windows 98 y
posteriores, evite usar espacios adicionales en TableName. Si un nombre de tabla
contiene espacios, escríbalo entre comillas (" " o ' ')
Para abrir una tabla fuera de la base de datos actual, identifique la tabla con el
nombre de la base de datos, con un signo de exclamación (!) para separar el
nombre de la base de datos del nombre de la tabla. Si no identifica una tabla con
un nombre de base de datos, Microsoft Visual FoxPro sólo podrá abrir las tablas
de la base de datos actual. Si el nombre de la base de datos, el nombre de la tabla
o ambos contienen espacios, escriba el nombre de la base de datos y el nombre
de la tabla entre comillas (" " o ' ')

Nota Visual FoxPro no reconocerá correctamente un nombre de ruta de acceso


si el nombre del disco o del directorio contiene un signo de exclamación (!).

11
GO | GOTO (Comando)
Coloca el puntero de registro en el número de registro especificado de una tabla.
Puede utilizar uno de los siguientes ejemplos:
GO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias]
GO TOP | BOTTOM [IN nWorkArea | IN cTableAlias]
GOTO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias]
GOTO TOP | BOTTOM [IN nWorkArea | IN cTableAlias]

Parámetros
RECORD nRecordNumber
Especifica el número de registro físico al que desea mover el puntero de registro.
Puede omitir por completo GO o GOTO y especificar simplemente el número de
registro. Si especifica solamente el número de registro, podrá mover el puntero
solamente en el área de trabajo actual.

IN nWorkArea
Especifica el área de trabajo de la tabla en la cual se mueve el puntero de registro.

IN cTableAlias
Especifica el alias de la tabla en la cual se mueve el puntero de registro.

TOP
Sitúa el puntero de registro en el primer registro de la tabla. Si la tabla tiene en uso
un índice ascendente, el primer registro será el registro con el valor clave más
bajo. Si el índice está en orden descendente, el primer registro será el registro con
el valor clave más alto.

BOTTOM
Sitúa el puntero de registro en el último registro de la tabla. Si la tabla tiene activo
un índice ascendente, el último registro será aquél con el valor de clave más
elevado. Si el índice está en orden descendente, el último registro será el que
tenga el menor valor de clave.

Observaciones
GO y GOTO pueden utilizarse indistintamente. Estos comandos actúan sobre la
tabla del área de trabajo actual a menos que especifique otra área de trabajo con
la cláusula IN.

12
SKIP (Comando)
Parámetros
nRecords
Especifica el número de registros que hay que mover el puntero.
Si ejecuta SKIP sin nRecords, el puntero avanzará al siguiente registro. El puntero
de registro se mueve hacia el final del archivo nRecords si nRecords tiene un valor
positivo. El puntero de registro se moverá hacia el principio del archivo nRecords
si nRecords tiene un valor negativo.
Si el puntero de registro está colocado en el último registro de una tabla y se
ejecuta SKIP sin argumentos, RECNO( ) devolverá un valor superior en uno al
número de registros de la tabla y EOF( ) devolverá verdadero (.T.). Si el puntero
de registro está colocado en el primer registro de una tabla y se ejecuta SKIP -1,
RECNO( ) devolverá 1 y BOF( ) devolverá (.T.).

IN nWorkArea | cTableAlias
Mueve el puntero de registro en una tabla de un área de trabajo específica.
nWorkArea especifica el número del área de trabajo y cTableAlias especifica el
alias de una tabla o de un área de trabajo.

SELECT (Comando)
Activa el área de trabajo especificada.
SELECT ¡Error! Referencia de hipervínculo no válida. | ¡Error! Referencia de
hipervínculo no válida.

Parámetros
nWorkArea
Especifica el área de trabajo que se va a activar. Si nWorkArea es 0, se activará el
área de trabajo no utilizada que tenga el número menor.

cTableAlias
Especifica un área de trabajo que contiene una tabla abierta para activar.
cTableAlias es el alias de la tabla abierta. También puede incluir una letra de la A
a la J para que cTableAlias active una de las diez primeras áreas de trabajo.

Observaciones
De forma predeterminada, el área de trabajo número 1 está activa cuando se inicia
Visual FoxPro.

Nota: Los campos de las tablas de cualquier área de trabajo pueden incluirse en
comandos y funciones de Visual FoxPro. Utilice los formatos siguientes para tener
acceso a los campos de una tabla abierta en un área de trabajo distinta de la
actual: alias.field o alias -> field.

13
Instrucciones relacionadas a: manejo de base de datos

INPUTBOX( ) (Función)
Entrada y salida | INPUT (Comando) | MESSAGEBOX (Función)Muestra un
cuadro de diálogo modal utilizado por una vista parametrizada para la entrada de
una sola cadena.
INPUTBOX(cInputPrompt [, cDialogCaption [, cDefaultValue [, nTimeout
[,cTimeoutValue]]]])

Parámetros
cInputPrompt
Especifica el mensaje mostrado sobre el cuadro de entrada de texto.
cDialogCaption
Especifica el texto que se va a mostrar en la barra de título del cuadro de diálogo.
cDefaultValue
Especifica el valor predeterminado que se va a mostrar en el cuadro de entrada de
texto.
nTimeout
Especifica un valor de tiempo de espera en 1/1000 segundos.
cTimeoutValue
Especifica el valor devuelto si termina el tiempo de espera.

Observaciones
El cuadro de diálogo muestra un cuadro de edición y botones Aceptar y Cancelar.
El botón Aceptar siempre devuelve el contenido del cuadro de texto. El botón
Cancelar siempre devuelve una cadena vacía. Si termina el tiempo de espera
siempre devolverá el texto especificado en cTimeoutValue o una cadena vacía si
cTimeoutValue no fue pasado.

Ejemplo
Y = "Nothing at all"
Y = INPUTBOX("TypeHere","Input ",Y,5000)
&& Muestra el cuadro de diálogo por 5 segundos,
&& luego muestra algo escrito o "Nothing at all"

14
MESSAGEBOX( ) (Función)
Muestra un cuadro de diálogo definido por el usuario.
MESSAGEBOX(eMessageText [, nDialogBoxType ][, cTitleBarText][, nTimeout])
Parámetros
eMessageText
Especifica el texto que aparece en el cuadro de diálogo. Utilice un retorno de carro
(CHR(13)) en eMessageText para mover una parte del mensaje a la línea
siguiente del cuadro de diálogo. El alto y el ancho del cuadro de diálogo aumentan
lo que sea necesario para que quepa cMessageText.
Puede utilizar cualquier función o tipo de datos válido de Visual FoxPro en vez de
eMessageText. Si la función que utiliza produce un valor que no sea un carácter,
Visual FoxPro utilizará automáticamente TRANSFORM( ) para proporcionar el
carácter equivalente. En el siguiente ejemplo, se devuelve una fecha tipo carácter
y se pasa a MESSAGEBOX( ): Ejemplo: MESSAGEBOX(DATE())

Para mover una parte del mensaje a la línea siguiente en el cuadro de diálogo, use
un retorno de carro, CHR(13), en eMessageText. La altura y ancho del cuadro de
diálogo se incrementa como sea necesario para contener cMessageText.

nDialogBoxType
Especifica los botones y los iconos que aparecen en el cuadro de diálogo, el botón
elegido inicialmente cuando se muestra y el comportamiento del mismo.
En las tablas siguientes, los valores 0 a 5 del botón del cuadro de diálogo
especifican los botones que aparecen en el mismo. Los valores de icono 16, 32,
48 y 64 especifican el icono que aparece en el cuadro de diálogo. Los valores
predeterminados 0, 256 y 512 especifican qué botón del cuadro de diálogo es el
botón predeterminado. El botón predeterminado se selecciona cuando aparece el
cuadro de diálogo. Omitir nDialogBoxType es idéntico a especificar un valor de 0
para nDialogBoxType.

Valor Botones del cuadro de diálogo


0 Sólo botón Aceptar.
1 Botones Aceptar y Cancelar.
2 Botones Anular, Reintentar e Ignorar.
3 Botones Sí, No y Cancelar.
4 Botones Sí y No.
5 Botones Reintentar y Cancelar.

15
Valor Icono
16 Punto.
32 Signo de interrogación.
48 Signo de exclamación.
64 Icono de información (i).

Valor Botón predeterminado


0 Primer botón.
256 Segundo botón.
512 Tercer botón.

nDialogBoxType puede ser la suma de hasta tres valores, uno de cada una de las
tablas anteriores. Por ejemplo, si nDialogBoxType es 290 (2+32+256), el cuadro
de diálogo especificado tendrá las siguientes características:
 Botones Anular, Reintentar e Ignorar.
 El cuadro de mensaje muestra el icono del signo de interrogación.
 El segundo botón, Reintentar, es el botón predeterminado.
Hay disponible información adicional acerca de las constantes en el archivo
FoxPro.h, que se encuentra en el directorio de inicio de Visual FoxPro. El uso de
constantes definidas tales como MB_ABORTRETRYIGNORE +
MB_ICONQUESTION + MB_DEFBUTTON2 puede ser más legible que 2 + 32 +
256.

cTitleBarText
Especifica el texto que aparece en la barra de título del cuadro de diálogo. Si omite
cTitleBarText, en la barra de título aparecerá el título "Microsoft Visual FoxPro".

nTimeout
Específica el número de milisegundos que Visual FoxPro mostrará cMessageText
sin ninguna entrada desde el teclado o el ratón antes de borrar cMessageText. Es
posible especificar cualquier tiempo de espera válido. Un valor menor de 1 no
agotará el tiempo de espera hasta que se produzca la entrada del usuario (igual
que si no se utiliza el parámetro nTimeout).

Valores devueltos
Dato tipo Numérico. MESSAGEBOX( ) devuelve un valor que indica cuál botón se
eligió en el cuadro de diálogo. La siguiente tabla muestra los valores devueltos por
MESSAGEBOX( ) para cada botón.

16
Valor devuelto Botón
1 Aceptar
2 Cancelar
3 Anular
4 Reintentar
5 Ignorar
6 Si
7 No

En el cuadro de diálogo con un botón Cancelar, al presionar ESC para salir del
cuadro de diálogo devuelve el valor (2) como si hubiera elegido Cancelar.
MESSAGEBOX( ) devuelve un valor de -1 cuando se agota el tiempo de espera.

Observaciones
La abreviatura para MESSAGEBOX( ) es MESSAGEB( ).
La función MESSAGEBOX( ) utiliza parámetros inteligentes donde el tipo de
parámetro dicta que parámetro se está utilizando. El primer parámetro es
requerido y siempre es cMessageText; sin embargo, el segundo parámetro,
opcional, puede ser nDialogBoxType si el tipo es numérico o cTitleBarText si el
tipo es de caracteres. Siempre se asume el parámetro nTimeout para el segundo
parámetro numérico opcional que se pasa. Algunos ejemplos válidos son:
MESSAGEBOX("HELLO","Mi Titulo",36,1)
MESSAGEBOX("HELLO",36," Mi Titulo ",1)
MESSAGEBOX("HELLO",36,1)
MESSAGEBOX("HELLO",36,1," Mi Titulo ")

Ejemplo
El siguiente ejemplo muestra un cuadro de diálogo definido por el usuario. Como
título del cuadro de diálogo definido por el usuario, se muestra el mensaje
"Registro no encontrado. Desea buscar de nuevo?", y en la barra de título se
muestra "Mi aplicación".
El cuadro de diálogo definido por el usuario contiene los botones Si y No, y el
icono del signo de interrogación; el segundo botón (No) es la selección
predeterminada. Cuando elija uno de los botones, la selección se mostrará en
pantalla.
cMessageTitle = 'Mi Aplicación'
cMessageText = 'Registro no encontrado. Desea buscar de nuevo?'
nDialogType = 4 + 32 + 256
* 4 = Botones Si y No
* 32 = Icono Interrogación
* 256 = Segundo botón como predeterminado
nAnswer = MESSAGEBOX(cMessageText, nDialogType, cMessageTitle)
DO CASE
CASE nAnswer = 6

17
WAIT WINDOW 'Eligió Si'
CASE nAnswer = 7
WAIT WINDOW 'Eligió No'
ENDCASE

Instrucciones de Estructuras de Programación

IF ... ENDIF (Comando)


Ejecuta condicionalmente un conjunto de comandos dependiendo del resultado de
una expresión lógica.
IF lExpression [THEN] Commands
[ELSE Commands] ENDIF

Parámetros
lExpression
Especifica la expresión lógica evaluada. Si lExpression da como resultado
verdadero (.T.), se ejecutarán cualesquiera instrucciones posteriores a IF o
THEN y anteriores a ELSE o ENDIF (lo que suceda primero).
 Si lExpression es falso (.F.) y se incluye ELSE, se ejecutan los
comandos situados después de ELSE y antes de ENDIF .
 Si lExpression es falso (.F.) y no se incluye ELSE, se pasarán por
alto todas las instrucciones entre IF y ENDIF. En este caso la
ejecución del programa continuará con la primera línea de comando
a continuación de ENDIF.
Observaciones
Puede anidar un bloque IF ... ENDIF dentro de otro bloque IF ... ENDIF.
Los observaciones precedidos de && se pueden colocar en la misma línea
después de IF, THEN, ELSE y ENDIF. Estas observaciones se pasarán por alto
durante la compilación y la ejecución del programa.

18
DO CASE ... ENDCASE (Comando)
Ejecuta el primer conjunto de comandos cuya expresión condicional de como
resultado verdadero (.T.).
DO CASE
CASE lExpression1 Commands
[Commands]
[CASE lExpression2
[Commands]] ...

[CASE lExpressionN
[Commands]]
[OTHERWISE
[Commands]] ENDCASE

Parámetros
CASE lExpression1 Commands ...
Cuando se encuentre la primera expresión CASE con el valor verdadero (.T.), se
ejecutará el conjunto de comandos que haya a continuación. La ejecución del
conjunto de comandos continuará hasta encontrar la siguiente expresión CASE o
ENDCASE. La ejecución se reanuda en el comando que hay inmediatamente a
continuación de ENDCASE.
Si una expresión CASE tiene el valor falso (.F.), se pasará por alto el conjunto de
comandos que le siguen hasta la siguiente cláusula CASE.
Sólo se ejecuta un conjunto de comandos. Se trata de los primeros comandos
cuya expresión CASE se evalúe con el resultado verdadero (.T.). Se pasan por
alto todas las expresiones CASE posteriores que tengan el valor verdadero (.T.).

OTHERWISE Commands
Si todas las expresiones CASE dan como resultado falso (.F.), OTHERWISE
determinará si se ejecuta otro conjunto de comandos adicional.
 Si incluye OTHERWISE, se ejecutará el conjunto de comandos que
sigue a OTHERWISE y la ejecución saltará al primer comando que
hay a continuación de ENDCASE.
 Si omite OTHERWISE, la ejecución saltará al primer comando que
hay a continuación de ENDCASE.

Observaciones
DO CASE se utiliza para ejecutar un conjunto de comandos de Visual FoxPro
según el valor de una expresión lógica. Cuando se ejecuta DO CASE, se evalúan
cada una de las expresiones lógicas sucesivas; los valores de las expresiones
determinan el conjunto de comandos que se ejecuta.
Se admiten observaciones después de DO CASE y ENDCASE, si se incluyen en
la misma línea. Estos observaciones se pasan por alto durante la compilación y
ejecución del programa.

19
DO WHILE ... ENDDO (Comando)
Ejecuta un conjunto de comandos dentro de un bucle condicional.
DO WHILE lExpression
Commands
[LOOP] [EXIT] ENDDO
Parámetros
lExpression
Especifica una expresión lógica cuyo valor determina si se debe ejecutar el
conjunto de comandos incluido entre DO WHILE y ENDDO. Siempre que
lExpression dé como resultado verdadero (.T.), el conjunto de comandos se
ejecutará.

Commands
Especifica el conjunto de comandos de Visual FoxPro que se ejecutan siempre y
cuando lExpression dé como resultado verdadero (.T.).

LOOP
Devuelve el control del programa directamente a DO WHILE. LOOP se puede
situar en cualquier lugar entre DO WHILE y ENDDO.

EXIT
Transfiere el control del programa desde el interior del bucle DO WHILE hasta el
primer comando situado detrás de ENDDO. EXIT puede situarse en cualquier
lugar entre DO WHILE y ENDDO.

Observaciones
Un conjunto de comandos situados entre DO WHILE y ENDDO se ejecuta siempre
y cuando el valor de la expresión lógica lExpression sea verdadero (.T.). Una
instrucción DO WHILE debe tener su correspondiente instrucción ENDDO.
Puede situar observaciones después de DO WHILE y ENDDO en la misma línea.
Estos observaciones se pasan por alto durante la compilación y ejecución del
programa.

20
SCAN ... ENDSCAN (Comando)
Mueve el puntero de registro por la tabla seleccionada y ejecuta un bloque de
comandos para cada uno de los registros que cumple las condiciones
especificadas.

SCAN [NOOPTIMIZE] [Alcance] [FOR lExpresión1] [WHILE lExpresión2]


[Comandos] [LOOP] [EXIT] ENDSCAN

Parámetros
Alcance
Especifica el conjunto de registros que se va a explorar. Sólo se examinarán los
registros que se encuentren dentro del rango. Las cláusulas de alcance son: ALL,
NEXT nRecords, RECORD nRecordNumber y REST. Para obtener más
información acerca de las cláusulas de alcance, vea el tema Cláusulas de alcance.
El alcance predeterminado para SCAN es todos los registros (ALL).

FOR lExpresión1
Ejecuta comandos solamente para los registros para los que lExpresión1 se
evalúa como verdadero (.T.). La inclusión de la cláusula FOR le permite filtrar los
registros que no desea explorar.
Si lExpresión1 es una expresión optimizable, Rushmore optimizará una consulta
creada con SCAN ... FOR. Para obtener el máximo rendimiento, utilice una
expresión optimizable en la cláusula FOR.

WHILE lExpresión2
Especifica una condición por la cual los comandos se ejecutan siempre que
lExpresión2 se evalúe como verdadero (.T.).

Comandos
Especifica los comandos de Visual FoxPro que se van a ejecutar.

LOOP
Devuelve el control directamente a SCAN. LOOP puede colocarse en cualquier
lugar entre SCAN y ENDSCAN.

EXIT
Transfiere el control del bucle SCAN ... ENDSCAN al primer comando que sigue
inmediatamente a ENDSCAN. EXIT puede colocarse en cualquier lugar entre
SCAN y ENDSCAN.
ENDSCAN
Indica el final del procedimiento SCAN.

Observaciones
SCAN avanza automáticamente el puntero de registro al siguiente registro que
cumple las condiciones especificadas y ejecuta el bloque de comandos.

21

También podría gustarte