Manual de Clipper5
Manual de Clipper5
Manual de Clipper5
Clipper 5.x
Introducción.
A principio de los años ochenta, DBASE II hizo su aparición 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 intención de facilitar la gestión de las
bases de datos.
Evidentemente, los sistemas de gestión de bases de datos existían desde mucho antes, sobre todo, desarrollados para grandes
sistemas, pero la cuestión estaba en cubrir una carencia que más tarde o más temprano debía ser atendida por los ingenieros de
software y que era esperada ansiosamente por el creciente número de usuarios de los ordenadores personales.
El sistema de gestión de bases de datos había que diseñarse no exclusivamente como un entorno de programación, semejante a
otros entornos o lenguajes con capacidad de tratamiento de grandes masas de datos. Este debía posibilitar la ejecución interactiva
de instrucciones, ser amigable, accesible por usuarios no programadores, y debía estar formado por unas instrucciones potentes y
fáciles de memorizar.
(LA PRIMERA DE LAS VERSIONES DE DBASE II SE UTILIZÓ CON EL SISTEMA OPERATIVO CP/M, SIGUIÉNDOLE
OTRAS COMO LA 2.4 DE SEPTIEMBRE DE 1983 BAJO DOS 1.1 Y 2.0).
También, a principio de los ochenta se comienza a utilizar entre los usuarios de micros una nueva terminología informática de
bases de datos, ésta era más familiar en otros ambientes informáticos y definía con precisión los conceptos más básicos:
Una base de datos puede definirse como la agrupación útil y organizada de información.
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 número (nº de registro) que representa el
www.elguille.info/Clipper/manual.htm 1/39
11/7/2019 Manual de Clipper
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 básica de base de datos era fácil manipular y actualizar gran cantidad de información.
Su estructura es descrita por un conjunto de nombres de campos, estos campos pueden ser de varios tipos en función del dato a
almacenar (números, fechas, etc) y de longitud definible.
Los gestores de bases de datos permiten la organizacíón y el tratamiento eficaz de grandes masas de datos
proporcionándonos 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 también contribuyó a la filosofía de la programación estructurada, mejoró sus prestaciones y evolucionó en varias
versiones (DBASE III, DBASE III+ y DBASE IV).
George Tate fallecido tempranamente nunca pudo comprobar la revolución que ocasionaría este producto, aún en constante
evolución.
El éxito obtenido entre los usuarios de micros, principalmente atraídos por su versatilidad y potencia, y los grandes beneficios
producidos en su comercialización, hizo que muchas empresas de software se adherieran a la idea de desarrollar nuevos productos
análogos, una gama de dialectos que hoy se les agrupa con el sobrenombre de entorno xBase (Clipper, Quicksilver, Foxbase, etc).
La difusión de estos productos han desbancado a muchos lenguajes de programación, como al Cobol que aunque propicia una fácil
lectura de sus fuentes, la programación resulta lenta y laboriosa.
En los ochenta, en pleno boom informático 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 intención de mejorar las prestaciones de DBASE. Su primera versión 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 mayoría con igual formato sintáctico.
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 módulo runtime. Esto repercute en la velocidad de ejecución de
los programas.
Muchos programadores recordarán que cuando entregaban un proyecto a un cliente desarrollado en DBASE II o III se veían con la
fatalidad de entregar los ficheros fuentes, ya que DBASE lo que hacía era interpretarlos. CLIPPER salvaguardó estos intereses.
CLIPPER aportó más comandos y funciones y prescindió de muchos de DBASE.
CLIPPER es ahora sin duda el compilador más utilizado en aplicaciones de gestión de datos para microordenadores. La última
versión aparecida en el mercado es la CLIPPER 5.01 versión reparada de la CLIPPER 5.0. Hasta el momento, la versión más
utilizada quizás por su largo tiempo de vigencia es la CLIPPER SUMMER '87. Anteriores a ésta eran la CLIPPER AUTUMN '86 y
la versión de 1985.
De todas la versiones detalladas la SUMMER '87 ha sido la más difundida. Muchas aplicaciones se han desarrollado con esta
versión, por ello, aún, muchos programadores se resisten al cambio a versiones más actuales.
La presente guía está dividida en doce capítulos. Cada capítulo describe comandos y/o funciones de Clipper referentes a temas
concretos. El primero de ellos describe aspectos técnicos iniciales que es preciso conocer de este producto.
www.elguille.info/Clipper/manual.htm 2/39
11/7/2019 Manual de Clipper
I. Características técnicas.
1. Capacidades.
2. Requerimiento hardware.
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. Instalación .
La instalación de CLIPPER es muy fácil, 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 líneas en el fichero de configuración CONFIG.SYS.
FILES = 20
BUFFERS = 8
Si se posee DOS 3.3 o superior es posible trabajar hasta con 255 ficheros abiertos simultáneamente. Para ello se debe indicar, en
lugar de FILES = 20:
FILES = 255
6. Autoexec.bat.
En el fichero AUTOEXEC.BAT resulta de gran utilidad incluir una línea de PATH. Esto permitirá ejecutar el compilador desde
otros directorios de trabajo.
PATH C:\CLIPPER
7. Ficheros.
www.elguille.info/Clipper/manual.htm 3/39
11/7/2019 Manual de Clipper
A los distintos ficheros que maneja CLIPPER podremos diferenciarlos por su extensión. Si hemos utilizado anteriormente DBASE,
la mayoría nos resultarán familiares.
La posibilidad de compilar DBASE con el compilador de CLIPPER está limitada por un grupo de comandos y funciones de
DBASE. A continuación se muestra una relación de estos comandos y funciones:
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 están optimizados).
Clipper proporciona un manejador de bases de datos (DBU), un emulador del punto de petición 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.
Para desarrollar con CLIPPER tendremos que disponer de las siguientes herramientas básicas:
www.elguille.info/Clipper/manual.htm 4/39
11/7/2019 Manual de Clipper
2. Escritura de programas.
Los requisitos básicos a cumplir para la correcta escritura de los fuentes son:
e) Cuando sea necesario escribir líneas de instrucciones muy largas, podemos hacerlo en líneas independiente escribiendo un punto
y coma al final de la línea.
3. Compilación.
La compilación es una traducción del fichero fuente (.PRG) para obtener un fichero objeto (.OBJ). Consiste en transcribir cada
instrucción desde el lenguaje simbólico en que está escrito el código (CLIPPER) a código comprensible por el enlazador del
sistema operativo (DOS).
Sintaxis:
Es imprescindible que haya al menos un espacio en blanco entre <Fprg> y la primera opción así como entre cada una de ellas. Es
obligatorio que la opción se exprese en minúsculas.
Nuestro programa puede contener asimismo diversas llamadas DO a otros módulos .PRG o a procedimientos del mismo programa.
Si no le especificamos lo contrario, CLIPPER compila de forma automática los ficheros llamados por DO.
4. Enlace.
El fin de un enlazador es el de asociar los módulos objeto obtenidos mediante el compilador con las librerías donde se contienen
las traducciones máquina de cada una de las sentencias,llamadas,etc. que aparecen en el módulo objeto.
a) Enlazadores
Sintaxis:
www.elguille.info/Clipper/manual.htm 5/39
11/7/2019 Manual de Clipper
* LINK (Microsoft)
Sintaxis:
* TLINK (Borland)
Sintaxis:
Sintaxis:
b) Overlay
Todas las claúsulas 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 aplicación en Clipper, es que ésta no nos
quepa físicamente en la memoria de trabajo de nuestro ordenador.
El único modo que tenemos de solucionar este problema es proceder a lo que denominamos segmentación, programación por
capas, solapas u overlays.
Cuando programamos usando esta técnica, lo que hacemos es dividir la memoria RAM en dos o más áreas de trabajo. En la
primera de ellas (área principal) se carga el módulo ejecutable, y en las áreas de solape se cargan y descargan, conforme se van
usando, los diferentes módulos overlay que hayamos definido.
www.elguille.info/Clipper/manual.htm 6/39
11/7/2019 Manual de Clipper
CLIPPER prgprin -m
CLIPPER modulo1
CLIPPER modulo2
CLIPPER modulo3
PLINK86 @prueba
CLIPPER prgprin -m
CLIPPER modulo1
CLIPPER modulo2
CLIPPER modulo3
PLINK86 @prueba
(Para que Clipper produzca un fichero .EXE y tantos ficheros .OVL como módulos para overlays tengamos definidos, sólo hay que
cambiar la instrucción:
por
BATCH. Por defecto, cuando PLINK86 no encuentra un fichero .OBJ o .LIB de los especificados, la operación de enlace continúa
adelante.
DEBUG. Proporciona información adicional para ayudar a la depuración de una aplicación en el caso de overlay.
LIBRARY. Especificar las librerías que serán enlazadas con los .OBJ.
NOBELL. Elimina el sonido que aparece con los mensajes del PLINK86.
SEARCH. Hace una segunda pasada por las librerías si tras terminar el enlace alguno de los símbolos ha quedado sin definir.
www.elguille.info/Clipper/manual.htm 7/39
11/7/2019 Manual de Clipper
SECTION. Determina que los módulos objeto que se relacionan tras la palabra FILE estarán en el área de overlay abierta, pero no
en un fichero independiente en disco.
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 añadir 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 tomarán 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.
Ejemplo_2:
Tanto en la utilidad DOT porporcionada por Clipper como en el entorno Dbase podemos crear bases de datos sin necesidad de
escribir programas.
Los distintos tipos de campos que podemos definir en una base de datos son:
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 más ficheros .NTX se activarán los índices correspondientes. También proporciona el alias
adecuado.
El número máximo de ficheros índices asociados es 15. EXCLUSIVE se emplea para redes y posibilita la apertura de ficheros con
uso exclusivo a un usuario.
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 añadir 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 precaución si existen registros en la base de datos ya que algunas modificaciones pueden vaciarnos el contenido de
uno o más campos.
5. Añadir registros.
APPEND BLANK añade un registro vacio a nuestro fichero en uso. El puntero de la base de datos se sitúa en el registro añadido.
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>]
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:
www.elguille.info/Clipper/manual.htm 9/39
11/7/2019 Manual de Clipper
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
posición del puntero con la función RECNO(). En el ejemplo anterior al añadir el registro vacio el puntero se desplaza a la posición
que ocupa este registro dentro de la base de datos. Podemos deducir que las sustituciones se efectuarán ahí.
Existen mandatos que afectan únicamente al registro activo. El puntero se puede desplazar usando la sentencias GO y SKIP en sus
distintas modalidades:
8. Editar un registro.
La edición de registros es posible realizarla con varias sentencias. No es posible usar EDIT de Dbase III. En Clipper la edición de
un registro puede realizarse con un grupo de GET's, aunque existen otras sentencias más avanzada como DBEDIT, MEMOEDIT,
etc.
@ <Fila>,<Col> [SAY <ExpC> [PICTURE <másc> ]] [GET <Vmen> [PICTURE <masc>] [RANGE <expN1>, <expN2>]
[VALID <expL>]]
RANGE sirve para validar datos numéricos entre los dos límites especificados.
VALID se emplea para expresiones genéricas de validación. <expL> será la condición de validación.
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
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 más de un registro usando la claúsulas FOR o
WHILE.
Ejemplo_1:
www.elguille.info/Clipper/manual.htm 10/39
11/7/2019 Manual de Clipper
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 = "María"
PACK
Ejemplo_1:
USE CLIENTES
DELETE RECORD 10
PACK
Ejemplo_1:
USE CLIENTES
RECALL RECORD 10
ZAP borra todos los registros marcados o no de una base de datos manteniendo su estructura.
LOCATE permite localizar uno o más registros. En el momento que encuentra un registro el puntero de registro se coloca en él,
esperando a un CONTINUE para continuar con la búsqueda. La búsqueda es secuencial por lo que si el tamaño de la base de datos
es considerable puede resultar lento este proceso.
Ejemplo_1:
USE CLIENTES
LOCATE FOR CODIGO > "10000" .AND. NOMBRE = "JOSE"
En una base de datos es posible contar registros, y realizar operaciones de suma y media aritmética. COUNT nos servirá para
contar, SUM para sumar el contenido de campos numéricos y AVERAGE para calcular la media aritmética.
COUNT cuenta el número de registros que cumplen una determinada condición especificada. Dicha información ha de depositarse
obligatoriamente en una variable numérica de memoria.
15. Exportar.
COPY TO Copia toda la base de datos en curso o sólo una parte a un nuevo archivo.
<ámbito> - Determina la porción del archivo a copiar, por defecto es ALL (todo).
FIELDS <lista campos> - Son los campos a copiar a la nueva base de datos.
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 añade datos a la base en uso a partir de otro archivo que puede ser que no sea (.DBF). Podemos seleccionar loa
datos a añadir mediante cualificadores.
FOR/WHILE <condición> - Indican las condiciones que han de cumplir los registros para ser agregados.
Ejemplo_1:
www.elguille.info/Clipper/manual.htm 12/39
11/7/2019 Manual de Clipper
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 extensión .NTX. Pueden
usarse también claves múltiples formada por la suma de varios campos, de partes de campos, expresiones y campos, etc, pero
recuerde que el máximo número de caracteres de una clave será de 250. Para sumar campos hemos de tener siempre la precaución
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 automática. Una base de datos puede tener asociados como máximo 15
ficheros índices. Los registros que se encuentran marcados para ser borrados también forman parte del índice.
Ejemplo_1:
USE CLIENTE
INDEX ON NOMBRE TO NOMCLI
Ejemplo_2:
USE CLIENTE
INDEX ON NOMBRE+DTOS(FECHA) TO FECCLI
Como vimos anteriormente en el capítulo I, la activación de índices se realiza con USE. Se pueden especificar uno o más ficheros
índices. Con SET ORDER TO se establecerá el índice activo. Esta sentencia altera el ordenamiento de la declaración 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.
Ejemplo_1:
NOMBRE = SPACE(20)
FECHA = CTOD(SPACE(8))
USE CLIENTES INDEX NOMCLI,FECCLI,DOMCLI
SET ORDER TO 2
LIST NOMBRE,FECHA TO PRINT
SEEK <expr>
Ejemplo_1:
4. Area de trabajo.
www.elguille.info/Clipper/manual.htm 13/39
11/7/2019 Manual de Clipper
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>
<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 máximo 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.
V. Variables de memoria.
1. Tipos de variables.
Variable es un nombre asignado a una posición de memoria que se puede utilizar para almacenar un dato concreto. Los tipos de
variables por el tipo de dato que contienen son:
-numéricas
-alfanuméricas
-lógicas
-fechas
www.elguille.info/Clipper/manual.htm 14/39
11/7/2019 Manual de Clipper
Independientemente del tipo a que pertenezca una variable, debe asignársele un nombre, que puede ser de uno a diez caracteres
pueden ser una combinación de letras, dígitos o signo de subrayado. El primer carácter 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 aplicación.
Las instrucciones STORE y el signo igual (=) pueden emplearse indistintamente para la asignación de datos a variables de
memoria.
Ejemplo_1:
PTAS = 0
FECHA_ALTA = CTOD(SPACE(8))
STORE "enero" TO MES
4. Visualización de variables.
Para visualizar el contenido de una variable puede usarse la interrogación (?) con los siguientes formatos:
? <expr>
?? <expr>
Ejemplo_1:
? MES
?? "HOLA"
5. Expresiones.
Además de servir como depósito temporal, las variables de memoria pueden utilizarse en procesosde operaciones. Una variable de
memoria puede ser incluida en una expresión para definir un procedimiento, para describir una condición en una instrucción o para
servir como elemento de salida (resultado de una operación).
Pueden utilizarse diferentes tipos de expresión. Una expresión puede incluir un campo de datos, una variable de memoria, una
constante o una combinación de todo ello. Sin embargo, todos los elementos de una expresión deben ser del mismo tipo.
La expresión más corriente es la expresión aritmética, que puede contener un valor, una variable de memoria, un campo numérico
y una combinación de éstos unidos por uno o más operadores aritméticos. Las expresiones son útiles para realizar cálculos
matemáticos. Puede utilizarse una expresión para asignar un valor a una variable de memoria o para reemplazar el contenido de un
campo numérico con un nuevo valor.
Cuando se incluye más de un operador aritmético en una expresión, ésta se valora de izquierda a derecha de acuerdo con siguiente
sistema de prioridades:
Prioridad máxima : ** ^
Prioridad secundaria: * /
Baja prioridad : + -
Se pueden utilizar paréntesis en una expresión para definir la secuencia de evaluación y suprimir el sistema normal de prioridades.
El material dentro de los paréntesis siempre es evaluado previamente. Cuando haya paréntesis anidados es una expresión
aritmética, la expresión del paréntesis interno es evaluado en primer lugar, luego se evalúa el paréntesis externo. Dentro de un
paréntesis, los operadores se evalúan según el sistema de prioridades, de izquierda a derecha.
www.elguille.info/Clipper/manual.htm 15/39
11/7/2019 Manual de Clipper
PUBLIC declara variables de memoria como globales o públicas. Estas pueden modificar su valor en cualquier parte del programa.
PUBLIC <Lvar>
PRIVATE declara de uso privado la variables de memoria especificadas. Estás pueden modificar su valor en partes de un programa.
PRIVATE <Lvar>
<fmem> es el nombre del fichero donde se almacenarán las variables. Si no se especifica la extensión por defecto es .MEM.
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 símbolos 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.
Al restaurar las variables de memoria, éstas son privadas, a no ser que se especifiquen como públicas antes de restaurarlas y se
utilice la claúsula 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:
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>.
www.elguille.info/Clipper/manual.htm 16/39
11/7/2019 Manual de Clipper
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 sustitución de una variable por su valor en aquellos puntos de programa donde por si
misma la variable no se traduciría. Cuando tras una macro se sigue algún tipo de expresión hemos de indicar al sistema que la
macro termina con un punto (.).
&<vmem>
Ejemplo_1:
nombre = "lápiz"
? "Artículo: &nombre"
Ejemplo_2:
base = "CLIENTES"
USE &base
Ejemplo_3:
a) Operadores lógicos.
.AND. (Y además)
.OR. (O además)
.NOT. (Negación)
! (Negación)
Ejemplo_1:
Ejemplo_2:
IF !FILE("CLIENTES.DBF")
@ 1,1 SAY " Error no encuentra base de datos "
ENDIF
.T. (Verdadero)
.F. (Valso)
.Y. (Si)
.N. (No)
Ejemplo_1:
www.elguille.info/Clipper/manual.htm 17/39
11/7/2019 Manual de Clipper
JUBILADO = .Y.
IF JUBILADO
..
ENDIF
= (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
@...SAY/GET muestra en las coordenadas reseñadas el contenido de la expresión que sigue a SAY, carga valores a los campos o
las variables de memoria que siguen a GET (hasta ser leídos por READ.)
PICTURE expresa un formato para la entrada/salida de información. Este formato puede estar controlado por plantillas o
funciones. Las primeras se aplican carácter a carácter y las segundas afectan a toda la claúsula. Las funciones irán precedidas del
símbolo @.
RANGE sirve para validar datos numéricos, indicando un límite inferior y un superior. Entre estos límites deberá estar
comprendido en dato numérico para que sea válido.
VALID se emplea para expresiones genéricas de validación. <expL> será la condición de validación.
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:
www.elguille.info/Clipper/manual.htm 18/39
11/7/2019 Manual de Clipper
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
ACCEPT acepta datos alfanuméricos por pantalla y los carga en <mven>. No es necesario haber declarado previamente <Vmen>.
Ejemplo_1:
INPUT Acepta datos por pantalla. Los datos han de ser identificados con sus correspondientes indicadores, así, por ejemplo, una
cadena de carácteres deberá escribirse entrecomillada, mientras que esto no será preciso con un número.
Ejemplo_1:
<expC> es una cadena de caracteres que se visualizarán a modo de información. Si se omite, aparecerá en pantalla: Press any key
to continue...
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 número 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
LASTKEY() devuelve el valor de la última tecla pulsada. Dicho valor es un número que se corresponde con el valor ASCII del
carácter.
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 posición 0,0 (posiciones verticales 0 a 24 / posiciones horizontales 0 a 79).
Ejemplo_1:
www.elguille.info/Clipper/manual.htm 20/39
11/7/2019 Manual de Clipper
6. Dibujar un marco.
@..TO dibuja un marco de línea sencilla en las coordenadas especificadas. Si se emplea la opción DOUBLE, el marco dibujado
será de línea doble.
@..BOX construye una caja entre las coordenadas indicadas y con los códigos ASCII especificados en <expC>. El orden de los
caracteres es:
Ejemplo_1:
cadena = "+-+¦+-+¦¦"
@ 1,1,10,10 BOX cadena
8. Hacer un menú.
@..PROMPT facilita la creación de menús en nuestros programas. Cada opción se muestra con un PROMPT en una posición
especifica de la pantalla y se le acompaña opcionalmente de un mensaje aclaratorio.
SET MESSAGE determina el número de fila donde aparecerán los mensajes de las distintas opciones.
MENU TO sirve para leer el valor numérico que representa a la opción seleccionada. Dicho valor se asigna automáticamente y
representa el número 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.
www.elguille.info/Clipper/manual.htm 21/39
11/7/2019 Manual de Clipper
SAVE SCREEN salva la pantalla actual así como su estructura de variables leídas y pendientes de leer.
TO <vmem> indica que la pantalla será almacenada en la variable de memoria <vmem>. Esta variable será de tipo carácter.
Ejemplo_1:
Ejemplo_2:
Bifurca un programa entre una condición y su opuesta. Puede usarse como mandato o como función. 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 sintáxis de la
función puede ser IF() o IIF().
Mandato:
IF <expL>
<instrucciones>
[ELSEIF <expL>]
<instrucciones>
[ELSE
<instrucciones>]
ENDIF
Función:
IIF/IF(<expL>,<.T.>,<.F.>)
www.elguille.info/Clipper/manual.htm 22/39
11/7/2019 Manual de Clipper
ELSE realiza las distintas órdenes que se indican cuando la condición es falsa.
Ejemplo_1:
IF sexo = "V"
peso = 20
ELSE
peso = 12
ENDIF
Ejemplo_2:
IF porcentaje > 10
porcentaje = porcentaje - 2
ENDIF
Ejemplo_3:
Bifurca la ejecución de un programa según las diferentes condiciones especificadas. OTHERWISE representa todos los casos que
no cumplen ninguna condición.
DO CASE
CASE <expL>
<instrucciones>
CASE <expL>
<instrucciones>
OTHERWISE
<instrucciones>
ENDCASE
Ejemplo_1:
DO CASE
CASE velocidad > 180
consumo = 4
CASE velocidad > 120
consumo = 3
CASE velocidad > 80
consumo = 2
OTHERWISE
consumo = 1
ENDCASE
Permite la creación de una estructura de bucle que se ejecuta para un rango de valores determinados de forma ascendente o
descendente.
www.elguille.info/Clipper/manual.htm 23/39
11/7/2019 Manual de Clipper
[LOOP]
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
DO WHILE realiza una estructura de bucle mientras se cumpla la condición especificada. DO WHILE comienza y continúa el
bucle si se cumple la condición. ENDDO devuelve el control al principio.
DO WHILE <expL>
<instrucciones>
[EXIT]
[LOOP]
ENDDO
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 condición 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.
www.elguille.info/Clipper/manual.htm 24/39
11/7/2019 Manual de Clipper
1. Retornar.
RETURN termina un procedimiento, programa, o función, devolviendo el control al procedimiento de llamada o al DOS.
Ejemplo_1:
PROCEDURE BORRAR
PARAMETERS X1,Y1,X2,Y2
@ X1,Y1 CLEAR TO X2,Y2
RETURN
2. Terminar.
Este mandato realiza la misma función que CANCEL o que RETURN en el procedimiento de más alto nivel.
Ejemplo_1:
3. Cancelar.
Ejemplo_1:
clave = SPACE(4)
@ 4,4 SAY "Clave: " GET clave PICTURE "@!"
READ
IF clave # "9876"
CANCEL
ELSE
ENDIF
RENAME renombra ficheros. Es el equivalente al RENAME del DOS ,aunque su sintaxis es algo distinta.
<fich1> es el nombre inicial del fichero y <fich2> es el nuevo nuevo. Tanto <fich1> como <fich2> deben incluir la extesión del
fichero.
Ejemplo_1:
2. Copiar ficheros.
www.elguille.info/Clipper/manual.htm 25/39
11/7/2019 Manual de Clipper
COPY FILE copia el contenido de <fich1> en <fich2>. No sirven con este mandato los comodines para copiar varios ficheros en
bloque. Salvo esta excepción funciona igual que el COPY del DOS.
Es importante recordar que siempre hemos de proporcionarle las vías 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.
Ejemplo_1:
3. Borrar ficheros.
DELETE FILE y ERASE borran ficheros. Al especificar el nombre del fichero a borrar debe figurar también su extensión. Antes
de usar este comando es necesario cerrar el fichero a borrar con el comando CLOSE.
Ejemplo_1:
USE CLIENTES
..
..
CLOSE DATABASES
DELETE FILE CLIENTES.DBF
4. LLamada al Dos.
Además 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:
Antes de realizar cualquier operación con un fichero podemos comprobar su existencia con la función 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.
<nombre procedimiento> - Debe de empezar con una letra y sólo evalúa 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, pasándole parámetros (hasta 128) con WITH.
Ejemplo_1:
PROCEDURE LISTACURSOS
IF !ISPRINTER()
DO MSGIMPRESORA
ENDIF
* órdenes ...
RETURN
PROCEDURE MSGIMPRESORA
CLEAR
@ 9, 28 TO 12, 51
@ 10,30 SAY "CONECTE LA IMPRESORA"
@ 11,32 SAY "Y PULSE UNA TECLA"
INKEY(0)
RETURN
Ejemplo_1:
PROCNAME()
Ejemplo_1:
www.elguille.info/Clipper/manual.htm 27/39
11/7/2019 Manual de Clipper
PROCLINE() Devuelve el número de la línea del código fuente en curso del programa. Siempre que no le hayamos indicado al
compilador que no numere las líneas.
PROCLINE()
Ejemplo_1:
Los parámetros se pasan por valor, exceptuando los arrays, o si el parámetros 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
PCOUNT() Determina el número de parámetros pasados a un procedimiento o función 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.
www.elguille.info/Clipper/manual.htm 28/39
11/7/2019 Manual de Clipper
1 Declaración 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 número definible de posiciones (de 1 a 1024 en Clipper '87). Estas posiciones pueden contener datos numéricos,
alfabéticos, fechas, etc. Para acceder a uno de los datos contenido en una tabla se hará indicando el número de posición que ocupa.
Existen varias funciones que posibilitan realizar operaciones en una tabla tales como añadir nuevos datos, eliminar datos, rellenar,
etc. Este tipo de estructuras de memoria se utilizan como soporte temporal de los datos.
DECLARE declara una o más áreas de memoria (arrays) con una longitud específica. Antes de poder realizar cualquier operación
con una tabla debemos declararla.
DECLARE <array>[<expN>]{,<array>[<expN>]...}
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 función que devuelve el número de elementos que tiene una tabla, o lo que es lo mismo la longitud de la tabla
indicada.
LEN(<array>)
3 Insertar.
La inserción de nuevos elementos en una tabla es posible mediante la función AINS indicándose el nombre de la tabla y la
posición donde se desea insertar el nuevo elemento. Automáticamente, el elemento insertado desplazará a los posteriores en una
posición y el último se perderá.
AINS(<array>,<expN>)
4 Suprimir.
www.elguille.info/Clipper/manual.htm 29/39
11/7/2019 Manual de Clipper
ADEL(<array>,<expN>)
5 Copiar.
La copia de un elemento o grupo de elementos de una tabla a otra tabla la realiza la función ACOPY, debiendo indicarse la tabla
origen, la tabla destino, la posición 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>]]])
6 Rellenar.
AFILL(<array1>,<expr>[,<expN1>[,<expN2>]])
7 Directorio.
ADIR accede al directorio del disco almacenado en tablas información relativa a los ficheros y directorios.
www.elguille.info/Clipper/manual.htm 30/39
11/7/2019 Manual de Clipper
<array1> - Es la tabla que se rellenar con los nombres de ficheros reseñados en <masc>. Tipo C. <array2> - Idem. para tamaño en
bytes de fichero. Tipo N.
<array3> - Idem. para fechas. Tipo D
<array4> - Idem. para horas. Tipo C
<array5> - Idem. para atributos. Tipo C
8 Estructura.
La estructura de una base de datos puede conocerse mediante la función AFIELDS. Los nombres de campos, tipo, longitud, etc.
pueden almacenarse en tablas para el posterior tratamiento.
9 Menú.
ACHOICE es una función 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 numérico que se corresponde con el número de posición del elemento seleccionado. Si
el valor es 0 no se seleccionó ningún elemento.
Pasa 3 parámetros:
1-modalidad: 0 Período de inactividad 1 Se intenta sobrepasar el principio
2 Se intenta sobrepasar el final 3 Espera de tecla específica 4 No se puede escoger una opción
2-elemento actual de la tabla
www.elguille.info/Clipper/manual.htm 31/39
11/7/2019 Manual de Clipper
DBEDIT visualiza el contenido de una base de datos en pantalla. Es una potente función que permite la edición de los datos sobre
una ventana definida en pantalla.
Cuando se utiliza una función de usuario, DBEDIT() pasa de forma automática dos parámetros:
1-Estado actual de DBEDIT() dependiendo de la última tecla pulsada antes de llamar a la función. 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 específica
2-Posición que ocupa en la tabla el campo sobre el que nos encontramos posicionados.
Valores de retorno:
Ejemplo_1:
DECLARE
TAB1[3],TAB2[3],TAB3[3],TAB4[3],TAB5[3],TAB6[3],TAB7[3]
* Nombre campos
www.elguille.info/Clipper/manual.htm 32/39
11/7/2019 Manual de Clipper
TAB1[1]= "BAS_LOC"
TAB1[2]= "BAS_PRO"
TAB1[3]= "BAS_HAB"
* Máscaras de visualización
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"
TAB6[1]= "D"
TAB6[2]= "D"
TAB6[3]= "D"
* Pies de página
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.
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 páginas
www.elguille.info/Clipper/manual.htm 33/39
11/7/2019 Manual de Clipper
* CABECERA
* FIN CABECERA
* 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 página.
EJECT realiza un salto de página 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 página.
EJECT
PCOL() devuelve la columna en que se halla el cabezal de impresión. Retorna un número entero.
PCOL()
Ejemplo_1:
PROW() Devuelve la fila en que se haya el cabezal de impresión. Un salto de página, EJECT, coloca PROW() a cero.
PROW()
Ejemplo_1:
www.elguille.info/Clipper/manual.htm 34/39
11/7/2019 Manual de Clipper
ISPRINTER() Comprueba si la impresora esta lista para imprimir. Devuelve un valor lógico.
ISPRINTER()
Ejemplo_1:
DOSERROR() determina el error producido por el DOS. Devuelve un valor numérico correspondiente a un error. Para la lista de
errores consulte el manual de Nantucket.
DOSERROR()
Ejemplo_1:
IF DOSERROR() = 28
? "Falta papel"
ENDIF
2. Numéricas.
www.elguille.info/Clipper/manual.htm 35/39
11/7/2019 Manual de Clipper
3. Cadenas.
AT() Devuelve un número que indica la posición de comienzo de una cadena de caracteres dentro de otra.
4. Fechas.
www.elguille.info/Clipper/manual.htm 36/39
11/7/2019 Manual de Clipper
YEAR() Devuelve el valor número completo del año dada una fecha.
5. Hora.
TSTGRING() Dada una cantidad de segundos nos devuelve dicha cantidad en formato hora.
SET DECIMALS TO <expN> Fija el número de los decimales a mostrar en los resultados de las funciones numéricas y cálculos.
SET DEFAULT TO <unidad>[:<rutra>] Especifica la unidad y directorio por defecto para la creación de ficheros.
AMERICAN mm/dd/aa
ANSI aa.mm.dd
BRITISH dd/mm/aa
ITALIAN dd-mm-aa
FREMCH dd/mm/aa
GERMAN dd.mm.aa.
www.elguille.info/Clipper/manual.htm 37/39
11/7/2019 Manual de Clipper
SET FILTER TO <condición> Hace que la base de datos se vea como si sólo contuviese los registros que cumplen la condición.
SET INDEX TO <lista ficheros> Abre el índice indicado y cierra los anteriores abiertos con la misma base de datos.
SET MESSAGE TO <expN>/CENTER Establece la línea donde se muestran los mensajes asociados a PROMPT.
SET PATH TO [<lista de rutas>] Especifica la ruta de búsqueda que Clippersigue en el acceso a ficheros.
SET BELL on/OFF Determina cuándo suena la alarma durante la entradade datos.
SET CENTURY on/OFF Determina si una fecha debe mostrar los dígitos del siglo o no.
SET CONFIRM on/OFF Determina si se requiere pulsar return para cada GET.
SET CONSOLE on/off Determina si la ejecución de los comandos utilizarán la pantalla como salida..
SET INTENSITY ON/off Muestra los campos de entrada durante los GETs en color o en vídeo inverso.
SET PRINT on/OFF Determina si la salida de los comandos @...SAY se mandarán a la impresora.
SET SOFTSEEK on/OFF Permite acceder al registro más próximo si el buscado no se encuentra.
SET UNIQUE on/OFF Determina si sólo los registros con clave no repetida aparecerán en el índice.
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. Sólo se utiliza en redes
locales.
www.elguille.info/Clipper/manual.htm 38/39
11/7/2019 Manual de Clipper
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.
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.
www.elguille.info/Clipper/manual.htm 39/39