Introducción a las Tablas DBF en FoxPro

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

  1. Jerarquizadas: Organizan el contenido en jerarquías (modelo de árbol) con relaciones uno a uno. Requiere repetición de datos para relaciones múltiples.
  2. 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

  1. 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.
  2. Revisar cada grupo. Retirar datos que no dependan de la llave primaria.
  3. 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.