Está en la página 1de 59

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 <Fprg> [-<opcin> {-<opcin>}] <Fprg> Programa fuente que se compila -<opcin> 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 <Fprg> 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 <Fobj> {,<Fobj>} [OUTPUT <Fexe>] LIB <Flib> {,<Flib>} | [@<Flnk>] * LINK (Microsoft) Sintaxis: LINK <Fobj> {<Fobj>},<Fexe>,<mapa>,<Flib> {<Flib>} * TLINK (Borland) Sintaxis:

TLINK <Fobj> {<Fobj>},<Fexe>,<mapa|/x>,<Flib> {<Flib>} * RTLINK (Pocket Soft. Clipper 5) Sintaxis: RTLINK [FI <Fobj> [OUTPUT <Fexe>] [LIB [<Flib>] [<opciones>]] | [@<Flnk>] 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 @<via><Flnk> 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 <Fobj> {,<Fobj>}

por SECTION INTO <Fovl> FILE <Fobj> {,<Fobj>} (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=<Fmap>. 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 <Fstr> 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 <Fdbf> FROM <Fstr> 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 <Fdbf> [INDEX <Fntx1> {,<Fntx2>}] [EXCLUSIVE] [ALIAS] <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 [<ambito>] [<alias1>] <campo1> WITH <expr1> {,[<alias2>]<campo2> WITH <expr2>} [FOR <expL>][WHILE <exprL>] 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] [<mbito>] [<Lcam>] [FOR <expL>] [WHILE <expL>] [TO PRINT/TO FILE <ftxt>] DISPLAY [OFF] [<mbito>] [<Lcam>] [FOR <expL>] [WHILE <expL>] [TO PRINT/TO FILE <ftxt>]

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 <Reg> (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. @ <Fila>,<Col> [SAY <ExpC> [PICTURE <msc> ]] [GET <Vmen> [PICTURE <masc>] [RANGE <expN1>, <expN2>] [VALID <expL>]] 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. <expL> 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 <ExpL>] [WHILE <ExpL>] [mbito] RECORD <nm> 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 [<mbito>] [FOR <ExpL>] [WHILE <ExpL>] 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 [<mbito>] [FOR <expL>] [WHILE <expL>] 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 [<mbito>] [FOR <expL>] [WHILE <expL>] TO <vmen> COUNT cuenta el nmero de registros que cumplen una determinada condicin especificada. Dicha informacin ha de depositarse obligatoriamente en una variable numrica de memoria. <mbito> es por defecto ALL SUM [<mbito>] TO <vmen> SUM suma uno o ms campos depositando el resultado en una variable. AVERAGE [<mbito>} TO <vmen> 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 <archivo> [<mbito> [FIELDS <lista campos>] [FOR <condicin>] [WHILE <condicin>] [SDF/DELIMITED/DELIMITED WITH <delimitador>] <archivo> - Es el nombre del nuevo archivo. <mbito> - Determina la porcin del archivo a copiar, por defecto es ALL (todo). FIELDS <lista campos> - Son los campos a copiar a la nueva base de datos. FOR/WHILE <condicin> - 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 [<registros> [FIELDS <campos>] FROM <fichero> [FOR <condicin>] [WHILE <condicin>] [SDF/DELIMITED [WITH BLANK/<delimitador>]] <registros> - Registros a agregar por defecto son todos. <campos> - Lista de campos a agregar. <fichero> - Nombre del archivo origen. Por defecto, (.DBF), FOR/WHILE <condicin> - 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 <delimitador> - 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 <campo1> {+<campo2>} TO <Fntx> 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 <expN> <expN> 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 <expr> 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 <rea>/<alias> <rea> es un nmero comprendido entre 0 y 254. <alias> 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 <dato> TO <var> <var> = <dato> 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: ? <expr> ?? <expr> 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 <Lvar> PRIVATE declara de uso privado la variables de memoria especificadas. Ests pueden modificar su valor en partes de un programa. PRIVATE <Lvar> 7. Salvar y restaurar variables de memoria. SAVE TO salva en un fichero variables de memoria. SAVE TO <fmem> [ALL [LIKE <masc>/EXCEPT <masc>]] <fmem> 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 <masc> salva en el fichero todas las variables cuya estructura sea semejante a la especificada en <masc>. Recuerde que puede hacer uso de los smbolos comodines: * y ?. EXCEPT <masc> salva todas las variables que no tengan una estructura semejante a <masc>. RESTORE FROM restaura desde disco el fichero de variables de memoria <Fmem>. Si se usa ADDITIVE no se borra el entorno de variables activo al restaurar. RESTORE FROM <Fmem> [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 [<vmem1> {,<vmem2>}] [ALL [LIKE<masc>] EXCEPT <masc>]] <vmem1>..<vmem2> es la lista de variables que se desean eliminar.

ALL indica que sean eliminadas todas las variables existentes. ALL LIKE <masc> indica que sean eliminadas todas las variables cuya estructura sea semejante a la expresada en <masc>. Se pueden usar los comodines: * y ?. ALL EXCEPT <masc> indica que sean borradas todas las variables que no concuerden con la estructura expresada en <masc>. 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 (.). &<vmem> 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) <= (Menor igual que) <> # (Distinto) Ejemplo_1: DO CASE CASE MES = 1 .... ....

CASE MES >= 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. @ <fila>.<col> [SAY <expC> [PICTURE <masc>]] [GET <expC> [PICTURE <masc>] [RANGE <expN1>,<expN2>] [VALID <expL>]] 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. <expL> 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 <"@<smbolo>") C Indica CR despus de un nmero positivo X Indica DB despus de un nmero negativo ( Encierra con parntesis nmeros negativos con espacios a la izquierda. ) Idem sin espacios a la izquierda B Justifica los nmeros por la izquierda A Hacen que slo se puedan captar caracteres alfabticos ! Hace que slo se permitan letras maysculas R Permite insertar caracteres que aparecern solamente en pantalla, no almacenndose en la variable E Convierte los nmeros al formato europeo D Visualiza las fechas en el formato especificado con SET DATE K Borra el contenido de la variable si no se pulsa primero un carcter de control del cursor S Hace scroll horizontal con la variable Z Hace que los valores cero en un campo numrico se representen como blancos. ACCEPT acepta datos alfanumricos por pantalla y los carga en <mven>. No es necesario haber declarado previamente <Vmen>.

ACCEPT [<expC>] TO <vmen> Ejemplo_1: ACCEPT "Escribe tu nombre" TO nombre INPUT Acepta datos por pantalla. Los datos han de ser identificados con sus correspondientes indicadores, as, por ejemplo, una cadena de carcteres deber escribirse entrecomillada, mientras que esto no ser preciso con un nmero. INPUT [<expC>] TO <vmen> Ejemplo_1: INPUT " Edad " TO edad WAIT detiene la ejecucin del programa y espera la pulsacin de una tecla. WAIT [<expC>] [TO <vmen>] <expC> es una cadena de caracteres que se visualizarn a modo de informacin. Si se omite, aparecer en pantalla: Press any key to continue... <vmen> es una variable que contendr el carcter qu se ha pulsado 2. Pausa. INKEY() detiene por un tiempo el flujo del programa y devuelve el valor de la tecla que se est pulsando. INKEY([<expN>]) <expN> indica el nmero de segundos de espera. Si es igual a cero detiene el programa y espera que pulsemos una tecla cuyo valor ASCII toma. Ejemplo_1: tecla = INKEY(0) Pulsando [enter], tecla = 13 3. Conocer la ltima tecla pulsada. LASTKEY() devuelve el valor de la ltima tecla pulsada. Dicho valor es un nmero que se corresponde con el valor ASCII del carcter.

Ejemplo_1: INKEY(0) DO CASE CASE LASTKEY() = 27 RETURN CASE CHR(LASTKEY()) = "+" ..... CASE LASTKEY() = 13 ..... ENDCASE 4. Salida. ?, ??, @ SAY, TEXT/ENDTEXT se emplean generalmente como instrucciones de salida (pantalla/impresora) para expresiones, cadenas, bloques de texto, etc. Ejemplo_1: TEXT ********************* ERROR ********************* ENDTEXT Ejemplo_2: a=4 b=5 c=3 ? (a*b)**c 5. Borrar pantalla. CLEAR borra la pantalla, manteniendo los atributos de color vigente, y libera todos los GET pendientes. Asimismo, posiciona el cursor en la posicin 0,0 (posiciones verticales 0 a 24 / posiciones horizontales 0 a 79). @..CLEAR TO borra un rea de pantalla. Ejemplo_1: @ 3,3 CLEAR TO 9,9 6. Dibujar un marco.

@..TO dibuja un marco de lnea sencilla en las coordenadas especificadas. Si se emplea la opcin DOUBLE, el marco dibujado ser de lnea doble. @ <fila sup>,<col izq> TO <fila inf>,<col dcha> [DOUBLE] 7. Dibujar una caja. @..BOX construye una caja entre las coordenadas indicadas y con los cdigos ASCII especificados en <expC>. El orden de los caracteres es: 1. Esquina superior izquierda 2. Lnea horizontal superior 3. Esquina superior derecha 4. Lnea vertical derecha 5. Esquina inferior derecha 6. Lnea horizontal inferior 7. Esquina inferior izquierda 8. Lnea vertical izquierda 9. Carcter de relleno @ <fila sup>,<col izq>,<fila inf>,<col dcha> BOX <expC> Ejemplo_1: cadena = "+-++-+" @ 1,1,10,10 BOX cadena 8. Hacer un men. @..PROMPT facilita la creacin de mens en nuestros programas. Cada opcin se muestra con un PROMPT en una posicin especifica de la pantalla y se le acompaa opcionalmente de un mensaje aclaratorio. @ <fila>,<col> PROMPT <expC> [MESSAGE <expC>] SET WRAP ON/OFF posibilita la rotacin al alcanzar la primera o ltima opcin. SET MESSAGE determina el nmero de fila donde aparecern los mensajes de las distintas opciones. SET MESSAGE TO [<fila> [CENTER/CENTRE]] CENTER/CENTRE muestra el mensaje en la fila especificada centrndolo. MENU TO sirve para leer el valor numrico que representa a la opcin seleccionada. Dicho valor se asigna automticamente y representa el nmero de orden de cada PROMPT.

Ejemplo_1: SET WRAP ON SET MESSAGE TO 23 CENTER @ 1,1 PROMPT "ALTA " MESSAGE "Alta de usuarios " @ 2,1 PROMPT "BAJA " MESSAGE "Baja de usuarios " @ 3,1 PROMPT "LISTADO " MESSAGE "Listado DESDE/HASTA" MENU TO opcion DO CASE CASE opcion = 1 ..... CASE opcion = 2 ..... CASE opcion = 3 ..... ENDCASE 9. Salvar/Restaurar pantallas. SAVE SCREEN salva la pantalla actual as como su estructura de variables ledas y pendientes de leer. SAVE SCREEN [TO <vmem>] TO <vmem> indica que la pantalla ser almacenada en la variable de memoria <vmem>. Esta variable ser de tipo carcter. RESTORE SCREEN restaura una pantalla almacenada previamente RESTORE SCREEN [FROM <vmem>] SAVESCREEN() almacena una parte de la pantalla en una variable de memoria <vmen> = SAVESCREEN(<fil sup>,<col izq>,<fil inf>,<col dcha>) RESTSCREEN() restaura una rea de una pantalla salvada previamente. RESTSCREEN(<fil sup>,<col izq>,<fil inf>,<col dcha>,<vmem>) Ejemplo_1: @ 2,3 SAY " -------- " @ 3,3 SAY " CLIENTES " @ 4,3 SAY " -------- " SAVE SCREEN TO panta CLEAR

INKEY(0) RESTORE FROM panta RETURN Ejemplo_2: @ 2,3 SAY " -------- " @ 3,3 SAY " CLIENTES " @ 4,3 SAY " -------- " panta = SAVESCREEN(3,3,4,12) CLEAR INKEY(0) RESTSCREEN(5,5,6,14,panta)

VII. Bifurcacin y bucles.


1. IF (Si cumple condicin...). Bifurca un programa entre una condicin y su opuesta. Puede usarse como mandato o como funcin. En el primer caso, lo que hace es ejecutar alternativamente unas instrucciones u otras y en el segundo devolver alternativamente un valor u otro. La sintxis de la funcin puede ser IF() o IIF(). Mandato: IF <expL> <instrucciones> [ELSEIF <expL>] <instrucciones> [ELSE <instrucciones>] ENDIF Funcin: IIF/IF(<expL>,<.T.>,<.F.>) <expL> es la condicin que se desea establecer ELSEIF reconoce rdenes cuando se cumple la que condicin expresada. ELSE realiza las distintas rdenes que se indican cuando la condicin es falsa. <.T.> Indica la expresin a evaluar para el valor verdadero de la condicin.

<.F.> Indica la expresin a evaluar para el valor falso de la condicin. Ejemplo_1: IF sexo = "V" peso = 20 ELSE peso = 12 ENDIF Ejemplo_2: IF porcentaje > 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 <expL> <instrucciones> CASE <expL> <instrucciones> OTHERWISE <instrucciones> ENDCASE <expL> 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 <expN1> TO <expN2> [STEP <expN3>] <instrucciones> [EXIT] <instrucciones> [LOOP] NEXT <expN1> es el valor inicial. Este valor se asignar a una variable de control. <expN2> es el valor final del bucle. STEP <expN3> 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 <expL> <instrucciones> [EXIT] [LOOP] ENDDO <expL> 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<100 C=C+1 ?C ENDDO

VIII. Fin.
1. Retornar. RETURN termina un procedimiento, programa, o funcin, devolviendo el control al procedimiento de llamada o al DOS. Ejemplo_1: DO BORRAR WITH 2,2,20,20 .. ..

.. QUIT PROCEDURE BORRAR PARAMETERS X1,Y1,X2,Y2 @ X1,Y1 CLEAR TO X2,Y2 RETURN 2. Terminar. QUIT termina la ejecucin de un programa devolviendo el control al DOS. Este mandato realiza la misma funcin que CANCEL o que RETURN en el procedimiento de ms alto nivel. Ejemplo_1: USE FICHERO INDEX INDICE SEEK CLAVE IF FOUND() DO PROCESO ELSE QUIT ENDIF 3. Cancelar. CANCEL cancela la ejecucin de un programa o procedimiento, devolviendo el control al sistema operativo. Ejemplo_1: clave = SPACE(4) @ 4,4 SAY "Clave: " GET clave PICTURE "@!" READ IF clave # "9876" CANCEL ELSE ENDIF

IX. Mantenimiento de ficheros.


1. Renombrar fichero.

RENAME renombra ficheros. Es el equivalente al RENAME del DOS ,aunque su sintaxis es algo distinta. RENAME <fich1> TO <fich2> <fich1> es el nombre inicial del fichero y <fich2> es el nuevo nuevo. Tanto <fich1> como <fich2> deben incluir la extesin del fichero. Ejemplo_1: RENAME CLIENTES.DBF TO CLIENTES.DAT USE CLIENTES.DAT 2. Copiar ficheros. COPY FILE copia el contenido de <fich1> en <fich2>. No sirven con este mandato los comodines para copiar varios ficheros en bloque. Salvo esta excepcin funciona igual que el COPY del DOS. Es importante recordar que siempre hemos de proporcionarle las vas donde buscar los ficheros a copiar y donde queremos copiarlos. Si no se le especifica esta ltima el fichero se deposita en el directorio de trabajo. COPY FILE <fich1> TO <fich2> <fich1> es el fichero origen y <fich2> el fichero destino. Ejemplo_1: COPY FILE CLIENTES.DAT TO CLIENTES.DBF 3. Borrar ficheros. DELETE FILE y ERASE borran ficheros. Al especificar el nombre del fichero a borrar debe figurar tambin su extensin. Antes de usar este comando es necesario cerrar el fichero a borrar con el comando CLOSE. ERASE/DELETE FILE <fich> Ejemplo_1: USE CLIENTES .. .. CLOSE DATABASES DELETE FILE CLIENTES.DBF

4. LLamada al Dos. Adems de las rdenes elementales de mantenimiento de ficheros vistas anteriormente, existe la posibilidad de invocar cualquiera del DOS con RUN o !. Por ejemplo, para salir temporalmente de un programa podemos incluir un RUN COMMAND.COM y regresar con EXIT. RUN <sent> ! <sent> Ejemplo_1: RUN CHKDSK > 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(<fich>) 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 <nombre procedimiento> <rdenes> [RETURN] <nombre procedimiento> - 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 <procedimiento> [WITH <lista de parmetros>] 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 [ <archivo> ] <archivo> - 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 <nombre funcin> <instrucciones> RETURN <valor de respuesta> <nombre de funcin> - Solo acepta los diez primeros caracteres. <valor de respuesta>- Es obligatorio la devolucin de un valor. Para llamar a una funcin de usuario, proceda del siguiente modo: funcin( <lista de parmetros> )

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 <array>[<expN>]{,<array>[<expN>]...} <array> es el nombre de la tabla <expN> 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(<array>) <array> - 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(<array>,<expN>) <array> - Nombre de la tabla <expN> - 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(<array>,<expN>) <array> - Nombre de la tabla <expN> - 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(<array1>,<array2>[,<expN1> [,<expN2>[,<expN3>]]]) <array1> - Nombre de la tabla origen <array2> - Nombre de la tabla destino <expN1> - Posicin origen en tabla origen a copiar

<expN2> - Nmero de elementos a copiar desde <expN1> <expN3> - 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(<array1>,<expr>[,<expN1>[,<expN2>]]) <array1> - Nombre de la tabla <expr> - Expresin con la que se rellenar la tabla <expN1> - Posicin donde comenzar a rellenar <expN2> - Nmero de elementos a rellenar desde <expN1> 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(<masc> [,<array1> [,<array2> [,<array3> [,<array4> [,<array5>]]]]]) <masc> - mscaras posibles en DOS (*/?) o nombre fichero. <array1> - Es la tabla que se rellenar con los nombres de ficheros reseados en <masc>. Tipo C. <array2> - Idem. para tamao en bytes de fichero. Tipo N. <array3> - Idem. para fechas. Tipo D <array4> - Idem. para horas. Tipo C <array5> - 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(<array1> [,<array2> [,<array3> [,<array4> ]]]]) <array1> - Tabla que contendr nombre de campos. <array2> - Tabla que contendr tipo de campos. <array3> - Tabla que contendr longitud de campos. <array4> - 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(<fila sup>,<colizq>,<fila inf>,<col dcha>,<array1> [,<array2>[,<func>[,<expN1>[,<expN2>]]]]) <fila sup>- Coordenada X1 de pantalla

<col izq> - Coordenada Y1 de pantalla <fila inf>- Coordenada X2 de pantalla <col dcha>- Coordenada Y2 de pantalla <array1> - tabla que contendr elementos <array2> - tabla que contendr valores lgicos <func> - 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([<fila sup>[,<colizq>,[<fila inf>,[<col dcha>]]]] [,<array1>],[,<func>] [,<array2]/<expC>] [,<array3]/<expC>][,<array4]/<expC>] [,<array5]/<expC>] [,<array6]/<expC>] [,<array7]/<expC>])

<fila sup> <col izq> <fila inf> <col dcha> posiciones. <array1> - Tabla de nombres de los campos. <func> - Funcin de usuario. <array2> - Tabla de modelos de visualizacin. <array3> - Tabla de encabezados de columnas. <array4> - Tabla de separacin de encabezados. <array5> - Tabla de separacin de columnas. <array6> - Tabla de separacin de pies. <array7> - Tabla de pies. Cuando se utiliza una funcin de usuario, DBEDIT() pasa de forma automtica dos parmetros: 1-Estado actual de DBEDIT() dependiendo de la ltima tecla pulsada antes de llamar a la funcin. Las diferentes modalidades del estado son: 0 Inactividad 1 Se ha intentado sobrepasar el primer 2 Se ha intentado sobrepasar el ltimo registro 3 El fichero de datos se encuentra vacio 4 Se ha pulsado una tecla especfica 2-Posicin que ocupa en la tabla el campo sobre el que nos encontramos posicionados. Valores de retorno: 0 Para salir de DBEDIT() 1 Para continuar la ejecucin de DBEDIT() 2 Se vuelven a leer los datos nuevamente y se contina DBEDIT() 3 Se activa la posibilidad de aadir nuevos registros Ejemplo_1: DECLARE TAB1[3],TAB2[3],TAB3[3],TAB4[3],TAB5[3],TAB6[3],TAB7[3] * Nombre campos TAB1[1]= "BAS_LOC" TAB1[2]= "BAS_PRO" TAB1[3]= "BAS_HAB" * Mscaras de visualizacin TAB2[1]= "XXXXXXX" TAB2[2]= "XXXXXXX" TAB2[3]= "999,999,999"

* Encabezados de columna TAB3[1]= "LOCALIDAD" TAB3[2]= "PROVINCIA" TAB3[3]= "HABITANTES" * Separadores de encabezados TAB4[1]= "D" TAB4[2]= "D" TAB4[3]= "D" * Separadores de columnas TAB5[1]= "3" TAB5[2]= "3" TAB5[3]= "3" * Separadores de pies de pgina TAB6[1]= "D" TAB6[2]= "D" TAB6[3]= "D" * Pies de pgina TAB7[1]= "DPIE_1D" TAB7[2]= "DPIE_2D" TAB7[3]= "DPIE_3D" CLEAR USE BASE DBEDIT(1,1,7,40,TAB1,"",TAB2,TAB3,TAB4,TAB5,TAB6,TAB7)

XII. Impresora.
1. Salida. SET DEVICE redirecciona las salidas por pantalla o por impresora. Por defecto es por pantalla. SET DEVICE TO SCREEN/PRINTER

Ejemplo_1: PROCEDURE LISTACURSOS IF !ISPRINTER() && Impresora no conectada DO MSGIMPRESORA && Mensaje que conecte INKEY(0) ENDIF SET DEVICE TO PRINT USE CURSOS INDEX CURSOS GO TOP NPAGINA = 1 && Contador de pginas NFILA = 5 && Contador de filas @ 0,0 SAY CHR(15) && Impresin comprimida * CABECERA @ 1,0 SAY "LISTADO CURSOS" @ 1,115 SAY "PAGINA.: " + LTRIM(STR(NPAGINA)) @ 2,115 SAY "FECHA..: " + DTOC(DATE()) @ 3,0 SAY "N" @ 3,10 SAY "NOMBRE CURSO" @ 3,90 SAY "PRECIO" @ 4,0 SAY REPLICATE(CHR(196),132) * FIN CABECERA DO WHILE .NOT. EOF() @ NFILA, 0 SAY RECNO() PICTURE "9999" @ NFILA,10 SAY NOMCURSO @ NFILA,90 SAY PRECIO NFILA = NFILA + 1 IF NFILA = 50 EJECT && Salto de pgina NPAGINA = NPAGINA + 1 * REPETICION DE LA CABECERA NFILA = 5 ENDIF SKIP && Incrementamos registro ENDDO CLOSE EJECT @ 0,0 SAY CHR(18) && Desactivamos comprimido SET DEVICE TO SCREEN RETURN

2. Salto de pgina. EJECT realiza un salto de pgina en la impresora, y pone a cero los valores de la fila y la columna de la impresora. Use SETPRC() si necesita poner a cero los valores internos de fila y columna de la impresora sin enviar un salto de pgina. EJECT (Ver SET DEVICE, se incluye un ejemplo completo) 3. Conocer la situacin del cabezal de impresin. PCOL() devuelve la columna en que se halla el cabezal de impresin. Retorna un nmero entero. Un EJECT (salto de pgina) coloca PCOL() a cero. PCOL() Ejemplo_1: SET DEVICE TO PRINTER @ 10, PCOL() + 10 SAY "BANCO : " + BANCO PROW() Devuelve la fila en que se haya el cabezal de impresin. Un salto de pgina, EJECT, coloca PROW() a cero. PROW() Ejemplo_1: SET DEVICE TO PRINTER @ PROW() + 1, 5 SAY "NOMBRE...: " + NOMBRE @ PROW() + 2, 5 SAY "DIRECCION: " + DIRECCION @ PROW() + 3, 5 SAY "POBLACION: " + POBLACION 4. Conocer si est preparada la impresora. ISPRINTER() Comprueba si la impresora esta lista para imprimir. Devuelve un valor lgico. ISPRINTER() Ejemplo_1:

IF !ISPRINTER() && impresora no conectada @ 24,0 SAY "* CONECTE LA IMPRESORA, PULSE TECLA *" INKEY(0) ENDIF 5. Conocer si tiene papel. DOSERROR() determina el error producido por el DOS. Devuelve un valor numrico correspondiente a un error. Para la lista de errores consulte el manual de Nantucket. El error que genera la impresora por falta de papel es el nmero 28. DOSERROR() Ejemplo_1: IF DOSERROR() = 28 ? "Falta papel" ENDIF

XIII. Funciones predefinidas.


1. De bases de datos. ALIAS() Devuelve el alias del rea de trabajo. DELETED() Devuelve el estado de borrado del registro actual. EOF() Indica si se alcanza el final de un archivo. BOF() Indica si se alcanza el principio de un archivo. DBFILTER() Determina la expresin del filtro. FIELDNAME() Devuelve el nombre del campo especificado. HEADER() Determina la longitud de cabecera. RECSIZE() Determina la longitud del registro. FCOUNT() Devuelve el nmero de campos de la base.

USED() Determina la base de datos en uso. FOUND() Devuelve verdadero si se encontr registro. RECNO() Devuelve el nmero de registro actual. LASTREC() Devuelve el nmero total de registros. 2. Numricas. ABS() Devuelve el valor absoluto de una expresin. EXP() Calcula la exponencial. INT() Convierte cualquier expresin numrica en entero. LOG() Devuelve el logaritmo natural de un nmero. MIN() Devuelve el valor mnimo de dos nmeros o dos fechas. MAX() Devuelve el valor mximo de dos nmeros o dos fechas. SQRT() Devuelve la raiz cuadrada de un nmero positivo. ROUND() Devuelve el nmero redondeando con la cantidad de decimales especificados. VAL() Convierte una tira de caracteres a un valor numrico. 3. Cadenas. ASC() Devuelve el cdigo ASCII del carcter izquierdo. AT() Devuelve un nmero que indica la posicin de comienzo de una cadena de caracteres dentro de otra. CHR() Devuelve el carcter del cdigo ASCII especificado. EMPTY() Devuelve verdad si la expresin est vacia. ISALPHA() Devuelve verdadero si el primer carcter es alfabtico. ISLOWER() Determina si el carcter ms a la izquierda de la cadena est en minsculas. ISUPPER() Determina si el carcter ms a la derecha de la cadena est en maysculas.

LEN() Devuelve el nmero de caracteres que hay en una cadena LEFT() Devuelve el nmero de caracteres especificados desde la izquierda RIGHT() Devuelve el nmero de caracteres especificados desde la derecha. LTRIM() Elimina los espacios de la izquierda de una cadena. REPLICATE() Repite una expresin de caracteres. SPACE() Crea una cadena de espacios. STR() Convierte un valor numrico en cadena. STRTRAN() Busca y reemplaza dentro de una cadena de caracteres. SUBSTR() Extrae una parte especfica de una cadena. TRANSFORM() Devuelve la tira de caracteres con el formato especificado. TRIM() Elimina los espacios de una cadena. 4. Fechas. CDOW() Devuelve el nombre de da de la semana de una fecha. CMONTH() Devuelve el nombre del mes de una fecha. CTOD() Convierte a fecha una cadena DATE() Devuelve la fecha del sistema DAY() Devuelve el nmero de da del mes de una fecha. DOW() Devuelve el nmero que representa el da de la semana de un valor fecha. DTOC() Convierte una fecha a cadena DTOS() Convierte una fecha a cadena tipo ndice. MONTH() Devuelve un nmero que representa el mes. YEAR() Devuelve el valor nmero completo del ao dada una fecha. 5. Hora.

SECONDS() Devuelve la hora del sistema como segundos y centsimas. TIME() Devuelve la hora del sistema. SECS() Devuelve hora como segundos y centsimas. TSTGRING() Dada una cantidad de segundos nos devuelve dicha cantidad en formato hora. 6. Otras funciones de inters. FILE() Devuelve verdadero si existe el fichero especificado. GETE() Recupera el contenido de una variable de entorno DOS. TYPE() Devuelve el tipo de dato de la variable, expresin o campo. COL() Devuelve la columna actual del cursor. ROW() Devuelve la fila actual del cursor. CURDIR() Determina el directorio actual. DISKSPACE() Determina el nmero de bytes disponible en una unidad. MEMORY() Devuelve el espacio de memoria libre. READVAR() Devuelve el nombre de la variable de un GET/MENU.

XIV. Ordenes SET.


1. Ordenes SET TO... SET ALTERNATE TO <fichero> Crea un fichero de protocolo. SET COLOR TO <expresin> Fija los colores de pantalla. SET DECIMALS TO <expN> Fija el nmero de los decimales a mostrar en los resultados de las funciones numricas y clculos. SET DEFAULT TO <unidad>[:<rutra>] Especifica la unidad y directorio por defecto para la creacin de ficheros.

SET DATE AMERICAN/ANSI/BRITISH/ITALIAN/FRENCH/GERMAN Fija el formato de los campos de fecha. AMERICAN mm/dd/aa ANSI aa.mm.dd BRITISH dd/mm/aa ITALIAN dd-mm-aa FREMCH dd/mm/aa GERMAN dd.mm.aa. SET DELIMITERS TO <expr> Especifica los caracteres empleados como delimitadores. SET DEVICE TO SCREEN/PRINTER Dirige el resultado de la instruccin @ al dispositivo elegido. SET FILTER TO <condicin> Hace que la base de datos se vea como si slo contuviese los registros que cumplen la condicin. SET INDEX TO <lista ficheros> Abre el ndice indicado y cierra los anteriores abiertos con la misma base de datos. SET KEY <expN> TO <procedimiento> Asigna a una tecla un procedimiento. SET MARGIN TO <expN> Fija el margen izquierdo de la impresora. SET MESSAGE TO <expN>/CENTER Establece la lnea donde se muestran los mensajes asociados a PROMPT. SET ORDER TO [<expN>] Establece que fichero ndice es el principal. SET PATH TO [<lista de rutas>] Especifica la ruta de bsqueda que Clippersigue en el acceso a ficheros. SET PRINTER TO [<dispositivo>/<fichero>] Determina la salida de la impresora. SET PROCEDURE TO [<fichero>] Activa fichero de procedimientos. 2. Ordenes SET ON/OFF. SET ALTERNATE on/OFF Determina cuando la salida se enva al fichero. SET BELL on/OFF Determina cundo suena la alarma durante la entradade datos.

SET CENTURY on/OFF Determina si una fecha debe mostrar los dgitos del siglo o no. SET CONFIRM on/OFF Determina si se requiere pulsar return para cada GET. SET CONSOLE on/off Determina si la ejecucin de los comandos utilizarn la pantalla como salida.. SET CURSOR on/off Muestra u oculta el cursor en la pantalla. SET DELETED on/OFF Oculta/procesa los registros marcados para borrar. SET DELIMITERS on/OFF Determina si se muestran los delimitadores SET ESCAPE ON/off Activa/Desactiva el desvo producido al pulsar la tecla ESC. SET INTENSITY ON/off Muestra los campos de entrada durante los GETs en color o en vdeo inverso. SET PRINT on/OFF Determina si la salida de los comandos @...SAY se mandarn a la impresora. SET SCOREBOARD ON/off Determinan si los mensajes de clipper aparecen en la lnea 0. SET SOFTSEEK on/OFF Permite acceder al registro ms prximo si el buscado no se encuentra. SET UNIQUE on/OFF Determina si slo los registros con clave no repetida aparecern en el ndice. SET WRAP on/OFF Permite el movimiento circular entre opciones de mens.

XV. Redes locales.


1. Bloqueo de registro. RLOCK() Bloquea/desbloquea el registro actual del rea de trabajo en curso. Para utilizar en redes locales. RLOCK() / LOCK() 2. Bloqueo de ficheros.

FLOCK() Bloquea/desbloquea un archivo abierto de base de datos dependiendo de su estado anterior. Slo se utiliza en redes locales. FLOCK() 3. Desbloqueo. UNLOCK Desactiva el bloqueo de los archivos o registros bloqueados por el #ltimo usuario. UNLOCK [ALL] ALL - Quita todos los bloqueos en curso de todas las reas de trabajo. 4. Uso exclusivo de ficheros. SET EXCLUSIVE Permite el uso exclusivo o no de archivos de base de datos, ndices y campos memos, en redes locales. Por defecto esta en ON. SET EXCLUSIVE ON/off