Professional Documents
Culture Documents
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).
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.
¿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 -, lo que facilita la escritura y fácil
comprensión del programador.
CREACION DE LA BASE DE DATOS Y MANEJO.
Creando tablas:
Una vez que usted haya escrito la orden CREATE desde el punto
indicativo y establecido la estructura del archivo; el foxbase le preguntará si
desea agregar registros, responda Y(es) y agregue información. Repita el
proceso para cada archivo.
Editando Archivos:
La orden PACK elimina los registros que han sido marcados para ser borrados
por la orden DELETE.
Sintaxis: PACK.
La orden ZAP borra todos los registros de la base de datos activa. La orden
ZAP es equivalente a la orden DELETE ALL seguida de una orden PACK.
Sintaxis: ZAP.
Filtrando Registros:
COPY FILE: Esta orden crea una copia idéntica de un archivo. Se puede
proporcionar la extensión en ambos.
Sintaxis: COPY FILE nombre-arch-fuente TO nombre-arch-destino
Ejemplo: COPY FILE informe.frm TO test.frm
COPY STRU: sintaxis: COPY STRUCTURE TO nombre-archivo [FIELDS lista-
campos].
Copia la estructura de un archivo de base de datos activo en un nombre-
archivo. Especificando FIELDS con lista-campos, sólo se copiarán estos
campos en la estructura.
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, 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. Para saber
quién es ese cliente, ejecute:
SELECT 1
DISPLAY
Observe que el puntero del archivo cliente, se encuentra ubicado en el
cliente cuyo código corresponde al de la factura almacenada en el registro 3.
Manejo de la Ayuda:
Sintaxis : HELP [Comando]
QUIT : Esta orden cierra todos los archivos abiertos y sale del Foxbase al
Entorno del Sistema Operativo.
INTRODUCCION A LA PROGRAMACION.
Declaración de Variables:
Sintaxis: STORE[expresión] TO [lista de variables]
Crea e inicializa variables de memoria de cualquier tipo.
Se puede asignar un valor hacia diversas variables utilizando una lista
de variables. Si se utiliza el signo de igualdad, solamente puede utilizar una
variable.
Por ejemplo,
@ 1,1 SAY valor PICTURE “999,999.99”.
Estructurales Condicionales:
IF, ELSE Y ENDIF: Esta orden de toma de decisión debe comenzar siempre
con IF y terminar con ENDIF. Las órdenes que se colocan entre el IF y el
ENDIF determinan exactamente lo que ocurrirá si la condición es cierta, a
menos que se encuentre un ELSE.
La orden DO CASE, examina cada caso hasta que encuentra una condición
que es cierta, entonces ejecuta las órdenes de debajo del CASE hasta que
encuentra el siguiente CASE o el ENDCASE, lo que ocurra antes.
MODIFY COMMAND :
Esta orden pone en marcha el editor de programas del Foxbase. Para guardar
los cambios se pulsa la tecla Ctrl-w o End , para Abortar la Operación se Pulsa
Esc.
DO:
La orden DO arranca la ejecución de un archivo. La extensión del nombre del
archivo .PRG se asume a no ser que se especifique otra cosa.
Sintaxis: DO nom-arch
PROCEDURE ERROR1
@ 2,10 SAY “Esa no es una fecha válida. Pruebe de nuevo”
RETURN
FUNCION: Una función es una rutina preprogramada que ejecuta una tarea o
prueba específica. Una función siempre retorna un valor. Una función puede
tener uno o varios argumentos sobre los cuales actúa, el usuario suministra
esos argumentos.
Funciones de Cadena:
Funciones de Archivos:
COMANDOS DE BUSQUEDA:
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.
MANEJO DE LA PANTALLA:
CREACION DE MENUS:
En líneas generales, toda aplicación se ejecuta a partir de un menú que
acciona programas, rutinas, o simplemente abre otros menús.
El comando @..PROMPT..MESSAGE
Este comando es parecido al comando @..SAY. Su finalidad es mostrar
una opción de un menú. La sintaxis es la siguiente:
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).
Sintaxis: MENU TO (variable memoria)
CREACION DE RECTANGULOS:
Por ejemplo:
@1,1 TO 20,30
BORRADO DE LA PANTALLA:
GRABADO DE LA PANTALLA:
RESTAURACION DE PANTALLA:
COLORES DE LA PANTALLA:
SET COLOR TO: Se usa para seleccionar los colores y los atributos de
visualización.
Ejemplo: SET COLOR TO W+/B (letras blancas intensas con fondo azul).
PROW() :
Devuelve la Linea de Impresíon actual .
Ejemplo @ Prow()+1,10 Say “CODIGO”
PCOL() :
Devuelve la Columna de Impresíon actual .
Ejemplo @ Prow()+1,10 Say “CODIGO”
PROGRAMAS EJEMPLO
** EJEMPLO 02
** INCLU1.PRG
** PROGRAMA DE INCLUIR CLIENTES
SET TALK OFF
USE CLIENTE INDEX CLIENTE1
STORE SPACE( LEN(CODCLI) ) TO XCOD && INICIA EL AUX. CODIGO EN BLANCO
CLEAR
@1,5 SAY "INCLUIR CLIENTES"
@3,5 SAY "INTRODUZCA EL CODIGO DEL CLIENTE : " GET XCOD
READ
SEEK XCOD
IF .NOT. FOUND()
APPEND BLANK
@5,5 SAY "NOMBRE : " GET NOMCLI
@7,5 SAY "CEDULA : " GET CEDULA PICT "A-99.999.999"
READ
REPL CODCLI WITH XCOD
REPL NOMCLI WITH NOMCLI
REPL CEDULA WITH CEDULA
WAIT "CLIENTE HA SIDO INCLUIDO . PULSE UNA TECLA "
ELSE && MUESTRA LOS DATOS
@5,5 SAY "NOMBRE : "+NOMCLI
@7,5 SAY "CEDULA : "+CEDULA
@9,5 SAY "EL CLIENTE YA EXISTE ! PULSE UNA TECLA "
WAIT " "
ENDIF
RETURN
*******
** EJEMPLO 03
** MODIF1.PRG
** PROGRAMA DE MODIFICAR CLIENTES
USE CLIENTE INDEX CLIENTE1
STORE SPACE( LEN(CODCLI) ) TO XCOD && INICIA EL AUX. CODIGO EN BLANCO
CLEAR
@1,5 SAY "MODIFICAR CLIENTES"
@3,5 SAY "INTRODUZCA EL CODIGO DEL CLIENTE : " GET XCOD
READ
SEEK XCOD
IF FOUND()
@5,5 SAY "NOMBRE : " GET NOMCLI
@7,5 SAY "CEDULA : " GET CEDULA
READ
WAIT " CLIENTE HA SIDO MODIFICADO . PULSE UNA TECLA "
ELSE
@4,5 SAY "CLIENTE NO EXISTE ! PULSE UNA TECLA "
WAIT " "
ENDIF
RETURN
*******
** EJEMPLO 04
** ELIMI1.PRG
** PROGRAMA DE ELIMINACION DE CLIENTES
USE CLIENTE INDEX CLIENTE1
STORE SPACE( LEN(CODCLI) ) TO XCOD && INICIA EL AUX. CODIGO EN BLANCO
STORE "S" TO RESP
CLEAR
@1,5 SAY "ELIMINAR CLIENTES"
@3,5 SAY "INTRODUZCA EL CODIGO DEL CLIENTE : " GET XCOD
READ
SEEK XCOD
IF FOUND()
@5,5 SAY "NOMBRE : "+NOMCLI
@7,5 SAY "CEDULA : "+CEDULA
@9,5 SAY "ELIMINA S/N : " GET RESP PICT "!" VALID RESP $"SN"
READ
IF RESP = "S"
DELETE && ELIMINACION LOGICA
PACK && ELIMINACION FISICA
ENDIF
ELSE
@4,5 SAY "CLIENTE NO EXISTE ! PULSE UNA TECLA "
WAIT " "
ENDIF
RETURN
********
** EJEMPLO 06
** LISTA1.PRG
** REPORTE GENERAL DE CLIENTES POR PANTALLA
CLEAR
@1,1 TO 23,79 DOUBLE
SELE 1
USE CLIENTE
GO TOP
STORE 1 TO LINEA,PAG && CONTADOR DE LINEAS Y PAGINAS
@1,0 SAY " " && INICIO DE LINEA
DO WHILE .NOT. EOF()
IF LINEA = 1
@ROW()+1,05 SAY " EMPRESA TUI C.A. PAG : "+STR(PAG,6)
@ROW()+1,05 SAY " LISTADO DE CLIENTES "
@ROW()+1,05 SAY " CODIGO NOMBRE CEDULA "
@ROW()+1,05 SAY REPLI("-",70)
LINEA = 4
ENDIF
** IMPRIME CAMPOS
@ROW()+1,5 SAY CODCLI
@ROW(),COL()+5 SAY NOMCLI
@ROW(),COL()+5 SAY CEDULA
LINEA = LINEA + 1
SKIP
** FIN DE PAGINA
IF LINEA > 21 .OR. EOF()
@24,0 SAY " PRESIONE UNA TECLA "
WAIT " "
LINEA = 1
@2,2 CLEAR TO 22,78 && LIMPIA LA PANTALLA POR COORDENADAS
@1,2 SAY " " && INICIA COMIENZO DE LINEA
PAG = PAG + 1
ENDIF
ENDDO
CLEAR
CLOSE DATA
RETURN
*******
** EJEMPLO 07
** REPOR1.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,PAG && CONTADOR DE LINEAS Y PAGINAS
DO WHILE .NOT. EOF()
IF LINEA = 1
@PROW()+1,05 SAY " EMPRESA TUI C.A. PAG : "+STR(PAG,6)
@PROW()+1,05 SAY " LISTADO DE CLIENTES "
@PROW()+1,05 SAY " CODIGO NOMBRE CEDULA "
@PROW()+1,05 SAY REPLI("-",70)
LINEA = 4
ENDIF
** IMPRIME CAMPOS
@PROW()+1,5 SAY CODCLI
@PROW(),PCOL()+5 SAY NOMCLI
@PROW(),PCOL()+5 SAY CEDULA
LINEA = LINEA + 1
SKIP
** FIN DE PAGINA
IF LINEA > 55 .OR. EOF()
LINEA = 1
PAG = PAG + 1
EJECT
ENDIF
ENDDO
SET DEVI TO SCREEN
CLOSE DATA
RETURN
*******
** EJEMPLO 14
** REPOR3.PRG
** REPORTE GENERAL DE FACTURAS POR CLIENTE
CLEAR
@1,1 TO 23,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,PAG && CONTADOR DE LINEAS Y PAGINAS
STORE 0 TO CFACT,TOTALF,TOTALA
DO WHILE .NOT. EOF()
@1,2 SAY "" && INICIO DE LINEA
@ROW()+1,05 SAY " EMPRESA TUI C.A. PAG : "+STR(PAG,6)
@ROW()+1,05 SAY " CLIENTE : "+CODCLI+" "+NOMCLI
@ROW()+1,05 SAY " FACTURA FECHA MONTO ABONO SALDO "
@ROW()+1,05 SAY REPLI("-",70)
LINEA = 4
XSUBF = 0 && SUBTOTAL X CLIENTE
SELE 2 && BUSCA LAS FACTURAS DEL CLIENTE
SEEK A->CODCLI
DO WHILE .NOT. EOF() .AND. CODCLI = A->CODCLI
** IMPRIME CAMPOS
@ROW()+1,5 SAY NROFACT
@ROW(),COL()+3 SAY FECHA
@ROW(),COL()+3 SAY MONTOF PICT "9999999.99"
@ROW(),COL()+3 SAY ABONOF PICT "9999999.99"
@ROW(),COL()+3 SAY (MONTOF-ABONOF) PICT "9999999.99"
LINEA = LINEA + 1
XSUBF = XSUBF + MONTOF
TOTALF = TOTALF + MONTOF
TOTALA = TOTALA + ABONOF
CFACT = CFACT + 1
SKIP
** FIN DE PAGINA
IF LINEA > 21 .OR. EOF() .OR. CODCLI <> A->CODCLI
@22,40 SAY "TOTAL MONTO : "+STR(XSUBF,12,2)
@23,5 SAY " PRESIONE UNA TECLA "
WAIT " "
LINEA = 1
@2,2 CLEAR TO 22,78 && LIMPIA LA PANTALLA POR COORDENADAS
@1,2 SAY "" && INICIA COMIENZO DE LINEA
PAG = PAG + 1
ENDIF
ENDDO
SELE 1
SKIP
ENDDO
@10,05 SAY "TOTALES"
@12,05 SAY "FACTURA : "+STR(CFACT,6)
@12,40 SAY "MONTO : "+STR(TOTALF,12,2)
@14,40 SAY "ABONO : "+STR(TOTALA,12,2)
@16,40 SAY "SALDO : "+STR(TOTALF-TOTALA,12,2)
@23,05 SAY " PRESIONE UNA TECLA "
WAIT " "
CLEAR
CLOSE DATA
RETURN
********
** EJEMPLO 17
** MENU1.PRG
** PROGRAMA PRINCIPAL
SET DATE BRIT
SET TALK OFF
SET STAT OFF
SET SAFETY OFF
** EJEMPLO 18
** INDE1.PRG
** INDEXACION DE ARCHIVOS
SET TALK OFF
SET SAFETY OFF
DIMENSION V1(3),V2(3),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,05 SAY "INDEXANDO ARCHIVOS .... "
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
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 .T.
STORE SPACE(6) TO AXCODCLI
STORE SPACE(30) TO AXNOMCLI
STORE SPACE(12) TO AXCEDULA,AXTELEF
STORE 0 TO AXNUEVO
CLEAR
@2,1 TO 22,79 DOUBLE
@21,5 SAY "ESC- SALIR F3- MODIFICAR F4- ELIMINAR "
@4,25 SAY " ACTUALIZACION DE CLIENTES "
@6,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 .NOT. FOUND() && SI NO EXISTE
STORE "S" TO RESP
@20,05 SAY "DESEA INCLUIR ? S/N : " GET RESP PICT "!"
READ
IF RESP = "N"
LOOP
ELSE
AXNUEVO = 1 && INDICA QUE EL REGISTRO ES NUEVO
ENDIF
ELSE && SI EXISTE
AXNOMCLI = NOMCLI
AXCEDULA = CEDULA
AXTELEF = TELEF
ENDIF
&& CICLO DE LECTURA
DO WHILE .T.
@08,05 SAY "CEDULA : " GET AXCEDULA PICT "A-99.999.999"
@09,05 SAY "NOMBRE : " GET AXNOMCLI
@10,05 SAY "TELEFONO : " GET AXTELEF
READ
STORE "S" TO RESP
@20,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 ERROR
ENDDO
IF RESP = "E" .AND. AXNUEVO = 0 && OPCION DE ELIMINACION
SELE 2
LOCATE FOR CODCLI = AXCODCLI
IF FOUND()
WAIT "ERROR : EL CLIENTE TIENE FACTURAS ... "
ELSE
SELE 1
DELETE
PACK
WAIT " REGISTRO ELIMINADO ! PRESIONE UNA TECLA ... "
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
WAIT " REGISTRO ALMACENADO ! PRESIONE UNA TECLA ... "
ENDIF
ENDDO
RETURN
*******
** EJEMPLO 16
** LISTA3.PRG
** RESUMEN DE CLIENTES POR PANTALLA
CLEAR
@1,1 TO 23,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 .NOT. EOF()
@5,10 SAY "PROCESANDO REGISTRO : "+STR(RECNO(),6)
XCOD = CODCLI
STORE 0 TO XFAC,XMON,XABO
XNOM = A->NOMCLI && GUARDA EL NOMBRE DEL CLIENTE
**
DO WHILE .NOT. EOF() .AND. 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
CLEAR
CLOSE DATA
RETURN
*******