Introducción a las Tablas DBF
Una base de datos es un conjunto de información organizada y preparada para un propósito específico. Un Sistema de Gestión de Base de Datos (DBMS) es la organización sistemática de grandes cantidades de información. Esta información se organiza de diversas formas para facilitar búsquedas, extracciones, listados, reportes y gráficos.
RDBMS
Relational Data Base Management System: Software que administra datos relacionales.
Base de Datos
Colección de datos relacionales sobre un mismo tema o propósito. Permite manejar en conjunto y de forma fácil múltiples objetos para guardar, mostrar, organizar y analizar datos en tablas.
Tabla
Objeto que contiene una colección de datos sobre un tema particular, almacenados en filas y columnas. Ejemplos: lista de empleados, clientes, proveedores, productos, insumos, ventas, compras, etc.
Query
Objeto que presenta una interrogante o define un conjunto de características a la base de datos. Puede involucrar datos de varias tablas y su respuesta es un Dynaset (colección de registros dinámicos).
Forma
Objeto que organiza los datos de una o más tablas para visualizar varios campos a la vez, obtener la mejor presentación (en papel o pantalla) y presentar subtotales y totales.
Control
Objeto que muestra datos de un campo, variable o expresión con características especiales.
Objeto
Elemento que se puede seleccionar y manipular como una unidad.
Tipos de Bases de Datos
- Jerarquizadas: Organizan el contenido en jerarquías (modelo de árbol) con relaciones uno a uno. Requiere repetición de datos para relaciones múltiples.
- Relacionales: Organizan la base de datos en tablas con filas (registros) y columnas (campos). Cada registro tiene un número secuencial y cada campo un nombre. Cada tabla se llama relación.
Campo
Unidad básica de información de un registro (columnas). Ejemplos: nombre, edad, sueldo, nota, etc. Máximo 10 caracteres, inicia con letra y sin espacios.
Tipos de campos:
- Carácter: Hasta 255 caracteres alfanuméricos. No se usan para operaciones. Ejemplos: nombre, dirección, teléfono.
- Numérico: Para números (operables). Ancho máximo: 19 dígitos (incluyendo separador decimal y signo).
- Fecha: Para fechas. Longitud: 8.
- Lógico: Para valores lógicos (.T. o .F., Sí o No). Longitud: 1.
- Memo: Para más de 255 caracteres o longitud variable. Longitud: 10 (datos en archivo .FPT).
Registro
Conjunto de información básica dividida en campos, pertenecientes a un elemento o evento (filas). Se almacenan en orden de entrada, pero se pueden reordenar. Ejemplos: alumno, curso, empleado, transacción.
Ejemplo de tabla: directorio telefónico (ordenado alfabéticamente, por número, dirección, etc.).
Términos Básicos
- Entidad: Persona, lugar, objeto o evento de interés. Ejemplos: alumnos, cursos, matrícula.
- Tabla Maestro: Datos que describen el estado actual de una entidad. Debe estar actualizada. Ejemplo: maestro de alumnos (nombre, dirección, teléfono, promedio).
- Tabla de Transacciones: Archivo temporal con datos de una entidad en un periodo. Ejemplo: matrícula (cursos de cada alumno en un ciclo).
- Tabla Cabecera: Datos generales de un documento (factura, boleta, etc.).
- Tabla Detalle: Descripción de los ítems de un documento.
Normalización de la Base de Datos
Proceso para simplificar la organización y evitar datos redundantes.
Formas Normales
- Agrupar datos por entidad (cada grupo es una tabla). Asignar una llave única a cada tabla. No incluir campos irrelevantes o con valores iguales en todos los registros.
- Revisar cada grupo. Retirar datos que no dependan de la llave primaria.
- Eliminar datos calculables a partir de otros. Ejemplos: Total = Unidades x Precio Unitario, IGV = 18% del Total.
Ahorrar espacio en los campos (codificación o abreviaturas).
Comandos más Usados en FoxPro
Descripción general de los comandos y funciones más usados en FoxPro, agrupados por tarea.
Simbología
<>
: Ítem a suministrar por el usuario.<Exp>
: Campo, variable o combinación (carácter, numérico, fecha o lógico).<Var>
: Variable de memoria.<Condición>
: Expresión que devuelve verdadero o falso.[]
: Ítem opcional.|
: Opciones.- Alcance: Grupo de registros al que se aplica el comando (FOR y WHILE: ALL).
RECORD n
: Registro n.NEXT n
: Siguientes n registros.REST
: Desde el registro activo hasta el final.ALL
: Todos los registros.
Manejo de Tablas (DBF)
Crear Tablas
CREATE <dbf / ?> [FROM <archivo>]
Usar Tablas
USE [<dbf>] [ALIAS <alias>] [IN <area>] [ORDER <tag>] [ASCENDING | DESCENDING] [AGAIN] [EXCLUSIVE | SHARED] [NOUPDATE]
CLOSE DATABASE
: Cierra todas las tablas y selecciona el área 1.
Funciones útiles:
DBF([<área> | <alias>])
: Nombre de la tabla en uso.ALIAS([<área>])
: Alias de la tabla.FCOUNT([<área> | <alias>])
: Número de campos.FIELD(<#>[<área> | <alias>])
: Nombre del campo.FSIZE(#)
: Tamaño de los campos de un registro.HEADER(#)
: Longitud de la cabecera.SELECT(0/1)
: 0: número del área activa; 1: número del área libre más alta.
Mostrar Estructura
LIST STRUCTURE [NOCONSOLE] [TO PRINT | TO FILE <txt>]
DISP STRU [NOCONSOLE] [IN <area>] [TO PRINT | TO FILE <txt>]
Modificar Estructura
MODIFY STRUCTURE
COPY STRU TO <archivo> FIELD <campos> [EXTENDED]
Buscar Tablas
DIR [ON <d:>] [LIKE [<ruta>] [<skel>]] [TO PRINTER | TO FILE <txt>]
Áreas de Trabajo
FoxPro maneja 225 áreas (25 en versión estándar). SELECT <#>
cambia el área activa (0: área libre más baja).
SELECT(0)
: Área activa.SELECT(1)
: Área libre más alta.USED([<#>])
: .T. si el área está ocupada, .F. si está libre.
Formas de Visualización
SET STATUS OFF/ON
: Barra de estado.SET HEADING ON/OFF
: Encabezado en LIST, DISP y CALC.SET DATE TO [DMY | MDY | YMD]
: Formato de fechas.SET CENTURY OFF/ON
: 2 o 4 dígitos para los años.SET DECIMALS TO <#>
: Número de decimales (0 a 18).SET FIXED
SET MESSAGE TO [<#> | LEFT | CENTER | RIGHT] [WINDOW <nombre>]
SET STICKY ON/OFF
: Comportamiento del mouse con los menús.SET TALK ON/OFF
: Mostrar comandos ejecutados.
Manejo de Registros
Añadir Registros
APPEND [BLANK] [FROM <dbf> [FIELDS <campos>] [FOR <cond>]] [DELIMITED [WITH TAB | WITH <delimit> | WITH BLANK] [TYPE WK1 | WK3 | WKS | XLS]]
SET CARRY ON/OFF
: Copia datos del registro anterior al nuevo.
Modificar Registros
BROWSE [LAST] [FIELDS <campo1, campo2,...>] [FOR <cond>] [KEY <exp1>,<exp2>] [VALID [:F] <exp> [ERROR <mensaje>]] [WHEN <cond>] [FREEZE <campo>] [LOCK <exp>] [TITLE <titulo>] [WIDTH <ancho>] [TIMEOUT <#>] [IN WINDOW <ventana>] [COLOR <par1>,<par2>...<par8>] [NOAPPEND] [NODELETE] [NOEDIT/NOMODIFY] [NOLGRID] [NORGRID] [NOLINK] [NOMENU] [NOWAIT] [NOCLEAR] [NOMENU]
Características de los campos en BROWSE:
:#
: Ancho.:R
: Solo lectura.:P=<máscara>
: Formato.:B=<min>,<max>[:F]
: Rango.:V=<cond>
: Validación.:E=<mensaje>
: Mensaje de error.:F
: Validación forzada.:W=<cond>
: Condición para posicionarse.
Campos calculados: <nombre> = <exp>
(solo lectura).
FOR <cond>
: Filtra registros.
KEY <exp1>,<exp2>
: Filtra por rango (basado en la llave índice activa).
VALID [:F] <cond> [ERROR <mensaje>]
: Post-condición.
WHEN <cond>
: Pre-condición.
TITLE <exp>
: Título de la ventana.
WIDTH <ancho>
: Ancho máximo de los campos.
TIMEOUT <#>
: Tiempo de espera.
IN WINDOW <ventana>
: Abre BROWSE dentro de una ventana.
COLOR <par1>,<par2>...<par8>
CHANGE y EDIT funcionan similar a BROWSE.
Borrar Registros
Marcar
DELETE [ALL | NEXT <#> | RECORD <#> | REST] [FOR <cond>] [WHILE <cond>] [NOOPTIMIZE]
Desmarcar
RECALL [ALL | NEXT <#> | RECORD <#> | REST] [FOR <cond>] [WHILE <cond>] [NOOPTIMIZE]
Empaquetar
PACK [MEMO] [DBF]
Mostrar/Ocultar Registros Marcados
SET DELETE OFF/ON
: Muestra/oculta registros marcados.
DELETED()
: Devuelve verdadero si el registro está marcado.
Borrar Todos los Registros
ZAP
Organización de Registros
Tipos de ordenamiento:
- Físico: Crea una nueva tabla ordenada. Recomendado para tablas estables.
SORT ON <campo> TO <tabla> [FOR <cond>] [WHILE <cond>] [ASC | DESC] [FIELDS [<campos> | LIKE <máscara> | EXCEPT <máscara>]] [<alcance>]
- Lógico: Crea un archivo índice. Tipos de índices:
- Simples (IDX): Una clave. Manuales. FoxBASE.
- Compuestos (CDX): Hasta 25 claves (etiquetas o TAG). Automáticos. FoxPro.
Crear Índices
INDEX ON <campo> TO <idx> | TAG <tag> [FOR <exp>] [ASCENDING | DESCENDING] [UNIQUE] [ADDITIVE]
Abrir IDX
SET INDEX TO <idx1>,<idx2>,<idx3>
Activar/Cambiar Índice
SET ORDER TO <tag>|<idx> [IN <área>|<alias>] [ASC | DESC]
SET ORDER TO
desactiva todos los índices.
Reconstruir Índices
REINDEX
Eliminar Índices
DELETE TAG <etiqueta>
Poner un Filtro
SET FILTER TO <exp>
Comandos que Afectan los Resultados
SET COLLATE TO SPANISH
: Ordena registros y compara cadenas según el idioma.
SET EXACT OFF/ON
: Compara cadenas de diferente longitud.
Mostrar, Imprimir y Exportar Datos
Listar
LIST [OFF] [<campo1>,<campo2>...] [FOR <cond>] [WHILE <cond>] [TO PRINT | FILE <txt>] [NOCONSOLE]
Mostrar
DISPLAY [ALL] [OFF] [<campo1>,<campo2>...] [FOR <cond>] [WHILE <cond>] [TO PRINTER | FILE <txt>] [NOCONSOLE]
DISPLAY MEMORY
: Variables de memoria y matrices.DISPLAY STATUS
: Entorno FoxPro.DISPLAY STRUCTURE
: Estructura de la tabla.
Mostrar Uno a Uno
? | ?? <exp1>,<exp2>,<exp3>... [PICTURE <exp>] [FUNCTION <exp>] [AT <exp>]
??? <exp>
: Imprime directamente.
Comandos Adicionales
SET HEADING ON/OFF
SET FILTER TO <cond>
: Filtra registros.SET FILTER ON/OFF/LOCAL/GLOBAL
Mover Puntero y Buscar Registros
Mover
Absoluto
GO <#> [IN <área> | <alias>]
Relativo
GO TOP | BOTTOM [IN <área> | <alias>]
SKIP [<exp>] [IN <área> | <alias>]
RECNO(<área>|<alias>)
: Número de registro activo.RECCOUNT(<área>|<alias>)
: Número total de registros.
Búsqueda Secuencial
LOCATE [ALL] [NEXT <exp>] [FOR <cond>] [WHILE <cond>]
CONTINUE
: Busca el siguiente registro.
Tecnología RUSHMORE (para tablas grandes): <exp índice> <operador> <constante>
Búsqueda en Índices
SEEK <var>
: Busca en base a una variable (o cadena entre comillas).FIND <expC>
: Busca en base a una cadena o valor (sin comillas).
FOUND(<área>|<alias>)
: Indica si la búsqueda tuvo éxito.
EOF(<área>|<alias>)
: Indica si el puntero está al final de la tabla.
Operaciones con Campos y Registros
Operadores Lógicos
()
, .NOT.
o !
, .AND.
, .OR.
Operadores Aritméticos
+
, -
, *
, /
, ^
o **
Operadores Relacionales
<
, >
, =
, #
o <>
, <=
, >=
, ==
Cálculo con Campos
REPLACE <campo> WITH <exp> [ALL] [FOR <cond>] [WHILE <cond>]
Cálculo con Registros
CALCULATE <exp> [FOR <cond>] [TO <var>]
(CNT, SUM, MAX, MIN, AVG, STD, VAR, NPV, etc.)
SUM <campo> [FOR <cond>] [TO <var>]
AVERAGE <campo> [FOR <cond>] [TO <var>]
COUNT [FOR <cond>] [TO <var>]
Manipular Múltiples Tablas – Relaciones
SET RELATION [TO <campo> INTO <área/alias>] [OFF]
Ejemplo: LIST COD, B.NOMBRE, FECHA
Tipos de relaciones:
- Uno a uno
- Muchos a uno
- Uno a muchos (usar
SET SKIP TO <área>
)
Funciones Incorporadas
Tablas
DBF(<área>)
: Nombre de la tabla.USED()
: Tabla activa.ALIAS()
: Sobrenombre.FLUSH()
: Escribe buffer a disco.FILE(archivo)
: Existencia del archivo.HEADER()
: Tamaño del encabezado.FLOCK()
: Bloquea la tabla.
Áreas
SELECT()
: Área activa.RELATION()
: Relación entre tablas.TARGET()
: Alias de la tabla hija.
Índices
CDX()
: Archivo de índice activo.TAG()
: Etiqueta del índice.KEY()
: Expresión de indexación.ORDER()
: Nombre del IDX o TAG activo.FILTER()
: Condición de filtro.
Campos
FCOUNT(<área>)
: Número de campos.FIELD(n,<área>)
: Nombre del campo n.FSIZE()
: Tamaño del campo.
Registros
DELETED(n)
: Registro marcado para borrar.BOF(<área>|<alias>)
: Puntero al principio.EOF(<área>|<alias>)
: Puntero al final.RECNO(<área>)
: Número de registro activo.RECCOUNT(<área>)
: Número total de registros.RECSIZE(<área>)
: Longitud del registro.RLOCK()
: Bloquea registro(s).FOUND()
: Éxito de LOCATE FOR.SEEK(<var>,<área>)
: Búsqueda avanzada.