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