Está en la página 1de 43

Manual de Clipper

http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]


el Guille, la Web del Visual Basic, C#, .NET y ms...
Lo+ - WinFX - .NET - ADO.NET - ASP.NET - Cmo... - Colabora - VB6 - API - HTML - Vista -
Links - Foros
Clipper 5.x
Manual de Clipper (On line)
Escrito por Antonio Surez J imnez
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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:
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
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:
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
-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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
(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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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:
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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"
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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),
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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:
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
? MES
?? "HOLA"
5. Expresiones.
Adems de servir como depsito temporal, las variables de memoria pueden utilizarse en procesos de 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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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>
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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)
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
<= (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"
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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 que se ha pulsado
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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).
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
@..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"
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
..
..
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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]
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
<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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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:
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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
FRENCH 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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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.
Manual de Clipper
http://www.elguille.info/Clipper/manual.htm[09/05/2011 02:01:16 p.m.]
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