clipper

Upload: segundo-fernandez-perfecto

Post on 15-Jul-2015

193 views

Category:

Documents


3 download

TRANSCRIPT

Introduccin Caractersticas Entorno Bases de datos Indices Variables Entrada-salida Bifurcacin Finalizar Mantenimiento Procedimientos Tablas Impresora Funciones Ordenes SET Redes

Introduccin.A principio de los aos ochenta, DBASE II hizo su aparicin de la mano de George Tate (1943-1984) y su empresa Ashton-Tate. Esta nueva herramienta se presentaba en el emergente mundo de los microordenadores con la intencin de facilitar la gestin de las bases de datos. Evidentemente, los sistemas de gestin de bases de datos existan desde mucho antes, sobre todo, desarrollados para grandes sistemas, pero la cuestin estaba en cubrir una carencia que ms tarde o ms temprano deba ser atendida por los ingenieros de software y que era esperada ansiosamente por el creciente nmero de usuarios de los ordenadores personales. El sistema de gestin de bases de datos haba que disearse no exclusivamente como un entorno de programacin, semejante a otros entornos o lenguajes con capacidad de tratamiento de grandes masas de datos. Este deba posibilitar la ejecucin interactiva de instrucciones, ser amigable, accesible por usuarios no programadores, y deba estar formado por unas instrucciones potentes y fciles de memorizar. (LA PRIMERA DE LAS VERSIONES DE DBASE II SE UTILIZ CON EL SISTEMA OPERATIVO CP/M, SIGUINDOLE OTRAS COMO LA 2.4 DE SEPTIEMBRE DE 1983 BAJO DOS 1.1 Y 2.0). Tambin, a principio de los ochenta se comienza a utilizar entre los usuarios de micros una nueva terminologa informtica de bases de datos, sta era ms familiar en otros ambientes informticos y defina con precisin los conceptos ms bsicos:

Una base de datos puede definirse como la agrupacin til y organizada de informacin. Bases de datos relacionales. Este tipo de estructura define relaciones entre los datos en una base de datos. Un modelo simple organiza la base de datos de igual forma que podemos definir una tabla de dos dimensiones (filas y columnas). Los datos de una fila (registro) se subdividen en columnas (campos). A cada fila se la asigna un nmero (n de registro) que representa el orden en que ser almacenado el registro en la base de datos. A las distintas columnas se le asignar un nombre de campo. Con esta estructura bsica de base de datos era fcil manipular y actualizar gran cantidad de informacin. Es fcil distinguir los componentes bsicos de una base de datos: Su estructura es descrita por un conjunto de nombres de campos, estos campos pueden ser de varios tipos en funcin del dato a almacenar (nmeros, fechas, etc) y de longitud definible. Otro componente son los datos propiamente dichos. Los gestores de bases de datos permiten la organizacn y el tratamiento eficaz de grandes masas de datos proporcionndonos gran variedad de herramientas. DBASE II proporciona un gestor de base de datos de tipo relacional con capacidad para gestionar las bases de datos, interpretar interactivamente instrucciones y ejecutar bloques de sentencias (programas). DBASE II tambin contribuy a la filosofa de la programacin estructurada, mejor sus prestaciones y evolucion en varias versiones (DBASE III, DBASE III+ y DBASE IV). George Tate fallecido tempranamente nunca pudo comprobar la revolucin que ocasionara este producto, an en constante evolucin. El xito obtenido entre los usuarios de micros, principalmente atrados por su versatilidad y potencia, y los grandes beneficios producidos en su comercializacin, hizo que muchas empresas de software se adherieran a la idea de desarrollar nuevos productos anlogos, una gama de dialectos que hoy se les agrupa con el sobrenombre de entorno xBase (Clipper, Quicksilver, Foxbase, etc). La difusin de estos productos han desbancado a muchos lenguajes de programacin, como al Cobol que aunque propicia una fcil lectura de sus fuentes, la programacin resulta lenta y laboriosa. En los ochenta, en pleno boom informtico DBASE sustituye a muchos lenguajes por la potencia de sus rdenes y facilidad de uso. Por entonces, hubo que estar muy despierto a la hora de seleccionar una herramienta de trabajo con futuro.

CLIPPER es un dialecto creado como otros tantos con la intencin de mejorar las prestaciones de DBASE. Su primera versin se cre en 1985 en los laboratorios de Natuncket. CLIPPER est escrito en lenguaje C y Ensamblador y se present como un lenguaje atrevido que ha dado muchos quebraderos de cabeza en Ashthon-Tate. En el primer contacto que se tiene con l es dificil encontrar muchas diferencias con respecto a DBASE, ya que CLIPPER es un lenguaje formado por un conjunto de comandos y funciones similares a las usadas con DBASE, incluso la mayora con igual formato sintctico. Pero no tardaremos demasiado tiempo en percartarnos de las diferencias. La principal de ellas, est en que todos los programas escritos en Clipper pueden compilarse y enlazarse. El resultado obtenido es un fichero ejecutable que puede utilizarse de forma independiente al gestor de base de datos y sin necesidad de incluir mdulo runtime. Esto repercute en la velocidad de ejecucin de los programas. Muchos programadores recordarn que cuando entregaban un proyecto a un cliente desarrollado en DBASE II o III se vean con la fatalidad de entregar los ficheros fuentes, ya que DBASE lo que haca era interpretarlos. CLIPPER salvaguard estos intereses. CLIPPER aport ms comandos y funciones y prescindi de muchos de DBASE. CLIPPER es ahora sin duda el compilador ms utilizado en aplicaciones de gestin de datos para microordenadores. La ltima versin aparecida en el mercado es la CLIPPER 5.01 versin reparada de la CLIPPER 5.0. Hasta el momento, la versin ms utilizada quizs por su largo tiempo de vigencia es la CLIPPER SUMMER '87. Anteriores a sta eran la CLIPPER AUTUMN '86 y la versin de 1985. De todas la versiones detalladas la SUMMER '87 ha sido la ms difundida. Muchas aplicaciones se han desarrollado con esta versin, por ello, an, muchos programadores se resisten al cambio a versiones ms actuales. Otras prestaciones de CLIPPER SUMMER '87 a destacar son las siguientes: Provee un conjunto de funciones para el tratamiento de ficheros en redes de area local. Permite manejar ficheros de bajo nivel. Posibilita la creacin de funciones de usuarios y agruparlas en libreras. Permite el uso de arrays unidimensionales. Proporciona un depurador avanzado.

La presente gua est dividida en doce captulos. Cada captulo describe comandos y/o funciones de Clipper referentes a temas concretos. El primero de ellos describe aspectos tcnicos iniciales que es preciso conocer de este producto.

Antonio Surez, 99 - Andaluca I. Caractersticas tcnicas. 1. Capacidades. N. mximo de registros por base de datos, 1000.000.000 N. mximo de caracteres por registro, RAM disponible N. mximo de campos por registro, RAM disponible N. mximo de caracteres por campo, 32 kb N. de dgitos de precisin en operaciones de clculo, 18 N. mximo de caracteres en una clave de indexacin, 250 N. mximo de variables de memoria, 2048 Tamao mximo de una variable de memoria, 64 kb N. mximo de dgitos en una variable numrica, 19 N. mximo de tablas, 2048 2. Requerimiento hardware. Ordenador : IBM PC, XT, AT, 386 o compatible Memoria RAM : 256 kb Disco duro : Necesario para funcionamiento ptimo Coprocesador: Si existe se aprovecha automticamente 3. Requerimiento software. Sistema Operativo : DOS 2.0 o superior (monousuario) DOS 3.1 o superior (multiusuario) LAN : Bajo DOS. No requiere LAN Pack. Bloqueo manual. 4. Instalacin . La instalacin de CLIPPER es muy fcil, basta con copiar el contenido de todos los disquetes a un directorio o ejecutar el fichero CLIPCOPY.BAT que se encuentra en el disco de Sistema.

5. Config.sys. Para el funcionamiento ptimo de CLIPPER conviene incluir las siguientes lneas en el fichero de configuracin CONFIG.SYS. FILES = 20 BUFFERS = 8 Si se posee DOS 3.3 o superior es posible trabajar hasta con 255 ficheros abiertos simultneamente. Para ello se debe indicar, en lugar de FILES = 20: FILES = 255 (Es importante ajustar el nmero de ficheros para aprovechar al mximo la memoria). 6. Autoexec.bat. En el fichero AUTOEXEC.BAT resulta de gran utilidad incluir una lnea de PATH. Esto permitir ejecutar el compilador desde otros directorios de trabajo. PATH C:\CLIPPER 7. Ficheros. A los distintos ficheros que maneja CLIPPER podremos diferenciarlos por su extensin. Si hemos utilizado anteriormente DBASE, la mayora nos resultarn familiares. Bases de datos (.DBF) Datos memo (.DBT) Indices (.NTX) en DBASEIII (.NDX) Etiquetas (.LBL) Informes (.FRM) Texto (.TXT) Variables de memoria (.MEM) Fuentes (.PRG) Objetos (.OBJ) Compilacin (.CLP) Enlace (.LNK) Overlays (.OVL)

Ejecutables (.EXE) 8. Compatibilidad con DBASE. La posibilidad de compilar DBASE con el compilador de CLIPPER est limitada por un grupo de comandos y funciones de DBASE. A continuacin se muestra una relacin de estos comandos y funciones: APPEND LIST FILES SET CATALOG ASSIST LIST HISTORY SET COLOR ON/OFF BROWSE LIST STRUCTURE SET DEBUG CHANGE LOAD SET DOHISTORY CLEAR FIELDS LOGOUT SET ECHO CREATE LABEL MESSAGE() SET ENCRYPTION CREATE REPORT MODIFY COMMAND SET FIELDS CREATE QUERY MODIFY LABEL SET HEADING CREATE SCREEN MODIFY QUERY SET HELP CREATE VIEW MODIFY REPORT SET HISTORY DISPLAY FILES MODIFY SCREEN SET MEMOWIDTH DISPLAY MEMORY MODIFY STRUCTURE SET MENUS DISPLAY STATUS MODIFY VIEW SET SAFETY DISPLAY STRUCTUR ON ERROR SET STATUS DISPLAY USERS ON ESCAPE SET STEP EDIT ON KEY SET TALK ERROR() RESUME SET TITLE EXPORT TO RETRY SET TYPEHEAD HELP RETURN TO MASTER SET VIEW IMPORT TO SET INSERT SET CARRY Comandos y funciones no compatibles. Otras distinciones a considerar son las referentes a las macros (en Clipper no pueden usarse para sustituir a una palabra del sistema) y los ficheros ndices (en Clipper estn optimizados). Clipper proporciona un manejador de bases de datos (DBU), un emulador del punto de peticin de orden de Dbase (DOT), un generador de informes y etiquetas (RL) y un generador de ficheros ndices. Todo estas opciones son semejantes a las proporcionadas por Dbase.

II. Entorno de desarrollo. 1. Entorno. Para desarrollar con CLIPPER tendremos que disponer de las siguientes herramientas bsicas: - Un editor que genere cdigo ASCII standard. - El compilador CLIPPER.EXE. - Las libreras CLIPPER.LIB, EXTEND.LIB, OVERLAY.LIB, etc. - Un enlazador PLINK86.EXE ,LINK.EXE ,TLINK.EXE. - Un depurador de programas DEBUG.OBJ. 2. Escritura de programas. Los requisitos bsicos a cumplir para la correcta escritura de los fuentes son: a) Los ficheros fuentes se nombrarn especificando la extensin .PRG. b) La longitud de una lnea es de 256 caracteres. c) Una lnea slo admitir una instruccin. d) Las instrucciones pueden escribirse desde la primera lnea en el editor. e) Cuando sea necesario escribir lneas de instrucciones muy largas, podemos hacerlo en lneas independiente escribiendo un punto y coma al final de la lnea. f) Puede escribirse en minsculas o maysculas, indistintamente. g) El asterisco '*' se utilizar para hacer comentarios. h) El doble '&' se utilizar para comentar lneas con instrucciones. 3. Compilacin. La compilacin es una traduccin del fichero fuente (.PRG) para obtener un fichero objeto (.OBJ). Consiste en transcribir cada instruccin desde el lenguaje simblico en que est escrito el cdigo (CLIPPER) a cdigo comprensible por el enlazador del sistema operativo (DOS). El fichero del compilador que proporciona CLIPPER se llama CLIPPER.EXE. Sintaxis:

CLIPPER [- {-}] Programa fuente que se compila - Opciones de compilacin -l El mdulo objeto no almacena el n de lnea del fuente. -m Hace que las llamadas DO o SET PROCEDURE no se compi- len. -o Especificar el directorio donde se depositar el fichero objeto. -p La compilacin no comienza hasta que no se pulsa una tecla. -q Suprime la visin en pantalla de los nmeros de lneas. -s Hace que no se genere mdulo objeto. Verifica slo sintaxis. -t Especificar la unidad donde se crear el fichero temporal .$$$ Es imprescindible que haya al menos un espacio en blanco entre y la primera opcin as como entre cada una de ellas. Es obligatorio que la opcin se exprese en minsculas. Nuestro programa puede contener asimismo diversas llamadas DO a otros mdulos .PRG o a procedimientos del mismo programa. Si no le especificamos lo contrario, CLIPPER compila de forma automtica los ficheros llamados por DO. 4. Enlace. El fin de un enlazador es el de asociar los mdulos objeto obtenidos mediante el compilador con las libreras donde se contienen las traducciones mquina de cada una de las sentencias,llamadas,etc. que aparecen en el mdulo objeto. a) Enlazadores * PLINK86 (Phoenix Tec. Clipper Summer '87) Sintaxis: PLINK86 FI {,} [OUTPUT ] LIB {,} | [@] * LINK (Microsoft) Sintaxis: LINK {},,, {} * TLINK (Borland) Sintaxis:

TLINK {},,, {} * RTLINK (Pocket Soft. Clipper 5) Sintaxis: RTLINK [FI [OUTPUT ] [LIB [] []] | [@] b) Overlay * Ficheros de enlace .LNK Todas las clasulas que deban indicarse al enlazador pueden situarse en un fichero de enlace .LNK. El enlazador usa uno de estos ficheros conforme a la siguiente sintaxis: PLINK86 @ Ejemplo_1: PRUEBA.LNK FILE prueba LIB clipper,extend ; (';'Indica el final del fichero .LNK) * Librerias CLIPPER.LIB EXTEND.LIB OVERLAY.LIB * Overlays El mayor problema con el que nos podemos encontrar, cuando estamos realizando una aplicacin en Clipper, es que sta no nos quepa fsicamente en la memoria de trabajo de nuestro ordenador. El nico modo que tenemos de solucionar este problema es proceder a lo que denominamos segmentacin, programacin por capas, solapas u overlays. Cuando programamos usando esta tcnica, lo que hacemos es dividir la memoria RAM en dos o ms reas de trabajo. En la primera de ellas (rea principal) se carga el mdulo ejecutable, y en las reas de solape se cargan y descargan, conforme se van usando, los diferentes mdulos overlay que hayamos definido. Ejemplo_1: PRUEBA.LNK (2 reas) FILE prgprin

LIB clipper,extend OVERLAY CODE, $CONSTANTS BEGINAREA SECTION FILE modulo1 SECTION FILE modulo2 SECTION FILE modulo3 ENDAREA Mandatos para compilar y linkar CLIPPER prgprin -m CLIPPER modulo1 CLIPPER modulo2 CLIPPER modulo3 PLINK86 @prueba Ejemplo_2: PRUEBA.LNK (3 reas) FILE prgprin LIB clipper,extend OVERLAY CODE, $CONSTANTS BEGINAREA SECTION FILE modulo1 SECTION FILE modulo2 ENDAREA BEGINAREA SECTION FILE modulo3 ENDAREA Mandatos para compilar y linkar CLIPPER prgprin -m CLIPPER modulo1 CLIPPER modulo2 CLIPPER modulo3 PLINK86 @prueba (Para que Clipper produzca un fichero .EXE y tantos ficheros .OVL como mdulos para overlays tengamos definidos, slo hay que cambiar la instruccin: SECTION FILE {,}

por SECTION INTO FILE {,} (Esto ltimo es til para trabajar con disquetes) * Mandatos del enlazador PLINK86 #. Sirve para poner un comentario en un fichero de enlace. BATCH. Por defecto, cuando PLINK86 no encuentra un fichero .OBJ o .LIB de los especificados, la operacin de enlace contina adelante. BEGINAREA. Determina el comienzo de un rea. ENDAREA. Determina el final de un rea. DEBUG. Proporciona informacin adicional para ayudar a la depuracin de una aplicacin en el caso de overlay. FILE. Especificar los mdulos objetos separados por coma (,). HEIGHT. N lneas/pgina del informe (MAP). LIBRARY. Especificar las libreras que sern enlazadas con los .OBJ. LOWERCASE. Convierte en minsculas todos los identificadores y smbolos. MAP=. Especificar fichero .MAP. NOBELL. Elimina el sonido que aparece con los mensajes del PLINK86. OUTPUT. Especificar fichero .EXE.

SEARCH. Hace una segunda pasada por las libreras si tras terminar el enlace alguno de los smbolos ha quedado sin definir. SECTION. Determina que los mdulos objeto que se relacionan tras la palabra FILE estarn en el rea de overlay abierta, pero no en un fichero independiente en disco. SECTION INTO. Igual que el anterior, pero en un fichero en disco. UPPERCASE. Convierte a maysculas todos los identificadores y smbolos. VERBOSE. Nos da informacin en pantalla de lo que est haciendo PLINK86. WIDTH. Determina el ancho en columnas del informe (MAP). WORKFILE. Sirve para direccionar el archivo temporal que usa el enlazador.

III. Bases de datos. 1. Creacin de una base de datos. Para crear un fichero de estructura vacia se usar el mandato CREATE. Para definir los distintos campos de la futura base de datos emplearemos APPEND BLANK (para aadir un registro en blanco) y REPLACE (para almacenar el contenido). CREATE Ejemplo_1: CREATE clientes USE clientes APPEND BLANK REPLACE FIELD_NAME WITH "CODIGO" REPLACE FIELD_TYPE WITH "C" REPLACE FIELD_LEN WITH 5

APPEND BLANK REPLACE FIELD_NAME WITH "NOMBRE" REPLACE FIELD_TYPE WITH "C" REPLACE FIELD_LEN WITH 30 CLOSE RETURN Las variables de entorno FIELD_NAME, FIELD_TYPE, FIELD_LEN y FIELD_DECIMALS tomarn el nombre de campo, el tipo de campo, la longitud de campo y las posiciones decimales, respectivamente. Una vez creada la estructura pasaremos a generar la base de datos propiamente dicha con CREATE FROM. CREATE FROM Ejemplo_2: CREATE CLIENTES FROM CLIENTES Tanto en la utilidad DOT porporcionada por Clipper como en el entorno Dbase podemos crear bases de datos sin necesidad de escribir programas. 2. Tipos y longitud de campos. Los distintos tipos de campos que podemos definir en una base de datos son: C - Caracter (1-254 caracteres alfanumricos) N - Numrico (1-19 dgitos de entero.) (0-15 dgitos decimal y dos dgitos menor que entero) D - Fecha (8 dd-mm-aa) L - Lgico (1 carcter para valores lgicos: T,F,Y,N) M - Memo (10) Almacena direccin para acceder a fichero .DBT. 3. Usar una base de datos. Para usar una base de datos emplearemos la sentencia USE especificando el fichero de base de datos. Si existe un fichero memo asociado se abrir, y si se indic uno o ms ficheros .NTX se activarn los ndices correspondientes. Tambin proporciona el alias adecuado. USE [INDEX {,}] [EXCLUSIVE] [ALIAS] El nmero mximo de ficheros ndices asociados es 15. EXCLUSIVE se emplea para redes y posibilita la apertura de ficheros con uso exclusivo a un usuario. USE sin ms, cierra el fichero del rea activa.

Ejemplo_1: USE CLIENTES 4. Modificar estructura. Para modificar la estructura de una base de datos se recomienda el uso de la sentencia MODIFY STRUCTURE propia de Dbase. Posibilita renombrar, suprimir y aadir campos, as como modificar el tipo y la longitud de los mismos. Con LIST STRUCTURE de Dbase listaremos la estructura de una base de datos. MODIFY STRUCTURE Ejemplo_1: USE CLIENTES MODIFY STRUCTURE Hay que tener precaucin si existen registros en la base de datos ya que algunas modificaciones pueden vaciarnos el contenido de uno o ms campos. 5. Aadir registros. APPEND BLANK aade un registro vacio a nuestro fichero en uso. El puntero de la base de datos se sita en el registro aadido. La sentencia REPLACE nos servir para reemplazar el contenido de los campos. REPLACE [] [] WITH {,[] WITH } [FOR ][WHILE ] Ejemplo_1: USE CLIENTES APPEND BLANK REPLACE CODIGO WITH "00001" REPLACE NOMBRE WITH "Federico Torres" 6. Listar registros. LIST y DISPLAY sirven para visualizar, imprimir o enviar a un fichero de texto, un registro o conjuto de registros. LIST [OFF] [] [] [FOR ] [WHILE ] [TO PRINT/TO FILE ] DISPLAY [OFF] [] [] [FOR ] [WHILE ] [TO PRINT/TO FILE ]

Ejemplo_1: USE CLIENTES LIST Ejemplo_2: USE CLIENTES LIST CODIGO Ejemplo_3: USE CLIENTES DISPLAY FOR CODIGO > "50000" TO PRINT 7. Puntero de registro. Clipper mantiene un puntero que indica el registro activo en cada momento. Tanto en Clipper con en Dbase podemos conocer la posicin del puntero con la funcin RECNO(). En el ejemplo anterior al aadir el registro vacio el puntero se desplaza a la posicin que ocupa este registro dentro de la base de datos. Podemos deducir que las sustituciones se efectuarn ah. Existen mandatos que afectan nicamente al registro activo. El puntero se puede desplazar usando la sentencias GO y SKIP en sus distintas modalidades: GO (ir al registo indicado) GO TOP (ir al registro nmero 1) GO BOTTOM (ir ltimo registro) SKIP (ir al siguiente registro) SKIP -1 (ir al anterior) etc. 8. Editar un registro. La edicin de registros es posible realizarla con varias sentencias. No es posible usar EDIT de Dbase III. En Clipper la edicin de un registro puede realizarse con un grupo de GET's, aunque existen otras sentencias ms avanzada como DBEDIT, MEMOEDIT, etc. @ , [SAY [PICTURE ]] [GET [PICTURE ] [RANGE , ] [VALID ]] PICTURE expresa un formato para la entrada/salida de informacin. RANGE sirve para validar datos numricos entre los dos lmites especificados.

VALID se emplea para expresiones genricas de validacin. ser la condicin de validacin. Ejemplo_1: USE CLIENTES GO 3 @ 1,1 SAY " Modifique codigo: " GET CODIGO @ 2,1 SAY " Modifique nombre: " GET NOMBRE READ Ejemplo_2: USE ALUMNOS GO TOP @ 1,1 SAY NOMBRE @ 2,1 SAY " Modifique edad: " GET EDAD RANGE 1,7 @ 3,1 SAY " Modifique sexo: " GET SEXO PICTURE "!"; VALID(SEXO$"VH") READ READ lee las variables GET's 9. Marcar un registro. Clipper igual que Dbase permite marcar registros para posteriormente, si procede, borrarlos definitivamente. Esto se har con la sentencia DELETE que marca con un asterisco el registro activo. Puede marcarse ms de un registro usando la clasulas FOR o WHILE. DELETE [mbito] [FOR ] [WHILE ] [mbito] RECORD Marcar el registro especificado. ALL Marcar todos los registros Ejemplo_1: USE CLIENTES GO 1 DELETE Ejemplo_2: USE CLIENTES DELETE ALL Ejemplo_3:

USE CLIENTES DELETE RECORD 10 Ejemplo_4: USE CLIENTES DELETE FOR NOMBRE = "Mara" 10. Borrar registros. Una vez marcado un registro es posible borrarlo con PACK PACK Ejemplo_1: USE CLIENTES DELETE RECORD 10 PACK 11. Desmarcar registros. La sentencia RECALL suprime las marcas puestas con DELETE RECALL [] [FOR ] [WHILE ] Ejemplo_1: USE CLIENTES RECALL RECORD 10 12. Borrar todos los registros. ZAP borra todos los registros marcados o no de una base de datos manteniendo su estructura. 13. Localizar registros. LOCATE permite localizar uno o ms registros. En el momento que encuentra un registro el puntero de registro se coloca en l, esperando a un CONTINUE para continuar con la bsqueda. La bsqueda es secuencial por lo que si el tamao de la base de datos es considerable puede resultar lento este proceso. LOCATE [] [FOR ] [WHILE ] CONTINUE Ejemplo_1:

USE CLIENTES LOCATE FOR CODIGO > "10000" .AND. NOMBRE = "JOSE" 14. Operaciones con bases de datos. En una base de datos es posible contar registros, y realizar operaciones de suma y media aritmtica. COUNT nos servir para contar, SUM para sumar el contenido de campos numricos y AVERAGE para calcular la media aritmtica. COUNT [] [FOR ] [WHILE ] TO COUNT cuenta el nmero de registros que cumplen una determinada condicin especificada. Dicha informacin ha de depositarse obligatoriamente en una variable numrica de memoria. es por defecto ALL SUM [] TO SUM suma uno o ms campos depositando el resultado en una variable. AVERAGE [} TO AVERAGE calcula la media aritmtica de uno o ms campos. 15. Exportar. COPY TO Copia toda la base de datos en curso o slo una parte a un nuevo archivo. COPY TO [ [FIELDS ] [FOR ] [WHILE ] [SDF/DELIMITED/DELIMITED WITH ] - Es el nombre del nuevo archivo. - Determina la porcin del archivo a copiar, por defecto es ALL (todo). FIELDS - Son los campos a copiar a la nueva base de datos. FOR/WHILE - Especifican la condicin a cumplir. SDF - Especifica que el archivo de salida ser con formato ASCII, con campos de longitud fija.

DELIMITED - Formato para el archivo de salida ASCII, con campos de longitud variable y separados por comas. Si se desea pueden separase con espacios (BLANK), o con cualquier otro delimitador. Ejemplo_1: USE HELP COPY TO HELP.TXT SDF 16. Importar. APPEND FROM aade datos a la base en uso a partir de otro archivo que puede ser que no sea (.DBF). Podemos seleccionar loa datos a aadir mediante cualificadores. APPEND [ [FIELDS ] FROM [FOR ] [WHILE ] [SDF/DELIMITED [WITH BLANK/]] - Registros a agregar por defecto son todos. - Lista de campos a agregar. - Nombre del archivo origen. Por defecto, (.DBF), FOR/WHILE - Indican las condiciones que han de cumplir los registros para ser agregados. SDF - Identifca archivos ASCII. DELIMITED - Archivos ASCII con separacin de campos con comas. DELIMITED WITH BLANK - Campos separados por un espacio DELIMITED WITH - Podemos especificarlo. Ejemplo_1: USE CLIENTES APPEND FROM VENTAS FOR PEDIDO > 5000

IV. Indices.

1. Crear ficheros ndices. INDEX indexa un fichero de datos por el campo que le indiquemos. Crea en disco un fichero con la extensin .NTX. Pueden usarse tambin claves mltiples formada por la suma de varios campos, de partes de campos, expresiones y campos, etc, pero recuerde que el mximo nmero de caracteres de una clave ser de 250. Para sumar campos hemos de tener siempre la precaucin de convertirlos previamente a cadena. Los ficheros ndices no son compatibles con los de Dbase III. Cuando un ndice est abierto con su correspondiente base de datos se actualiza de forma automtica. Una base de datos puede tener asociados como mximo 15 ficheros ndices. Los registros que se encuentran marcados para ser borrados tambin forman parte del ndice. INDEX ON {+} TO Ejemplo_1: USE CLIENTE INDEX ON NOMBRE TO NOMCLI Ejemplo_2: USE CLIENTE INDEX ON NOMBRE+DTOS(FECHA) TO FECCLI 2. Activar fichero ndice. Como vimos anteriormente en el captulo I, la activacin de ndices se realiza con USE. Se pueden especificar uno o ms ficheros ndices. Con SET ORDER TO se establecer el ndice activo. Esta sentencia altera el ordenamiento de la declaracin inicial de ndices hecha con USE...INDEX. Si indicamos SET ORDER TO 0 se desactivan todos los ficheros ndices. No obstante, la importancia de este mandato estriba en que no tenemos necesidad de abrirlos de nuevo para activarlos. SER ORDER TO es el nmero de ndice activo. Puede valer de 0 a 15. Ejemplo_1: NOMBRE = SPACE(20) FECHA = CTOD(SPACE(8)) USE CLIENTES INDEX NOMCLI,FECCLI,DOMCLI SET ORDER TO 2 LIST NOMBRE,FECHA TO PRINT

3. Bsqueda por ndice. SEEK busca una expresin en una clave ndice. SEEK Ejemplo_1: USE CLIENTES INDEX NOMCLI SEEK "LUIS MARIN" IF FOUND() @ 4,4 SAY FECHA @ 5,4 SAY VENTAS ELSE @ 10,1 SAY "No existe CLIENTE" ENDIF 4. Area de trabajo. SELECT selecciona las diferentes reas de trabajo en que vamos a situar nuestros ficheros de datos. El ltimo SELECT que enunciemos es aquel que contendr el fichero activo. SELECT / es un nmero comprendido entre 0 y 254. es el nombre de un rea de trabajo existente si hay un fichero abierto en ese rea. Se puede hacer referencia a las 10 primeras reas de trabajo con las letras A a J. En Clipper se pueden utilizar 255 reas de trabajo. En cada rea de trabajo se pueden abrir un fichero de base de datos y 15 ficheros ndices como mximo asociados a l. Ejemplo_1: SELECT 1 USE CLIENTES SELECT 2 USE DIARIOVTAS Ejemplo_2: SELECT 1 USE CLIENTES INDEX NOMCLI ALIAS CLI SELECT 2

USE DIARIOVTAS INDEX TOTALVTAS ALIAS DIA ... ... SELECT CLI SEEK "LUIS PEREZ" IF FOUND() CODCLI = CODIGO SELECT DIA SEEK CODCLI IF FOUND() @ 10,10 SAY PTASVENTAS ENDIF ENDIF 5. Cierre de ficheros. CLOSE cierra el fichero de base de datos abierto en el rea activa as como sus ndices asociados. CLOSE DATABASES cierra todos los ficheros de todas las reas de trabajo, as como sus correspondientes ndices. CLOSE INDEX cierra todos los ndices del rea de trabajo activa. CLOSE ALL cierra todos los ficheros abiertos.

V. Variables de memoria.1. Tipos de variables. Variable es un nombre asignado a una posicin de memoria que se puede utilizar para almacenar un dato concreto. Los tipos de variables por el tipo de dato que contienen son: -numricas -alfanumricas -lgicas -fechas 2. Nombrar una variable de memoria. Independientemente del tipo a que pertenezca una variable, debe asignrsele un nombre, que puede ser de uno a diez caracteres pueden ser una combinacin de letras, dgitos o signo de subrayado. El primer carcter de una variable de

memoria debe ser una letra. Los siguientes nombres son nombres de variables de memoria permitidos. COMPRAS Precio I_V_A MES_1_A_6 No debe utilizarse el mismo nombre para una variable y para un campo en la misma aplicacin. 3. Introduccin de datos en una variable. Las instrucciones STORE y el signo igual (=) pueden emplearse indistintamente para la asignacin de datos a variables de memoria. STORE TO = Ejemplo_1: PTAS = 0 FECHA_ALTA = CTOD(SPACE(8)) STORE "enero" TO MES 4. Visualizacin de variables. Para visualizar el contenido de una variable puede usarse la interrogacin (?) con los siguientes formatos: ? ?? Ejemplo_1: ? MES ?? "HOLA" 5. Expresiones. Adems de servir como depsito temporal, las variables de memoria pueden utilizarse en procesosde operaciones. Una variable de memoria puede ser incluida en una expresin para definir un procedimiento, para describir una condicin en una instruccin o para servir como elemento de salida (resultado de una operacin).

Pueden utilizarse diferentes tipos de expresin. Una expresin puede incluir un campo de datos, una variable de memoria, una constante o una combinacin de todo ello. Sin embargo, todos los elementos de una expresin deben ser del mismo tipo. La expresin ms corriente es la expresin aritmtica, que puede contener un valor, una variable de memoria, un campo numrico y una combinacin de stos unidos por uno o ms operadores aritmticos. Las expresiones son tiles para realizar clculos matemticos. Puede utilizarse una expresin para asignar un valor a una variable de memoria o para reemplazar el contenido de un campo numrico con un nuevo valor. Cuando se incluye ms de un operador aritmtico en una expresin, sta se valora de izquierda a derecha de acuerdo con siguiente sistema de prioridades: Prioridad mxima : ** ^ Prioridad secundaria: * / Baja prioridad : + Se pueden utilizar parntesis en una expresin para definir la secuencia de evaluacin y suprimir el sistema normal de prioridades. El material dentro de los parntesis siempre es evaluado previamente. Cuando haya parntesis anidados es una expresin aritmtica, la expresin del parntesis interno es evaluado en primer lugar, luego se evala el parntesis externo. Dentro de un parntesis, los operadores se evalan segn el sistema de prioridades, de izquierda a derecha. 6. Declaracin pblica y privada. PUBLIC declara variables de memoria como globales o pblicas. Estas pueden modificar su valor en cualquier parte del programa. PUBLIC PRIVATE declara de uso privado la variables de memoria especificadas. Ests pueden modificar su valor en partes de un programa. PRIVATE 7. Salvar y restaurar variables de memoria. SAVE TO salva en un fichero variables de memoria. SAVE TO [ALL [LIKE /EXCEPT ]] es el nombre del fichero donde se almacenarn las variables. Si no se especifica la extensin por defecto es .MEM.

ALL salva en el fichero todas las variables existentes. LIKE salva en el fichero todas las variables cuya estructura sea semejante a la especificada en . Recuerde que puede hacer uso de los smbolos comodines: * y ?. EXCEPT salva todas las variables que no tengan una estructura semejante a . RESTORE FROM restaura desde disco el fichero de variables de memoria . Si se usa ADDITIVE no se borra el entorno de variables activo al restaurar. RESTORE FROM [ADDITIVE] Al restaurar las variables de memoria, stas son privadas, a no ser que se especifiquen como pblicas antes de restaurarlas y se utilice la clasula ADDITIVE. Ejemplo_1: conf_cla = "1234" conf_dis = "A" conf_dir = "C:\GESTION\" conf_mar = 20 conf_col = "S" SAVE TO CONFIG ALL LIKE conf_* Ejemplo_2: RESTORE FROM CONFIG ADDITIVE clave = SPACE(4) @ 1,1 SAY "Teclear Clave: " GET clave READ IF clave = conf_cla ... ... ENDIF 8. Eliminar variables de memoria. RELEASE elemina de la vemoria las variables especificadas. RELEASE [ {,}] [ALL [LIKE] EXCEPT ]] .. es la lista de variables que se desean eliminar.

ALL indica que sean eliminadas todas las variables existentes. ALL LIKE indica que sean eliminadas todas las variables cuya estructura sea semejante a la expresada en . Se pueden usar los comodines: * y ?. ALL EXCEPT indica que sean borradas todas las variables que no concuerden con la estructura expresada en . Ejemplo_1: conf_cla = "1234" conf_dis = "A" conf_dir = "C:\GESTION\" conf_mar = 20 conf_col = "S" RELEASE ALL 9. Macros. Las macros sirven en CLIPPER para forzar la sustitucin de una variable por su valor en aquellos puntos de programa donde por si misma la variable no se traducira. Cuando tras una macro se sigue algn tipo de expresin hemos de indicar al sistema que la macro termina con un punto (.). & Ejemplo_1: nombre = "lpiz" ? "Artculo: &nombre" Ejemplo_2: base = "CLIENTES" USE &base Ejemplo_3: filtro = "EDAD > 18 .AND. SEXO = 'V'" USE CLIENTES LIST NOMBRE FOR &filtro 10. Operadores y valores lgicos. a) Operadores lgicos. .AND. (Y adems)

.OR. (O adems) .NOT. (Negacin) ! (Negacin) Ejemplo_1: IF EDAD > 18 .AND. EDAD < 65 PAGAR = 10000 ENDIF Ejemplo_2: IF !FILE("CLIENTES.DBF") @ 1,1 SAY " Error no encuentra base de datos " ENDIF b) Valores lgicos. Representan pares de valores. .T. (Verdadero) .F. (Valso) .Y. (Si) .N. (No) Ejemplo_1: JUBILADO = .Y. IF JUBILADO .. ENDIF 11. Operadores relacionales. = (Igual que) == (Exactamente igual que) > (Mayor que) < (Menor que) >= (Mayor igual que) = 2 .... .... ENDIF

VI. Operaciones de entrada y salida. 1. Entrada, mscara, validacin y rango. @...SAY/GET muestra en las coordenadas reseadas el contenido de la expresin que sigue a SAY, carga valores a los campos o las variables de memoria que siguen a GET (hasta ser ledos por READ.) Las variables usadas han de ser declaradas previamente. @ . [SAY [PICTURE ]] [GET [PICTURE ] [RANGE ,] [VALID ]] PICTURE expresa un formato para la entrada/salida de informacin. Este formato puede estar controlado por plantillas o funciones. Las primeras se aplican carcter a carcter y las segundas afectan a toda la clasula. Las funciones irn precedidas del smbolo @. RANGE sirve para validar datos numricos, indicando un lmite inferior y un superior. Entre estos lmites deber estar comprendido en dato numrico para que sea vlido. VALID se emplea para expresiones genricas de validacin. ser la condicin de validacin. Ejemplo_1: nombre = SPACE(20) @ 2,1 SAY "Teclear nombre: " GET nombre PICTURE "@!" READ Ejemplo_2: edad = 0 @ 3,3 SAY "Teclear edad: " GET edad PICTURE "999" RANGE 19,125 READ

Ejemplo_3: resp = SPACE(1) @ 5,5 say " GRABAR ? " GET resp "!" VALID(resp$"SN") READ Ejemplo_4: importe = 0 @ 5,5 SAY " TECLEAR IMPORTE: " GET importe PICTURE "@E9,999.99" READ Smbolos usados por PICTURE A Hace que un GET slo admita letras L Idem slo para valores lgicos. Y Permite slo "Y" o "N" N Idem slo letras y caracteres X Idem cualquier carcter 9 Permite que slo se visualicen dgitos # Idem slo letras, espacios y signos ! Idem slo letras maysculas , Representa los miles en los datos numricos $ Hace que se muestren $ para rellenar una cifra por la izquierda. * Idem con * Smbolos utilizados como funciones 10 porcentaje = porcentaje - 2 ENDIF Ejemplo_3: salario = salario + IIF(ho>80,80000+1500*(ho-80),80000) 2. DO CASE (En caso de cumplir condicin...). Bifurca la ejecucin de un programa segn las diferentes condiciones especificadas. OTHERWISE representa todos los casos que no cumplen ninguna condicin. DO CASE CASE CASE OTHERWISE ENDCASE son las diferentes condiciones. Ejemplo_1: DO CASE CASE velocidad > 180 consumo = 4 CASE velocidad > 120 consumo = 3 CASE velocidad > 80 consumo = 2 OTHERWISE

consumo = 1 ENDCASE 3. FOR..NEXT (Desde un valor hasta alcanzar otro). Permite la creacin de una estructura de bucle que se ejecuta para un rango de valores determinados de forma ascendente o descendente. FOR TO [STEP ] [EXIT] [LOOP] NEXT es el valor inicial. Este valor se asignar a una variable de control. es el valor final del bucle. STEP indica el incremento o decremento de la variable. Por defecto incrementa en 1. EXIT detiene el bucle pasando el control a la sentencia posterior a NEXT. LOOP pasa de nuevo el control al comienzo del bucle, sin necesidad de que se llegue a NEXT. Ejemplo_1: FOR N=1 TO 10 CUADRADO = N**N ? CUADRADO NEXT 4. DO WHILE (Hacer mientras que cumpla condicin...). DO WHILE realiza una estructura de bucle mientras se cumpla la condicin especificada. DO WHILE comienza y contina el bucle si se cumple la condicin. ENDDO devuelve el control al principio. DO WHILE [EXIT] [LOOP] ENDDO es la condicin que se debe cumplir para que se ejecute el bucle.

LOOP manda todo el proceso de nuevo al comienzo del bucle, sin necesidad de que se llegue al final, es decir a ENDDO. EXIT fuerza a que se pare el proceso y sale del bucle aunque la condicin no haya cesado de darse. Ejemplo_1: DO WHILE .T. @ 2,2 PROMPT "CLIENTES" @ 3,2 PROMPT "PROVEEDORES" MENU TO opcion DO CASE CASE opcion = 1 DO CLI CASE opcion = 2 DO PRO CASE LASTKEY() = 27 CLEAR RETURN ENDCASE ENDDO Ejemplo_2: C=0 DO WHILE C CHEQDIS.TXT 5. Comprobar la existencia de un fichero. Antes de realizar cualquier operacin con un fichero podemos comprobar su existencia con la funcin FILE() que nos retornar un verdadero (.T.) o un falso (.F.). FILE() Ejemplo_1: IF FILE("CLIENTES.DBF") SORT ON NOMBRE TO CLISORT DELETE FILE CLIENTES.DBF ENDIF

X. Procedimientos y funciones.1. Procedimiento. PROCEDURE indica el principio de un procedimiento. PROCEDURE [RETURN] - Debe de empezar con una letra y slo evala los 10 primeros caracteres. RETURN - Es aconsejable su uso para determinar el fin de un procedimiento, aunque no necesario, ya que detecta el fin al encontrar otro procedure o una marca de fin de archivo.

Ejemplo_1: CLEAR DO FONDO INKEY(0) RETURN PROCEDURE Fondo FOR I=0 TO 24 @ I, 0 SAY REPLICATE("", 80 ) NEXT RETURN 2. LLamada a un procedimiento. DO ejecuta un procedimiento escrito en Clipper, C o ensamblador, pasndole parmetros (hasta 128) con WITH. DO [WITH ] Ejemplo_1: PROCEDURE LISTACURSOS IF !ISPRINTER() DO MSGIMPRESORA ENDIF * rdenes ... RETURN PROCEDURE MSGIMPRESORA CLEAR @ 9, 28 TO 12, 51 @ 10,30 SAY "CONECTE LA IMPRESORA" @ 11,32 SAY "Y PULSE UNA TECLA" INKEY(0) RETURN 3. Creacin de un fichero de procedimientos. SET PROCEDURE Activa los archivos de procedimientos especificados. SET PROCEDURE TO [ ] - Si se omite la extensin, se asume que es (.PRG). Ejemplo_1:

SET PROCEDURE TO CLIENTES SET PROCEDURE TO PROVEED SET PROCEDURE TO MATERIAL 4. Nombre del procedimiento y nmero de lnea. PROCNAME() indica el nombre del procedimiento o programa que estamos ejecutando. PROCNAME() Ejemplo_1: ? "Procedimiento en uso : ", procname() PROCLINE() Devuelve el nmero de la lnea del cdigo fuente en curso del programa. Siempre que no le hayamos indicado al compilador que no numere las lneas. PROCLINE() Ejemplo_1: ? procline(), "Linea ", cLinea

5. Creacin de una funcin. FUNCTION Declara una funcin definida por el usuario escrita en Clipper. FUNCTION RETURN - Solo acepta los diez primeros caracteres. - Es obligatorio la devolucin de un valor. Para llamar a una funcin de usuario, proceda del siguiente modo: funcin( )

Los parmetros se pasan por valor, exceptuando los arrays, o si el parmetros es precedido por una arroba (@), entonces es pasado por referencia. Ejemplo_1: CLEAR @ 24,0 SAY ISBISIESTO( DATE() ) RETURN FUNCTION ISBISIESTO PARAMETERS DFECHA PRIVATE DANY, CCADENA, LDEVUELVE DANY = YEAR( DFECHA ) CCADENA = CTOD( "29-02-" + STR(DANY)) IF DOW(CCADENA)=0 LDEVUELVE = .F. ELSE LDEVUELVE = .T. ENDIF RETURN LDEVUELVE 6. Conocer el nmero de parmetros. PCOUNT() Determina el nmero de parmetros pasados a un procedimiento o funcin definida por el usuario. PCOUNT() Ejemplo_1: PROCEDURE EDITOR PARAMETERS CFICHERO IF PCOUNT() = 0 @ 24,0 SAY "INDIQUE EL FICHERO: " GET CFICHERO READ ENDIF

XI. Tablas.1 Declaracin tablas. Una tabla es un rea de memoria que puede reservarse para contener un grupo de datos. Una tabla consta de un identificativo o nombre y un nmero definible de posiciones (de 1 a 1024 en Clipper '87). Estas posiciones pueden contener datos

numricos, alfabticos, fechas, etc. Para acceder a uno de los datos contenido en una tabla se har indicando el nmero de posicin que ocupa. Existen varias funciones que posibilitan realizar operaciones en una tabla tales como aadir nuevos datos, eliminar datos, rellenar, etc. Este tipo de estructuras de memoria se utilizan como soporte temporal de los datos. DECLARE declara una o ms reas de memoria (arrays) con una longitud especfica. Antes de poder realizar cualquier operacin con una tabla debemos declararla. DECLARE []{,[]...} es el nombre de la tabla es la longitud de la tabla (1-1024) Ejemplo_1: DECLARE PROVINCIA[8] PROVINCIA[1] = "ALMERIA" PROVINCIA[2] = "CADIZ " PROVINCIA[3] = "CORDOBA" .... Ejemplo_2: numero = 8 DECLARE PROVINCIA[numero] Ejemplo_3: tipo = "FICHA" numero = "01" tabla = tipo+numero DECLARE &tabla[4] &tabla[1] = "ANDALUCIA" &tabla[2] = 8 &tabla[3] = .T. &tabla[4] = CTOD("01/01/92") 2 Longitud. LEN es una funcin que devuelve el nmero de elementos que tiene una tabla, o lo que es lo mismo la longitud de la tabla indicada. LEN() - Nombre de la tabla Ejemplo_1: DECLARE PROVINCIA[8] ? LEN(PROVINCIA) 3 Insertar. La insercin de nuevos elementos en una tabla es posible mediante la funcin AINS indicndose el nombre de la tabla y la posicin donde se desea insertar el

nuevo elemento. Automticamente, el elemento insertado desplazar a los posteriores en una posicin y el ltimo se perder. AINS(,) - Nombre de la tabla - Posicin elemento Ejemplo_1: DECLARE NOMBRE[3] NOMBRE[1] = "LUIS" NOMBRE[2] = "MARIA" NOMBRE[3] = "CARLOS" AINS(NOMBRE,2) NOMBRE[2] = "MANUEL" ? NOMBRE[1] ? NOMBRE[2] ? NOMBRE[3] 4 Suprimir. ADEL suprime elementos en una tabla redimensionndola. ADEL(,) - Nombre de la tabla - Posicin elemento Ejemplo_1: DECLARE NOMBRE[3] NOMBRE[1] = "LUIS" NOMBRE[2] = "MARIA" NOMBRE[3] = "CARLOS" ADEL(NOMBRE,2) ? NOMBRE[1] ? NOMBRE[2] 5 Copiar. La copia de un elemento o grupo de elementos de una tabla a otra tabla la realiza la funcin ACOPY, debiendo indicarse la tabla origen, la tabla destino, la posicin inicial de la tabla origen, el n de elementos a copiar y el elemento de la tabla destino donde ha de comenzarse la copia. ACOPY(,[, [,[,]]]) - Nombre de la tabla origen - Nombre de la tabla destino - Posicin origen en tabla origen a copiar

- Nmero de elementos a copiar desde - Elemento destino a comenzar copia Ejemplo_1: DECLARE TABLA_A[2],TABLA_B[2] TABLA_A[1] = "LUIS" TABLA_A[2] = "MARIA" ACOPY(TABLA_A,TABLA_B) ? TABLA_B[1] ? TABLA_B[2] Ejemplo_2: DECLARE TABLA_A[2],TABLA_B[3] TABLA_A[1] = "A" TABLA_A[2] = "B" ACOPY(TABLA_A,TABLA_B,1,1,3) ? TABLA_B[3] 6 Rellenar. AFILL rellena uno o ms elementos con la expresin indicada. AFILL(,[,[,]]) - Nombre de la tabla - Expresin con la que se rellenar la tabla - Posicin donde comenzar a rellenar - Nmero de elementos a rellenar desde Ejemplo_1: DECLARE TLF[2] TLF[1] = "433-23-23" TLF[2] = "433-23-24" AFILL(TLF,"000-00-00",2,1) ? TLF[1] ? TLF[2] 7 Directorio. ADIR accede al directorio del disco almacenado en tablas informacin relativa a los ficheros y directorios. ADIR( [, [, [, [, [,]]]]]) - mscaras posibles en DOS (*/?) o nombre fichero. - Es la tabla que se rellenar con los nombres de ficheros reseados en . Tipo C. - Idem. para tamao en bytes de fichero. Tipo N. - Idem. para fechas. Tipo D - Idem. para horas. Tipo C - Idem. para atributos. Tipo C Atributos: A - Fichero archivo D - Directorio H - Oculto R - Slo Lectura S - Sistema

Ejemplo_1: fil_prg = ADIR("*.PRG") Ejemplo_2: DECLARE TABLA[ADIR("*.PRG")] Ejemplo_3: fil_sec = ADIR("*.sec") DECLARE NOMBRE[fil_sec],FECHA[fil_sec] ADIR("*.sec",NOMBRE,"",FECHA) FOR n=1 TO fil_sec fil_del = NOMBRE[n] IF FECHA[n] < CTOD("01/01/92") DELETE FILE &fil_del ENDIF NEXT 8 Estructura. La estructura de una base de datos puede conocerse mediante la funcin AFIELDS. Los nombres de campos, tipo, longitud, etc. pueden almacenarse en tablas para el posterior tratamiento. AFIELDS( [, [, [, ]]]]) - Tabla que contendr nombre de campos. - Tabla que contendr tipo de campos. - Tabla que contendr longitud de campos. - Tabla que contendr nmero posiciones decima les. Ejemplo_1: USE base num_cam = FCOUNT() DECLARE NOMBRE[num_cam],TIPO[num_cam] AFIELDS(NOMBRE,TIPO) FOR n=1 TO num_cam ? NOMBRE[n] ? TIPO[n] NEXT 9 Men. ACHOICE es una funcin que permite generar un men de persiana con los elementos de una tabla en las posiciones de pantalla que se indiquen. Devuelve un valor de tipo numrico que se corresponde con el nmero de posicin del elemento seleccionado. Si el valor es 0 no se seleccion ningn elemento. ACHOICE(,,,, [,[,[,[,]]]]) - Coordenada X1 de pantalla

- Coordenada Y1 de pantalla - Coordenada X2 de pantalla - Coordenada Y2 de pantalla - tabla que contendr elementos - tabla que contendr valores lgicos - Funcin de usuario. Pasa 3 parmetros: 1-modalidad: 0 Perodo de inactividad 1 Se intenta sobrepasar el principio 2 Se intenta sobrepasar el final 3 Espera de tecla especfica 4 No se puede escoger una opcin 2-elemento actual de la tabla 3-posicin que ocupa el elemento en la ventana Valores retorno: 0 Suspende seleccin 1 Devuelve elemento cursor 2 Contin#a proceso seleccin 3 Va al elemento cuyo primer carcter corresponde a la ltima tecla oprimida. Ejemplo_1: CLEAR SET SCOREBOARD OFF SET COLOR TO W+/N,,,,BG/N DECLARE MEN[3],LOG[3] MEN[1] = "ALTA " MEN[2] = "BAJA " MEN[3] = "MODIFICACION" LOG[1] = .T. LOG[2] = .T. LOG[3] = .T. clave = SPACE(2) @ 1,01 SAY "Clave: " GET clave PICTURE "XX" READ DO CASE CASE clave = "11" LOG[3] = .F. CASE clave = "22" LOG[2] = .F. OTHERWISE RETURN ENDCASE @ 4,1 TO 8,19 opcion = ACHOICE(5,2,7,18,MEN,LOG) 10 Base Datos DBEDIT visualiza el contenido de una base de datos en pantalla. Es una potente funcin que permite la edicin de los datos sobre una ventana definida en pantalla. DBEDIT([[,,[,[]]]] [,],[,] [,