Sei sulla pagina 1di 50

Edmundo A.

Cceres

TABLAS, BASES DE DATOS E NDICES

2008

1
ndice

Introduccin ........................................................................................................................................................4
Comando ?.....................................................................................................................................................4
Barra de estado..............................................................................................................................................4
Resultado de comandos.................................................................................................................................4
Tablas .................................................................................................................................................................5
Tipos de tablas ...............................................................................................................................................5
Creacin de una tabla: Diseador de tablas...................................................................................................6
Create ........................................................................................................................................................7
Tipos de campos ............................................................................................................................................7
Ventana Examinar ..........................................................................................................................................7
Apertura de la ventana Examinar ...................................................................................................................8
Browse .......................................................................................................................................................9
Cierre de tablas. Use, Close, Clear, Quit....................................................................................................9
Apertura de tablas ..........................................................................................................................................9
Use...........................................................................................................................................................10
Modos Editar y Examinar..............................................................................................................................10
Modo Aadir .................................................................................................................................................10
Marcadores de registro.................................................................................................................................10
Marcadores de destruccin ..........................................................................................................................10
Partidor .........................................................................................................................................................11
Tamao y movimiento de la ventana Examinar ............................................................................................11
Lneas de cuadrcula ....................................................................................................................................11
Ancho y posicin de las columnas................................................................................................................11
Alto de encabezados y renglones.................................................................................................................11
Men Edicin................................................................................................................................................11
Set keycomp.............................................................................................................................................12
Fuente ..........................................................................................................................................................12
Filtro de registros..........................................................................................................................................12
Between( ) e Inlist( ) .................................................................................................................................13
Set filter to................................................................................................................................................13
Exactitud en comparaciones de caracteres ..................................................................................................14
Set exact ..................................................................................................................................................14
Operador ==.............................................................................................................................................14
Nmero de registro y cantidad de registros ..................................................................................................14
Filtro de campos ...........................................................................................................................................14
Dilogo Selector de campos.........................................................................................................................14
Set fields ..................................................................................................................................................15
List structure y Display structure ..............................................................................................................15
List status y Display status .......................................................................................................................15
Orden del ndice ...........................................................................................................................................16
Set order to ..............................................................................................................................................16
Index on ...................................................................................................................................................16
Dir.............................................................................................................................................................16
Borrado del escritorio....................................................................................................................................17
Clear.........................................................................................................................................................17
Archivo de ndices compuesto estructural ....................................................................................................17
Alcance.........................................................................................................................................................17
For ................................................................................................................................................................18
While.............................................................................................................................................................18
Ir a un registro ..............................................................................................................................................19
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
2
Go, Skip, Locate y Continue.....................................................................................................................20
Comienzo y fin de archivo. Bof( ) y Eof( ) .................................................................................................21
Recno( ) ...................................................................................................................................................21
Reccount( )...............................................................................................................................................22
Set deleted...............................................................................................................................................22
Agregar un registro.......................................................................................................................................22
Append blank ...........................................................................................................................................22
Opciones poco tiles del men Tabla...........................................................................................................22
Copy structure..........................................................................................................................................23
Copy to.....................................................................................................................................................23
Modify file.................................................................................................................................................24
Dilogo Exportar ...........................................................................................................................................24
Agregado masivo de registros: dilogo Aadir desde...................................................................................24
Append from.............................................................................................................................................25
Dilogo Importar ...........................................................................................................................................25
Marcado de registros a eliminar....................................................................................................................25
Delete.......................................................................................................................................................26
Deleted( ) .................................................................................................................................................26
Desmarcado de registros a eliminar .............................................................................................................26
Recall .......................................................................................................................................................26
Eliminacin de registros marcados...............................................................................................................26
Pack .........................................................................................................................................................26
Cambio de los datos de uno o varios campos ..............................................................................................27
Replace....................................................................................................................................................27
Vinculacin de particiones ............................................................................................................................27
Regeneracin de ndices..............................................................................................................................27
Reindex ....................................................................................................................................................27
Modificacin de la estructura de una tabla ...................................................................................................28
Modify structure........................................................................................................................................28
Campos de tipo fecha, fechahora y lgico..................................................................................................28
Campos de tipo memo..................................................................................................................................29
Dilogo Editar propiedades ..........................................................................................................................30
List, Display, Set heading.........................................................................................................................30
Set memowidth.........................................................................................................................................31
ndices...............................................................................................................................................................32
Tipos de ndices............................................................................................................................................32
Expresiones complejas de ndice. Str( ), Dtos( ) y Ttoc( ).............................................................................33
Aplicacin de ndices....................................................................................................................................35
Dtoc( ) ......................................................................................................................................................36
Iif( ) ...........................................................................................................................................................36
Bases de datos .................................................................................................................................................37
Creacin de una base de datos....................................................................................................................37
Create database.......................................................................................................................................37
Barra de herramientas Diseador de bases de datos...................................................................................37
Mens contextuales del diseador de bases de datos .................................................................................38
Opciones de men en el diseador de bases de datos................................................................................38
Close databases.......................................................................................................................................38
Apertura de una base de datos.....................................................................................................................39
Open database.........................................................................................................................................39
Modificacin de una base de datos ..............................................................................................................39
Modify database.......................................................................................................................................39
Propiedades exclusivas de las tablas base ..................................................................................................39
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
3
reas de trabajo. In, Order y Noupdate de Use. Select ...........................................................................41
Relaciones e Integridad referencial...................................................................................................................43
Relaciones transitorias .................................................................................................................................43
Ampliacin de una relacin...........................................................................................................................44
Nombre.........................................................................................................................................................44
Relaciones permanentes..............................................................................................................................45
Alumnos........................................................................................................................................................45
Exmenes.....................................................................................................................................................45
Campos ........................................................................................................................................................45
Campos ........................................................................................................................................................45
Indices ..........................................................................................................................................................45
Indices ..........................................................................................................................................................45
Integridad referencial ....................................................................................................................................46
Sesin de datos ................................................................................................................................................47

Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
4
Introduccin
Esta pequea obra pretende dar conceptos y ejercicios para que el lector aprenda a disear tablas y bases de
datos. Como casi todo lo que se trata se puede conseguir mediante mens y barras de herramientas, he cre-
do conveniente exponer tambin los comandos y las funciones de VFP que logran lo mismo. Esto no es im-
prescindible, salvo que el lector se interese en programacin. Por ello, se exponen estos temas en letra ms
pequea.
Antes de entrar en tema, veamos algunas cosas tiles, que usaremos con frecuencia.
Comando ?
En la ventana que dice Comandos, escriba los siguientes ejemplos y termine apretando ENTER. Las lneas
verticales en el margen izquierdo indican que debe probar en la ventana COMANDOS.
? 4 + 35
? 25 * 127
? date( )
? date( ) + 10
? 5 = 3 + 6
? "Hoy es", date( )
? "Hoy es " + cdow(date( ))
El comando ? evala una o varias expresiones y muestra el resultado en la ventana principal (la gran superfi-
cie blanca, donde yace la ventana COMANDOS). Si la ventana COMANDOS no est visible, la puede activar con
VENTANA VENTANA COMANDOS, es decir, dar clic en el men VENTANA y dar otro clic en la opcin VENTANA
COMANDOS. Tambin puede usar la combinacin de teclas CTRL + F2.
Barra de estado
La barra de estado es una banda de color gris que se puede hacer visible al pie de la ventana principal de
VFP. Esto se consigue con HERRAMIENTAS OPCIONES VER BARRA DE ESTADO. Tambin se puede activar o
desactivar emitiendo respectivamente los siguientes comandos:
set status bar on
set status bar off
La barra de estado reduce el espacio de pantalla disponible para ver datos, disear formularios, disear in-
formes, etc., por lo que conviene ocultarla. En algunas ocasiones es til que est visible.
Resultado de comandos
Hay comandos que escriben resultados en la ventana principal, expresados como nmeros, letras, etc. Esto a
veces puede ser til, pero otras veces molesta. Para activar o desactivar esta caracterstica, vlgase de
HERRAMIENTAS OPCIONES VER RESULTADO DEL COMANDO. Tambin puede lograr lo mismo, respectivamen-
te, con SET TALK ON y SET TALK OFF. Pruebe:
set talk on
a = 250 * 32
set talk off
b = 250 * 32
Cuando activ mostrar el resultado de los comandos, el comando a = 250 * 32 calcul el producto 250 x 32 y
lo almacen en una porcin de la memoria, llamada variable de memoria, a la que identificamos con el nom-
bre a; pero tambin mostr el resultado 8000 en la pantalla principal. Cuando desactiv mostrar el resultado
de los comandos, el comando b = 250 * 32 calcul el resultado y lo almacen en otra variable de memoria, a
la que identificamos con el nombre b; pero no mostr el resultado en la pantalla principal.
El estado de SET TALK no afecta al comando ?, porque su propsito es evaluar expresiones y mostrar el resul-
tado en la ventana principal.



5
Tablas

Una tabla es el archivo contenedor de datos ms comn en VFP, cuyo nombre es cualquiera y cuya extensin
es DBF. Una tabla est formada por registros y los registros estn formados por campos. Todos los registros
tienen los mismos campos. Si en una tabla se guardan datos de alumnos, cada alumno tendr su propio re-
gistro. En los campos de un registro particular se guardan los datos de un alumno particular: en un campo la
matrcula, en otro el nombre, en otro el domicilio, etc. La igualdad de forma de los registros en cuanto a que
todos tienen los mismos campos, es lo que constituye la estructura de un registro genrico. Los registros se
guardan fsicamente en disco uno tras otro, como indica la siguiente figura.
Registro Registro Registro
Matrcula Nombre Domicilio Etc. Matrcula Nombre Domicilio Etc. Matrcula Nombre Domicilio Etc.
Siguen ms
registros
Si dispusiramos un registro bajo otro, cada uno ocupara una fila y los campos formaran columnas:
Matrcula Nombre Domicilio Etc.



Siguen ms registros
Tambin podramos disponer los registros de esta ofra forma:
Matrcula
Nombre
Domicilio
Etc.
Matrcula
Nombre
Domicilio
Etc
Matrcula
Nombre
Domicilio
Etc.
Siguen ms registros
Estas disposiciones son comunes para examinar una tabla, llamadas modos examinar y aadir, respectiva-
mente. Son dos formas de ver el contenido de la tabla, porque la distribucin fsica es la de la primera figura.
Tipos de tablas
Hay dos variedades de tablas: tablas libres y tablas de base de datos. Las primeras tienen su estructura com-
pletamente definida en s mismas, consistente en las caractersticas obligatorias. Pueden ser ordenadas por
tres de los cuatro tipos de ndices: normal, nico y candidato. Tecnolgicamente, son las ms antiguas.
Las tablas de base de datos pueden tener algunas definiciones adicionales en la base de datos donde estn
incluidas. Aunque no es obligatorio usarlas, las posibilidades que brindan estas definiciones brindan mayor
seguridad y evitan errores. Entre estas posibilidades, las ms comunes son reglas y mensajes de validacin
de campos y registros; formatos y mscaras de entrada de cada campo; valores predeterminados de campos
al agregar nuevos registros. Las tablas de base de datos pueden ser ordenadas por los cuatro tipo de ndices
existentes: normal, nico, candidato y principal.
Cuando se elimina una tabla libre, se la elimina fsicamente de la carpeta donde est guardada. Cuando se
elimina una tabla de base de datos, hay que elegir entre eliminarla fsicamente de la carpeta o eliminarla de la
base de datos. Si se elige esta ltima posibilidad, VFP advierte que se perdern las caractersticas adiciona-
les guardadas en la base de datos, adems de las relaciones permanentes donde interviene la tabla, si las
hay. Confirmada la accin, la tabla se transforma en tabla libre. Si la tabla contiene ndice principal, ste se
transforma en candidato.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
6
Creacin de una tabla: Diseador de tablas
Para crear una tabla, primero hay que crear su estructura, es decir, definir qu campos va a contener, y luego
agregarle registros. Una forma de crear una estructura, entre otras, es con ARCHIVO NUEVO. Esto presenta el
dilogo NUEVO. En TIPO DE ARCHIVO, elija TABLA. Tiene dos opciones para crearla: NUEVO ARCHIVO y ASISTENTE.
La opcin NUEVO presenta el dilogo CREAR, donde debe seleccionar una carpeta (VFP le sugiere una) y es-
cribir un nombre para la nueva tabla. Puede elegir cualquier carpeta, como MIS DOCUMENTOS, que suele de-
pender de la unidad C; pero es mejor que use su carpeta de trabajo, SI1. Escriba Alumnos como nombre de
la tabla. Pulse el botn GUARDAR. Se presenta el DISEADOR DE TABLAS. En la barra de ttulo aparece el nom-
bre de la tabla a crear. El diseador tiene las fichas CAMPOS, NDICES y TABLA.
En la ficha CAMPOS hay seis columnas: NOMBRE, TIPO, ANCHO, DECIMAL, NDICE y NULL. Debajo de NOMBRE hay
un rectngulo. Escriba mu, abreviatura de matrcula universitaria. Avance a la columna TIPO, pulsando TAB o
dndole clic. Elija Numrico en la lista desplegable. Avance a ANCHO e introduzca el nmero 6, ya que es el
mximo de posiciones que podr tener en cifras nuestra matrcula. En DECIMAL introduzca 0, pues la matrcula
no tiene decimales. En NDICE abra la lista y elija Ascendente. Esto va a crear un ndice por este campo, en
forma ascendente.
Complete la definicin de la estructura, para que finalmente se vea as:
Nombre Tipo Ancho Decimal ndice Null
mu Numrico 6 0
nombre Carcter 30
domicilio Carcter 30
sexo Carcter 1
Ha definido cuatro campos llamados MU, NOMBRE, DOMICILIO y SEXO. Estos nombres pueden tener hasta 10
posiciones, formados por letras, nmeros y algunos caracteres especiales, como el de subrayado. Deben
empezar con una letra. No pueden contener espacios.
Cada campo debe tener un tipo. MU es de tipo numrico, lo que significa que slo podremos ingresar nme-
ros a este campo. Como tiene un ancho o tamao de 6 posiciones, los valores posibles irn de 99.999 a
999.999. No podremos ingresar decimales, porque hemos dicho que tiene 0 posiciones decimales. Si hubi-
ramos dicho que tiene 2 decimales, cuntas posiciones enteras habra? Se podra pensar que si el nmero
tiene en total 6 posiciones, 2 de las cuales son decimales, habra 4 posiciones enteras. No es as, porque
VFP guarda el punto decimal, con lo cual 2 decimales ms el punto decimal son 3 posiciones, por lo que que-
daran 6 3 = 3 posiciones enteras. Por qu decimos punto y no coma decimal? Porque en Estados Unidos,
donde se ha inventado VFP, se usa el punto como separador decimal, no la coma.
Los dems campos son de tipo carcter: su contenido ser letras, nmeros y otros smbolos del teclado. Para
NOMBRE y DOMICILIO el ancho es una estimacin. Si uno de estos campos resulta pequeo para un dato espe-
cfico, deberemos abreviar o truncar el dato. Para SEXO usaremos un cdigo, F para femenino y M para mas-
culino, por lo que con una posicin es suficiente. Los campos de caracteres no tienen decimales.
Hemos creado un ndice para el campo MU. Un ndice, que debe tener un nombre, establece cmo ordenar
los registros de acuerdo a un criterio, llamado expresin de ndice. Un ndice no modifica el orden con que es-
tn guardados los registros, pero, cuando se activa, hace que se ordenen virtualmente por un criterio, por
ejemplo por nombre o por matrcula. Una tabla puede tener varios ndices distintos, por distintos criterios, que
se guardan todos en un nico archivo de ndices. Seleccione la ficha NDICES y ver que la primera fila dice
que su NOMBRE es Mu, su TIPO es Normal y su EXPRESIN es Mu. En la columna ORDEN se ve una flecha as-
cendente, indicando que el orden es en tal sentido. La tabla, entonces, va a tener un ndice MU que aceptar
valores repetidos, si as los ingresamos, en el campo MU. Esto es lo que permiten los ndices normales. Ob-
viamente, la matrcula no debera repetirse nunca, porque es el identificador de cada alumno. Hay otros tipos
de ndice que impiden esta repeticin errnea.
Vuelva a la ficha CAMPOS. Vea a la izquierda de cada fila un rectngulo gris. Tiene dos propsitos. El primero
es indicar el campo activo, es decir el campo que est definiendo o modificando, lo que se indica con el sm-
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
7
bolo . El segundo propsito es arrastrar el campo activo hacia arriba o abajo, para cambiarlo de posicin. Si
vuelve a la ficha NDICES, ver a la izquierda de la nica fila, por ahora, un rectngulo igual, que tiene el mismo
cometido.
Vaya a la ficha TABLA. No hay campos que pueda llenar. Solamente da informacin inmodificable. Indica que
hay 0 registros, 4 campos y que la longitud de cada registro es de 68 posiciones. Si sumamos lo que mide
cada campo, es decir 6 + 30 + 30 + 1 = 67. El espacio excedente en cada registro sirve para indicar si se lo
quiere destruir, como veremos.
Por ahora pulse el botn ACEPTAR. Un mensaje le pregunta si quiere ingresar registros. Qu significa esto?
Hemos dicho que todos los registros de una tabla tienen la misma estructura. Al crear la tabla, defini la es-
tructura que van a tener los registros, mediante sus campos componentes con sus caractersticas, y posible-
mente ndices. Pero no ingres registros con datos especficos. Las tablas tienen dos partes: una es la defini-
cin estructural, que se ubica al comienzo del archivo; la otra son los registros con datos particulares. Las ta-
blas deben tener al menos la primera parte; pero pueden carecer de la segunda. Si ese es el caso, tendra-
mos tablas vacas, donde en cualquier momento puede agregar registros con datos en sus campos. La pre-
gunta que hace VFP es si quiere dejar la tabla vaca o empezar a introducir registros. Dgale que s.
Create
El comando para crear una tabla es CREATE, seguido por el nombre de la tabla. ste puede ir precedido por el camino de carpetas
para llegar a la carpeta que va a contener la tabla. Ejemplos:
create alumnos
create c:\si1\alumnos
create c:\windows\temp\pagos
Tipos de campos
Cada campo componente de la estructura de tabla debe tener un tipo. No slo los campos, sino los dems
datos de VFP, como variables y constantes, necesariamente son de algn tipo. El tipo establece los datos
permitidos y el intervalo de valores entre los cuales puede variar. Los campos contemplan ms posibilidades
que los otros datos en cuanto a tipo. Los tipos de campos ms sencillos son los siguientes.
Tipo Contenido Tamao
Carcter Texto Hasta 254
Numrico Reales Hasta 20
Fecha Fechas 8
Fecha Hora Fecha y hora 8
Lgico Valores lgicos 1
Memo Texto 4
Note que los tamaos de los campos de caracteres y numricos deben definirse al crear o modificar la estruc-
tura de la tabla. Los dems campos son de longitud fija. Cuando se define un campo numrico, adems, hay
que indicar cuntos decimales posee. VFP no usa coma, sino punto, para separar la porcin entera de la por-
cin decimal de un nmero. Cuando llevan decimales, el punto tambin se cuenta en el tamao, porque ocu-
pa una posicin. Por ejemplo, si un campo numrico tiene 10 posiciones con 2 decimales, hay que contar el
punto y las posiciones decimales, de modo que las posiciones enteras son 7.
Dejaremos los campos memo para ms adelante, porque son muy particulares.
Ventana Examinar
Luego de contestar que s quiere ingresar registros, se presenta la ventana EXAMINAR. Aparecen los nombres
de los campos MU, NOMBRE, DOMICILIO, SEXO, uno bajo el otro. Debajo hay una lnea horizontal, que se repite
regularmente formando bandas, pero vacas. Cada banda representa un registro. El punto de insercin est
en MU. Ingrese 5201, la primera matrcula del ejemplo. Si observ, ahora aparece en la segunda banda otra
serie de nombres de campos, uno bajo el otro. Complete los restantes datos del primer registro, de modo que
se vea as:
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
8
Mu: 5201
Nombre: Corts, Luis
Domicilio: Jujuy 8543
Sexo: M
Para avanzar de campo en campo, si el contenido no lo llena completamente, puede usar TAB o ENTER. Al
completar el ltimo campo del primer registro, el punto de insercin pasa al campo MU del siguiente registro.
Apenas comience a llenarlo, aparecen los nombres de los campos en la tercera banda. Los datos del segun-
do registro son:
Mu: 1702
Nombre: vila, Mara
Domicilio: Mitre 7047
Sexo: F
Al terminar el segundo registro, el punto de insercin salta al campo MU del tercero. No llene ms. Si el ltimo
registro est vaco y sale con el botn de cierre o con ESC, ese registro no se grabar en el archivo. Advierta
que, si estuviera en un campo que llena o modifica y pulsa ESC, ese campo no ser grabado con el nuevo
contenido. Por ello debe salir del campo SEXO del segundo registro, confirmando su contenido, para que pue-
da grabarse. No es necesario pasar a un registro vaco: tambin podra volver a un campo llenado previamen-
te, del registro actual o de cualquier otro previo. Salga con ESC.
Apertura de la ventana Examinar
Usted acaba de cerrar la ventana EXAMINAR. Una forma de abrirla es cuando termina de crear la estructura de
una tabla y decide ingresar registros.
Si la tabla que desea examinar ya tiene registros, el procedimiento anterior no se puede aplicar. Pero hay va-
rias otras formas de abrirla. Como requisito previo, se necesita que la tabla est abierta y seleccionada. La
tabla ALUMNOS est abierta, porque no ha hecho nada para cerrarla. Tambin est seleccionada, porque es la
nica que est abierta. Seleccionar una tabla tiene sentido cuando hay varias tablas abiertas a la vez, una so-
la de las cuales puede estar seleccionada.
Otra forma de abrir la ventana EXAMINAR para la tabla ALUMNOS es con VER EXAMINAR "ALUMNOS". Hgalo.
Ahora vuelve a ver el contenido de la tabla. Pero hay una presentacin distinta: al ingresar registros luego de
definir la estructura de la tabla, los campos aparecan uno bajo otro y los registros se vean separados por
bandas. Ahora los campos se ven uno junto a otro, formando columnas, y los registros se ven como filas. Es
una diferencia de presentacin, pero los datos son los mismos.
La ventana EXAMINAR es como las dems ventanas de Windows: se puede movea, maximizar o minimizar,
cambiar el alto o el ancho, etc. Cuando tiene varios registros en una tabla que visualiza en la ventana
EXAMINAR, puede navegar por la tabla, de varias maneras:
Avanzar o retroceder de a un registro, con las teclas de flechas verticales. El registro actual se indica con
el smbolo en la primera columna de la ventana EXAMINAR. Con el mouse, puede desplazar registros
dando clic en los extremos de la barra de desplazamiento vertical. Para cambiar de registro, d clic en
cualquier campo del registro que quiere seleccionar.
Avanzar o retroceder los registros que caben en la ventana, con AVPG y REPG. Con el mouse, el equi-
valente es dar clic dentro de la barra de desplazamiento vertical, arriba o debajo del deslizador. Para mo-
vimientos mayores, arrastre el deslizador hacia arriba o abajo.
Ir al extremo izquierdo o derecho de un campo, con INICIO y FIN.
Avanzar o retroceder por el interior de un campo, con las flechas horizontales. El campo actual se remar-
ca con un recuadro.
Avanzar al siguiente campo de la derecha, con TAB o ENTER. Retroceder al siguiente campo de la izquier-
da con CTRL + TAB. Con el mouse, se da clic en el campo que se desea en el registro seleccionado.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
9
Ir a un registro especfico, buscar el primero que tenga un contenido dado, etc., usando otros comandos o
alguna opcin de men.
La ventana EXAMINAR permite modificar los datos de la tabla, no su estructura. Usted puede agregar nuevos
registros (altas), eliminar registros existentes (bajas) y modificar el contenido de los campos de registros exis-
tentes (cambios).
Si en las dimensiones actuales de la ventana EXAMINAR no entran todos los campos, porque son muchos o
muy grandes, se muestran los que caben. Pero, al llegar a un campo extremo, los movimientos laterales in-
corporan nuevos campos a medida que desaparecen los que antes estaban visibles. Con el mouse, se puede
usar la barra de desplazamiento horizontal. Con la tabla ALUMNOS, que tiene pocos campos y de poco tama-
o, no podr ver este efecto, salvo que la haga estrecha. Si fuera necesario, la ventana EXAMINAR tendr dos
barras de desplazamiento, una vertical y otra horizontal.
Salga con ESC.
Browse
El comando para abrir la ventana EXAMINAR es BROWSE. Es uno de los comandos para tablas ms poderosos. Muchas de las fun-
ciones de este comando se logran mediante los mens VER y TABLA. Tambin se logran mediante el objeto GRID en un formulario.
No obstante, el comando o sus posibilidades estn presente tras ellos.
browse
Usted puede hacer que BROWSE impida agregar registros (clusula NOAPPEND), no admita cambiar los existentes (clusula NOMODI-
FY) ni deje marcarlos para destruir (clusula NODELETE).
browse noappend nomodify nodelete
Por defecto, BROWSE trabaja con todos los campos, pero permite hacerlo con un subconjunto de ellos, usando una lista de campos,
introducidos por la clusula FIELDS. Los campos aparecern en el orden que ocupan en la lista.
browse fields mu, nombre nomodify
En la lista de campos se puede incluir un campo calculado. Un campo calculado no existe en la tabla, pero se infiere de un campo
real, mediante alguna expresin. En BROWSE, un campo calculado debe tomar la forma de un nombre seguido por = y la expresin.
Por ejemplo, si quiere incluir el doble de la matrcula, aunque no tenga sentido, debe hacer:
browse fields nombre, doble = mu * 2 noappend
El nombre que precede a = se usa como ttulo de la columna. En cada registro, el valor del campo calculado es la expresin resuel-
ta. Los campos calculados no pueden ser modificados, porque no habra donde guardar los cambios en la estructura de la tabla.
Si usted quiere modificar solamente un campo, debe indicarlo en la clusula FREEZE:
browse freeze mu
browse fields mu, nombre freeze mu nodelete noappend
Cierre de tablas. Use, Close, Clear, Quit
Hay varias formas de cerrar tablas abiertas. No se puede hacer con el men ARCHIVO, salvo eligiendo SALIR. Por ahora veamos los
siguientes comandos, que puede emitir en la ventana COMANDOS:
USE, sin nada adicional, cierra la tabla seleccionada y sus archivos dependientes.
CLOSE TABLES ALL cierra todas las tablas abiertas y sus archivos dependientes.
CLOSE ALL cierra todos los archivos y diseadores abiertos.
CLEAR ALL cierra todos los archivos y diseadores abiertos y elimina las variables del usuario.
QUIT cierra todo lo que est abierto y sale de VFP. Equivale a ARCHIVO SALIR.
Como an no conoce muchas de las cosas que se cierran, nos limitemos a los dos primeros comandos. Los archivos dependientes
de una tabla son el archivo de ndices y el archivo de campos memo. Dependientes significa que son abiertos automticamente al
abrir la tabla de la que dependen. Como tenemos una sola tabla hasta ahora, cerrar todas las tablas la incluir, por lo que USE y
CLOSE TABLES ALL, en este caso, producen lo mismo. Si hubiera varias tablas abiertas, USE cerrara slo la tabla seleccionada, de-
jando las dems abiertas; CLOSE TABLES ALL cerrara todas las tablas.
Apertura de tablas
Si debe interrumpir su trabajo en cualquier momento, para seguir practicando con una tabla debe abrirla. Hay
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
10
varias formas de hacerlo. Puede usar ARCHIVO ABRIR, que trae el dilogo ABRIR. En TIPO DE ARCHIVO elija
Tabla (*.dbf). Esto lista las tablas existentes en la carpeta que aparece en BUSCAR EN. Esta carpeta, ahora, es
la predeterminada, que puede cambiar por otra si lo necesita en alguna oportunidad. Elija la tabla deseada en
el listado o escriba su nombre en NOMBRE DE ARCHIVO y pulse ACEPTAR. Las tablas, por defecto, tienen la ex-
tensin DBF, de modo que, si no la escribe, VFP la supone escrita.
Use
Otra forma de abrir una tabla es el comando USE seguido por el nombre del archivo a abrir. Con la barra de estado activa, emita
close tables all
set status bar on
use alumnos
Si el directorio predeterminado no fuera SI1, podra emitir USE C:\SI1\ALUMNOS. Ahora aparece en la barra de estado el nombre de la
tabla, ALUMNOS, el nmero de registro del registro actual, 1, y el total de registros.
Modos Editar y Examinar
La diferencia entre ver los campos uno bajo otro o uno junto a otro se maneja en la ventana EXAMINAR. brala.
Despliegue el men VER. Hay dos opciones mutuamente excluyentes: EXAMINAR y EDITAR. Pruebe uno y otro.
Elija el modo que le resulte ms cmodo o conveniente.
Modo Aadir
Ahora no puede agregar registros a la tabla, como sucedi cuando termin de crearla. Se podr volver a esa
modalidad? S. Elija VER MODO AADIR. Ahora el punto de insercin salta al final, a un registro vaco, de mo-
do que pueda llenarlo. Si quiere bajar a otro registro nuevo, no es posible. Pero apenas comienza a llenar el
registro vaco, se habilitar un nuevo registro vaco. Siempre habr disponible un solo registro vaco, ya que el
que est llenando ya no est vaco. Si decide subir a registros ya llenos, el modo aadir no se cancela. Per-
manecer as mientras no cierre la ventana EXAMINAR. Si luego de retroceder a registros existentes quiere se-
guir agregando registros nuevos, vaya al ltimo y baje uno.
Agregue ahora los siguientes registros. Puede agregar ms, si desea.
Mu Nombre Domicilio Sexo
542 Surez, Jorge Salta 101 M
2388 Ruiz, Marina Belgrano 1128 F
257 Oro, Eugenio Roca 2928 M
1377 Toro, Laura Paso 339 F
645 Vidal, Daniel La Rioja 2246 M
2406 Alba, Alberto Crdoba 175 M
4315 Castro, Ana Sols 4214 F
3161 Gil, Ral San Martn 5928 M
Marcadores de registro
Si tiene abierta la ventana EXAMINAR, cirrela y vuelva a abrirla, para cancelar el modo AADIR. Observe que a
la izquierda hay una columna de cuadritos en gris, uno de los cuales tiene un smbolo . Esta marca indica
cul es el registro actual, es decir, el seleccionado. Si cambia de registro, sea dando clic en otro o movindo-
se con las teclas verticales, la marca cambia de sitio.
Marcadores de destruccin
La columna a la derecha inmediata de los marcadores de registro es un conjunto de cuadritos en blanco. Ca-
da uno sirve para marcar y desmarcar el respectivo registro para eliminarlo. Marcarlo no lo elimina, sino que
lo prepara para ello. Antes de eliminarlo para siempre, lo puede rescatar, desmarcndolo. Una forma de poner
o quitar la marca es dar clic en el cuadrito del registro que quiere elimnar. Otra forma es usar CTRL + T, que
pone o saca la marca. Hay otras formas. En la tabla puede haber varios registros marcados, tantos como
desee eliminar.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
11
Partidor
Al pie de la columna marcadores de registro hay un . Si pone el mouse sobre ella, el puntero toma la forma
. Si con este puntero arrastra horizontalmente y suelta, la ventana EXAMINAR se divide en dos particio-
nes. La particin activa es donde est el punto de insercin. Una particin se puede ver en modo editar y la
otra en modo examinar, activando la particin y usando el men VER. Prubelo.
Si avanza o retrocede por los registros en una particin, el movimiento se refleja en la otra. Las particiones,
entonces, estn vinculadas. Hay una forma de desvincularlas, de modo que se avance por una pero no por la
otra. Sin embargo, si no ha agregado muchos registros a la tabla, no podr ver esto ahora, salvo reducir el al-
to de la ventana EXAMINAR.
Para volver a una sola particin, tome el partidor y arrstrelo a su lugar original.
Tamao y movimiento de la ventana Examinar
Como cualquier ventana, EXAMINAR se puede mover, si no est maximizada, tomndola de la barra de ttulo y
arrastrndola. Para cambiar su tamao, siempre que no est maximizada ni minimizada, se toma cualquiera
de sus bordes o vrtices y se lo arrastra.
Lneas de cuadrcula
VER LNEAS DE CUADRCULA se puede activar o desactivar, mostrando u ocultando las lneas horizontales y
verticales entre campos y registros.
Ancho y posicin de las columnas
En modo EXAMINAR, los nombres de los campos aparecen como encabezados. Si coloca el puntero en la lnea
vertical donde termina el encabezado de un campo, toma la forma |. Si con ese puntero arrastra lateral-
mente y suelta, puede variar el ancho de la columna. Esto afecta a la ventana EXAMINAR, no al ancho con que
est definido el campo en la estructura de la tabla.
En modo EXAMINAR, si lleva el puntero al interior de un encabezado, toma la forma . Si con ese puntero
arrastra lateralmente, puede cambiar la ubicacin de la columna con respecto a las dems. En modo EDITAR,
si da clic y sostiene en el nombre de un campo, se seleccionan todos los que tienen igual nombre en los de-
ms registros visibles. Esto le permite variar por arrastre su posicin con respecto a los otros campos. Los
cambios descriptos afectan a la ventana EXAMINAR, no a la posicin del campo en la estructura de la tabla.
Alto de encabezados y renglones
En modo EXAMINAR, a la izquierda del primer encabezado, sobre el primer marcador de registro y el primer
marcador de destruccin, hay un rectngulo gris sin nombre. Si coloca el puntero en la base de este rectngu-
lo, toma la forma . Si con ese puntero arrastra verticalmente, puede variar la altura de todos los encabeza-
dos a la vez.
Si coloca el puntero en la base del primer marcador de registro o del primer marcador de destruccin, toma la
forma . Si con ese puntero arrastra verticalmente, puede variar la altura de todos los registros a la vez.
Men Edicin
Estando en la ventana EXAMINAR, el men EDICIN permite seleccionar todo, copiar, cortar y pegar, operacio-
nes que ya conoce, pero reducidas al campo actual. Puede seleccionar una porcin del campo, arrastrando el
mouse o usando MAYSC + flechas horizontales. Con INICIO y FIN puede ir al comienzo o fin del campo, est o
no seleccionado todo o parte de su contenido. Si modifica el contenido de un campo y quiere volver a su valor
original, use EDICIN DESHACER.
EDICIN BUSCAR presenta un dilogo para introducir el texto a buscar. Note que busca registro a registro,
campo a campo, considerando que la tabla es un gran texto. Esto es til en ocasiones; pero se puede buscar
exclusivamente dentro de un campo, forma ms usual y poderosa, para lo que se necesita otra opcin.
EDICIN BUSCAR SIGUIENTE contina buscando la siguiente aparicin del texto deseado.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
12
Las operaciones de edicin se pueden lograr con combinaciones de teclas, sin abrir el men EDICIN. Estas
combinaciones, que aparecen junto a cada opcin del men, son:
CTRL + A Seleccionar todo CTRL + R Rehacer
CTRL + C Copiar CTRL + V Pegar
CTRL + F Buscar CTRL + X Cortar
CTRL + G Buscar siguiente CTRL + Z Deshacer
Set keycomp
Ya habr notado que al cambiar de campo, aqul al que entra se selecciona completamente. Este comportamiento se llama "selec-
cionar al entrar", lo cual permite reemplazar todo el contenido por otro, sin tener que borrarlo posicin a posicin. Es el modo propio
de Windows. En modo DOS, este efecto no se produce, sino que el punto de insercin se coloca al comienzo del campo. Para
cambiar de modo se usan los comandos SET KEYCOMP TO WINDOWS y SET KEYCOMP TO DOS. Estos comandos no estn en ningn me-
n, de modo que hay que emitirlos en la ventana COMANDOS.
Estando en la ventana EXAMINAR, active la ventana COMANDOS con VENTANA VENTANA COMANDOS o con CTRL + F2. Emita
set keycomp to dos
Vuelva a la ventana EXAMINAR, dndole clic, eligindola por su nombre en el men VENTANA o pulsando CTRL + F1. Ahora cambie de
campos y ver que no hay ms seleccin al entrar. Para volver a modo Windows, active la ventana COMANDOS y emita
set keycomp to windows
Active la ventana EXAMINAR y cambie de campos.
Fuente
Cada vez que se abre la ventana EXAMINAR, aparece el men TABLA en la barra de mens. Desaparece cuan-
do se cierra esa ventana. La segunda opcin de este men, FUENTE, trae el dilogo de igual nombre, que per-
mite cambiar la fuente, el estilo y el tamao que se aplicar a toda la ventana.
Filtro de registros
La primera opcin del men TABLA, PROPIEDADES, presenta el dilogo PROPIEDADES DEL REA DE TRABAJO,
donde hay varias opciones. La opcin FILTRO DE DATOS tiene un cuadro de texto para ingresar una expresin y
un botn con tres puntos, que lleva al dilogo GENERADOR DE EXPRESIONES. Si sabe escribir la expresin, pue-
de hacerlo directamente en el cuadro de texto. Si no lo sabe, o si quiere asegurarse de su correccin, d clic
en el botn de tres puntos. La expresin a escribir ser, por ejemplo, mu < 5000. Esto actuar como un filtro
de los registros: aqullos cuyo campo MU tenga un valor menor a 5000 pasarn el filtro; aquellos cuyo campo
MU tenga un valor igual o mayor a 5000 quedarn retenidos por el filtro. Los que pasan la prueba sern los
nicos que muestre la ventana EXAMINAR. Los dems no aparecern. Este efecto durar mientras no quite el
filtro o lo cambie por otro.
Elija el botn . En el GENERADOR DE EXPRESIONES, abajo, a la izquierda, hay una lista desplegable que indica
el nombre de la tabla, ALUMNOS. Si abre la lista, por ahora no hay ms que esa tabla. Arriba de esta lista hay
una lista desplegada con los campos de la tabla, donde aparecen sus nombres, tipos, anchos y posiciones
decimales. D doble clic en el campo MU. Esto provoca que en el cuadro grande superior, llamado expresin
SET Filter: <expL>, aparezca escrito Mu. La abreviatura <expL> indica que se requiere una expresin lgica,
que se evale como verdadera o falsa. Luego abra la lista de funciones LGICAS y elija el operador <. En el
cuadro superior ahora se ve Mu < o Alumnos.Mu <, es lo mismo. Complete la expresin escribiendo 5000, ya
que no puede hacerlo de otra forma. Si prefiere, puede escribir la expresin Mu < 5000 directamente en el
cuadro superior. Puede dejar espacios antes y despus del operador. Para saber si la expresin es correcta,
pulse el botn COMPROBAR. Esto le dir si est bien o tiene errores. El mensaje aparece en la barra de estado
o en una ventanita, segn que tal barra est o no visible. Si la expresin es vlida, pulse ACEPTAR, que lo de-
vuelve al dilogo PROPIEDADES DEL REA DE TRABAJO. En ste, pulse el botn ACEPTAR. VFP vuelve a la venta-
na EXAMINAR, donde puede comprobar que el filtro est en vigencia.
Pruebe nuevos filtros. Por ejemplo, Mu > 5000 o Nombre <= "D". Note que 5000 y "D" no son campos, sino
valores literales. El primer ejemplo usa un campo numrico, por lo que debe compararse con una expresin
numrica, como en este caso el literal numrico 5000. El segundo, que usa como primer operando un campo
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
13
de caracteres, debe compararse con una expresin de caracteres, como es el literal de caracteres "D". Por
qu las comillas en este caso? Para indicar que es un literal de caracteres. Si no las escribiera, VFP interpre-
tara que es el nombre de otro campo o de una variable. En lugar de comillas, puede usar apstrofos. El se-
gundo ejemplo filtra los registros cuyos nombres empiecen con las letras A, B, C y D.
Los literales numricos, es decir, los nmeros, no tienen delimitadores, como el 5000 del ejemplo. Los litera-
les de caracteres, es decir, las cadenas, deben usar los delimitadores comillas o apstrofes, como la "D" del
ejemplo. Esto significa que 2150 no es igual a "2150", porque son de distinto tipo. Adems de los literales
numricos y de caracteres, hay otros.
Cmo sera la expresin para filtrar registros con matrcula entre 1000 y 5000? Puede escribirse Mu >= 1000
and Mu <= 5000. Esta expresin indica filtrar registros cuya matrcula sea mayor o igual a 1000 y a la vez
menor o igual a 5000.
Between( ) e Inlist( )
Hay funciones que facilitan escribir expresiones complejas como la anterior. Por ejemplo, las funciones BETWEEN( ) e INLIST( ).
BETWEEN( ) prueba si el valor de algo est dentro de un intervalo de valores. Usa tres argumentos: el primero es lo que se quiere
probar, el segundo el extremo inferior del intervalo y el tercero el extremo superior.
? between(5,1,10)
? between(20,1,10)
? between("F","A","M")
antes = date( ) 10
despus = date( ) + 10
? between(date( ), antes, despus)
Apelando a BETWEEN( ), la expresin Mu >= 1000 and Mu <= 5000 se puede reemplazar con
between(Mu,1000,5000)
Si le resulta ms claro, puede dejar espacios, como en
between (Mu, 1000, 5000)
between ( Mu, 1000, 5000 )
En el GENERADOR DE EXPRESIONES, en la lista de funciones lgicas, adems de los operadores AND, OR, NOT, <, =, >, etc., hay fun-
ciones lgicas, como BETWEEN( ) e INLIST( ).
Para listar los registros cuyo campo NOMBRE comience con A, D, F, L y Z, una expresin filtro puede ser:
Nombre="A" or nombre="D" or NOMBRE="F" or nomBRE="L" or nombre="Z"
Los nombres de los campos pueden escribirse en minsculas o maysculas, porque VFP los reconoce no importa cmo los escriba.
Hasta la versin 2.5 de VFP no pasaba lo mismo con los literales "A", "D", etc., porque "A" no era igual a "a" ni "D" a "d", etc. Las
versiones posteriores no hacen esa diferencia cuando se usa el operador =. No puede insertar espacios dentro de estos valores,
porque "A" es distinto a "A", "A", "A", etc. (Cada representa un espacio.)
La expresin ejemplificada es bastante larga de escribir. La funcin INLIST( ) facilita la tarea, logrando el mismo resultado. Tiene co-
mo primer argumento lo que se quiere probar, el contenido del campo NOMBRE en el ejemplo. Siguen hasta 24 argumentos que son
los valores contra los cuales probar.
? inlist(5,1,5,7,12,15)
? inlist(5,1,10, 20,30)
? inlist("F","A","F","M")
La expresin filtro para la tabla, entonces, puede escribirse tambin de este modo:
inlist(nombre,"A","D","F","L","Z")
Para volver a ver todos los registros, elimine la expresin filtro en vigencia. Puede borrarla en el cuadro donde est escrita o en el
GENERADOR DE EXPRESIONES. Note finalmente que el ttulo FILTRO DE DATOS que aparece en el dilogo PROPIEDADES DEL REA DE
TRABAJO es, en realidad, un filtro no de cualquier dato, sino un filtro de registros.
Set filter to
El comando para filtrar registros es SET FILTER TO. Si no se escribe nada despus de TO, se elimina el filtro vigente sobre la tabla se-
leccionada, ALUMNOS en este caso. Esto no cierra la tabla. Si se la cierra, tambin se elimina el filtro que pesa sobre ella. Si se es-
cribe una expresin lgica despus de TO, se establece un nuevo filtro sobre tal tabla. Pruebe lo siguiente en la ventana COMANDOS
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
14
y active la ventana EXAMINAR luego de cada uno, para ver los efectos:
set filter to nombre>="D"
set filter to between(nombre,"C","T")
set filter to inlist(nombre, "A","C","F","M")
set filter to between(mu,1500,3000)
set filter to
Exactitud en comparaciones de caracteres
Si usramos un filtro de registros como Nombre = "C", veramos los registros cuyos nombres comienzan con
C, como Corts, Luis. Estrictamente hablando, Corts, Luis no es igual a C. Es parcialmente igual a partir de
la izquierda. En comparaciones de caracteres, es posible usar una igualdad parcial o exigir igualdad total. Es-
ta caracterstica se logra con HERRAMIENTAS OPCIONES DATOS SET EXACT ACTIVADO.
Controle que la exactitud est desactivada. Establezca el filtro de registros Nombre = "C". Ver los registros
cuyo campo NOMBRE tiene valores que comienzan con C. Active la exactitud y no ver registros. Vuelva a
desactivar la exactitud y ver los registros cuyos nombres comienzan con C.
Active la exactitud y cambie el filtro por Nombre = "Corts, Luis". Ver un solo registro. Desactive la exactitud
y ver ese mismo registro. Esto quiere decir que la igualdad parcial no se limita al primer carcter de la iz-
quierda, sino hasta donde se acaba el segundo operando. Con la exactitud desactivada, el filtro Nombre =
"Cor" dejara pasar a Corleone, Corona, Corts, Correa, Coria, etc., si los hubiera. Elimine el filtro.
Set exact
El comando para activar la exactitud al comparar de caracteres es SET EXACT ON y para desactivarla SET EXACT OFF.
Operador ==
Sin tener en cuenta si la exactitud est activada o no, el operador == exige exactitud total para dar por iguales ambos miembros de
la comparacin de caracteres, distinguiendo entre maysculas y minsculas. Se lo puede llamar operador exactamente igual.
? "Dos" == "dos"
? "Dos" == "DOS"
? "Dos" == "Dos "
? "Dos" == "Dos"
Nmero de registro y cantidad de registros
Active la barra de estado. Aparece en ella el nombre de la tabla seleccionada, ALUMNOS. Hasta ahora est
usando esa nica tabla, de modo que no podra seleccionar otra. Tambin aparecen dos nmeros, separados
por una /. El primero es el nmero del registro actual y el segundo la cantidad total de registros en la tabla. El
nmero de registro es el orden que se aade un registro a la tabla: el primero tiene nmero de registro 1; el
segundo tiene nmero de registro 2, etc. Examine la tabla. D clic en otro registro. Ver en la barra de estado
que cambia el primer nmero del par. Se debe a que ha cambiado de registro, el cual tiene otro nmero. El
segundo nmero del par no cambia, porque la cantidad total de registros sigue siendo la misma. Variar
cuando agregue nuevos registros o elimine los registros marcados para destruir.
Filtro de campos
As como hay filtros para registros, hay filtros para campos. Primero hay que incluir en este tipo de filtro los
campos a ver. Cuando el filtro se pone en vigencia, sern los nicos campos que tendr en cuenta la ventana
EXAMINAR y todos los comandos que procesan registros.
Cierre la tabla ALUMNOS para eliminar el filtro de registros que pudiera estar vigente. brala y examnela. En
TABLA PROPIEDADES PROPIEDADES DEL REA DE TRABAJO, el botn FILTRO DE CAMPOS trae el dilogo
SELECTOR DE CAMPOS.
Dilogo Selector de campos
Tiene los siguientes componentes:
TODOS LOS CAMPOS. Es una lista que muestra todos los campos de la tabla, con sus nombres, tipos, an-
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
15
chos y decimales.
CAMPOS SELECCIONADOS. Es la lista donde figuran los campos camponentes del filtro.
MOVER. Si selecciona un campo y pulsa este botn, el campo pasa a la lista Campos seleccionados y se
ve atenuado en la lista original. El mismo efecto tiene darle doble clic.
TODOS. Mueve todos los campos a la vez a Campos seleccionados.
QUITAR. Devuelve un campo seleccionado a la lista Todos los campos. Tambin puede darle doble clic.
QUITAR TODOS. Devuelve todos los campos seleccionados a la lista Todos los campos.
El dilogo sirve para filtrar los campos que queremos ver: los campos seleccionados sern los nicos que
mostrar la ventana EXAMINAR. Seleccione el campo NOMBRE. Pulse ACEPTAR para cerrar el dilogo y volver a
PROPIEDADES DEL REA DE TRABAJO. En el recuadro PERMITIR ACCESO A, adems del botn FILTRO DE CAMPOS,
hay dos botones de opcin. Active SLO LOS CAMPOS ESPECIFICADOS EN EL FILTRO DE CAMPOS, es decir, active el
filtro. Pulse ACEPTAR. Est de vuelta en la ventana EXAMINAR, pero se ven todos los campos, no nicamente el
filtrado. Hubo un mal funcionamiento? No. El filtro de campos tendr vigencia en las prximas aperturas de
la ventana EXAMINAR. Salga de la ventana actual con ESC o el botn de cierre. Vuelva a examinar la tabla.
Ahora s ver el efecto del filtro.
Active ahora el botn TODOS LOS CAMPOS DEL REA DE TRABAJO del recuadro inferior y pulse ACEPTAR. Esto
desactiva el filtro. Deberan verse todos los campos, pero slo se ve el campo filtrado. Para que lo establecido
tenga efecto, cierre la ventana EXAMINAR y vuelva a abrirla.
Si ahora quiere filtrar los campos NOMBRE y DOMICILIO, repita los pasos para llegar al dilogo SELECTOR DE
CAMPOS. El campo NOMBRE ya est seleccionado, lo cual indica que el filtro de campos es aditivo. Que sea
aditivo quiere decir que, salvo quitar los campos puestos por un filtro anterior, permanecen.
El filtro de campos que afecta a una tabla, est activo o no, permanece mientras la tabla est abierta. Des-
aparece cuando se la cierra.
Set fields
La puesta en vigencia de filtros de campos tambin se puede lograr mediante los comandos SET FIELDS. Hay varios tipos de ellos.
Como son poco usuales, no nos interesa verlos en detalle. Lo que s conviene recalcar es que un filtro de campos activado no afec-
ta a la ventana EXAMINAR, sino que afecta a la tabla o tablas involucradas. Por ello, cuando se las examina, se ven los campos es-
tablecidos por el filtro.
List structure y Display structure
Estos comandos muestran la estructura de una tabla. Por defecto, la tabla es la que est seleccionada. Pero puede ser otra tabla
abierta, si se usa IN seguido por el nombre de la tabla (o su alias). La salida puede ir a impresora o un archivo, para lo que se usan
las clusulas TO PRINTER y TO FILE. Para suprimir la salida a pantalla se usa NOCONSOLE.
Para cada campo, el listado da nombre, tipo, ancho y decimales. Si hay ndices cuyos nombres y expresiones sean iguales a los
nombres de campo, junto a stos se indica si son ascendentes o descendentes. Si est en vigencia un filtro de campos, aparece >
junto a cada campo del filtro. Se indica el nmero total de registros y la fecha de la ltima actualizacin. Si la tabla tiene campos
memo, se muestra el ancho con que se ver su contenido. (Luego veremos qu son campos memo.) Se da el tamao del registro.
use alumnos
display structure
list structure
close tables all
List status y Display status
Estos comandos muestra el entorno de VFP. La salida va a la ventana principal. El despliegue puede ir a impresora, con TO
PRINTER, o a un archivo, con TO FILE. NOCONSOLE para suprime la salida por pantalla. La informacin que brindan es muy til y sirve
para muchas comprobaciones. Sin agotar todos los temes, mencionaremos:
Tablas abiertas Ruta de acceso Archivos memo activos
Directorio predeterminado Alias de tablas Destino de impresora
Relaciones vigentes Configuracin de mrgenes ndices activos
rea de trabajo seleccionada Expresiones de ndices Valores de los comandos set
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
16
ndice principal Pgina de cdigos actual Archivos CDX abiertos
Formato de fecha actual Tipo de procesador Macros de teclado
use alumnos
display status
list status
close tables all
Orden del ndice
Abra y examine la tabla ALUMNOS. TABLA PROPIEDADES trae el dilogo PROPIEDADES DEL REA DE TRABAJO. La
lista ORDEN DEL NDICE dice < sin orden >. Esto indica que no se ha activado ningn ndice. Dado que al crear
la estructura de la tabla defini el ndice MU, para ponerlo en vigencia despliegue la lista y eljalo. No hay ms
ndices porque no creamos ms. Pulse ACEPTAR. Observe que los registros se ven ahora ordenados en forma
ascendente por el campo MU. Muvase por los registros. Se va de uno a otro como si hubieran sido grabados
en ese orden, lo cual no es cierto. Ahora desactive el ndice, eligiendo < sin orden >. Los registros se ven en
el orden real de grabacin, tal cual estn dispuestos fsicamente en el archivo.
Set order to
El comando para activar o desactivar ndices es SET ORDER TO. Si sigue el nombre de un ndice, es se el que se activa. Si no se co-
loca nada, se desactiva el ndice actual y se vuelve al orden de grabacin.
set order to mu
browse
Los registros estn ordenados por matrcula.
set order to
browse
Ahora los registros no estn ordenados.
Si cambia de ndice con la ventana EXAMINAR abierta, el efecto se aprecia inmediatamente en ella. Sin embargo, no es necesario
que est abierta para emitir SET ORDER TO, dado que este comando afecta a la tabla, no a la ventana.
Cree otro ndice normal por el campo NOMBRE. Antes de ello, si est trabajando en red, para modificar la estructura de una tabla de-
be abrirla en modo exclusivo. Esto se logra con ARCHIVO ABRIR, seleccionar la tabla ALUMNOS en el dilogo ABRIR, como ya sabe,
pero tildando EXCLUSIVO. Otra forma es emitir el comando USE ALUMNOS EXCLUSIVE. Tambin podra emitir el comando SET EXCLUSIVE
ON, que establece abrir de ahora en adelante todas las tablas en modo exclusivo, y luego emitir USE ALUMNOS.
Para modificar la estructura de la tabla agregando un nuevo ndice, puede valerse de VER DISEADOR DE TABLAS. En el diseador,
podra usar la ficha CAMPOS, definiendo un ndice ascendente en el campo NOMBRE. De un modo ms general, puede usar directa-
mente la ficha NDICES, agregando luego del ndice MU el ndice llamado Nombre, de tipo Normal y expresin Nombre. El nombre del
ndice no tiene por qu ser igual al nombre del campo. Podra haber sido cualquier otro. Acepte los cambios.
Index on
El comando para crear un ndice es INDEX ON. Como hay varias clases de ndices, el comando tiene muchas variantes. Pero nos re-
duciremos a crear ndices compuestos estructurales, que son los mejores y ms eficientes, por lo que las variantes se reducen.
Luego de INDEX ON se coloca la expresin del ndice, que es uno o ms campos, transformados por funciones de caracteres si hace
falta. Si son varios campos o funciones sobre ellos, se concatenan con el operador +. A continuacin sigue la palabra TAG y el nom-
bre que va a tener el ndice. Todo lo anterior es obligatorio. Opcionalmente se pueden usar las clusulas que se exponen a conti-
nuacin.
La clusula opcional ASCENDING, que se supone escrita, hace que el ndice ordene los registros en secuencia ascendente. La con-
traria, tambin optativa, es DESCENDING, que debe incluirse si se desea secuencia descendente.
Para crear el ndice NOMBRE del punto anterior, el comando sera
index on nombre tag nombre
Examine la tabla y active el ndice NOMBRE. Ver los registros ordenados por ese campo.
Dir
El comando DIR, que tambin se puede escribir DIRECTORY, muestra los archivos de una carpeta en el escritorio. Si no se indica una
carpeta, se aplica a la carpeta actual, es decir, la de trabajo. Si escribe DIR sin agregar datos adicionales, muestra las tablas, una
por lnea, indicando su nombre, fecha de creacin, tamao en bytes, cantidad de registros, etc. Emita DIR en la ventana COMANDOS.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
17
Si indica un patrn luego de la palabra DIR, pero no indica extensin, se listan las tablas que responden a l. En el patrn se pueden
usar los comodines ? y *. El ? indica que en la posicin donde aparece puede haber cualquier carcter. El * indica que en varias po-
siciones puede haber cualquier carcter. Por ejemplo, todos los comandos siguientes listan la tabla ALUMNOS:
dir alumnos dir *m*
dir al* dir *s
dir ?lumnos dir *os
dir ?lu* dir *no?
Si hubiera otras tablas que responden a estos patrones, tambin seran listadas. Para qu usar patrones? Suponga que hubiera
500 tablas. Si quisiera ver datos solamente de aquellas tablas cuyo nombre responde a un patrn, usando ste en el comando DIR
reducira el listado solamente a ellas.
Si en el patrn incluye la extensin, el listado incluir las tablas y todos los archivos que respondan a l, pero listar los nombres y
extensiones, no los tamaos, fechas de creacin, etc. El patrn tendr dos partes: la primera se refiere al nombre y la segunda a la
extensin. Ambas partes se separan por un punto, que es indispensable. Pruebe:
dir al* && Lista las tablas que empiezan con al, en este caso Alumnos
dir al*.dbf && Lista las tablas que empiezan con al, en este caso Alumnos
dir *.cdx && Lista todos los archivos de ndices
dir alum*.* && Lista todos los archivos que empiezan con alum
Los && introducen comentarios al final de una lnea. No son interpretados como parte del comando. No hace falta que usted los es-
cribe. Se han colocado para explicar lo que hace cada comando.
Si cualquier ventana tapa el escritorio, DIR y cualquier otro comando que escriba resultados en el escritorio se ejecutarn lo mismo,
pero no se podr ver lo escrito, salvo que se cierren las ventanas, se las cambie de lugar, se las minimice, etc.
DIR puede listar archivos de cualquier otra carpeta, si se incluye el camino adecuado.
Borrado del escritorio
Si quiere limpiar el escritorio, puede usar VENTANA BORRAR.
Clear
El comando para borrar el escritorio es CLEAR, que no lleva ms componentes.
Archivo de ndices compuesto estructural
Cierre la ventana EXAMINAR si est abierta, borre el escritorio y emita
dir alumnos.*
Ver que hay dos archivos: ALUMNOS.DBF y ALUMNOS.CDX. El que tiene extensin DBF es la tabla ALUMNOS. El
que tiene extensin CDX es el archivo donde se guardan los ndices MU y NOMBRE. Como es un archivo que
puede tener ms de un ndice, se llama compuesto. Hay otros archivos con un solo ndice, menos poderosos,
cuya extensin es IDX.
El archivo de ndices tiene el mismo nombre de la tabla, lo cual indica que es estructural. Un archivo de ndi-
ces estructural siempre es compuesto. Un archivo compuesto no siempre es estructural. Un archivo compues-
to estructural se abre o cierra siempre que lo hace la tabla. Si se agregan o eliminan registros, todos los ndi-
ces se actualizan automticamente. No pasa lo mismo con los archivos compuestos no estructurales, que ne-
cesitan ser abiertos y actualizados mediante comandos apropiados. Los compuestos estructurales, entonces,
son los ms ventajosos, por lo que desde que existen son prcticamente los nicos que se usan.
De todos los ndices que forman un archivo compuesto estructural, slo uno puede estar activo. Sin embargo,
los cambios que se introduzcan en la tabla, agregando, eliminando o modificando registros, actualizan todos
estos ndices.
Alcance
Hay opciones de men y comandos que afectan a una cantidad variable de registros. ALCANCE es la cantidad
de registros a afectar por esas opciones y comandos. Hay cuatro alcances:
Alcance Efecto
ALL Incluye todos los registros de la tabla
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
18
NEXT Incluye N registros siguientes, contando desde el actual.
RECORD Incluye solamente el registro cuyo nmero de registro es N.
REST Incluye desde el registro actual hasta el final de la tabla.
Si se usan NEXT o RECORD, hay que proporcionar un nmero N, que es la cantidad de registros siguientes o el
nmero del registro. Si hay un filtro de registros en vigencia, en el alcance se incluyen solamente los registros
que pasan ese filtro.
For
La clusula FOR introduce una condicin lgica en un comando para modificar su comportamiento. El coman-
do prueba la condicin FOR registro a registro, dentro del ALCANCE. Todo registro que cumpla esa condicin,
es decir, aqul para el cual la condicin resulte verdadera, ser afectado por el comando. Todo registro que
no la cumpla, ser ignorado. El comando funciona hasta agotar la totalidad del alcance, aunque no encuentre
registros que satisfagan la condicin. El uso de FOR es opcional, excepto en un caso que veremos pronto.
While
La clusula WHILE introduce una condicin lgica en un comando para modificar su comportamiento, pero ac-
ta de otro modo. El comando prueba la condicin WHILE registro a registro, dentro del ALCANCE. Si es verda-
dera, el comando sigue funcionando. Si es falsa, termina la ejecucin del comando. WHILE predomina sobre
FOR e incluso sobre la porcin remanente del ALCANCE. Si el comando termina, puede quedar una porcin del
alcance sin inspeccionar, dentro de la cual puede haber registros para los cuales FOR sea verdadera. El uso
de WHILE siempre es opcional.
Dejemos clara la diferencia entre FOR y WHILE. Sea que la tabla ALUMNOS, con el ndice MU activo, tiene los si-
guientes registros:
Mu Nombre Domicilio Sexo Registro
257 Oro, Eugenio Roca 2928 M 5
542 Surez, Jorge Salta 101 M 3
645 Vidal, Daniel La Rioja 2246 M 7
1377 Toro, Laura Paso 339 F 6
1702 vila, Mara Mitre 7047 F 2
2388 Ruiz, Marina Belgrano 1128 F 4
2406 Alba, Alberto Crdoba 175 M 8
3161 Gil, Ral San Martn 5928 M 10
4315 Castro, Ana Sols 4214 F 9
5201 Corts, Luis Jujuy 8543 M 1
Veamos distintas combinaciones de ALCANCE, FOR y WHILE para un comando que los admita. Consideraremos
cul es el registro actual al momento de emitir el comando. Registro actual es aquel donde est el puntero.
Reg. actual Alcance For While Regs. afectados
Cualquiera All Nombre = "C" 9, 1
Cualquiera All Nombre = "C"
Sexo = "M" es
.T. en 5, 3, 7.
Ninguno. While es .F. en 6,
fin del comando.
Cualquiera All Nombre = "A"
Sexo = "F" es .F. en 5,
fin del comando.
Ninguno
5 Next 5: 5, 3, 7, 6, 2 Nombre = "T" 6
6 Rest: 6, 2, 4, 8, 10, 9, 1 Sexo = "M" 8, 10, 1
6 Rest Sexo = "M"
Mu < 2400 es
.T. en 6, 2, 4.
Ninguno. While es .F. en 8,
fin del comando.
Cualquier Record 4 Nombre = "T"
Ninguno. Nombre del registro
4 no comienza con T.
Cualquiera All Nombre # "vila" 5, 3, 7, 6. While es .F. en 2.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
19
Para el alcance ALL no importa el registro de partida, porque se incluyen todos los registros, desde el comien-
zo. Tampoco importa para RECORD, pues se incluye nicamente el registro indicado.
Puede que se pregunte para qu usar WHILE, pues sera posible introducir su condicin dentro de FOR. As, el
Ejemplo 6, en lugar de for Sexo = "M" while Mu < 2400, podra usar for sexo = "M" and Mu < 2400. Desde un
punto de vista lgico la objecin es correcta. Pero no lo es en cuanto al rendimiento. FOR examina todo el al-
cance y termina al agotarlo. Si la tabla tuviera gran nmero de registros, digamos 15.000.000, el comando
que llevara ese FOR demorara un buen rato. WHILE, por el contrario, termina el comando la primera vez que
su condicin resulta falsa. Esto implica que, si se activa el ndice adecuado y se establece adecuadamente el
registro actual antes de emitir el comando, el tiempo de inspeccin de los registros se reduce drsticamente.
En computacin, es obvio, el tiempo que tarda un comando es de gran importancia.
FOR y WHILE usan condiciones lgicas que se pueden construir libremente con cualquier campo o campos. Si
no hay un ndice activo, el comando inspecciona los registros en el orden de grabacin. Si lo hay, el comando
inspecciona los registros en el orden que establece el ndice. Pero el ndice solamente influye en el orden de
acceder a los registros; nada tiene que ver con lo que hace el comando en s.
Ir a un registro
Al examinar una tabla, el men TABLA IR AL REGISTRO tiene varias posibilidades.
PRIMERO. El puntero de registros salta al primer registro de la tabla.
LTIMO. El puntero salta al ltimo registro de la tabla.
SIGUIENTE. El puntero salta al registro siguiente.
ANTERIOR. El puntero salta al registro anterior.
Los cuatro casos anteriores tienen un comportamiento diferente, segn haya o no un ndice activo.
Si no hay un ndice activo:
PRIMERO es el que tiene nmero de registro 1, es decir el primero grabado. Para simplificar, en lugar de
decir "registro que tiene nmero de registro X", diremos "registro X".
LTIMO es el grabado al final. Si la tabla tiene 150 registros, ltimo es el registro 150.
SIGUIENTE es el que sigue al actual en orden de grabacin. Si el puntero est en el registro 38, siguiente
es el registro 39.
ANTERIOR es que precede al actual en orden de grabacin. Si el puntero est en el registro 38, anterior
es el registro 37.
Si hay un ndice activo, el comportamiento es diferente:
PRIMERO es el que el ndice indica que est al comienzo, el cual no necesariamente es el registro 1.
LTIMO es el que el ndice indica que est al final. Por ejemplo, si la tabla ALUMNOS tuviera nada ms
que cuatro registros, cuyo campo MU en orden de grabacin fuera:
Mu Registro
2154 1
1259 2
3275 3
2048 4
Si se activa el ndice MU, cuya expresin es el campo MU, los registros se veran ahora:
Mu Registro
1259 2
2048 4
2154 1
3275 3
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
20
PRIMERO, en esta situacin, no es el registro 1, sino el registro 2. LTIMO es el registro 3. Si el registro
actual es el 4, SIGUIENTE es el registro 1 y ANTERIOR el registro 2.
Qu sucede cuando se pretende avanzar despus del ltimo registro o retroceder antes del primero?
Volveremos sobre esto ms adelante.
REGISTRO NMERO. El puntero salta al registro cuyo nmero se indica. Para ello se abre el dilogo IR AL
REGISTRO, donde se escribe tal nmero y luego se pulsa ACEPTAR. No importa si hay o no un ndice activo:
el nmero de registro es siempre el mismo.
ENCONTRAR. Presenta el dilogo ENCONTRAR REGISTRO, donde se definen criterios de bsqueda. Cuando
se pulsa el botn ENCONTRAR, se busca el primer registro que cumple los criterios. Los criterios se esta-
blecen mediante ALCANCE, FOR y WHILE, temas que vimos de modo general. Lo nico que debemos agre-
gar aqu es que FOR, para este comando, es obligatorio.
Go, Skip, Locate y Continue
Las formas TABLA IR AL REGISTRO PRIMERO, LTIMO, SIGUIENTE y ANTERIOR tienen comandos equivalentes:
PRIMERO GO TOP
LTIMO GO BOTTOM
SIGUIENTE SKIP (que se interpreta skip 1)
ANTERIOR SKIP 1
Si queremos un salto de varios registros hacia adelante o atrs, se usa SKIP N o SKIP N, que avanza N registros o retrocede N re-
gistros, donde N es un nmero o expresin numrica. Por ejemplo:
skip 5 && avanza 5 registros
skip 4 + 3 && avanza 7 registros
skip 6 && retrocede 6 registros
skip x && avanza o retrocede tantos registros como el nmero almacenado en X.
El comando equivalente a TABLA IR AL REGISTRO REGISTRO NMERO es GO, seguido por el nmero de registro al que se quiere ir.
Las formas GO TOP y GO BOTTOM, tambin vlidas, van al primero y ltimo registro, con las salvedades vistas sobre qu entender por
primero y ltimo. El nmero de registro debe ser una expresin numrica positiva, como:
go 5 && salta al registro 5
go 10 + 5 && salta al registro 15
go x && salta al registro cuyo nmero est en X.
Si el nmero proporcionado es mayor al nmero de registro mayor, se da un mensaje de error y el puntero de registros permanece
donde estaba.
El comando equivalente a TABLA IR AL REGISTRO ENCONTRAR es LOCATE FOR. Si no se explicita el alcance, se supone ALL. WHILE
es opcional. Ejemplos:
locate for nombre = "C"
locate for nombre = "C" while sexo = "F" rest
locate for domicilio = "Salta" rest
ENCONTRAR y LOCATE FOR siempre buscan el primer registro que cumple la condicin FOR. Cmo encontrar el segundo, tercero,
etc., que la cumplan? No hay opcin de men que realice esta tarea. En programacin, el comando CONTINUE, sin ms agregados,
busca el siguiente registro que cumple la condicin. Las sucesivas emisiones de CONTINUE siguen buscando el siguiente, hasta ago-
tar el alcance.
Examine la tabla ALUMNOS. Con TABLA IR AL REGISTRO ENCONTRAR, introduzca Mu <= 9000 en la condicin FOR. Vea cul es el
registro encontrado. Vuelva a repetir la bsqueda exactamente igual. El registro encontrado es el mismo, porque se busca el primer
registro que satisface la condicin FOR. Active la ventana COMANDOS y emita LOCATE FOR MU <= 9000. D clic en la ventana EXAMI-
NAR para activarla y vea que el registro es el mismo de antes. Ahora emita el comando CONTINUE y active la ventana EXAMINAR. El
registro hallado es el segundo que cumple la condicin. Emita el comando CONTINUE y active la ventana EXAMINAR. El registro halla-
do es el tercero que cumple la condicin. Etc.
El comando ? puede aplicarse a campos porque evala una o ms expresiones, y los campos son expresiones. Los campos son los
del registro actual. Si se cambia de registro, exactamente el mismo comando puede producir otro resultado, porque el registro actual
ha cambiado. Por ejemplo:
close tables all
use alumnos
? mu
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
21
? nombre
? mu, nombre, domicilio, sexo
go 10
? mu, nombre, domicilio, sexo
skip 1
? mu, nombre, domicilio, sexo
? mu * 2
use
Comienzo y fin de archivo. Bof( ) y Eof( )
Al hablar del comando SKIP, dijimos que se puede ordenar un salto por una cantidad de registros que est despus del ltimo o an-
tes del primero. Por supuesto que no se puede ir a un registro que no existe, pero algo pasa.
Cuando se salta ms all del ltimo registro, se alcanza el fin de archivo. Esta situacin se puede conocer consultando la funcin
EOF( ), que devuelve .T. nicamente en el fin de archivo. Cuando se salta antes del primer registro, se alcanza el comienzo de archi-
vo. Esta situacin se puede conocer consultando la funcin BOF( ), que devuelve .T. nicamente en el comienzo de archivo.
clear
close tables all
use alumnos
? bof( )
? eof( )
go 10
? bof( )
? eof( )
go bottom
? bof( )
? eof( )
skip
? bof( )
? eof( )
go top
skip 1
? bof( )
? eof( )
use
Recno( )
En programacin, el manejo de los nmeros de registro es fundamental. La funcin RECNO( ) devuelve el nmero de registro actual
de cualquier tabla abierta. Si no se escribe nada dentro de los parntesis, la funcin se aplica a la tabla seleccionada. Si dentro de
los parntesis se escribe entre comillas o apstrofes el nombre de una tabla abierta, est o no seleccionada, la funcin se aplica a
ella. Estos nombres de tabla entre parntesis tambin funcionan en BOF( ), EOF( ) y en varias otras funciones. Por ahora sabe usar
una sola tabla, la nica que podemos probar:
use alumnos
? recno( )
go 10
? recno("alumnos")
go bottom
? recno( )
set order to mu
go top
? recno('alumnos')
go bottom
? recno( )
use
La utilidad de esta funcin se puede apreciar en lo que sigue:
use alumnos
locate for nombre = "A"
x = recno( )
El ltimo comando guarda en la variable x el nmero de registro encontrado por LOCATE. Si luego se cambia el puntero de registros
usando otros comandos, se puede volver al registro encontrado por LOCATE. Por ejemplo:
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
22
go top
? recno( )
go bottom
? recno( )
go x
? recno( )
use
Cuando el puntero est ms all del ltimo registro, RECNO( ) da un nmero igual a la cantidad de ellos ms uno. Cuando el puntero
est antes del comienzo de la tabla, esta funcin da 1.
Reccount( )
La funcin RECCOUNT( ) da la cantidad de registros de una tabla abierta. Si no se escribe un argumento, se aplica a la tabla selec-
cionada. Para aplicarla a tablas abiertas pero no seleccionadas, se escribe como argumento el alias de la tabla, entre comillas sim-
ples o dobles. El valor que devuelve RECCOUNT( ) es el nmero real de registros de la tabla aludida, sin tener en cuenta si hay filtros
vigentes o el estado del comando SET DELETED.
use alumnos
?reccount( )
set filter to nombre = "A"
?reccount( )
use
Set deleted
Este comando establece un filtro sobre los registros marcados para destruir. La forma SET DELETED ON activa el filtro, de modo que
los registros marcados se vuelven invisibles para los dems comandos que procesan registros. La forma SET DELETED OFF hace que
los registros marcados sean visibles para esos comandos. El estado de SET DELETED es ignorado por los comandos INDEX y REIN-
DEX, que procesan todos los registros. Use la tabla ALUMNOS y marque algunos registros para destruir.
set deleted on
browse
set deleted off
browse
Elimine todas las marcas y cierre la tabla.
Agregar un registro
En el men TABLA aparece AADIR NUEVO REGISTRO. A diferencia del modo AADIR, que permite agregar cual-
quier nmero de registros nuevos, AADIR NUEVO REGISTRO agrega uno solo, en blanco. En la ventana EXAMI-
NAR es poco importante.
Append blank
El equivalente en programacin para agregar un registro es el comando append blank, sin ms agregados.
Opciones poco tiles del men Tabla
En la ventana EXAMINAR hay varias opciones en el men TABLA que son poco tiles, porque realizan lo que se
logra fcilmente con el mouse. Son las siguientes:
ALTERNAR MARCA DE ELIMINACIN. Si el registro actual no est marcado para ser eliminado, lo marca; si es-
t marcado, lo desmarca. Con el mouse, se da clic en el marcador de destruccin.
AJUSTAR CAMPO. Permite variar el ancho de una columna con las flechas horizontales. La operacin se fi-
naliza con ENTER o ESC. Con el mouse, se arrastra el borde derecho del encabezado.
MOVER CAMPO. Permite cambiar la posicin de una columna usando las flechas horizontales. La operacin
se finaliza con ENTER o ESC. Con el mouse, se arrastra el encabezado.
CAMBIAR TAMAO DE PARTICIONES. Permite mover el partidor con las flechas horizontales. La operacin se
finaliza con ENTER o ESC. Con el mouse, se arrastra el partidor.
CAMBIAR PARTICIONES. Activa la particin no activa. Con el mouse, se da clic en la no activa.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
23
Copy structure
Este comando crea una tabla vaca con la misma estructura de la tabla abierta y seleccionada. No copia ningn registro. Luego de
COPY STRUCTURE TO se escribe el nombre que va a tener la nueva tabla. Por defecto, el comando copia toda la estructura, pero no el
archivo de ndices compuesto estructural. Si se quiere copiar la estructura de algunos campos, se usa FIELDS seguido por la lista de
campos. Si se quiere copiar el archivo de ndices, se usa WITH CDX. Note que si hay un ndice principal, se convierte en candidato,
conceptos que veremos luego.
use alumnos
copy structure to alumnos2
dir
use alumnos2
display structure
browse
Se copiaron a ALUMNOS2 todos los campos de todos los registros.
use alumnos
copy structure to alumnos3 fields mu, nombre
use alumnos3
display structure
Se copiaron a ALUMNOS3 solamente los campos de datos indicados luego de la palabra FIELDS.
Copy to
Este comando crea un archivo a partir de una tabla abierta y seleccionada. Tiene muchas posibilidades, de las que veremos las
ms importantes. Luego de COPY TO se escribe el nombre del archivo a crear, cuya extensin por defecto es deducida por VFP.
Si no se indica el tipo de archivo a obtener, se crea una tabla. La copia, por defecto, incluye todos los campos y todos los registros.
Para copiar algunos campos, se usa la palabra FIELDS seguida por una lista de campos. Tambin se aceptan las formas FIELDS LIKE
y FIELDS EXCEPT, seguidas por un patrn construido con los comodines * y ?. En el primer caso se copian todos los campos que res-
ponden al patrn y en el segundo todos los campos que no responden a l. Ambas clusulas se pueden combinar en la forma
FIELDS LIKE PATRN1 EXCEPT PATRN2. Para limitar la cantidad de registros a copiar, se pueden usar ALCANCE, FOR y WHILE. Si la co-
pia es de una tabla, se puede copiar el archivo de ndices compuesto estructural, usando la clusula WITH CDX.
Si se indica un tipo de archivo, se crear una tabla u otra clase de archivo. Para ello se usa TYPE, que es opcional, y otras palabras
ms especficas. Todos estos tipos aceptan las formas FIELDS y ALCANCE, FOR y WHILE. Algunos no aceptan campos memo, incluso
si se especifican en la lista de campos. Ejemplos de algunos tipos son los siguientes.
XL5. Crea un hoja de Excel, versin 5.0. Cada campo origina una celda y cada registro, una fila. La extensin por defecto es XLS.
Para los tipos que siguen, tomemos la tabla ALUMNOS como tabla abierta y seleccionada. Sea que tiene los siguientes registros:
Mu Nombre Domicilio Sexo
257 Oro, Eugenio Roca 2928 M
542 Surez, Jorge Salta 101 M
645 Vidal, Daniel La Rioja 2246 M
SDF. Crea un archivo en formato de datos del sistema, de texto ASCII, con registros de longitud fija. La extensin por defecto es
TXT. El comando
copy to prueba type sdf
producir el archivo PRUEBA.TXT, con el siguiente contenido:
257 Oro, Eugenio Roca 2928 M
542 Surez, Jorge Salta 101 M
645 Vidal, Daniel La Rioja 2246 M
Las lneas auxiliares indican que los datos correspondientes a un campo tienen igual longitud.
Delimited. Crea un archivo de texto ASCII, con campos son de longitud variable, separados por comas. Como los campos de carac-
teres pueden incluir comas, se los delimita entre comillas. La extensin por defecto es TXT. El comando
copy to prueba type delimited
producir el archivo PRUEBA.TXT, con el siguiente contenido:
257,"Oro, Eugenio","Roca 2928","M"
542,"Surez, Jorge","Salta 101","M"
645,"Vidal, Daniel","La Rioja 2246","M"
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
24
Todos los archivos PRUEBA.TXT anteriores pueden ser examinados con el comando MODIFY FILE.
Modify file
El comando MODIFY FILE, seguido por un nombre de archivo, permite modificar el texo de ese archivo, si existe. Si no existe, lo crea
y permite modificarlo. Si no se indica, se supone que la extensin es TXT. Si se quiere otra extensin, hay que escribirla explcita-
mente. Ntese que los archivos de texto puro se ven sin problemas. Otros textos, como los documentos de Word, se ven con sea-
les extraas, porque dentro del texto hay muchos comandos para comenzar y terminar negritas, cursivas, etc. En general, ese co-
mando trabaja con cualquier tipo de archivo, aunque no se entienda lo que contiene.
Dilogo Exportar
En el men ARCHIVO, haya o no una tabla abierta, se puede lograr lo equivalente a COPY TO, usando EX-
PORTAR. Se presenta el cuadro de dilogo EXPORTAR, con las siguientes opciones:
TIPO. Sirve para definir el tipo de archivo que se quiere crear con la exportacin: DBF, texto delimitado,
XLS, XL5, etc.
A. Sirve para definir la ruta y el nombre del archivo a crear. El botn de tres puntos llama al dilogo
GUARDAR COMO, para establecer la carpeta y el nombre del archivo a producir.
DELIMITADOR DE TEXTO. Aparece cuando en TIPO se elije TEXTO DELIMITADO. Permite definir el carcter que
va a delimitar los campos de caracteres, el cual por defecto es la comilla.
SEPARADOR DE CAMPOS. Aparece cuando en TIPO se elige TEXTO DELIMITADO. Permite definir el carcter
que se va a usar para separar los campos, el cual por defecto es la coma.
DESDE. Sirve para definir la ruta y el nombre de la tabla existente a exportar. El botn de tres puntos es
una alternativa para encontrar la tabla.
OPCIONES. Muestra el cuadro de dilogo OPCIONES DE EXPORTACIN, donde se pueden definir ALCANCE,
condiciones FOR y WHILE y los campos a exportar.
Agregado masivo de registros: dilogo Aadir desde
TABLA AADIR REGISTROS agrega registros a la tabla que se est examinando desde otro archivo existente,
que puede ser una tabla, una planilla de clculo, un texto, etc. En el dilogo AADIR DESDE, TIPO es una lista
para elegir el tipo de tal archivo y DESDE es un cuadro de texto para escribir su nombre, incluyendo el camino
de carpetas, si es necesario. Esta tarea puede facilitarse buscndolo en la estructura de carpetas, para lo
cual sirve el botn de tres puntos.
Si el archivo origen, aqul desde el cual vamos a agregar registros, es una tabla, debe tener por lo menos un
campo coincidente en nombre y tipo con la tabla que estamos examinando, es decir, la tabla destino. Po-
dramos querer que los registros aadidos tuvieran todos los campos coincidentes llenos con los datos del
origen. Pero podramos querer que, aunque coincidan, slo se llenen algunos campos, dejando los otros en
blanco. Tambin podramos aadir todos los registros del origen o solamente los que cumplan una condicin.
Por defecto, se agregan todos los registros del origen, llenando todos los campos coincidentes. Para modifi-
car este comportamiento, se pulsa el BOTN OPCIONES, que presenta el dilogo OPCIONES DE AADIR DESDE. El
botn CAMPOS trae el dilogo SELECTOR DE CAMPOS, ya conocido. El botn FOR trae el GENERADOR DE
EXPRESIONES, para escribir un filtro. La expresin de filtro debe contener campos coincidentes.
A partir de la tabla ALUMNOS, creemos un duplicado llamado COPIA. Para ello usaremos el comando COPY TO.
Luego usaremos COPIA y le agregaremos nuevos registros, a partir de ALUMNOS.
close tables all
use alumnos
copy to copia with cdx
use copia
set order to mu
Examine COPIA. Son los mismos registros de ALUMNOS. Ahora agregue todos los registros de ALUMNOS. Elija
TABLA AADIR REGISTROS. En el dilogo AADIR DESDE, TIPO dice Tabla (DBF). Es correcto, porque el archivo
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
25
origen de la copia, ALUMNOS, es una tabla. En DESDE escriba Alumnos, la tabla origen. Pulse ACEPTAR. Com-
pruebe que los registros estn totalmente duplicados.
Repita el procedimiento, pero antes de ACEPTAR pulse CAMPOS. En el dilogo SELECTOR DE CAMPOS seleccione
los campos MU y NOMBRE y pulse ACEPTAR. Ahora pulse ACEPTAR en el dilogo AADIR DESDE. Los registros
estn triplicados, pero los ltimos carecen de contenido en DOMICILIO y SEXO.
Repita el procedimiento, esta vez pulsando FOR. En el GENERADOR DE EXPRESIONES escriba Mu < 2000. Com-
pruebe que los registros con Mu menor a 2000 aparecen cuatro veces.
Es posible agregar registros que no estn en una tabla de VFP, sino en una planilla de clculo, un archivo de
texto, etc. Para ello, en TIPO se elige el tipo del archivo origen. Si es un archivo delimitado, se presentan las
opciones DELIMITADOR DE TEXTO y SEPARADOR DE CAMPOS, como ya sabe.
Append from
El comando equivalente a TABLA AADIR REGISTROS es APPEND FROM. Si el archivo desde el que se va a copiar es una tabla, luego
de FROM se escribe su nombre. Si se quiere el contenido de algunos campos coincidentes, se escribe FIELDS y una lista de nombres
de campos, separados por comas. Si se quiere agregar registros que cumplen una condicin, se ESCRIBE FOR y luego la condicin.
El comando no admite la clusula WHILE. Ejemplos:
append from alumnos
append from alumnos fields mu, nombre
append from alumnos for mu < 2000
FROM y FIELDS no son excluyentes, de modo que pueden ir en un mismo comando:
append from alumnos fields mu, nombre for mu < 2000
o tambin
append from alumnos for mu < 2000 fields mu, nombre
Si la tabla que se va a agregar tiene registros para destruir, son agregados sin marca, sin tener en cuenta el valor de SET DELETED.
Como sucede con COPY TO, que a partir de una tabla permite obtener archivos que no sean tablas, APPEND FROM puede aadir regis-
tros de otros tipos de archivo. Se puede usar opcionalmente la clusula TYPE para introducir la declaracin del archivo origen de la
copia. En correspondencia con lo visto para COPY TO, los tipos son XLS, SDF, DELIMITED, etc. Las mencionadas no son las nicas
posibilidades, por lo que recomendamos consultar la Ayuda.
Si el archivo origen tiene fechas, stas se pueden importar sin problemas si estn en formato adecuado. El formato predeterminado
es MM/DD/AA. Es opcional incluir la parte de siglo. Si no se lo coloca, VFP supone un siglo. Los delimitadores de fecha pueden ser
cualquier carcter no numrico, excepto el separador de campos. Si el formato de las fechas de origen no es el predeterminado, pe-
ro es vlido, antes de importar los registros debe emitirse SET DATE con el formato adecuado.
Dilogo Importar
ARCHIVO IMPORTAR presenta un dilogo con igual nombre. Es similar al dilogo AADIR DESDE, pero no ofrece
la posibilidad TEXTO DELIMITADO. El propsito de este dilogo es crear una nueva tabla, no agregar registros a
una tabla existente. Esto explica por qu no trabaja con archivos de texto, pues no hay una estructura de la
tabla destino a la cual adaptar los datos.
Marcado de registros a eliminar
TABLA ELIMINAR REGISTROS permite eliminar registros que respondan a ciertos criterios. Hasta ahora, la forma
de marcarlos era dando clic en el marcador de destruccin de cada uno. Si hubiera cientos o miles de regis-
tros a marcar, hacerlo a mano sera lento y fatigoso, y posiblemente nos equivocaramos. Esta opcin de me-
n permite hacerlo de manera automtica. Presenta el dilogo ELIMINAR, donde aparecen las opciones
ALCANCE, FOR y WHILE, que ya conoce. El alcance por defecto es NEXT 1. Al pulsar ELIMINAR se ejecuta auto-
mticamente el marcado.
Use la tabla ALUMNOS y examnela. Experimente marcando los registros cuya matrcula est en un rango de
valores, usando alcance ALL y una expresin en FOR como between(mu,1000,2000). Compruebe. Vaya a un
registro prximo al fin del archivo y marque los restantes con alcance REST. Compruebe. Marque con alcance
ALL los registros cuyo SEXO sea F. Compruebe. Marque finalmente todos los registros, con ALCANCE ALL, sin
usar FOR ni WHILE. Compruebe. No se asuste. En seguida los desmarcaremos.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
26
Delete
El comando para marcar registros a eliminar es DELETE. El ALCANCE por defecto es NEXT 1, es decir el registro actual. Esto se ha
hecho as para marcar lo menos posible, porque puede ser peligroso si a continuacin se quitan definitivamente los registros mar-
cados. El comando puede llevar condiciones FOR y WHILE, que cambian automticamente el alcance a ALL. Por ejemplo:
delete
delete for sexo = 'M'
delete for sexo = 'M' and between(mu,1000,2500)
delete for sexo = 'M' while recno( ) < 15
delete rest for mu < 4000
delete all
Deleted( )
Esta funcin devuelve .T. si el registro actual de la tabla abierta indicada est marcado para destruir. Si no est marcado, devuelve
.F. Si no se usa argumento, se aplica a la tabla seleccionada. Para aplicarlo a otra tabla abierta, se escribe como argumento el
alias, entre comillas simples o dobles.
use facturas
delete record 10
? deleted( )
go bottom
? deleted( )
recall all
use
SET FILTER TO NOT DELETED( ) es parcialmente igual a SET DELETED ON. Ambos no dejan ver los registros marcados, pero el ltimo no
es tenido en cuenta por INDEX y REINDEX, mientras que el primero s.
Desmarcado de registros a eliminar
As como marcar registros puede automatizarse, lo mismo sucede con desmarcar. Para ello se usa TABLA
DESMARCAR REGISTROS. Aparece el dilogo DESMARCAR, con las opciones ALCANCE, FOR y WHILE. El alcance
por defecto es NEXT 1. El botn DESMARCAR ejecuta la operacin, observando los criterios establecidos.
Use la tabla ALUMNOS y examnela. Experimente desmarcando los registros cuya matrcula est en un rango
de valores, usando alcance ALL y una expresin en FOR como between(mu, 1000, 2000). Compruebe. Vaya a
un registro prximo al fin del archivo y desmarque los restantes con alcance REST. Compruebe. Desmarque
con alcance ALL los registros cuyo SEXO sea F. Compruebe. Desmarque finalmente todos los registros, por si
alguno tiene marca todava, con alcance ALL, sin usar FOR ni WHILE. Compruebe.
Recall
El comando para desmarcar registros a eliminar es RECALL. El ALCANCE por defecto es NEXT 1. Puede llevar condiciones FOR y WHI-
LE, que cambian el alcance por defecto a ALL. Los comandos para lograr lo explicado antes, seran:
recall
recall for sexo = 'M'
recall for sexo = 'M' and between(mu,1000,2500)
recall for sexo = 'M' while recno( ) < 15
recall rest for mu < 4000
recall all
Eliminacin de registros marcados
Los registros marcados no se eliminan de inmediato, posibilitando desmarcarlos. Para eliminarlos definitiva-
mente se usa TABLA QUITAR REGISTROS ELIMINADOS. VFP pide confirmar la accin. Si luego de eliminar defini-
tivamente los registros marcados se examina la tabla, no se ver ningn registro marcado.
Pack
El comando para eliminar definitivamente los registros marcados es PACK, sin agregados, que presenta el mensaje de advertencia.
En redes, la tabla debe haberse abierto en modo exclusivo.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
27
Cambio de los datos de uno o varios campos
Trabajando en la ventana EXAMINAR, puede cambiar el dato de un campo cualquiera si se coloca en l y lo
edita. Si tuviera que cambiar el dato de un campo en varios registros que cumplen ciertos criterios, el trabajo
a mano sera lento y sujeto a errores. Siempre que pueda establecer criterios para un cambio masivo, convie-
ne automatizar el trabajo. La opcin TABLA REEMPLAZAR CAMPO permite cambiar el dato de un solo campo en
todos los registros que cumplan los criterios. Presenta el dilogo REEMPLAZAR CAMPO, con las opciones
CAMPO, WITH, ALCANCE, FOR y WHILE.
Lo que se reemplaza es el dato de un campo, no el campo: el nombre de la opcin del men no es feliz. El
campo en cuestin se elige en la lista CAMPO. El valor con el cual va a ser llenado se escribe en WITH, direc-
tamente o usando el generador de expresiones. ALCANCE, FOR y WHILE funcionan como ya conoce. El botn
REEMPLAZAR inicia la accin automtica.
Examinando la tabla ALUMNOS, reemplace el contenido del campo SEXO con una A para los registros con
SEXO F y Mu > 2500. Debe elegir Sexo en CAMPO, escribir "A" en WITH y escribir Sexo = "F" and Mu > 2000
en FOR. Compruebe. Deje las cosas como estaban al principio: elija Sexo EN CAMPO, escriba "F" en WITH y
escriba Sexo = "A" en FOR.
Replace
El comando para lograr lo explicado en el punto anterior es REPLACE. Luego de REPLACE se escribe el nombre del campo, la palabra
WITH y el nuevo dato. Se puede usar ALCANCE, FOR y WHILE, en cualquier orden. Si no escribe ALCANCE, se supone NEXT 1. Si usa
FOR o WHILE, el ALCANCE por defecto cambia a ALL. Las dos operaciones que hizo antes por men se pueden escribir:
replace sexo with "A" for sexo = "F" and mu > 2000
replace sexo with "F" for sexo = "A"
REPLACE es ms poderoso que TABLA REEMPLAZAR CAMPO. Ello se debe a que el comando permite reemplazar a la vez varios
campos por los correspondientes datos. En este caso, la terna CAMPO WITH DATO se puede escribir varias veces, separndola por
comas, como en el siguiente ejemplo:
replace all sexo with "F", mu with mu + 10
Vinculacin de particiones
Primero use la tabla COPIA y agrguele varias veces todos los registros de la tabla ALUMNOS. Con esto tendr
muchos registros y podr ver lo que vamos a tratar.
close tables all
use copia
append from alumnos
append from alumnos
append from alumnos
append from alumnos
Ahora examine la tabla COPIA y mueva el partidor a la izquierda, para tener dos particiones. Avance y retroce-
da registros hasta el inicio y el fin en cualquiera de ellas. Abra el men TABLA. Vea que VINCULAR PARTICIONES
est activa. D clic en esa opcin para desactivarla. Repita el avance y retroceso hasta los extremos. La par-
ticin inactiva queda fija, mientras la activa muestra diferentes registros. nicamente el movimiento del punte-
ro se ve, en la particin inactiva, en la porcin de registros comunes a ambas.
Regeneracin de ndices
VOLVER A GENERAR NDICES del men TABLAS reconstruiye el archivo CDX a partir de las definiciones que resi-
den en la estructura de la tabla. Esto es poco necesario tratndose de ndices compuestos estructurales. Pero
en ocasiones, el mal funcionamiento de una tabla puede deberse a que el archivo de ndices estructural est
daado. Un corte de energa o salir de modo inapropiado de VFP puede daar o "corromper" el archivo CDX.
Para corregir esa posible falla, use esta opcin. Si trabaja en red, debe abrir la tabla en modo exclusivo.
Reindex
El comando para regenerar ndices es REINDEX, sin ms agregados. Se reindexa la tabla seleccionada.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
28
Modificacin de la estructura de una tabla
Para modificar la estructura de una tabla, sela y emita VER DISEADOR DE TABLAS. Recuerde que si trabaja
en una red, debe usar la tabla en modo exclusivo.
Modify structure
El comando para modificar la estructura de una tabla es MODIFY STRUCTURE, sin ms agregados. La tabla a modificar debe estar
abierta y seleccionada. Si en el rea seleccionada no hay una tabla abierta, se presenta el dilogo ABRIR para elegir la tabla.
Agregue los siguientes campos, tipos y anchos a la tabla ALUMNOS:
Campo Tipo Ancho
Otro1 Carcter 30
Otro2 Carcter 30
Otro3 Carcter 30
Otro4 Carcter 30
Otro5 Carcter 30
Otro6 Carcter 30
Luego acepte los cambios.
display structure
La estructura corresponde a las modificaciones introducidas. Cuando se hace una modificacin estructural, VFP toma muchas pre-
cauciones. Primero copia la estructura original a un archivo temporal. Sobre ste registra los cambios. Al finalizar la operacin, co-
pia los registros de la tabla original al archivo temporal. Luego cambia la extensin de la vieja tabla, de DBF a BAK. Finalmente, da
al archivo temporal el nombre de la vieja tabla y la extensin DBF. Si se aborta la modificacin estructural, VFP destruye el archivo
temporal, con lo que la tabla original queda intacta.
browse
Los registros se han conservardo, con los campos nuevos en blanco. Ahora la ventana EXAMINAR no puede mostrar todos los cam-
pos, pero permite desplazarlos, por lo que hay una barra de desplazamiento horizontal.
Campos de tipo fecha, fechahora y lgico
Use la tabla ALUMNOS y modifique su estructura.
use alumnos
modify structure
Agregue los campos NACIDO, de tipo fecha, y ARGENTINO, de tipo lgico. Guarde los cambios.
Un campo de tipo fecha sirve, obviamente, para guardar fechas. Su ancho es 8 y no se puede modificar. El
campo aceptar fechas vlidas, rechazando valores como 31/02/2004 o 30/30/2000, porque febrero no tiene
31 das y no hay un mes 30. Si se ingresa da 29 para febrero, se aceptar si el ao es bisiesto. El rechazo de
una fecha incorrecta se comunica con un mensaje de error. Las fechas se guardan con el siguiente formato:
ao (incluyendo siglo), mes y da. La forma en que se visualiza una fecha depende de la configuracin. El 5
de noviembre de 2004, por ejemplo, puede verse:
05112004 11052004
05/11/2004 20041105
05/11/04 etc.
Un campo de tipo fechahora guarda fechas, horas o ambas. Siempre el ancho es 8, inmodificable, y guarda
los datos en notacin binaria. Las horas se pueden ver en 12 24 horas, con o sin segundos. No hemos
agregado un campo de este tipo a la tabla ALUMNOS, porque es fcil de entender.
Un campo de tipo lgico siempre tiene ancho 1, inmodificable. Puede guardar los valores T y F, para verdade-
ro y falso. En la ventana EXAMINAR, el campo lgico actual, si es T, se ve V. Los dems campos se ven T. Pa-
ra modificar el campo actual con el valor T, hay que escribir V. Estas rarezas se deben a que se ha usado la
V por Verdadero, pero solamente para el campo actual.
Examine la tabla. Ingrese datos a los nuevos campos. Pruebe introducir una fecha incorrecta.
As como hay literales de caracteres y numricos, tambin los hay de fecha, fechahora y lgicos. Los delimi-
tadores de los literales de fecha son { a la izquierda y } a la derecha. Hasta la versin 5, la fecha se escribe de
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
29
acuerdo a la configuracin SET DATE vigente. Por ejemplo, si la configuracin es DD-MM-AAAA, 2 lugares para
da, 2 para mes y 4 para ao, la fecha se escribe {DD/MM/AAAA}. Si se omite el siglo, como en {DD/MM/AA}, se
supone el establecido con el comando SET CENTURY. Desde la versin 6 se usa un formato ms complicado:
{^AAAA/MM/DD}. En ambos casos, pueden omitirse los ceros no significativos. Ejemplos:
{05-08-2004} {05-08-04}
{5-8-04} {5-8-4}
{^2004-08-05} {^2004-8-5}
Los literales de fechahora tambin usan { y } como delimitadores. Se escribe la fecha, una coma o un espa-
cio, y la hora, teniendo presente la diferencia de versiones explicada antes. La hora sigue el formato
HH:MM:SS. Los minutos y segundos son opcionales. Si se omiten los minutos y segundos, se supone 00:00. Si
se omiten los segundos, se supone 00. La porcin de fecha puede omitirse, en cuyo caso se supone 3012
1899. Si se quiere un literal de fechahora sin indicar la hora, escriba la fecha, la coma y un 0. Ejemplos:
{01-10-2002,13:40:15} {01-10-2004,1:40:15PM}
{01-10-2002,13} {1-10-4,0}
{^2004-10-02,13:40} {^2004-10-2,1:40PM}
Los literales lgicos usan un punto inicial y un punto final como delimitadores. Son solamente dos, .T. (true) y
.F. (false), que se pueden escribir en minscula. Como sinnimo de .T. se puede usar .Y. (yes) y .N. (not), que
tambin pueden ir en minscula.
Campos de tipo memo
Los campos de una tabla siempre tienen un ancho determinado, algunos fijados a voluntad, como los de ca-
racteres y numricos, y otros predeterminados, como los de fecha, fechahora y lgicos. Qu hacer si nece-
sitamos un campo para escribir 100 caracteres de texto en un registro, 5000 en otro y 100.000 en un tercero?
No se podra definir el campo con el ancho del caso mayor, porque el desperdicio de espacio en la tabla sera
un despropsito y adems porque los campos de caracteres pueden tener hasta 254 posiciones. Este pro-
blema se soluciona con un campo memo. Un campo de este tipo siempre tiene ancho 4 en la tabla, donde
VFP escribe una "llamada". La llamada se desarrolla en un archivo asociado, cuyo nombre es igual al de la
tabla y cuya extensin es FPT. El funcionamiento es similar a las llamadas usadas en algunos libros: en el
texto principal se colocan las llamadas y en el pie de pgina o en un apndice se escribe el texto correspon-
diente a cada una. La estructura del registro puede contener varios campos memo; por ejemplo, el registro de
alumnos podra tener dos campos memo, HISTORIAL y OBSERVACIONES.
Modifique la estructura de la tabla ALUMNOS, agregando un campo memo llamado NOTAS. Luego examnela.
Observe que, en la columna NOTAS, todos los campos aparecen con la palabra memo. Ubquese en cualquie-
ra de ellos y pulse doble clic o la combinacin CTRL + AVPG. Se abre una ventana de edicin con el nombre
ALUMNOS.NOTAS, lo que indica que est trabajando sobre el campo memo NOTAS del registro actual de la tabla
ALUMNOS. Escriba el texto que quiera, de dos o tres lneas mnimas. Puede usar ENTER para separar prrafos
y TAB para sangrarlos. El men EDICIN le permite copiar, cortar, pegar, buscar, reemplazar, etc., como en
cualquier archivo de texto. Puede guardar el contenido de la ventana con ARCHIVO GUARDAR, tantas veces
como quiera mientras est editando. No se le pedir dnde guardar, porque VFP introduce una llamada en el
campo NOTAS del registro actual y guarda el texto editado en en el archivo memo, asociado a la llamada. Para
cerrar la ventana puede usar ARCHIVO CERRAR o el botn de cierre, que pedirn si quiere guardar los ltimos
cambios en caso de no haberlo hecho. Para guardar y cerrar a la vez, use CTRL + W.
Despus de guardar y cerrar, observe que el campo donde introdujo texto dice Memo, no memo. Esto indica
que tiene contenido. Si vuelve a editarlo, ver el contenido guardado la ltima vez. Si borra todo el contenido,
tras guardar los cambios y cerrar la ventana, ver nuevamente memo.
Emita el comando DIR ALUMNOS.*. Ver en el escritorio que hay tres archivos: uno es la tabla, otro el archivo
de ndices y otro el archivo con el contenido de los campos memo. Reconocer esto por las extensiones, que
son respectivamente DBF, CDX y FPT. Si modifica la estructura de la tabla y elimina todos los campos memo,
se elimina automticamente el archivo FPT.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
30
Dilogo Editar propiedades
Elija cualquier campo memo y entre a editarlo. Emita EDICIN PROPIEDADES. Esto presenta el dilogo EDITAR
PROPIEDADES, con varias opciones para modificar las caractersticas de edicin. Veamos algunas.
EDICIN CON ARRASTRAR Y COLOCAR. Habilita seleccionar un trozo de texto y arrastrarlo a otro lugar.
AJUSTE AUTOMTICO DE LNEA. Si est activa, los prrafos se ajustan al ancho de la ventana de edicin, de
modo que se vean en varias lneas. Si no est activa, se ver lo que entre de cada prrafo en tal ancho,
en una sola lnea, quedando lo dems invisible.
SANGRA AUTOMTICA. Si se aumenta la sangra con TAB en cualquier lugar de un prrafo, el resto del p-
rrafo tendr ese sangrado. Esto permite lograr sangra francesa, como en el ejemplo siguiente.
Sangra francesa: Es cuando la primera lnea del prrafo tiene un margen izquierdo ms a la izquierda
que el margen izquierdo de las restantes lneas.
ALINEACIN. Permite alinear todo el texto a izquierda, centro o derecha.
ANCHO DE TABULACIN (CARACTERES). Establece el espacio que saltar el punto de insercin hacia la dere-
cha cada vez que se pulse TAB.
FUENTE. Permite cambiar fuente, estilo y tamao para todo el texto, mediante el dilogo FUENTE.
MOSTRAR POSICIN DE LNEA / COLUMNA. Presenta esa informacin en la barra de estado, activndola si
hace falta.
APLICAR A LOS ARCHIVOS TIPO MEMO. Guarda la configuracin de estas opciones para aplicar en el futuro a
los campos memo.
List, Display, Set heading
Los comandos LIST y DISPLAY listan la tabla seleccionada en la ventana principal. Por defecto, listan todos los campos que no sean
memo. Para listar algunos campos, se usa una lista de ellos, predecida opcionalmente por FIELDS. Para listar el contenido de un
campo memo, hay que incluirlo en una lista. El contenido de los campos memo se acomoda al ancho establecido por el comando
SET MEMOWIDTH. Los comandos pueden usar ALCANCE, FOR y WHILE. El alcance por defecto de DISPLAY es NEXT 1 y el de LIST es ALL.
Si se usa FOR o WHILE, el alcance de DISPLAY se convierte EN ALL. Cada campo tiene un encabezado, igual al nombre del campo.
Cada registro aparece precedido por el nmero de registro. Para no ver estos nmeros, se usa OFF. El listado puede enviarse a im-
presora si se incluye la clusula TO PRINTER. La forma TO PRINTER PROMPT hace que se abra un dilogo que permite configurar la im-
presora, la cantidad de copias y el intervalo de pginas a imprimir. El listado tambin puede ir a un archivo, si se incluye TO FILE se-
guido por el nombre del archivo. No se supone extensin, por lo que, si quiere verla con MODIFY FILE, convendra que sea TXT. De lo
contrario tendr que escribir MODIFY FILE y el nombre del archivo, seguido por un punto, pero sin extensin. El envo del listado a im-
presora o a un archivo no suprime la salida a la ventana principal. Para suprimirla, se usa NOCONSOLE.
DISPLAY con alcance de varios registros llena una pantalla y se detiene, esperando que se pulse una tecla para llenar otra. LIST, en
cambio, lista todo el alcance sin detenerse. Esta diferencia es comn a todas las variedades de ambos comandos.
Adems de incluir campos en la lista FIELDS, pueden incluir cualquier otra expresin, lo que permite obtener otros datos.
Con el comando SET HEADING ON, se ven los encabezados de los campos. SET HEADING OFF los suprime.
use alumnos
list
list off
display
display off
display all
list for nombre='A'
display fields mu, nombre
display mu, nombre
set heading off
list
display record 7
set heading on
list
close tables all
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
31
Set memowidth
Los comandos LIST y DISPLAY, cuando se emiten sin lista de campos, no muestran el contenido de los campos memo, sino solamen-
te la palabra memo.
use alumnos
list
display all
Sin embargo, cuando el campo memo se indica en una lista de campos, s se ve el contenido.
display all mu, nombre, notas
display notas record 1
list notas for not empty(notas)
El comando ? seguido por un campo memo muestra el contenido de tal campo.
go 1
? notas
Quizs el ancho con el que se lista el contenido del campo memo (si tiene varias lneas de texto) no le resulte cmodo. Esto se pue-
de cambiar con el comando SET MEMOWIDTH. Este comando establece un ancho para las lneas de un campo memo.
set memowidth to 20
display for not empty(notas)
set memowidth to 40
display for not empty(notas)
Adems de afectar a los comandos LIST, DISPLAY y ?, SET MEMOWIDTH afecta a varias funciones referidas a campos memo.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
32
ndices
Los ndices son una forma muy eficiente de ordenar una tabla por uno o varios campos. La ordenacin es vir-
tual, es decir, no hay cambio del lugar fsico de los registros, sino que se hace en un archivo de ndices.
Cuando se activa un ndice, el acceso a los registros se realiza de acuerdo al orden establecido por l.
Todo ndice tiene un nombre, un tipo, una expresin y un sentido. Opcionalmente, puede usar un filtro.
El nombre es arbitrario y puede tener hasta 10 posiciones. Hay diferentes tipos de ndices, con distintos efec-
tos, como veremos. El sentido puede ser ascendente o descendente. El filtro discrimina qu registros van a
ser considerados para construir el ndice.
La expresin es el criterio por el cual se van a indexar los registros. Puede consistir en uno o ms campos de
la tabla, o expresiones ms complejas sobre ellos. Por ejemplo, si se quiere ordenar la tabla de artculos por
el cdigo, se usar ste para construir el ndice. Tratndose de una expresin que use un nico campo, este
puede ser de cualquier tipo, sin necesidad de transformarlo. Para construir un ndice por varios campos o ex-
presiones sobre ellos, hay que crear una expresin final de tipo carcter. Supongamos que queremos indexar
el archivo de ventas por cdigo de cliente y nmero de factura. Si ambos campos son de caracteres, la expre-
sin del ndice ser cdigo + factura. Si el cdigo fuera de caracteres y la factura numrica, la expresin ante-
rior sera errnea, pues los componentes de la expresin deben ser de caracteres para que la expresin total
sea de tal tipo. En este caso, sera necesario convertir la factura a caracteres, mediante la funcin STR( ). La
expresin correcta, entonces, sera cdigo + str(factura, x), suponiendo que factura tiene tamao x, sin deci-
males. Si el cdigo tambin fuera numrico, la expresin sera str(cdigo, z) + str( factura, x), suponiendo que
el tamao del cdigo fuera z, sin decimales. Para los campos fecha o fecha hora, cuando se usan con otros
campos para construir la expresin del ndice, es necesario transformarlos a caracteres, usando la funcin
DTOS( ).
Dado que el ordenamiento se hace en un archivo de ndices, sin afectar la tabla, sta puede tener todos los
ndices que sean necesarios.
Tipos de archivos de ndices
Hay archivos de ndices simples y compuestos. Los simples solamente pueden almacenar un ordenamiento.
Su extensin es IDX. Dado que las tablas pueden sufrir altas, bajas y cambios de registros, para que tales
cambios queden reflejados en lo ndices, hay que someterlos a comandos especficos.
Los archivos de ndices compuestos pueden almacenar varios ordenamientos, cada uno con un nombre dife-
rente. Su extensin es CDX. Pueden ser no estructurales y estructurales. Los no estructurales tienen un nom-
bre distinto al de la tabla que ordenan. Como sucede con los ndices simples, deben someterse a comandos
especficos para que reflejen los cambios en las tablas.
Los archivos de ndices estructurales tienen el mismo nombre de la tabla a la cual ordenan. Cuando se abre
la tabla, todos los ndices estn disponibles y se actualizan automticamente a medida que la tabla sufre
cambios, sin necesidad de comandos especficos. Esto hace de los ndices compuestos estructurales los ms
tiles, por lo que puede prescindirse de los anteriores.
Para abrir una tabla con un ndice compuesto estructural activo, se emite el comando USE con la opcin
ORDER. Para cambiar posteriormente el ndice activo, se usa el comando SET ORDER.
Tipos de ndices
Hay cuatro tipos de ndices.
NORMAL. El ndice permite que un mismo valor de la expresin se repita en diferentes registros y cada re-
gistro tiene su entrada en el ndice. Entendamos por "entrada" la referencia en el ndice a un registro par-
ticular en la tabla. Si hay 1 registro cuya expresin es A, 100 cuya expresin es B y 200 cuya expresin
es C, habr 1 entrada para A, 100 para B y 200 para C. En otras palabras, habr tantas entradas como
registros. Este tipo es adecuado, por ejemplo, para un archivo que contenga los artculos vendidos en un
negocio, con una entrada de ndice por cada vez que se hayan vendido. El esquema siguiente ilustra (1)
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
33
el campo CDIGO de la tabla VENTAS, en el orden de grabacin, (2) los nmeros de registro y (3) las en-
tradas de un ndice normal por la expresin Cdigo, en orden ascendente, ms el nmero del registro que
la contiene.
(1) (2) (3)
Cdigo Registro Expresin Registro
327 1 125 3
432 2 125 6
125 3 327 1
327 4 327 4
801 5 432 2
125 6 801 5
NICO. El ndice permite que un mismo valor de la expresin se repita en diferentes registros, pero si va-
rios registros tienen el mismo valor en la expresin, habr una sola entrada en el ndice. Si hay 1 registro
cuya expresin es A, 100 cuya expresin es B y 200 cuya expresin es C, habr 1 entrada para A, 1 para
B, 1 para C. Entonces, habr una entrada por cada valor diferente de la expresin. Como cada entrada se
refiere a un registro particular, a cul de los 100 registros de B y a cul de los 200 de C se referirn?
Pues al primero que se encuentre de uno y otro. Este tipo sirve para conocer, por ejemplo, cules artcu-
los se han vendido. El esquema siguiente ilustra un ndice nico, con los supuestos del esquema anterior.
Cdigo Registro Expresin Registro
327 1 125 3
432 2 327 1
125 3 432 2
327 4 801 5
801 5
125 6
CANDIDATO. Este tipo obliga que la expresin no se repita en diferentes registros y cada registro tiene su
entrada en el ndice. Habr entonces tantas entradas como registros. Si al construir el ndice se encuen-
tran valores repetidos, se da un mensaje de error y el proceso fracasa. Si el ndice se construye con xito
y posteriormente se pretende duplicar el valor de la expresin en distintos registros de la tabla, se da un
mensaje de error y se pide una decisin. Este tipo es adecuado, por ejemplo, para indexar la tabla ALUM-
NOS por la expresin Mu, porque es ilgico que haya varios alumnos con la misma matrcula. El mismo
argumento vale para usar como expresiones el DNI, el nmero de cuenta bancaria, el nmero de emplea-
do, etc.
Los tres tipos vistos hasta aqu, normal, nico y candidato, se pueden usar en tablas libres y en tablas ba-
se. Una tabla puede tener varios ndices de cada tipo.
PRINCIPAL. Es igual en restricciones y funcionamiento al tipo candidato, pero se aplica solamente a las ta-
blas base y puede haber uno solo por tabla. Tiene ventajas sobre los ndices candidato.
Expresiones complejas de ndice. Str( ), Dtos( ) y Ttoc( )
Las expresiones de ndice pueden estar formadas por el nombre de un campo, como Mu o Nombre. Pero
tambin puede ser algo como Mu+2, Mu*8, etc. Esto es la razn por la cual se llama expresin de ndice, no
campo de ndice. Un caso especialmente til es cuando queremos indexar una tabla por ms de un campo.
Por ejemplo, indexar la tabla ALUMNOS por SEXO y NOMBRE en orden ascendente significa: (1) Disponer prime-
ro los registros con sexo F y luego los registros con sexo M; (2) Dentro de cada grupo, disponer los registros
en orden alfabtico por nombre. Activando el ndice, la tabla ALUMNOS se vera como sigue.
Mu Nombre Domicilio Sexo Nacido Argentino
1702 vila, Mara Mitre 7047 F 25-10-1981 T
4315 Castro, Ana Sols 4214 F 22-06-1980 T
2388 Ruiz, Marina Belgrano 1128 F 02-08-1982 F
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
34
1377 Toro, Laura Paso 339 F 13-04-1979 T
2406 Alba, Alberto Crdoba 175 M 17-05-1987 T
5201 Corts, Luis Jujuy 8543 M 21-03-1982 T
3161 Gil, Ral San Martn 5928 M 30-01-1982 T
0257 Oro, Eugenio Roca 2928 M 02-07-1988 T
0542 Surez, Jorge Salta 101 M 05-10-1978 T
0645 Vidal, Daniel La Rioja 2246 M 07-07-1980 T
La expresin del ndice anterior se debe escribir Sexo + Nombre. El + no es el operador suma, porque ambos
campos son de caracteres. Es el operador de concatenacin. Hay que tener cuidado con estos operadores,
porque VFP los interpreta de una forma u otra, segn la situacin.
Si la tabla contuviera los campos numricos EDAD y MU, podramos indexar por EDAD o por MU. Si la expre-
sin fuera Edad + Mu, el resultado distara mucho de lo correcto. Como ambos son campos numricos, VFP
resolvera la suma y ordenara por el resultado. Activando el ndice y examinando la tabla, los campos en
cuestin apareceran como sigue. A la derecha se da el resultado de la expresin, que se ha usado para in-
dexar.
Mu Edad Edad + Mu
1200 20 1220
1199 21 1220
1410 28 1438
1413 25 1438
1500 20 1500
Una forma artificiosa de resolver el problema es inventar una frmula aritmtica. Por ejemplo, sabiendo que
MU tiene ancho 6, la expresin podra ser Edad * 1000000 + Mu. La ilustracin ahora sera la que sigue, mos-
trando la correccin de la frmula usada como expresin.
Mu Edad Edad * 1000000+ Mu
1200 20 20001200
1500 20 20001500
1199 21 21001199
1413 25 25001413
1410 28 28001410
Ms general y til es usar funciones de conversin de tipos de datos. STR( ) convierte una expresin de tipo
numrico a tipo carcter. Tiene un argumento obligatorio y dos opcionales, todos expresiones numricas. El
primer argumento es la expresin a convertir. El segundo indica cuntos caracteres se desean que tenga el
resultado. Si se lo omite, el resultado tendr un ancho establecido por VFP y se eliminarn los decimales ori-
ginales, si los hay. El tercero indica cuntas posiciones decimales se quieren en el resultado. Los argumentos
se separan por comas. La mejor forma de ver como funciona STR( ) es probndola con variables de memoria,
como sigue.
clear memory
a = 12563.57
b = str(a)
c = str(a, 5)
d = str(a, 7, 1)
e = str(a, 8, 2)
f = str(a, 9, 3)
g = str(a, 2)
display memory like *
Observe que la variable g tiene dos asteriscos como contenido. Se ha respetado el ancho, pero como es insu-
ficiente, los asteriscos indican que la funcin ha fracasado.
El ndice por EDAD y MU, aplicando STR( ), puede usar la expresin str(edad,2) + str(mu,6). Lo ms econmico
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
35
y preciso es usar el ancho y decimales de cada campo, que en este caso se han omitido por ser 0. (Se ha su-
puesto que EDAD tiene ancho 2.)
Si queremos construir un ndice por la fecha de nacimiento, la expresin Nacido funcionar correctamente.
Pero si queremos otro por SEXO y NACIDO, como un campo es de caracteres y el otro de fecha, no podemos
usar la expresin Sexo + Nacido, porque todos los componentes deben ser del tipo carcter. Debemos valer-
nos de la funcin DTOS( ), que transforma una expresin de tipo fecha o fechahora a caracteres. Tiene un ar-
gumento, que es la expresin a convertir. Si sta es de fechahora, el resultado trunca la porcin de hora. La
expresin del ndice, entonces, deber ser sexo + dtos(nacido).
Si NACIDO fuera de fechahora y quisiramos un ndice por este campo, la expresin Nacido funcionara bien.
Pero si quisiramos otro por SEXO y NACIDO, conservando la parte de hora, la funcin a emplear sera TTOC( ).
El primer argumento puede ser de fecha o fechahora. Si el primer argumento carece de la porcin de fecha,
se supone el 30-12-1899. Si carece de la porcin de hora, se supone 12:00:00AM. Si se omite el segundo ar-
gumento, se obtiene una cadena de caracteres que responde al formato vigente. Si se usa un 1 como segun-
do argumento, el resultado es adecuado para expresiones de ndice. Si se usa un 2, el resultado es solamen-
te la porcin de fecha. La expresin de ndice, entonces, deber ser sexo + ttoc(nacido, 1).
Para construir un ndice por NACIDO y MU, la expresin deber ser dtos(nacido) + str(mu, 6), de caracteres,
por ser el tipo comn al cual se pueden convertir los componentes.
Aplicacin de ndices
Examine la tabla ALUMNOS y active el ndice MU. Compruebe que no haya ningn nmero de matrcula repeti-
do. Si los hay, cmbielos por otros, de modo que ninguno se repita. Modifique la estructura con VER DISEA-
DOR DE TABLAS o con MODIFY STRUCTURE. Active la ficha NDICES.
Cambie el tipo del ndice MU por Principal y pulse ACEPTAR. Vuelva a examinar la tabla. Repita en el campo
MU de un registro el valor que tiene en otro. Muvase por los dems campos del registro, sin salir de l. No se
detecta la duplicacin, porque mientras est en el registro tiene tiempo de cambiar el nmero de matrcula por
un valor aceptable. Trate de ir a otro registro, lo cual supone que da por terminado el trabajo sobre el registro
con el problema. Ahora s, aparece un mensaje diciendo que se ha violado la unicidad del ndice MU. El botn
ACEPTAR lo vuelve al registro errneo, para que escriba otro valor aceptable. El botn VOLVER restablece el
valor original del campo MU. Active el modo Aadir. Llene MU con un valor repetido y los dems campos con
cualquier dato. Trate de ir a otro registro. Aparece el mismo mensaje de error. Pulse VOLVER y todo el registro
que quiere aadir se pone en blanco. Salga con ESC y vuelva a examinar la tabla. El registro no se ha aadi-
do, lo cual es inteligente, pues evita marcarlo para destruir y eliminarlo.
Si en vez de elegir Principal para el ndice MU hubiera elegido Candidato, el comportamiento de VFP sera el
mismo que el descripto en el prrafo anterior.
Cree ahora otro ndice, de nombre y expresin Sexo y tipo nico. Examine la tabla y active el ndice SEXO.
Solamente aparecen dos registros, porque el propsito de estos ndices es detectar cules valores distintos
hay en la expresin, en este caso el campo SEXO. Si aparecen ms de dos registros, es porque en SEXO se
han introducido valores incorrectos, distintos a F y M. Los ndices nicos tienen una entrada para el primer re-
gistro de un grupo con igual valor en la expresin. Suponga que hay tres registros con el valor errneo G en
SEXO. El ndice nico va a mostrar el primer registro con F, el primero con M y el primero con G. Si usted
cambia la G por el valor F o M, el ndice seguir teniendo una entrada para ese registro, ahora correcto; pero
los otros dos con G no tienen entrada. El ndice, entonces, se ha vuelto incorrecto. La solucin es volver a in-
dexar la tabla, sea con TABLA VOLVER A GENERAR NDICES o con el comando REINDEX.
Para probar expresiones complejas, cree varios ndices, de acuerdo a las siguientes directivas.
Nombre Tipo Expresin
Sexonm Normal sexo + str(mu, 6)
sexonom Normal sexo + nombre
nacidonm Normal dtos(nacido) + str(mu, 6)
sexonacnm Normal sexo + dtos(nacido) + str(mu, 6)
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
36
Dtoc( )
La funcin DTOC( ) tambin convierte una expresin de fecha a caracteres. La diferencia con DTOS( ) es que la conversin de sta
siempre es al formato AOMESDA, con el ao en cuatro posiciones, sin separadores. DTOC( ), en cambio, puede convertir a varios
formatos de fecha, respetando el que est vigente, es decir, lo establecido con SET DATE y SET CENTURY.
Sean las fechas 31 de diciembre de 2004 y 1 de enero de 2005. Veamos qu ordenamiento ascendente producira un ndice usan-
do DTOC( ) con tres formatos de SET DATE:
set date dmy set date american set date ansi
"01012005" "01012005" "20041231"
"31122004" "12312004" "20050101"
Los formatos DMY y AMERICAN provocan ordenamientos incorrectos. Para entenderlo, imagine que las fechas son nmeros (no con-
sidere los guiones intermedios). En este supuesto, el ordenamiento es correcto. Es lo que ha hecho VFP, ordenando sin tener en
cuenta el orden cronolgico, sino el orden de los caracteres resultantes de la funcin. El formato ANSI, en cambio, es correcto, por-
que primero va el ao, luego el mes y finalmente el da.
La conclusin es que DTOC( ) no es adecuada para crear ndices. Anteriormente se la correga con un segundo argumento, 1, sepa-
rado con una coma del primero. Con esta correccin, la funcin funciona como DTOS( ). Como es posible que se olvide del segundo
argumento, recomendamos usar DTOS( ) para crear ndices y DTOC( ) para convertir una fecha a caracteres, para usar, por ejemplo,
en un ttulo.
Iif( )
Hemos visto que, para crear expresiones complejas de ndice, si los campos componentes no son de caracteres, debemos usar las
funciones STR( ), DTOS( ) y TTOC( ), segn corresponda, para obtener una expresin final de caracteres. Nada dijimos sobre cmo
tratar los campos lgicos. No hay una funcin que trasforme de tipo lgico a tipo carcter. Pero podemos recurrir a la funcin IIF( ),
que permite lograrlo indirectamente.
IIF( ) tiene tres argumentos. El primero es una expresin lgica. Si la expresin es verdadera, la funcin devuelve el segundo argu-
mento; si es falsa, devuelve el tercero. El segundo y tercer argumentos pueden ser de cualquier tipo de datos. Pruebe lo que sigue.
? iif(3 + 2 = 5, "Correcto", "Incorrecto")
? iif(3 + 2 = 5, "Correcto", date( ))
? iif(3 + 2 = 5, 24, time( ))
? iif(3 + 2 = 5, .T., date( ))
Como los argumentos de las funciones pueden ser otras funciones, entonces IIF( ) puede incluir otras IIF( ).
a = 10
? iif(a = 10, "Igual", iif(a > 10, "Mayor", "Menor))
sexo = "M"
edad = 35
? iif(sexo = "M", iif (edad >= 21, ;
"Hombre mayor", "Hombre menor"), ;
iif(edad >= 21, "Mujer mayor", ;
"Mujer menor"))
El ltimo comando ha sido escrito en varias lneas. Cuando un comando tiene mucho texto, puede escribirse en tantas lneas como
quiera, terminando cada una con un punto y coma, excepto la ltima.
Observe lo siguiente, porque es muy prctico.
vive = .T.
? iif (vive = .T., "Vivo", "Fallecido")
? iif (vive, "Vivo", "Fallecido")
La expresin vive = .T. se puede escribir simplemente vive, porque VFP supone que el nombre de la variable o campo lgico repre-
senta contenido verdadero. Su contraria, vive = .F., puede lograrse negando el nombre. La negacin es una operacin lgica, que
se expresa con el operador NOT o su equivalente ! (signo de exclamacin derecho). Vive = .F. se puede lograr, entonces, con not vi-
ve o ! vive.
? iif (not vive, "Fallecido", "Vivo")
Con lo aprendido sobre IIF( ), podramos crear un ndice para la tabla ALUMNOS por los campos ARGENTINO y MU. La expresin debe
ser de caracteres, para lo cual sabemos como tratar a MU. Para convertir a ARGENTINO, usaremos la siguiente convencin: si es
verdadero, lo transformaremos en A; si no lo es, lo transformaremos en E (de extranjero). La expresin del ndice, entonces, ser
iif(argentino, "A", "E") + str(mu, 6).

Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
37
Bases de datos
Una base de datos es un archivo "contenedor" de tablas y otras cosas, con extensin DBC. Por contenedor
no entendemos una caja donde entren fsicamente las tablas, sino un contenedor virtual, es decir, un archivo
donde se las registra, de modo que puedan manejarse desde ah con grandes ventajas.
Creacin de una base de datos
Para crear una base de datos se puede usar ARCHIVO NUEVO, elegir el tipo Base de datos en el dilogo NUE-
VO y pulsar el botn NUEVO ARCHIVO. Se abre el dilogo CREAR para elegir una carpeta y dar un nombre al ar-
chivo a crear.
Create database
El comando para crear una base de datos es CREATE DATABASE, seguido por el nombre de la base de datos. Hay otras formas de
crearla.
Siguiendo cualquier procedimiento explicado, cree la base de datos ALUMNOS. Ahora va a tener un tabla y una
base de datos con el mismo nombre. No hay problemas, porque son archivos de tipo distinto. Aparece el DI-
SEADOR DE BASES DE DATOS vaco, en cuyo ttulo tiene el nombre, Alumnos. Tambin est la barra DISEADOR
DE BASE DE DATOS, que puede mover, variar en tamao y cerrar. Cirrela. Como es muy til, vuelva a abrirla
con VER BARRA DE HERRAMIENTAS. En el dilogo de igual nombre, active DISEADOR DE BASES DE DATOS y pul-
se ACEPTAR.
Barra de herramientas Diseador de bases de datos
Veamos algunos de los botones que contiene.
NUEVA TABLA. Sirve para crear una nueva tabla. Bsquelo, demorando el mouse en cada botn, hasta que
aparezca el nombre en un pequeo rectngulo amarillo. Plselo, pero cancele el dilogo NUEVA TABLA,
porque no vamos a crear ninguna.
AGREGAR TABLA. Registra una tabla existente en la base de datos. Plselo. Aparece el dilogo ABRIR. Elija
la tabla ALUMNOS y pulse ACEPTAR. Ahora se ve una ventanita en el diseador, que representa la tabla
agregada y se llama CURSOR. Su ttulo es Alumnos. La primera lnea dice Campos, seguida por otras con
el nombre de cada campo. Luego otra lnea dice ndices, seguidas por otras con el nombre de cada ndi-
ce. Si no ve todas las lneas en el cursor, puede modificar su tamao o usar la barra de desplazamiento
vertical. Agregue tambin la tabla COPIA.
EXAMINAR TABLA. Abre la ventana EXAMINAR para la tabla seleccionada. Seleccionar la tabla es lo mismo
que seleccionar el cursor. Seleccione ALUMNOS y pulse el botn EXAMINAR. Active el diseador. Si no est
visible, porque las dimensiones de la ventana EXAMINAR no dejan verlo, eljalo en la lista de ventanas
abiertas del men VENTANA. Seleccione COPIA y pulse el botn EXAMINAR. Para examinarlas, si estaban
cerradas, VFP abre las tablas. Ahora tiene dos ventanas EXAMINAR abiertas, ms la ventana del disea-
dor, y quizs la ventana COMANDOS, si estaba abierta. Puede ver las cuatro a la vez si cambia sus dimen-
siones a mano. Puede resultarle ms fcil emitir VENTANA ORGANIZAR TODO. Cierre ambas ventanas
EXAMINAR y maximice el diseador.
MODIFICAR TABLA. Permite modificar la estructura de la tabla seleccionada, para lo que abre el DISEADOR
DE TABLAS. Seleccione ALUMNOS y plselo. Observe algo nuevo? el DISEADOR DE TABLAS tiene varias co-
sas, debajo de los campos, que antes no tena. Qu pas? Para agregar una tabla a una base de datos,
la tabla debe ser libre. Una vez agregada, se convierte en tabla de base de datos, o ms brevemente ta-
bla base. Las tablas base tienen ms posibilidades estructurales que las tablas libres. Esto las hace supe-
riores, como veremos. Cancele la modificacin.
QUITAR TABLA. Elimina la tabla seleccionada. Seleccione COPIA y pulse el botn. Aparece un mensaje pre-
guntando si la quiere eliminar definitivamente del disco, es decir, destruirla para siempre, o quitarla de la
base de datos, esto es, hacerla libre. Si eligiera quitarla, puede que se pierdan las posibilidades estructu-
rales de que carecen las tablas libres y que se pierdan otras cosas ms, por lo que se le pregunta si quie-
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
38
re hacerlo. Cancele la operacin.
El diseador modifica la barra de mens y tiene mens contextuales propios. stos se activan dando clic se-
cundario: segn el contexto dnde se lo d sern las opciones que presente.
Mens contextuales del diseador de bases de datos
D clic secundario en el diseador, donde no hay cursores. Aparecen varias opciones, de las cuales nos inte-
resan las siguientes, que debe ir probando.
CONTRAER TODO. Contrae todos los cursores a sus barras de ttulo.
EXPANDIR TODO. Vuelve todos los cursores contrados a sus tamaos anteriores.
BUSCAR OBJETO. Presenta el dilogo BUSCAR TABLA O VISTA con un listado de estos objetos, para seleccio-
nar uno y activarlo con el botn BUSCAR. Es til si hay gran cantidad de tablas y vistas.
NUEVA TABLA y AGREGAR TABLA. Hacen lo mismo que los botones de la barra.
PROPIEDADES. Presenta el dilogo PROPIEDADES DE LA BASE DE DATOS, donde se configura lo que se quiere
ver en ella: tablas, vistas locales, vistas remotas, relaciones. Por ahora slo puede probar TABLAS. Qutele
la tilde y pulse ACEPTAR. Ahora el diseador no muestra las tablas. Vuelva a poner la tilde para verlas.
D clic secundario sobre un cursor. Aparece un men contextual. Las opciones que nos interesan son las si-
guientes.
EXAMINAR, ELIMINAR y MODIFICAR. Hacen lo mismo que los botones de la barra de herramientas.
CONTRAER. Contrae el cursor seleccionado a la barra de ttulos. Si est contrado, la opcin cambia a
EXPANDIR, que restaura el cursor al tamao previo.
Hay otro men contextual, sobre las relaciones, que por ahora no podemos ver.
Opciones de men en el diseador de bases de datos
Los diseadores y algunas ventanas, como EXAMINAR, modifican la barra de mens, sea agregando o quitan-
do opciones en los mens habituales, sea agregando nuevos mens. La ventana EXAMINAR, como vimos,
agrega el men TABLA. El diseador de bases de datos agrega el men BASE DE DATOS, con algunas opciones
que ya conoce, sea porque estn en la barra de herramientas, en los mens contextuales o en el men TABLA
de la ventana EXAMINAR. Son las siguientes: NUEVA TABLA, AGREGAR TABLA, MODIFICAR, EXAMINAR, QUITAR,
BUSCAR OBJETO, VOLVER A GENERAR NDICES DE TABLAS, QUITAR REGISTROS ELIMINADOS y PROPIEDADES. Las que
no conoce son las que siguen.
ORGANIZAR. Presenta el dilogo ORGANIZAR TABLAS Y VISTAS, con opciones para ordenar los cursores. Note
que hay una opcin para dar a todos los cursores el tamao predeterminado, til cuando se los ha modifi-
cado por arrastre.
LIMPIAR BASE DE DATOS. Una base de datos, aunque le parezca extrao, es una tabla. Para diferenciarla de
las tablas del usuario, su extensin es DBC. Tiene un archivo de ndices compuesto estructural, con ex-
tensin DCX, y un archivo de campos memo, con extensin DCT. Su estructura est predefinida y la ge-
nera VFP al crearla. En lo dems, es una tabla como las que conoce. Cuando se agrega una tabla con-
vencional a una base de datos, se agregan varios registros en sta para definirla. Si quita la tabla, esos
registros se marcan para destruir. Si quiere eliminar definitivamente los registros marcados, porque au-
mentan innecesariamente el tamao del archivo, se usa esta opcin.
Salga del DISEADOR DE BASES DE DATOS con ESC, el botn de cierre o ARCHIVO CERRAR.
Close databases
El comando para cerrar bases de datos es CLOSE DATABASES. Si no se agrega nada ms, cierra la base de datos activa y sus archi-
vos dependientes (tablas, ndices, memo). Si agrega la palabra ALL, cierra todas las bases de datos abiertas y sus archivos depen-
dientes, incluso las tablas libres abiertas, sus ndices y sus memo. Tambin puede cerrarlas todas, con un efecto an ms amplio,
con CLOSE ALL.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
39
Apertura de una base de datos
Para abrir una base de datos use ARCHIVO ABRIR, elija Base de datos (*.cdx) en TIPO DE ARCHIVOS del dilo-
go ABRIR, seleccione el archivo y pulse ACEPTAR. Esto presenta la base de datos en el diseador.
Open database
El comando OPEN DATABASE seguido por el nombre del archivo DBC abre la base de datos, pero no el diseador. Puede haber va-
rias bases de datos abiertas, pero slo una es la activa.
Modificacin de una base de datos
Si abre una base de datos con ARCHIVO ABRIR, se presenta en el DISEADOR DE BASES DE DATOS, donde pue-
de modificarla.
Modify database
El comando MODIFY DATABASE, sin agregados, abre el diseador para modificar la base de datos activa. Si se le agrega un nombre,
presenta la base de datos de tal nombre en el diseador, abrindola si hace falta, para modificarla. Si la base de datos no existe, la
crea.

Propiedades exclusivas de las tablas base
Ahora tenemos las tablas ALUMNOS y COPIA. La segunda no sirve, porque la hemos usado para ilustrar el
agregado de registros a una tabla desde otra. Djela por ahora. En la vida real, los alumnos rinden exmenes,
que aprueban o no. Necesitaremos una tabla EXMENES, para las notas de las materias rendidas, y una tabla
MATERIAS, para los cdigos y nombres de las materias.
Abra el DISEADOR DE BASES DE DATOS. Cree una nueva tabla, EXMENES, con esta estructura:
Nombre Tipo Ancho Decimal ndice Null
Mu Numrico 6 0
Materia Numrico 2 0
Fecha Fecha 8
Nota Numrico 2 0
Supongamos 30 materias distintas, del 1 al 30, y notas del 0 al 10, sin decimales. Cuando ingresemos datos,
podemos hacer que VFP rehse materias fuera del intervalo 1 30 y notas fuera del intervalo 0 10. Si co-
metemos errores, queremos que nos avise a travs de un mensaje.
Seleccione el campo MATERIA. Dentro del recuadro VALIDACIN DE CAMPO hay una opcin REGLA, con un cua-
dro de texto y un botn de tres puntos. La regla para controlar que las materias estn en el intervalo 1 30 se
puede expresar between(materia, 1, 30). Escrbala directamente o usando el GENERADOR DE EXPRESIONES.
Debajo est la opcin MENSAJE. Si la deja en blanco, VFP dar un mensaje estndar si se ingresa un valor in-
correcto. Pero es mejor escribir un mensaje adecuado, como "Materia debe variar entre 1 y 30.". Puede escri-
birlo en el cuadro de texto; pero vaya al GENERADOR DE EXPRESIONES, abra la lista CADENA y elija "texto". Esto
produce un par de comillas, con el punto de insercin entre ellas, evitndole escribirlas. No es de mucha ayu-
da, pero es algo. El mismo recurso existe para escribir delimitadores de fecha, parntesis, operadores y fun-
ciones. Escriba el texto del mensaje.
Seleccione el campo NOTA. Escriba la regla between(nota, 0, 10) y el mensaje "Nota debe variar entre 0 y
10.". Observe el cuadro de edicin COMENTARIO DE CAMPO. Cada campo tiene el suyo propio, por si desea es-
cribir un texto con aclaraciones sobre l.
El nombre del campo MU puede resultar poco claro para quien examina la tabla. Mejor sera que apareciera
Matrcula en la ventana EXAMINAR. En el recuadro MOSTRAR, escriba Matrcula en la opcin TTULO. Guarde la
tabla sin agregar registros.
Modifique la tabla ALUMNOS. En el campo MU escriba Matrcula en TTULO. En el campo SEXO, para controlar
que los cdigos aceptables sean F o M, en REGLA escriba inlist(sexo, "F", "M") y en MENSAJE escriba "Sexo
debe ser F o M.". Los cdigos deben estar en mayscula, pero al llenarlo puede que se los introduzca en mi-
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
40
nscula. Para que VFP los convierta automticamente a mayscula, en FORMATO escriba el cdigo ! (signo de
exclamacin derecho). Hay varios cdigos de formato, que afectan a todo el dato que se ingrese al campo. En
particular, el cdigo ! convierte a mayscula cualquier letra que se introduzca en cualquier posicin del cam-
po. Como SEXO tiene ancho 1, el efecto se reducir a esa nica posicin. Siendo SEXO un campo de caracte-
res, podramos ingresar cualquier carcter; si es una letra, el cdigo de formato la va a convertir a mayscula;
pero la regla exigir que lo ingresado sea una F o una M. Esto lograr que el valor del sexo sea correcto. Los
cdigos de formato tienen un mbito de aplicacin bastante mayor al diseo de tablas, pudindose aplicar en
otros contextos.
La opcin MSCARA DE ENTRADA, que no usaremos por ahora, tambin usa cdigos. Pero, a diferencia de los
cdigos de formato, que afectan a la totalidad del campo, se usan para definir lo que se quiere, posicin a po-
sicin. As, los cdigos A y 9 indican que en el lugar donde aparecen debe ingresarse una letra y un nmero,
respectivamente. Para una patente de automvil, la mscara de entrada sera AAA999. Para que las letras
sean convertidas a mayscula, debera usar el cdigo de formato !, como ya sabe.
La opcin VALOR PREDETERMINADO permite definir un valor que va a tomar el campo en cada nuevo registro
que se aada a la tabla. El valor predeterminado es el que ocurre con ms frecuencia, de modo que al agre-
gar un nuevo registro, aparecer inicialmente lleno con este valor, evitndonos tener que escribirlo. Esto no
significa que posteriormente no se pueda cambiar por otro valor. Por ejemplo, para el campo ARGENTINO se
puede dar el valor .T., porque se supone que la mayora de los alumnos son argentinos. Si alguno no lo fuera,
se puede cambiar por .F.
Cree la tabla MATERIAS, con la siguiente estructura:
Nombre Tipo Ancho Decimal ndice Null
Materia Numrico 2 0
Nombre Carcter 30
En la ficha NDICES, cree el ndice de nombre y expresin Materia y de tipo principal. Guarde la tabla sin agre-
gar registros.
Use la tabla EXMENES. Vamos a agregarle varios registros, con nmeros de matrcula existentes en la tabla
ALUMNOS. Para no trabajar a mano, valgmonos de la tabla COPIA, que tiene registros repetidos para cada
matrcula. El nico campo coincidente en nombre y tipo con EXMENES es el campo MU. Llenaremos los res-
tantes campos a mano. Agregue a EXMENES todos los registros de COPIA, valindose de TABLA AADIR RE-
GISTROS o APPEND FROM. Examine EXMENES y active el ndice MU. Llene el campo MATERIA de cada registro,
con nmeros entre 1 y 30. Luego complete el campo FECHA, ms tedioso. Finalmente llene el campo NOTA,
con nmeros entre 0 y 10. Si tiene ganas, puede agregar registros nuevos a mano, siempre que las matrcu-
las repitan nmeros de los registros agregados automticamente, porque sera incorrecto registrar un examen
para un alumno inexistente.
Use la tabla MATERIAS. Agrguele 30 registros, llenado el campo MATERIA con 1, 2, , 30. Complete el campo
NOMBRE con nombres de asignaturas como Matemticas, Historia, Economa, etc.
La ficha TABLA del DISEADOR DE BASE DE DATOS permite controlar aspectos adicionales. Esto no sucede en las
tablas libres. El aspecto ms importante es la VALIDACIN DE REGISTROS, que abarca una regla y un mensaje.
En la ficha Campos hemos visto que el contenido de cada campo se controla con una regla de validacin para
cada uno, pudiendo personalizar un mensaje de error para el caso de infringir la regla. Pero ello es insuficien-
te para controlar la coherencia entre los valores de dos o ms campos. Para hacerlo, hay que usar reglas de
validacin a nivel de registro.
Supongamos una empresa que tiene tres sucursales con distintas secciones, segn el siguiente esquema:
Sucursal Secciones
1 A, B
2 C, D
3 E, F
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
41
Sea que los campos que contienen la surcursal y la seccin se llamen SUC y SEC. Para dar el campo SUC por
correcto, se puede usar la regla de validacin between(suc, 1, 3). Para hacerlo con el campo SEC, se puede
usar la regla between(sec, 'A', 'F'). Estas reglas, sin embargo, no impedirn que se ingresen valores errneos,
como 2 en SUC y A en SEC.
Para controlar el error anterior, hay que usar una regla de validacin a nivel de registro, que para el ejemplo
podra ser:
suc = 1 and between(sec, A,BD) or suc = 2 and between(sec, C, D) or suc = 3 and between(sec, E, F)
Al ingresar datos, la regla que valida el registro se comprueba cuando se intenta ir a otro registro. Si la regla
no se cumple, VFP da un mensaje de error, personalizado o estndar, segn se haya o no definido un mensa-
je del usuario, y no abandona el registro errneo.
reas de trabajo. In, Order y Noupdate de Use. Select
Hasta ahora, todas las veces que hemos usado una tabla, no hemos tenido ninguna precaucin. Las tablas abiertas podan ser mo-
dificadas, ya sea cambiando el contenido de sus campos, agregando registros o marcando registros para destruir. Incluso si no alte-
rramos su contenido, las tablas abiertas podran ser daadas por un corte de energa elctrica. Para abrir las tablas sin permitir
cambiarle ni una coma, hay que usar el comando USE con la clusula NOUPDATE. Una tabla abierta de este modo se dice de slo
lectura. Una tabla abierta sin esta proteccin se dice de lectura / escritura. Vea, en el ejemplo que sigue, que no podr modificar
el contenido de ALUMNOS:
set status bar on
close tables all
use alumnos noupdate order mu
browse
En programacin, como norma general, es muy conveniente abrir siempre las tablas en modo slo lectura, excepto que el propsito
sea modificarlas.
La clusula ORDER de USE abre una tabla, activando simultneamente uno de sus ndices. La tabla ALUMNOS ha sido abierta acti-
vando el ndice MU.
La clusula IN de USE abre una tabla en un rea de trabajo. Un rea de trabajo es una porcin de memoria que contiene registros de
una tabla abierta. Los registros estn grabados en disco, de modo que en el rea de trabajo se coloca una copia de ellos. Si la tabla
es muy grande, en el rea de trabajo se copia un grupo de registros, luego otro, etc. Hay miles de reas de trabajo posibles, que se
numeran 1, 2, 3, etc. En cada rea se puede abrir una tabla, para lo cual hay que seleccionarla. Cuando se emite un comando que
cierra todas las tablas, como CLOSE TABLES ALL, se selecciona el rea 1. Por ello el comando USE ALUMNOS NOUPDATE ORDER MU abri
la tabla en el rea 1.
Para abrir la tabla EXMENES en otra rea, se puede seleccionar un nmero de rea con el comando SELECT y luego emitir USE. Por
ejemplo:
select 2
use exmenes order mu noupdate
Una forma ms prctica consiste en usar SELECT 0. Esto hace que se seleccione el rea de trabajo no usada de menor nmero,
desobligando de llevar cuenta de los nmeros de rea. El ejemplo anterior podra haber sido:
select 0
use exmenes order mu noupdate
El rea tambin se puede seleccionar en el mismo comando USE, con la clusula IN N, donde N es un nmero positivo, o IN 0. Las
formas anteriores, respectivamente, se pueden reemplazar como sigue:
use exmenes in 2 order mu noupdate
y mejor an con
use exmenes in 0 order mu noupdate
La mejor forma, como puede advertir, es sta ltima. Haga:
use exmenes in 0 order mu noupdate
Una tercera forma de seleccionar un rea, posible cuando el rea ya tiene una tabla abierta, es usar el comando SELECT seguido
por el nombre de la tabla. Corrobore esto, observando la barra de estado:
select exmenes
go 5
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
42
select alumnos
go bottom
? recno( )
? recno("alumnos")
? recno("exmenes")
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
43
Relaciones e Integridad referencial
Cada tabla contiene registros con datos de entidades similares. En una aplicacin tpica, los registros de una
tabla estn asociados con registros de otra tabla. Por ejemplo, una tabla con datos personales de los alumnos
tendr matrcula, nombre, sexo, domicilio, telfono, DNI. Una tabla de exmenes tendr matrcula, carrera,
asignatura, fecha, nota. Ambas tablas son complementarias: para un registro de la tabla de alumnos, puede
haber uno o ms registros en la otra, con los exmenes dados por ese alumno. Los registros de ambas ta-
blas, evidentemente, se vinculan por un dato en comn, la matrcula.
VFP puede producir esta asociacin entre los registros de ambas tablas mediante relaciones. Una relacin es
un vnculo dirigido desde una tabla a otra, por uno o ms campos comunes. La tabla de donde parte la rela-
cin se llama madre,principal o parent y la tabla donde termina la relacin se llama hija, secundaria o child.
Por ejemplo, podramos relacionar la tabla de alumnos con la de exmenes por el campo matrcula, logrando
entonces que, cuando estemos colocados en el registro de un alumno, solamente estn disponibles los regis-
tros de exmenes correspondientes a tal alumno.
Matrc. Nombre Sexo Matrc. Carrera Materia Fecha Nota
8 Gmez, Pedro M 2 10 01 06/07/2001 8

2 Arce, Luis M 2 10 03 25/07/2001 7


17 Vega, Alberto M 2 10 02 17/11/2001 10
43 Alamo, Estela F 2 10 05 07/12/2001 9
5 Jurez, Esteban M
83 Prez, Norma F
En sentido inverso, podramos relacionar la tabla de exmenes con la de alumnos por el campo matrcula, lo-
grando que, cuando estemos colocados en un examen, solamente est disponible el registro del alumno co-
rrespondiente.
Matrc. Carrera Materia Fecha Nota Matrc. Nombre Sexo
8 11 24 05/07/2001 5 2 Arce, Luis M

2 10 03 25/07/2001 7
17 08 18 02/03/2001 8
2 10 05 07/12/2001 9
5 10 03 16/09/2000 7
83 10 04 26/11/2000 4
En el primer ejemplo, a un registro de la madre corresponden varios registros en la hija. Esta relacin se llama
de uno a varios, que representaremos 1 N. En el segundo ejemplo, a un registro de la madre corresponde
uno en la hija. Esta relacin se llama de uno a uno, que representaremos 1 1.
En los ejemplos anteriores, vemos que las madres no necesitan un orden determinado, aunque puedan tener-
lo. Por el contrario, para que un registro de la madre encuentre su registro o registros correspondientes en la
hija, es necesario que sta posea un ndice por el campo matrcula y que est activo. Siempre es necesario
que la hija posea un ndice adecuado para construir una relacin. En cuanto a la madre, puede o no requerir-
lo, segn el tipo de relacin a construir, como veremos en seguida.
Relaciones transitorias
Se construyen fuera del DISEADOR DE BASE DE DATOS. Duran hasta que un comando las desactive o se cierre
una de las tablas. Pueden construirse usando uno de los siguientes recursos.
En el entorno de informes y formularios. Habiendo agregado las tablas a relacionar, se arrastra desde el
campo de la madre al ndice de la hija. Tambin puede arrastrarse desde el campo de la madre al campo
de la hija, siempre que sta tenga un ndice por tal campo. Si el ndice usa una expresin compleja sobre
el campo, hay que modificar la propiedad RelationalExpr de la relacin, de modo que el campo de la ma-
dre que va a buscar en el ndice de la hija quede de acuerdo a la expresin. Por ejemplo, si el campo ma-
trcula en la madre se llama MU y el mismo campo en la hija se llama MATRCULA, siendo que el ndice de
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
44
sta est construido por la expresin str(matrcula,8), la propiedad RelationalExpr deber ser str(mu,8).
En el cuadro de dilogo SESIN DE DATOS del men VER. Hay que agregar las tablas a relacionar. Se se-
lecciona la madre y se pulsa el botn RELACIONES. Esto coloca la madre en el panel derecho y traza una
lnea de relacin sin hija. Se selecciona la hija, con lo que se abre el dilogo ESTABLECER ORDEN DE NDICE,
para elegir el ndice de la hija a usar. Luego de ello, se abre el GENERADOR DE EXPRESIONES, para construir
la expresin relacional con el campo buscador de la madre.
En procedimientos. Previamente hay que abrir las tablas a relacionar y activar el ndice de la hija a usar
en la relacin. Luego se emite SET RELATION TO, indicando la expresin relacional construida con el
campo buscador de la madre, la palabra INTO y la tabla hija.
Si la expresin del ndice de la hija est construida por varios campos, la expresin relacional puede incluir a
todos o slo a algunos campos buscadores de la madre, de izquierda a derecha. Por ejemplo, si se quiere re-
lacionar la tabla ENCFAC con la tabla LINFAC. Sea que ENCFAC tenga los campos FACTURA, FECHA y CLIENTE, y
que LINFAC tenga los campos NMERO, ARTCULO, CANTIDAD y PRECIO, donde NMERO es el nmero de factura.
Tambin tiene el ndice NMERO, cuya expresin es str(nmero,5)+artculo. Como en ENCFAC no existe el
campo ARTCULO, podemos usar la expresin relacional str(factura,5). En este ejemplo, estamos ante un caso
de expresin relacional parcial, que realizar la bsqueda siempre que SET EXACT valga OFF.
Ampliacin de una relacin
Las relaciones transitorias inicialmente son 1 1, es decir, al seleccionar un registro cualquiera en la tabla
madre, se selecciona el primer registro correspondiente de la tabla hija.
Si abrimos dos ventanas EXAMINAR, una para la tabla madre y otra para la tabla hija, al elegir un registro cual-
quiera en la madre veremos todos los registros correspondientes de la hija, como indica el siguiente ejemplo:
Matrc. Nombre Sexo Matrc. Carrera Materia Fecha Nota
8 Gmez, Pedro M 2 10 01 06/07/2001 8

2 Arce, Luis M 2 10 03 25/07/2001 7


17 Vega, Alberto M 2 10 02 17/11/2001 10
43 Alamo, Estela F 2 10 05 07/12/2001 9
5 Jurez, Esteban M
83 Prez, Norma F
Lo que presenta la segunda ventana EXAMINAR es una visualizacin de los registros correspondientes al regis-
tro madre, lo cual parece indicar que la relacin es 1 N. Pero no es as, porque el registro hijo seleccionado
es el primero. En este escenario, para cambiar de registro hijo hay que seleccionar la segunda ventana EXA-
MINAR y moverse al registro deseado. Desde la tabla madre es imposible recorrer los registros hijos.
Sin embargo, hay una manera de simular registros "ficticios" en la tabla madre, tantos como hagan falta para
igualar la cantidad de registros relacionados en la hija. Esto es una ampliacin de la relacin, que ahora se di-
ce 1 N.
Activando esta modalidad, las tablas anteriores se veran como indica la ilustracin que sigue. En este nuevo
escenario, ahora se puede avanzar por la madre tantos registros como registros con la misma matrcula haya
en la hija. El sombreado indica la repeticin del registro inmediatamente anterior.
Matrc. Nombre Sexo Matrc. Carrera Materia Fecha Nota
8 Gmez, Pedro M 2 10 01 06/07/2001 8

2 Arce, Luis M 2 10 03 25/07/2001 7


2 10 02 17/11/2001 10
2 10 05 07/12/2001 9

17 Vega, Alberto M
43 Alamo, Estela F

Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
45
5 Jurez, Esteban M
83 Prez, Norma F
La ampliacin es til para ciertas aplicaciones, como el caso de informes que usan datos de ambas tablas. En
los informes, la tabla madre siempre est seleccionada, por lo que no hay modo de seleccionar la tabla hija.
Para que la madre procese todos los registros hijos, debe irlos seleccionado uno por uno. Esto se logra am-
pliando la relacin.
La ampliacin tambin es til para el caso de un solo Grid que muestre a la vez campos de ambas tablas re-
lacionadas, como el siguiente.
Matrc. Nombre Carrera Materia Fecha Nota
8 Gmez, Pedro 5 17 08/07/2001 8
2 Arce, Luis 10 01 06/07/2001 8
10 03 25/07/2001 7
10 02 17/11/2001 10
10 05 07/12/2001 9
17 Vega, Alberto 8 06 12/07/2001 5
43 Alamo, Estela 2 12 06/07/2001 6
2 14 08/07/2001 2
5 Jurez, Esteban 10 03 25/07/2001 6
83 Prez, Norma 10 05 07/12/2001 7
Para ampliar una relacin 1 1 en 1 N, hay varios procedimientos:
En el entorno de datos de informe o formulario, se hace .T. la propiedad OneToMany de la relacin.
En el cuadro Sesin de Datos, una vez establecida la relacin, se pulsa el botn 1 A VARIOS y se estable-
ce cul es la tabla hija con la cual se quiere ampliar la relacin.
En procedimientos, se establece la relacin con SET RELATION y luego se da el comando SET SKIP.
Relaciones permanentes
Se construyen dentro del Diseador de Base de Datos. Duran indefinidamente, mientras no sean eliminadas
explcitamente en la base de datos o no se quite o elimine de ella alguna de las tablas involucradas.
Las relaciones permanentes debe partir de un ndice principal o candidato de la madre y terminar en un ndice
de cualquier tipo en la hija. Si el ndice de la tabla hija es principal o candidato, la relacin es 1 1. Si ese
ndice es normal o nico, la relacin es 1 N. Vea la ilustracin que sigue.
Alumnos Exmenes
Campos Campos
matrcula matrcula
nombre carrera
sexo materia
domicilio fecha
dni nota
Indices Indices
matrcula matrcula
nombre
Una relacin permanente genera inicialmente una relacin transitoria de igual sentido cuando se introducen
las tablas involucradas en un entorno de datos. Si en la aplicacin se necesita el sentido inverso, es necesario
destruir la generada inicialmente en el entorno y trazarla como se necesita, lo cual no significa que se destru-
ya en la base de datos.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
46
Integridad referencial
El propsito de las relaciones permanentes es establecer ciertas reglas que controlen las altas, bajas y cam-
bios en la tablas madre e hija, llamadas reglas de integridad referencial. Las reglas se definen para cada rela-
cin, segn sigue. Para ejemplificar, usaremos dos tablas: Alumnos, con los datos personales de los alumnos,
y Exmenes, con los datos de los exmenes rendidos por los alumnos.
Reglas para la actualizacin. Se refieren a qu permitiremos cuando intentemos cambiar un valor clave en
la madre, es decir, el campo o campos por el que est construido el ndice de donde parte la relacin. Hay
tres reglas posibles, mutuamente excluyentes.
CASCADA. Permite cambiar un valor clave en la madre, cambiando automticamente los valores corres-
pondientes en la hija. Si cambiamos la matrcula de un alumno en Alumnos, cambiarn todas las matrcu-
las iguales en Exmenes, conservando la correspondencia entre los registros de una y otra tabla.
RESTRINGIR. Impide cambiar un valor clave en la madre, si tiene registros relacionados en la hija. Si un
alumno tiene exmenes, no podr cambiarse su matrcula en la madre. Cuando el registro de la madre no
tiene correspondientes, el cambio puede hacerse sin inconvenientes. Si un alumno todava no ha dado
exmenes, podremos cambiar su matrcula.
IGNORAR. Permite cambiar un valor clave en la madre, sin trasmitir los cambios a los valores correspon-
dientes en la hija. Ms que una regla, es la carencia de ella. Es el valor inicial al construir una relacin
permanente.
Reglas para la eliminacin. Se refieren a qu permitiremos cuando intentemos marcar para eliminacin un
registro en la madre. Hay tres reglas posibles, mutuamente excluyentes.
CASCADA. Permite marcar un registro en la madre, marcando automticamente los registros relacionados
en la hija. Si marcamos un registro en Alumnos, sern marcados todas los registros correspondientes en
Exmenes. Hay que tener cuidado: si desmarcamos el registro de la madre, no son desmarcados los re-
gistros relacionados en la hija.
RESTRINGIR. Impide marcar un registro en la madre, si tiene registros relacionados en la hija. Para poder
marcarlo, previamente habr que eliminar fsicamente los registros relacionados en la hija. Cuando el re-
gistro de la madre no tiene correspondientes, el marcado puede hacerse sin inconvenientes. Si un alumno
todava no ha dado exmenes, podremos marcar su registro.
IGNORAR. Permite marcar un registro en la madre, sin trasmitir las marcas a los registros correspondientes
en la hija. Es el valor inicial al construir una relacin permanente.
Reglas para la insercin. Se refieren a qu permitiremos cuando intentemos aadir un registro en la hija.
Hay dos reglas posibles, mutuamente excluyentes.
RESTRINGIR. Impide aadir un registro en la hija, si no tiene un registro relacionado en la madre. Para po-
der aadirlo, previamente habr que aadir un registro de igual clave en la madre. Si queremos aadir un
registro en Exmenes para una matrcula que no existe en Alumnos, no podremos hacerlo. La regla tiene
tambin otra consecuencia: si se cambia el valor clave en la hija, podr hacerse siempre que exista un
valor correspondiente en la madre. Si cambiamos la matrcula de un examen, ser admitido siempre que
haya un registro en Alumnos con tal matrcula.
IGNORAR. Permite aadir un registro en la hija, sin que tenga un correspondiente en la madre. Es el valor
inicial al construir una relacin permanente.

Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
47
Sesin de datos
Veamos una forma fcil de abrir tablas, activar ndices y establecer relaciones, sin necesidad de comandos.
Para ello usaremos VENTANA SESIN DE DATOS. Este comando trae el dilogo SESIN DE DATOS, cuyas op-
ciones ms sencillas son las siguientes.
ABRIR. Muestra un cuadro de dilogo ABRIR, para seleccionar y abrir una tabla o vista. Si no hay bases de
datos abiertas, el dilogo es el convencional de ARCHIVO ABRIR. Si hay por lo menos una base de datos
abierta, toma la forma del dilogo AGREGAR TABLA O VISTA, pero con el ttulo ABRIR, cuyas opciones son:
BASE DE DATOS. Muestra la base de datos actual y permite seleccionar otra base de datos abierta.
TABLAS/VISTAS DE LA BASE DE DATOS. Muestra las tablas o las vistas de la base de datos actual.
TABLAS. Muestra las tablas de la base de datos actual en el cuadro TABLAS/VISTAS DE LA BASE DE
DATOS.
VISTAS. Muestra las vistas de la base de datos actual en el cuadro TABLAS/VISTAS DE LA BASE DE
DATOS.
OTRAS. Muestra el dilogo ABRIR convencional, para seleccionar una tabla que libre o de una base
de datos no abierta.
ALIAS. Muestra el nombre de las vistas y tablas abiertas. Como una tabla o vista se pueden abrir varias
veces, para distinguir cada apertura se le da un sobrenombre o alias. As, si se abre ALUMNOS por primera
vez, su alias ser ALUMNOS; si se abre por segunda vez, su alias ser ALUMNOS_A, etc.
PROPIEDADES. Presenta el dilogo PROPIEDADES DEL REA DE TRABAJO, ya visto en el men TABLA de la
ventana EXAMINAR.
EXAMINAR. Muestra la tabla o vista seleccionada en ALIAS en una ventana EXAMINAR.
CERRAR. Cierra la vista o la tabla seleccionada en ALIAS. Si es una tabla, cierra sus archivos asociados.
RELACIONES (cuadro). Muestra las relaciones temporales establecidas entre las tablas o vistas abiertas.
RELACIONES (botn). Necesita primero seleccionar en ALIAS la tabla o vista que va a ser madre de la rela-
cin. Luego se pulsa el botn. Esto hace aparecer en el cuadro RELACIONES la tabla o vista madre, con
una lnea de conexin incompleta. Luego se elige la tabla que va a ser hija. Si sta no tiene un ndice ac-
tivo, aparece el dilogo ESTABLECER ORDEN DE NDICE, con una lista de los ndices disponibles. Elegido el
ndice correcto, aparece el GENERADOR DE EXPRESIONES, para definir la expresin relacional. Esto hace
aparecer, en el cuadro RELACIONES, la tabla hija en el otro extremo de la conexin. Si la tabla hija ya tiene
un ndice pero no es el adecuado, previamente hay que activar el ndice correcto mediante el botn
PROPIEDADES. Una tabla o vista madre puede tener relaciones con una o ms tablas hijas.
1 A VARIOS. Este botn se activa cuando se selecciona una tabla madre en ALIAS. Primero hay que selec-
cionar la tabla madre de la relacin a ampliar. Luego se pulsa este botn, que presenta el dilogo CREAR
RELACIONES UNO A VARIOS, cuyas opciones son las siguientes.
ALIAS SECUNDARIOS. Es una lista de las tablas hijas de la tabla o vista madre seleccionada en ALIAS,
para elegir aqullas con las que se quiere ampliar las relaciones.
ALIAS SELECCIONADOS. Es una lista de las tablas hijas con las que se van a ampliar las relaciones.
La lista se prepara moviendo las tablas que estn en ALIAS SECUNDARIOS.
MOVER. Mueve la tabla seleccionada en ALIAS SECUNDARIOS a ALIAS SELECCIONADOS.
TODOS. Mueve todas las tablas de ALIAS SECUNDARIOS a ALIAS SELECCIONADOS.
ELIMINAR. Elimina la tabla seleccionada en ALIAS SELECCIONADOS.
ELIMINAR TODOS. Elimina todas las tablas de ALIAS SELECCIONADOS.
Ejercitemos ahora lo aprendido.
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
48
1. Emita VENTANA SESIN DE DATOS.
2. Pulse el botn ABRIR y abra la tabla ALUMNOS.
3. Pulse el mismo botn otra vez y abra la tabla EXMENES.
4. Seleccione ALUMNOS y pulse el botn PROPIEDADES. Establezca el ndice NOMBRE.
5. Pulse el botn EXAMINAR. Salga con ESC.
6. Seleccione EXMENES y pulse el botn EXAMINAR. Salga con ESC.
7. Seleccione ALUMNOS. Pulse el botn RELACIONES. Observe el cuadro RELACIONES.
8. Seleccione EXMENES en el cuadro ALIAS. Se abre el dilogo ESTABLECER ORDEN DE NDICE. Elija el ndice
MU. Se abre el GENERADOR DE EXPRESIONES. Si no aparece, escriba la expresin mu y cierre el dilogo.
Observe el cuadro Relaciones.
9. Examine ALUMNOS, sin cerrar la ventana EXAMINAR. Modifique su tamao, de modo que tenga vea algo de
la ventana SESIN DE DATOS. Haga lo mismo con EXMENES.
10. Teniendo ambas ventanas visibles, seleccione un registro de ALUMNOS en su ventana EXAMINAR. Ver que
los exmenes que figuran en la otra ventana EXAMINAR corresponden al mismo alumno, como indica el
campo MU. Cambie de registro en ALUMNOS y ver que la otra ventana muestra nada ms que sus ex-
menes. Cuando se muestran dos tablas relacionadas, cada una en su propia ventana EXAMINAR, este
efecto es automtico.
11. Cierre ahora ambas ventanas EXAMINAR.
12. En la ventana COMANDOS ejecute
select alumnos
browse fields mu, nombre, exmenes.materia, exmenes.fecha, exmenes.nota
Lo anterior hace que en una sola ventana EXAMINAR se vean campos de dos tablas relacionadas. Los
campos de EXMENES, dado que no es la tabla seleccionada, deben ser calificados con el nombre de la
tabla. Pero observe que ahora, para cada alumno, slo se ve un examen. Esto se debe a que la relacin
es 1 a 1. Para corregir esto, salga de la ventana EXAMINAR con ESC.
13. Seleccione ALUMNOS en ALIAS y pulse el botn 1 A VARIOS. Aparece el dilogo CREAR RELACIONES UNO A
VARIOS. En ALIAS SECUNDARIOS seleccione EXMENES, pulse MOVER y luego ACEPTAR. Observe el cuadro
RELACIONES.
14. Vuelva a repetir lo que hizo en la ventana COMANDOS. Vea la presentacin de la ventana EXAMINAR. Salga
con ESC.
15. Para volver la relacin al tipo 1 a 1, seleccione ALUMNOS y pulse 1 A VARIOS. Seleccione Exmenes en
Alias seleccionados y pulse ELIMINAR o ELIMINAR TODOS. Observe el cuadro RELACIONES.
16. Seleccione EXMENES en ALIAS y pulse CERRAR.
17. Pulse ESC o el botn de cierre, para cerrar el dilogo SESIN DE DATOS.
18. En la ventana COMANDOS, emita DISPLAY STATUS. Hay informacin sobre la tabla Alumnos, que sigue abier-
ta, pero no sobre EXMENES, que fue cerrado con el botn CERRAR. Cerrar el dilogo SESIN DE DATOS no
cierra las tablas abiertas.
19. Vuelva a emitir VENTANA SESIN DE DATOS. Aparece la tabla ALUMNOS en ALIAS, porque sigue abierta.
20. Seleccione ALUMNOS y pulse CERRAR. Cierre la sesin de datos y vuelva a emitir DISPLAY STATUS. Ahora no
hay ninguna tabla abierta.
Las relaciones pueden ser "cableados" bastante complejos. Por ejemplo, puede establecer una relacin de
ALUMNOS a EXMENES y de EXMENES a MATERIAS. Luego puede ver cada tabla en su propia ventana EXAMI-
NAR, disponindolas adecuadamente. Si cambia de registro en la ventana de ALUMNOS, notar que cambian
Edmundo A. Cceres Tablas, Bases de Datos e ndices 2008
49
los exmenes de la ventana respectiva y cambiar la nica materia visible en la ventana correspondiente. Es-
to se debe a que cada examen es de una sola materia. Esa nica materia ser la correspondiente al primer
examen. Si cambia de registro en la ventana de Exmenes, ver que cambia el nombre de la materia.
Dejamos que usted practique lo que se indica en el prrafo anterior, tomando como gua lo explicado en los
nmeros anteriores.

Potrebbero piacerti anche