GUIA DE FOXBASE
INTRODUCCION.
¿QUÉ ES UN
ARCHIVO?
Es un conjunto de registros que contienen
información relativa a un conjunto de individuos u objetos y se almacenan como
una unidad en los dispositivos de almacenamiento secundario de la computadora
(disquetes ó disco duro).
¿QUÉ ES UNA BASE
DE DATOS?
Es una almacén de datos formalmente definido
y exactamente controlado para ser usado en muchas aplicaciones diferentes.
Hay
dos enfoques para el almacenamiento de datos en un sistema basado en computadora. El primero consiste en guardar los datos en
archivos individuales, cada uno de ellos único para una aplicación
particular. El segundo enfoque
involucra la construcción de una Base de Datos.
Para
comprender mejor cada uno, se comparan a través de la siguiente tabla:
SISTEMA DE PROCESAMIENTO DE
ARCHIVOS |
SISTEMA DE PROCESAMIENTO DE
BASE DE DATOS |
Datos separados y aislados. Puesto que cada archivo almacena
información específica y se procesa de manera independiente. Si se requiere relacionar dos archivos los
analistas y programadores deberán decidir cuál es la relación, qué partes de
cada archivo son necesarias y coordinar el procesamiento para que se
presenten los datos correctos. Y si
fueran más de dos archivos? |
Datos integrados. Aquí existe lo que se denomina Sistema Manejador de Base de
Datos (DBMS) y los datos se almacenan en un medio sencillo llamado Base de
Datos. Un programa de aplicación
puede ordenar al DBMS que acceda los datos del cliente, los datos de ventas o
ambos. Es decir, el programador de la
aplicación sólo específica cómo deberán combinarse los datos y el DBMS
realiza las operaciones necesarias para conseguirlo. |
Duplicación de los datos. Ocurre cuando la
información está almacenada en archivos independientes no relacionados. |
Menos duplicación de los datos, debido a
que cada grupo de datos se almacena en un solo lugar (clientes, ventas, ...)
resultan menos comunes los problemas de integridad de los datos; hay menor
oportunidad de discrepancia entre las múltiples copias de los mismos
elementos de datos. |
Dependencia del programa de
aplicación. Esto ocurre porque el
formato físico de los archivos y registros son parte del código de
aplicación; por lo tanto cuando se requiere hacer un cambio en los formatos
de archivo, también deben modificarse los programas de aplicación. |
Independencia programa/datos. Los formatos de los registros se almacenan
en la misma Base de Datos junto con los datos y son accedidos por el DBMS y
no por los programas de aplicación. |
Archivos incompatibles. Cada lenguaje tiene un formato específico
para sus archivos. Así los archivos
de Cobol no pueden combinarse o compararse con facilidad con los archivos en
C, por ejemplo. |
Fácil representación de la vista de datos
del usuario. Permite que los usuarios
construyan su vista personal de los datos sin preocuparse por la forma en que
están fisícamente guardados los datos. |
¿EN QUE CONSISTE EL MODELO DE BASE DE DATOS
RELACIONAL?
Es
una forma particular de estructurar y procesar una Base de Datos. Para ello se basa en el Modelo Entidad –
Relación; el cual se emplea para interpretar, especificar y documentar los
requerimientos para sistemas de procesamiento de Base de Datos y se desarrolla
a partir de un análisis de requerimientos de los usuarios. Estos requerimientos se expresan en Tablas ó
Entidades que requieren ser Normalizadas para
garantizar que cada tabla ó entidad tenga información de un sólo tema.
¿CUÁLES SON LOS TIPOS DE RELACIONES VALIDOS?
Partiendo
de que el modelo de Base de Datos Relacional utiliza el Modelo Entidad –
Relación, se explican, a continuación, los tipos de relaciones que se pueden
establecer entre archivos:
RELACION 1:1: Este tipo de relación implica que una
entidad se relaciona de manera única con otra entidad. Ejemplo: si tenemos la entidad EMPLEADO y
EXTENSION TELEFONICA, la relación entre estas dos es 1:1 puesto que a un
empleado le corresponde sólo una extensión telefónica.
RELACION 1:N: Implica que una entidad puede relacionarse
de manera única con varias ocurrencias de otra entidad. Ejemplo: supongamos dos entidades
DEPARTAMENTO y EMPLEADO, establecemos que un departamento puede tener varios
empleados; pero un empleado sólo puede pertenecer a un departamento por lo
tanto la relación es de 1 a muchos. El orden en este tipo de relación es
importante. La diferencia entre las
relaciones 1:N y N:1 sucede debido a la diversa naturaleza de la entidad
primaria que siempre aparece en la parte superior.
RELACION N:M: En
este caso varias ocurrencias de una entidad se relacionan con varias
ocurrencias de otra entidad. Ejemplo:
Entidades VUELO y PASAJERO; un vuelo puede llevar muchos pasajeros y un
pasajero puede tener muchos vuelos en su itinerario.
¿QUÉ ES EL FOXBASE?
Es
un lenguaje de programación gestor de Base de Datos. Se considera de alto nivel
porque sus instrucciones son escritas con palabras similares a los lenguajes
humanos – en general Inglés -, lo que facilita la escritura y fácil comprensión
del programador.
CREACION DE LA
BASE DE DATOS Y MANEJO.
Antes de iniciar el
trabajo con algunas órdenes de Foxbase; establezca su directorio de
trabajo. Para ello siga estas
instrucciones:
a.- Cree, en su disquete, un subdirectorio
con las iniciales de su nombre: A:\>
MD ABCD (¿)
b.- Ubíquese en el nuevo directorio: A:\>
CD ABCD (¿).
c.- Cargue el Foxbase : C:\> fox (¿).
d.- Desde el punto indicativo de Foxbase,
establezca la ruta por defecto: Set defa to A:
e.- Establezca la ruta para buscar órdenes
del Foxbase: Path C:\foxbase.
Una
vez establecido el ambiente de trabajo, se describirán una serie de órdenes que
se ejecutarán desde el punto indicativo del Foxbase.
Creando tablas:
CREATE: Esta orden crea un nuevo
archivo de Base de Datos y define su estructura.
Sintaxis: CREATE nombre-archivo.
Cuando
se ejecuta esta orden se creará un archivo de base de datos con ese nombre; la
extensión del nombre del archivo (.DBF) se añade automáticamente.
A
continuación proceda a crear las siguientes tablas:
CLIENTE.DBF |
|
FACTURA.DBF |
|
TRANSAC.DBF |
Codcli
C(6) |
|
Nrofact
C(6) |
|
Nrofact
C(6) |
Nomcli
C(30) |
|
Codcli
C(6) |
|
Fecha
D(8) |
Cedula
C(12) |
|
Fecha
D(8) |
|
Monto
N(12.2) |
Telef
C(12) |
|
Montof
N(12.2) |
|
Referen
C(16) |
|
|
Abonof
N(12.2) |
|
|
Una vez que usted haya escrito
la orden CREATE desde el punto indicativo y establecido la estructura del
archivo; el foxbase le preguntará si desea agregar registros, responda Y(es) y
agregue información. Repita el proceso
para cada archivo.
Creando Indices: Un archivo índice es una
ordenación virtual de la base de datos asociada, ya que ninguno de los
registros en la base de datos asociada está ordenado. Así como el índice de un libro es una sección separada que indica
dónde está localizada la información, un archivo
índice del Foxbase es un archivo aparte que contiene información sobre la
localización de registros individuales en la base de datos asociada. Para ello el archivo índice consiste en al
menos un campo de la base de datos asociada, acompañado del número de registro
que corresponde a éste campo en la base de datos.
La
orden que permite crear un archivo índice es: INDEX ON
Sintaxis: INDEX ON nombre-campo TO nombre-arch-indice
Proceda,
ahora, a indexar el archivo cliente.DBF, creado anteriormente, ejecutando la
siguiente secuencia de ordenes:
USE CLIENTE
INDEX ON CODCLI TO ICLICOD
En primer lugar, se activó (puso en uso) el archivo
que se quiere indexar (cliente) y luego se ejecutó la orden de indexación sobre
ese archivo. El campo por el cual se
indexó es código de cliente y el nombre del archivo índice creado es
iclicod. Nótese que el nombre del
archivo índice procura establecer a qué archivo pertenece y por cuál campo se
indexó.
Para observar los cambios producidos escriba LIST y
observe la disposición de los registros del archivo.
Abriendo
Archivos: Como se mencionó previamente, la orden que
permite abrir un archivo y ponerlo en uso, es USE.
Sintaxis: USE nombre-archivo INDEX lista-arch-indice
Observe
que si un archivo de base de datos ya posee índice, ésta orden permite que se
abran también los índices asociados a dicho archivo. Ejemplo: supongamos que el
archivo de cliente también se encuentra indexado por nombre de cliente; la
orden use correspondiente sería: USE
CLIENTE INDEX ICLICOD, ICLINOM.
Abriendo
Indices: En
muchos casos usted creará y trabajará con más de un archivo índice para un
archivo de base de datos. Pero sólo
puede trabajar con un archivo índice cada vez.
Si se listan más de un archivo índice con SET INDEX, todos ellos serán
abiertos, pero sólo el primero será el activo.
La orden SET INDEX convierte un archivo inactivo en activo.
Sintaxis: SET INDEX TO nombre-arch-indice.
Editando
Archivos:
APPEND: Esta orden añade registros a la
base de datos. Cuando se ejecuta ésta
orden, se visualiza un registro en blanco y el Foxbase entra en modo de edición
a toda pantalla.
Sintaxis: APPEND [BLANK]
La opción Blank es alternativa y
si se usa, se añade un registro en blanco al final de la base de datos pero no
se entra en modo de edición.
Con el archivo de
clientes activo, ejecute la orden APPEND y agregue un registro cualquiera a
éste archivo.
BROWSE: Esta orden visualiza un archivo
de base de datos en la pantalla.
Sintaxis: BROWSE [FIELDS lista-campos]
Si el archivo de base
de datos es demasiado grande para caber en la pantalla, BROWSE sólo visualizará
los campos que quepan. Se pueden ver
más campos desplazándose hacia la derecha o la izquierda manteniendo pulsado
CONTROL y pulsando las teclas direccionales de flecha izquierda y derecha. Los contenidos de cualquier campo pueden ser
editados mientras se permanezca en el modo BROWSE. Para salvar los cambios que se hayan realizado, pulse
CONTROL-END; para salir , pulse CONTROL-ESC.
La opción FIELDS visualizará sólo los campos contenidos en lista-campos.
Ejecute
la orden Browse sobre el archivo activo.
EDIT: Permite la edición a toda pantalla de un registro del archivo de
base de datos.
Sintaxis: EDIT [RECORD n]
Si no
especifica un número de registro mediante RECORD, se editará el registro
actual, identificado por la posición actual del puntero de registros.
Pruebe
editar un registro cualquiera de su archivo activo.
Eliminando
Registros: La orden DELETE marca registros específicos
para ser borrados. Si DELETE se usa sin número de registro, el que se marca es
el registro actual.
Sintaxis: DELETE
[número-registros][alcance][FOR/WHILE condición].
La orden PACK elimina los registros que han
sido marcados para ser borrados por la orden DELETE.
Sintaxis: PACK.
La orden ZAP borra todos los registros de la
base de datos activa. La orden ZAP es equivalente a la orden DELETE ALL seguida
de una orden PACK.
Sintaxis: ZAP.
Listando
Registros:
La orden LIST proporciona una lista de los contenidos de la base de datos.
Sintaxis: LIST [OFF][alcance][lista-campos][FOR
condicion][TO PRINT]
La opción OFF evitará
que se muestren los números de los registros.
La opción alcance se usa para cuantificar los registros a ser
listados. Si el alcance está ausente se
asume ALL (todos). La opción FOR
especifica una condición que se debe alcanzar para que un registro se
liste. Si se usa la opción TO PRINT, el
listado se imprimirá en la impresora.
Ejemplo: LIST FOR codcli = 256; LIST codcli, nomcli
Pruebe los diferentes
formatos de la orden LIST sobre los archivos creados anteriormente.
Listando Estructuras: La orden LIST STRU es la que
permite realizar esta función.
Sintaxis: LIST STRUCTURE [TO PRINT]
Esta orden lista la estructura de un archivo de base
de datos en uso, incluyendo el nombre, el número de registros, todos los
nombres de los campos y la fecha de la última actualización. Si se usa la opción TO PRINT, el listado
saldrá por la impresora.
Filtrando
Registros:
COPY FILE: Esta orden crea una copia
idéntica de un archivo. Se puede
proporcionar la extensión en ambos.
Sintaxis: COPY FILE nombre-arch-fuente TO nombre-arch-destino
Ejemplo: COPY FILE informe.frm TO test.frm
COPY STRU: sintaxis: COPY STRUCTURE TO
nombre-archivo [FIELDS lista-campos].
Copia
la estructura de un archivo de base de datos activo en un nombre-archivo. Especificando FIELDS con lista-campos, sólo
se copiarán estos campos en la estructura.
APPEND FROM: Se utiliza para copiar
registros de un archivo de base de datos a otro.
Sintaxis: APPEND FROM nombre-archivo [FOR
condición]
Esta orden copia registros del
nombre-archivo y los añade al archivo de base de datos activo. La opción FOR especifica una condición que
se debe alcanzar para que se copie cualquier registro.
SET FILTER: Visualiza sólo aquellos
registros de un archivo de base de datos que cumplan una condición específica.
Sintaxis: SET FILTER
TO condición
Ejemplo: Para visualizar sólo aquellos registros que contengan el nombre
Culver City en el campo ciudad durante una orden Display o List, introduzca:
SET FILTER TO “Culver City” $ CIUDAD
Relacionando
Archivos:
Uno de los principales procesos que se realizan en una base de datos relacional
es establecer las relaciones entre los diferentes archivos que conforman dicha
base de datos. El foxbase incluye una
orden que permite ejecutar tal proceso: SET RELATION TO. Esta orden enlaza dos archivos a través de
un campo común. Un campo común es un
campo que está presente en ambos archivos con el mismo nombre, la misma
longitud y tipo y el mismo contenido.
Sintaxis: SET RELATION TO
expresión clave INTO alias.
La
expresión clave es el campo común presente en ambos archivos. El alias es el nombre del archivo que se va
a enlazar con el archivo activo. Un requerimiento importante de esta orden es
que el archivo que se va a enlazar ha de estar indexado por el campo común.
Para
observar el uso de ésta orden ejecute el siguiente grupo de instrucciones:
CLOSE ALL
SELECT 1
USE CLIENTE
INDEX ON CODCLI TO ICLICOD
SELECT 2
USE FACTURA
INDEX ON CODCLI TO IFACCLI
SET RELATION TO CODCLI INTO CLIENTE
Aparentemente no ocurrió nada,
pero el Foxbase ya ha enlazado los dos archivos para comprobarlo ejecute las
siguientes ordenes:
GO 3
DISPLAY
Observe
la información del registro 3 del archivo factura. Para saber quién es ese cliente, ejecute:
SELECT 1
DISPLAY
Observe
que el puntero del archivo cliente, se encuentra ubicado en el cliente cuyo
código corresponde al de la factura almacenada en el registro 3.
Creando
Reportes:
La orden adecuada para ello es CREATE REPORT.
Sintaxis: CREATE REPORT.
Crea un
archivo de informe para producir informes.
Una vez que el archivo de informe ha sido
trazado con esta orden, el mismo puede ser visualizado o impreso con la orden
REPORT FORM.
Manejo de la
Ayuda:
Muestra la ayuda correspondiente al comando deseado.
Ejemplo: Help CREATE
( ayuda del comando CREATE )
QUIT : Esta orden cierra todos
los archivos abiertos y sale del Foxbase
al Entorno del Sistema Operativo.
INTRODUCCION A
LA PROGRAMACION.
Declaración de
Variables:
Sintaxis: STORE[expresión] TO [lista de
variables]
Crea e inicializa variables de memoria de cualquier tipo.
Se puede asignar un valor hacia diversas
variables utilizando una lista de variables. Si se utiliza el signo de
igualdad, solamente puede utilizar una variable.
Entrada y
Salida de Datos:
Sintaxis:
@(línea,columna)SAY[expresión][PICTURE”(cláusula)”][GET(variable)[PICTURE(cláusula)]
@.. SAY ...GET: El comando
@..SAY visualiza los datos en determinada posición de la pantalla o impresora.
La cláusula GET permite la digitación de una variable de memoria previamente
iniciada. Esta digitación puede tener formato creado por la opción PICTURE.
Para enviar los datos hacia la impresora es necesario utilizar el
comando SET DEVICE TO PRINT antes del comando @.
La cláusula PICTURE sirve para dar formato al dato que se va a
visualizar. La cláusula PICTURE estará seguida por una cadena literal (un texto
entre comillas) que contiene una serie de caracteres que indicarán el formato
del dato que se va a imprimir. Estos caracteres se denominan se denominan
plantillas o caracteres de formato. A continuación sigue una tabla de los
caracteres de formato y su uso:
SIMBOLO SIGNIFICADO
9 Indica que
se visualizará un dígito en el lugar del símbolo
# Se
visualizará un dígito
A Se visualizará
un dígito o una letra
N Indica
visualización de letras o números
X Visualización
de cualquier carácter
L Visualización
de datos lógicos (.T. ó .F.)
! Visualiza
siempre las letras en mayúsculas
Por ejemplo,
@ 1,1 SAY valor PICTURE “999,999.99”.
Estructurales
Condicionales:
IF, ELSE Y ENDIF: Esta orden de
toma de decisión debe comenzar siempre con IF y terminar con ENDIF. Las órdenes
que se colocan entre el IF y el ENDIF determinan exactamente lo que ocurrirá si
la condición es cierta, a menos que
se encuentre un ELSE.
Las órdenes IF y ENDIF se usan como un par que encierra un conjunto de
órdenes. La orden ELSE es opcional y se usa en el cuerpo del IF-ENDIF como otro
paso de decisión. La orden IF ELSE, seguida de varias órdenes, incluso la orden
IF y la orden ENDIF, pueden ser usadas para decidir entre acciones en un
programa.
El formato de la orden es:
IF condición Ejemplo:
IF APELLIDO = “Rojas”
[orden...] ?APELLIDO
[ELSE]
ENDIF
[orden...]
ENDIF
La sentencia CASE:
Se compone de
un par DO CASE y ENDCASE. Todas las opciones se declaran entre el DO CASE y el
ENDCASE. OTHERWISE se trata exactamente igual que el ELSE de la sentencia
IF-ENDIF. El formato general es:
DO CASE Ejemplo: DO CASE
CASE condición CASE OPC=1
[órdenes...] DO AGREGA
[CASE condición...] CASE OPC=2
[orden...] DO ELIMINA
[OTHERWISE] ENDCASE
[órdenes...]
ENDCASE
La orden DO CASE, examina cada caso hasta que
encuentra una condición que es cierta, entonces ejecuta las órdenes de debajo
del CASE hasta que encuentra el siguiente CASE o el ENDCASE, lo que ocurra
antes.
Estructura DO
- WHILE: La orden DO WHILE siempre comienza el bucle y
la orden ENDDO normalmente termina el bucle. La serie de órdenes contenidas en
el bucle DO WHILE se continuará ejecutando hasta que la condición especificada
inmediatamente después de la orden DO WHILE, ya no sea cierta.
El formato es:
DO WHILE
condición Ejemplo: DO WHILE .T.
[órdenes] @ 8,15 SAY “MENU PRINCIPAL”
ENDDO ENDDO
MODIFY COMMAND
:
Esta orden pone en marcha el editor de
programas del Foxbase. Para guardar los cambios se pulsa la tecla Ctrl-w o End
, para Abortar la Operación se Pulsa
Esc.
Ejemplo
: Modify Command Menu
( Se crea el Programa Menu.prg )
DO:
La orden DO arranca la ejecución de un
archivo. La extensión del nombre del archivo .PRG se asume a no ser que se
especifique otra cosa.
Sintaxis: DO nom-arch
RETURN: La orden RETURN finaliza la
ejecución de un archivo. Si el archivo fue llamado por otro archivo, el control
del programa es devuelto al otro archivo.
Sintaxis: RETURN
Una función puede contener más de un comando RETURN. El primero que se
ejecute termina la función.
FUNCTION datos(p1,p2)
IF (condición)
RETURN (.T.)
ELSE
RETURN (.F.)
ENDIF
RUN: La orden RUN ejecuta un programa
que no es del FOXBASE desde el entorno del FOXBASE y retorna el control a la
línea siguiente a a quella que contien el comando RUN. Es necesario que exista
el programa COMMAND.COM para que el programa externo pueda ejecutarse. El
programa debe tener la extensión .COM o .EXE Cuando el programa complete su
ejecución, el control será devuelto al FOXBASE.
Sintaxis: RUN nom-arch
PARAMETERS: Recibe el contenido de variables de memoria, constantes y campos
de archivo pasados por el comando DO...WITH, por la línea de comandos del DOS
cuando se especifica un programa o por la llamada de una PROCEDURE que no tenía
parámetros declarados dentro del paréntesis.
Sintaxis: PARAMETERS (lista)
El comando PARAMETERS debe ser el primer
comando ejecutable dentro de un programa, PROCEDURE o función
PROCEDURE: La orden PROCEDURE identifica el comienzo de cada procedimiento
de un archivo de procedimientos. Por ejemplo, un procedimiento sencillo:
PROCEDURE ERROR1
@ 2,10 SAY “Esa no es una fecha válida.
Pruebe de nuevo”
RETURN
Un Procedimiento debe considerarse como un subprograma al que llama otro
programa o Procedimiento.
Un Procedimiento se diferencia de una función
en que no retorna ningún valor.
No es necesario que sea fijo el número de
parámetros pasados hacia un Procedimiento, sin embargo, un Procedimiento puede
recibir cuatro parámetros y pueden pasársele solo tres debido a que uno de
estos es opcional. Los parámetros de un Procedimiento pueden ser por valor o
por referencia, dependiendo del modo como se llame. En el modo de llamado de
función los parámetros se pasan por valor, en el modo de llamado de comando,
por referencia.
SET PROCEDURE
TO: La orden SET PROCEDURE abre el archivo de
procedimientos especificado. SET PROCEDURE se coloca en un archivo de órdenes
que será el que utilice los procedimientos del archivo. Sólo se puede abrir un archivo
de procedimientos y en él sólo puede haber hasta 35 procedimientos.
Sintaxis: SET PROCEDURE TO nombre del
archivo.
FUNCION: Una función es una rutina
preprogramada que ejecuta una tarea o prueba específica. Una función siempre
retorna un valor. Una función puede tener uno o varios argumentos sobre los
cuales actúa, el usuario suministra esos argumentos.
Funciones de
Cadena:
LEN( ) Retorna
el número de caracteres de texto
LOWER( ) Transforma
el texto en minúscula
LTRIM( ) Remueve
espacios iniciales en blanco
RTRIM( ) Remueve
espacios finales en blanco
SUBSTR( ) Extrae
una subcadena
TRIM( ) Remueve
espacios finales en blanco
UPPER( ) Transforma
el texto en mayúsculas.
VAL( ) Retorna
el valor numérico de una cadena de caracteres.
Funciones de
fecha:
CTOD( ) Convierte
una cadena en fecha
DATE( ) Retorna
la fecha del sistema
DTOC( ) Transforma
una fecha en cadena
TIME( ) Retorna
la hora del sistema
Funciones de
Archivos:
EOF()
Retorna .T. si se encontró el final del archivo en uso. En caso
contrario
Devuelve .F.
BOF()
Retorna .T. si se llegó al comienzo del archivo en uso. En caso
contrario
Devuelve .F.
FILE( ) Verifica
la existencia de un archivo y retorna .T. si el nombre del archivo suministrado como argumento existe.
RECNO( ) Retorna
el número del registro actual del archivo en uso. Si no hay registros, asume el
valor 0.
RECCOUNT( ) Retorna
el número total de registros del archivo en uso. Si no hay registros,
asume el valor 0.
FOUND( ) Retorna
el valor lógico .T. si un comando FIND, LOCATE, CONTINUE o SEEK encuentra un registro. Para cada área de
trabajo existe un valor para la función FOUND( ).
COMANDOS DE
BUSQUEDA:
LOCATE: Busca dentro de un conjunto de
registros el primero que satisfaga la condición especificada.
Sintaxis: LOCATE [cubrimiento]
[WHILE(condición)][FOR(condición)]
Si no se especifica cubrimiento alguno, se
asume ALL. Para continuar con la búsqueda de otros registros que cumplan la
misma condición se utiliza el comando CONTINUE.
SEEK: Ejecuta una búsqueda del primer
registro de un archivo indexado que está en uso y que posee una clave igual a
la dada como argumento.
Sintaxis: SEEK [clave]
Si la clave es de tipo de caracteres, debe
colocarse en comillas.
GO/GOTO: Mueve el puntero de registro
para el registro indicado dentro del comando. Puede utilizarse GO como GOTO.
Sintaxis: GO[TO] (expresión)[BOTTOM]/[TOP]
GOTO TOP posiciona el puntero en el primer
registro del archivo, y si se trata de un archivo indizado en el primer
registro del índice. Mientras que GO BOTTOM lo moverá al final del archivo.
SKIP: Mueve el puntero de registros a
través del archivo en uso o a través de un archivo abierto en otra área.
Sintaxis: SKIP [alias][expresión]
Si la expresión es positiva el puntero avanza
y si es negativa retrocede dentro del archivo.
Si se omite la expresión numérica el comando
avanza un registro. Si el archivo está indexado, el comando sigue el orden del
índice. Sucede lo mismo si se encuentra un filtro activo. Si después de un SKIP
el puntero ha sido posicionado en el final del archivo, la función EOF( )
retorna .T.
MANEJO DE LA
PANTALLA:
CREACION DE
MENUS:
En líneas generales, toda aplicación se ejecuta a partir de un menú que
acciona programas, rutinas, o simplemente abre otros menús.
El comando @..PROMPT..MESSAGE
Este
comando es parecido al comando @..SAY. Su finalidad es mostrar una opción de un
menú. La sintaxis es la siguiente:
@(línea,columna) PROMPT[“texto1”]
[MESSAGE “texto2”]
Ejemplo:
@5,10
PROMPT “1. PERSONAL” MESSAGE “Agregar personal”
El comando MENU TO: Permite la creación de
menús iluminados (en los cuales el cursor puede ser movido por los elementos
que lo componen).
Sintaxis: MENU TO (variable memoria)
Se utiliza junto con el comando PROMPT. El
comando MENU TO iluminará, o sea, posicionará el cursor en el primer comando
PROMPT y permitirá que el cursor se mueva entre los PROMPT especificados.
CREACION DE
RECTANGULOS:
El comando @..TO tiene como objetivo dibujar
rectángulos con líneas sencillas o dobles en las coordenadas definidas por el
usuario. La sintaxis de este comando es la siguiente:
@(línea1),(columna1) TO
(línea2),(columna2) [DOUBLE]
Por ejemplo:
@1,1
TO 20,30
BORRADO DE LA
PANTALLA:
@..CLEAR: Borra un rectángulo cuya esquina
superior izquierda se especifica por el primer par de coordenadas y su esquina
inferior derecha por el segundo par de coordenadas.
Sintaxis: @ (línea, columna) [CLEAR][TO
(línea,columna)]
CLEAR: Limpia completamente la pantalla
y deja el cursor en la esquina superior izquierda de la misma.
Sintaxis: CLEAR.
GRABADO DE LA
PANTALLA:
SAVE SCREEN: Graba una pantalla en la memoria
o en una variable para su recuperación posterior.
Sintaxis: SAVE SCREEN [TO variable]
RESTAURACION DE
PANTALLA:
RESTORE SCREEN: Permite la recuperación de
pantallas que grabó el comando SAVE SCREEN.
Sintaxis: RESTORE SCREEN [FROM (varmen)]
Este comando debería sustituirse por la
función RESTSCREEN( ).
COLORES DE LA
PANTALLA:
SET COLOR TO: Se usa para seleccionar los
colores y los atributos de visualización.
Sintaxis: SET COLOR TO estándar
[,realzado][,borde]
Ejemplo: SET COLOR TO W+/B (letras blancas
intensas con fondo azul).
SET DEVICE TO
PRINTER/SCREEN :
Esta orden controla si las
Ordenes @ son enviadas a la pantalla o a la impresora.
Ejemplo :
Set devi to Print (
Direcciona la Salida a la Impresora )
SET PRINTER TO:
Redirige la salida de la
impresora al dispositivo del D.O.S. especificado.
Ejemplo :
Set printer to Salida.txt ( Direcciona la Impresora al Archivo .txt )
SET PRINTER ON/OFF:
Cuando de Activa , dirige la salida a la impresora a la vez que sale por pantalla.
Ejemplo :
Set printer on ( Activa la
salida por Impresora )
SET PRINTER ON/OFF:
Cuando de Activa , dirige la salida a la impresora a la vez que sale por pantalla.
Ejemplo :
Set printer on ( Activa la
salida por Impresora )
PROW() :
Devuelve la Linea de Impresíon actual .
Ejemplo @ Prow()+1,10
Say “CODIGO”
PCOL() :
Devuelve la Columna de Impresíon actual .
Ejemplo @ Prow()+1,10
Say “CODIGO”
PROGRAMAS EJEMPLO
A
Continuación se presentan varios programas ejemplo (Actualización y Consulta )
que hacen uso de los siguientes archivos de datos :
Structure for database:
CLIENTE.DBF
Number of data records: 9
Date of last update : 04/20/99
Field Field Name Type Width Dec
1 CODCLI Character 6
2 NOMCLI Character 30
3 CEDULA Character 12
4 TELEF Character 12
** Total ** 61
Structure for database:
FACTURA.DBF
Number of data records: 13
Date of last update : 04/08/99
Field Field Name Type Width Dec
1 NROFACT Character 6
2 CODCLI Character 6
3 FECHA Date 8
4 MONTOF Numeric 12 2
5 ABONOF Numeric 12 2
** Total ** 45
Structure for database:
TRANSAC.DBF
Number of data records: 4
Date of last update : 04/08/99
Field Field Name Type Width Dec
1 NROFACT Character 6
2 FECHA Date 8
3 MONTO Numeric 12 2
4 REFERN Character 16
** Total ** 43
**
EJEMPLO 02
**
INCLU1.PRG
**
PROGRAMA DE INCLUIR CLIENTES
SET TALK OFF
USE CLIENTE INDEX CLIENTE1
STORE SPACE( LEN(CODCLI) ) TO XCOD && INICIA EL AUX. CODIGO EN BLANCO
CLEAR
@1,5 SAY "INCLUIR CLIENTES"
@3,5 SAY "INTRODUZCA EL CODIGO DEL CLIENTE : "
GET XCOD
READ
SEEK XCOD
IF .NOT. FOUND()
APPEND BLANK
@5,5 SAY "NOMBRE : " GET NOMCLI
@7,5 SAY "CEDULA : " GET CEDULA PICT "A-99.999.999"
READ
REPL CODCLI WITH XCOD
REPL NOMCLI WITH NOMCLI
REPL CEDULA WITH CEDULA
WAIT "CLIENTE HA SIDO INCLUIDO . PULSE UNA TECLA
"
ELSE &&
MUESTRA LOS DATOS
@5,5 SAY "NOMBRE : "+NOMCLI
@7,5 SAY "CEDULA : "+CEDULA
@9,5 SAY "EL CLIENTE YA EXISTE ! PULSE UNA TECLA
"
WAIT " "
ENDIF
RETURN
*******
**
EJEMPLO 03
**
MODIF1.PRG
**
PROGRAMA DE MODIFICAR CLIENTES
USE CLIENTE INDEX CLIENTE1
STORE SPACE( LEN(CODCLI) ) TO XCOD && INICIA EL AUX. CODIGO EN BLANCO
CLEAR
@1,5 SAY "MODIFICAR CLIENTES"
@3,5 SAY "INTRODUZCA EL CODIGO DEL CLIENTE : "
GET XCOD
READ
SEEK XCOD
IF FOUND()
@5,5 SAY "NOMBRE : " GET NOMCLI
@7,5 SAY "CEDULA : " GET CEDULA
READ
WAIT "
CLIENTE HA SIDO MODIFICADO . PULSE UNA TECLA "
ELSE
@4,5 SAY
"CLIENTE NO EXISTE ! PULSE UNA TECLA "
WAIT " "
ENDIF
RETURN
*******
**
EJEMPLO 04
**
ELIMI1.PRG
**
PROGRAMA DE ELIMINACION DE CLIENTES
USE CLIENTE INDEX CLIENTE1
STORE SPACE( LEN(CODCLI) ) TO XCOD && INICIA EL AUX. CODIGO EN BLANCO
STORE "S" TO RESP
CLEAR
@1,5 SAY "ELIMINAR CLIENTES"
@3,5 SAY "INTRODUZCA EL CODIGO DEL CLIENTE : "
GET XCOD
READ
SEEK XCOD
IF FOUND()
@5,5 SAY "NOMBRE : "+NOMCLI
@7,5 SAY "CEDULA : "+CEDULA
@9,5 SAY "ELIMINA S/N : " GET RESP PICT "!" VALID RESP $"SN"
READ
IF RESP = "S"
DELETE &&
ELIMINACION LOGICA
PACK && ELIMINACION FISICA
ENDIF
ELSE
@4,5 SAY
"CLIENTE NO EXISTE ! PULSE UNA TECLA "
WAIT " "
ENDIF
RETURN
********
**
EJEMPLO 06
**
LISTA1.PRG
**
REPORTE GENERAL DE CLIENTES POR PANTALLA
CLEAR
@1,1 TO 23,79 DOUBLE
SELE 1
USE CLIENTE
GO TOP
STORE 1 TO LINEA,PAG
&& CONTADOR DE LINEAS Y PAGINAS
@1,0 SAY " " && INICIO DE LINEA
DO WHILE .NOT. EOF()
IF LINEA = 1
@ROW()+1,05 SAY
" EMPRESA TUI C.A. PAG :
"+STR(PAG,6)
@ROW()+1,05 SAY
" LISTADO DE CLIENTES "
@ROW()+1,05 SAY
" CODIGO NOMBRE CEDULA "
@ROW()+1,05 SAY REPLI("-",70)
LINEA = 4
ENDIF
** IMPRIME CAMPOS
@ROW()+1,5 SAY CODCLI
@ROW(),COL()+5 SAY NOMCLI
@ROW(),COL()+5 SAY CEDULA
LINEA = LINEA + 1
SKIP
** FIN DE PAGINA
IF LINEA > 21 .OR. EOF()
@24,0 SAY " PRESIONE UNA TECLA "
WAIT "
"
LINEA = 1
@2,2 CLEAR TO
22,78 && LIMPIA LA PANTALLA POR
COORDENADAS
@1,2 SAY "
" && INICIA COMIENZO DE
LINEA
PAG = PAG + 1
ENDIF
ENDDO
CLEAR
CLOSE DATA
RETURN
*******
**
EJEMPLO 07
**
REPOR1.PRG
**
REPORTE GENERAL DE CLIENTES POR IMPRESORA
SET SAFETY OFF
CLEAR
WAIT " CONECTE IMPRESORA EN
<ON-LINE> Y PULSE UNA TECLA "
SET DEVI TO PRINT
SELE 1
USE CLIENTE
GO TOP
STORE 1 TO LINEA,PAG
&& CONTADOR DE LINEAS Y PAGINAS
DO WHILE .NOT. EOF()
IF LINEA = 1
@PROW()+1,05
SAY " EMPRESA TUI C.A. PAG :
"+STR(PAG,6)
@PROW()+1,05
SAY " LISTADO DE CLIENTES "
@PROW()+1,05
SAY " CODIGO NOMBRE CEDULA "
@PROW()+1,05 SAY REPLI("-",70)
LINEA = 4
ENDIF
** IMPRIME CAMPOS
@PROW()+1,5 SAY CODCLI
@PROW(),PCOL()+5 SAY NOMCLI
@PROW(),PCOL()+5 SAY CEDULA
LINEA = LINEA + 1
SKIP
** FIN DE PAGINA
IF LINEA > 55 .OR. EOF()
LINEA = 1
PAG = PAG + 1
EJECT
ENDIF
ENDDO
SET DEVI TO SCREEN
CLOSE DATA
RETURN
*******
**
EJEMPLO 14
**
REPOR3.PRG
**
REPORTE GENERAL DE FACTURAS POR CLIENTE
CLEAR
@1,1 TO 23,79 DOUBLE
SELE 1
USE CLIENTE INDEX CLIENTE1
SELE 2
USE FACTURA
INDEX ON CODCLI TO FACTURA2
**
SELE 1
GO TOP
STORE 1 TO LINEA,PAG
&& CONTADOR DE LINEAS Y PAGINAS
STORE 0 TO CFACT,TOTALF,TOTALA
DO WHILE .NOT. EOF()
@1,2 SAY "" && INICIO DE LINEA
@ROW()+1,05 SAY
" EMPRESA TUI C.A. PAG :
"+STR(PAG,6)
@ROW()+1,05 SAY
" CLIENTE : "+CODCLI+"
"+NOMCLI
@ROW()+1,05 SAY
" FACTURA FECHA MONTO ABONO SALDO "
@ROW()+1,05 SAY
REPLI("-",70)
LINEA = 4
XSUBF = 0 && SUBTOTAL X CLIENTE
SELE 2 && BUSCA LAS FACTURAS
DEL CLIENTE
SEEK A->CODCLI
DO WHILE .NOT. EOF() .AND. CODCLI = A->CODCLI
** IMPRIME CAMPOS
@ROW()+1,5 SAY NROFACT
@ROW(),COL()+3 SAY FECHA
@ROW(),COL()+3 SAY MONTOF
PICT "9999999.99"
@ROW(),COL()+3 SAY ABONOF
PICT "9999999.99"
@ROW(),COL()+3 SAY (MONTOF-ABONOF) PICT "9999999.99"
LINEA = LINEA + 1
XSUBF = XSUBF + MONTOF
TOTALF = TOTALF + MONTOF
TOTALA = TOTALA + ABONOF
CFACT = CFACT + 1
SKIP
** FIN DE PAGINA
IF LINEA > 21 .OR. EOF() .OR. CODCLI <>
A->CODCLI
@22,40 SAY "TOTAL MONTO : "+STR(XSUBF,12,2)
@23,5 SAY " PRESIONE UNA TECLA "
WAIT "
"
LINEA = 1
@2,2 CLEAR
TO 22,78 && LIMPIA LA PANTALLA
POR COORDENADAS
@1,2 SAY
"" && INICIA COMIENZO
DE LINEA
PAG = PAG + 1
ENDIF
ENDDO
SELE 1
SKIP
ENDDO
@10,05 SAY "TOTALES"
@12,05 SAY "FACTURA :
"+STR(CFACT,6)
@12,40 SAY "MONTO :
"+STR(TOTALF,12,2)
@14,40 SAY "ABONO :
"+STR(TOTALA,12,2)
@16,40 SAY "SALDO :
"+STR(TOTALF-TOTALA,12,2)
@23,05 SAY " PRESIONE UNA TECLA "
WAIT " "
CLEAR
CLOSE DATA
RETURN
********
**
EJEMPLO 17
**
MENU1.PRG
** PROGRAMA PRINCIPAL
SET DATE BRIT
SET TALK OFF
SET STAT OFF
SET SAFETY OFF
SET SCORE OFF
SET CENTURY ON
STORE .T. TO CICLO
DO WHILE CICLO
SET COLOR TO W+/B
CLEAR
@2,1 TO 22,79 DOUBLE
@1,28 SAY
"SISTEMA DE CUENTAS X COBRAR"
@5,32 SAY " MENU PRINCIPAL "
@6,32 SAY REPLI(CHR(205),16)
@08,30 PROMPT " 1.
ACTUALIZAR CLIENTES " MESSAGE " AGREGA Y MODIFICA
CLIENTES "
@10,30 PROMPT
" 2. ACTUALIZAR FACTURAS "
MESSAGE " AGREGA Y MODIFICA FACTURAS
"
@12,30 PROMPT
" 3. LISTADO DE CLIENTES "
MESSAGE " CONSULTA GENERAL DE CLIENTES "
@14,30 PROMPT
" 0. SALIR " MESSAGE " SALIR DEL SISTEMA
"
SET MESSAGE TO 23
MENU TO OP
DO CASE
CASE OP = 0 .OR. OP = 4
CICLO = .F.
CASE OP = 1
DO ACTUA1
CASE OP = 2
DO ACTUA2
CASE OP = 3
DO LISTA1
ENDCASE
ENDDO
CLEAR
RETURN
******
**
EJEMPLO 18
**
INDE1.PRG
**
INDEXACION DE ARCHIVOS
SET TALK OFF
SET SAFETY OFF
DIMENSION V1(3),V2(3),V3(3)
*-* VECTOR DE ARCHIVOS
V1(1) = "CLIENTE"
V1(2) = "FACTURA"
V1(3) = "TRANSAC"
*-* VECTOR DE CAMPOS A INDEXAR
V2(1)="CODCLI"
V2(2)="NROFACT"
V2(3)="NROFACT"
*-* VECTOR DE ARCHIVOS INDICES
V3(1) = "CLIENTE1"
V3(2) = "FACTURA1"
V3(3) = "TRANSAC1"
*-*
@20,05 SAY "INDEXANDO ARCHIVOS
.... "
I=0
DO WHILE I<3
I=I+1
XARCH = V1(I)
XCAMP = V2(I)
XINDI = V3(I)
USE &XARCH &&
MACROSUSTITUCION DEL ARCHIVO
INDEX ON &XCAMP TO &XINDI
ENDDO
CLOSE DATA
RETURN
*******
**
EJEMPLO 08
**
ACTUA1.PRG
**
ACTUALIZACION DE CLIENTES
SET STAT OFF
SET DATE BRIT
SET TALK OFF
SET SAFETY OFF
SELE 1
USE CLIENTE
SET INDEX TO CLIENTE1
SELE 2
USE FACTURA
SET INDEX TO FACTURA1
**
SELE 1
SET FUNCTION 3 TO
CHR(23)+"S" && ASIGNA
OPCION "M" CON LA TECLA F3
SET FUNCTION 4 TO
CHR(23)+"E" && ASIGNA
OPCION "E" CON LA TECLA F4
DO WHILE .T.
STORE SPACE(6) TO AXCODCLI
STORE SPACE(30) TO AXNOMCLI
STORE SPACE(12) TO
AXCEDULA,AXTELEF
STORE 0 TO AXNUEVO
CLEAR
@2,1 TO 22,79 DOUBLE
@21,5 SAY "ESC- SALIR F3- MODIFICAR F4-
ELIMINAR "
@4,25 SAY "
ACTUALIZACION DE CLIENTES "
@6,5 SAY "CODIGO : " GET AXCODCLI
READ
IF AXCODCLI = SPACE(6)
CLOSE DATA
SET FUNCTION 3 TO
SET FUNCTION 4 TO
RETURN
ENDIF
SEEK AXCODCLI
IF .NOT. FOUND() && SI
NO EXISTE
STORE "S" TO RESP
@20,05 SAY "DESEA INCLUIR ? S/N : " GET RESP PICT
"!"
READ
IF RESP = "N"
LOOP
ELSE
AXNUEVO =
1 && INDICA QUE EL REGISTRO ES
NUEVO
ENDIF
ELSE && SI EXISTE
AXNOMCLI = NOMCLI
AXCEDULA = CEDULA
AXTELEF = TELEF
ENDIF
&& CICLO
DE LECTURA
DO WHILE .T.
@08,05 SAY "CEDULA
: " GET AXCEDULA PICT "A-99.999.999"
@09,05 SAY "NOMBRE
: " GET AXNOMCLI
@10,05 SAY "TELEFONO : " GET AXTELEF
READ
STORE "S" TO RESP
@20,05 SAY "DATOS
CORRECTOS ? S/N :
" GET RESP PICT "!"
READ
STORE " EL
REGISTRO HA SIDO GRABADO ! " TO ERROR
DO CASE
CASE RESP = "E"
EXIT
CASE RESP = "N"
EXIT
CASE AXNOMCLI = SPACE(30)
ERROR = " ERROR : EL NOMBRE HA SIDO OMITIDO "
CASE AXCEDULA = SPACE(12)
ERROR = " ERROR : LA CEDULA HA SIDO OMITIDA "
CASE RESP = "S"
EXIT
ENDCASE
@24,05 SAY ERROR
ENDDO
IF RESP =
"E" .AND. AXNUEVO = 0
&& OPCION DE ELIMINACION
SELE 2
LOCATE FOR CODCLI = AXCODCLI
IF FOUND()
WAIT
"ERROR : EL CLIENTE TIENE FACTURAS ... "
ELSE
SELE 1
DELETE
PACK
WAIT "
REGISTRO ELIMINADO ! PRESIONE UNA TECLA
... "
ENDIF
ENDIF
SELE 1
IF RESP = "S"
&& DATOS VALIDOS
IF AXNUEVO = 1
APPEND BLANK
REPL CODCLI WITH AXCODCLI
ENDIF
REPL NOMCLI WITH AXNOMCLI
REPL CEDULA WITH AXCEDULA
REPL TELEF WITH AXTELEF
WAIT " REGISTRO ALMACENADO ! PRESIONE UNA TECLA ... "
ENDIF
ENDDO
RETURN
*******
**
EJEMPLO 16
**
LISTA3.PRG
**
RESUMEN DE CLIENTES POR PANTALLA
CLEAR
@1,1 TO 23,79 DOUBLE
SELE 1
USE CLIENTE INDEX CLIENTE1
SELE 2
USE FACTURA
INDEX ON CODCLI TO FACTURA2
SET RELATION TO CODCLI INTO A
SELE 3
USE TEMPO1
ZAP &&
INICIALIZA EL TEMPORAL
**
SELE 2
GO TOP
DO WHILE .NOT. EOF()
@5,10 SAY "PROCESANDO REGISTRO : "+STR(RECNO(),6)
XCOD = CODCLI
STORE 0 TO XFAC,XMON,XABO
XNOM = A->NOMCLI
&& GUARDA EL NOMBRE DEL CLIENTE
**
DO WHILE .NOT. EOF() .AND. CODCLI = XCOD
XMON = XMON + MONTOF
XABO = XABO + ABONOF
XFAC = XFAC + 1
SKIP
ENDDO
***
SELE 3 && INCLUYE EN EL TEMPORAL
APPEND BLANK
REPL CODCLI WITH XCOD
REPL NOMCLI WITH XNOM
REPL FACTURAS WITH XFAC
REPL MONTOS WITH XMON
REPL ABONOS WITH XABO
***
SELE 2 && REGRESA AL AREA DE FACTURAS
ENDDO
*****
SELE 3
GO TOP
BROW NOMENU NOAPPEND NOMODIFY && ABRE EL TEMPORAL SOLO PARA CONSULTA
CLEAR
CLOSE DATA
RETURN
*******