Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tablas, Bases de Datos e Indices PDF
Tablas, Bases de Datos e Indices PDF
Cceres
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
1
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 credo conveniente exponer tambin los comandos y las funciones de VFP que logran lo mismo. Esto no es imprescindible, 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 superficie 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 informes, 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, respectivamente, 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 nombre 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 resultado en la ventana principal.
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 registro. 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
Siguen ms
Matrcula Nombre Domicilio Etc. Matrcula Nombre Domicilio Etc. Matrcula Nombre Domicilio Etc. registros
Si dispusiramos un registro bajo otro, cada uno ocupara una fila y los campos formaran columnas:
Matrcula
Nombre
Domicilio
Etc.
Siguen ms registros
Estas disposiciones son comunes para examinar una tabla, llamadas modos examinar y aadir, respectivamente. 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 completamente 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 adicionales 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.
5
Tipo
Ancho Decimal ndice Null
Numrico
6
0
Carcter
30
Carcter
30
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 nmeros 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 hubiramos 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 quedaran 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 especfico, deberemos abreviar o truncar el dato. Para SEXO usaremos un cdigo, F para femenino y M para masculino, 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 estn 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 ascendente, 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. Obviamente, 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 sm6
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 estructura que van a tener los registros, mediante sus campos componentes con sus caractersticas, y posiblemente ndices. Pero no ingres registros con datos especficos. Las tablas tienen dos partes: una es la definicin estructural, que se ubica al comienzo del archivo; la otra son los registros con datos particulares. Las tablas deben tener al menos la primera parte; pero pueden carecer de la segunda. Si ese es el caso, tendramos tablas vacas, donde en cualquier momento puede agregar registros con datos en sus campos. La pregunta 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
Carcter
Numrico
Fecha
Fecha Hora
Lgico
Memo
Contenido
Texto
Reales
Fechas
Fecha y hora
Valores lgicos
Texto
Tamao
Hasta 254
Hasta 20
8
8
1
4
Note que los tamaos de los campos de caracteres y numricos deben definirse al crear o modificar la estructura 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 porcin decimal de un nmero. Cuando llevan decimales, el punto tambin se cuenta en el tamao, porque ocupa 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:
7
Mu:
Nombre:
Domicilio:
Sexo:
5201
Corts, Luis
Jujuy 8543
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 segundo registro son:
Mu:
Nombre:
Domicilio:
Sexo:
1702
vila, Mara
Mitre 7047
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 pueda grabarse. No es necesario pasar a un registro vaco: tambin podra volver a un campo llenado previamente, del registro actual o de cualquier otro previo. Salga con ESC.
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 equivalente es dar clic dentro de la barra de desplazamiento vertical, arriba o debajo del deslizador. Para movimientos mayores, arrastre el deslizador hacia arriba o abajo.
Avanzar o retroceder por el interior de un campo, con las flechas horizontales. El campo actual se remarca con un recuadro.
Avanzar al siguiente campo de la derecha, con TAB o ENTER. Retroceder al siguiente campo de la izquierda con CTRL + TAB. Con el mouse, se da clic en el campo que se desea en el registro seleccionado.
8
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 existentes (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 incorporan 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 tamao, 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 funciones 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
FY) ni deje marcarlos para destruir (clusula NODELETE).
Apertura de tablas
Si debe interrumpir su trabajo en cualquier momento, para seguir practicando con una tabla debe abrirla. Hay
9
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 extensin 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.
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 modo 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. Permanecer as mientras no cierre la ventana EXAMINAR. Si luego de retroceder a registros existentes quiere seguir agregando registros nuevos, vaya al ltimo y baje uno.
Agregue ahora los siguientes registros. Puede agregar ms, si desea.
Mu
542
2388
257
1377
645
2406
4315
3161
Nombre
Surez, Jorge
Ruiz, Marina
Oro, Eugenio
Toro, Laura
Vidal, Daniel
Alba, Alberto
Castro, Ana
Gil, Ral
Domicilio
Sexo
Salta 101
M
Belgrano 1128
F
Roca 2928
M
Paso 339
F
La Rioja 2246
M
Crdoba 175
M
Sols 4214
F
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 movindose 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. Cada 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.
10
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 particiones. 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 alto de la ventana EXAMINAR.
Para volver a una sola particin, tome el partidor y arrstrelo a su lugar original.
Lneas de cuadrcula
VER LNEAS DE CUADRCULA se puede activar o desactivar, mostrando u ocultando las lneas horizontales y
verticales entre campos y registros.
Men Edicin
Estando en la ventana EXAMINAR, el men EDICIN permite seleccionar todo, copiar, cortar y pegar, operaciones 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.
11
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
CTRL + C
CTRL + F
CTRL + G
Seleccionar todo
Copiar
Buscar
Buscar siguiente
CTRL + R
CTRL + V
CTRL + X
CTRL + Z
Rehacer
Pegar
Cortar
Deshacer
Set keycomp
Ya habr notado que al cambiar de campo, aqul al que entra se selecciona completamente. Este comportamiento se llama "seleccionar 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 men, 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 cuando se cierra esa ventana. La segunda opcin de este men, FUENTE, trae el dilogo de igual nombre, que permite 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, puede 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 devuelve al dilogo PROPIEDADES DEL REA DE TRABAJO. En ste, pulse el botn ACEPTAR. VFP vuelve a la ventana 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
12
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 interpretara que es el nombre de otro campo o de una variable. En lugar de comillas, puede usar apstrofos. El segundo 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 literales 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 funciones 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 como 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 seleccionada, ALUMNOS en este caso. Esto no cierra la tabla. Si se la cierra, tambin se elimina el filtro que pesa sobre ella. Si se escribe una expresin lgica despus de TO, se establece un nuevo filtro sobre tal tabla. Pruebe lo siguiente en la ventana COMANDOS
13
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"
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.
TODOS LOS CAMPOS. Es una lista que muestra todos los campos de la tabla, con sus nombres, tipos, an14
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.
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. Desaparece 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 afecta a la ventana EXAMINAR, sino que afecta a la tabla o tablas involucradas. Por ello, cuando se las examina, se ven los campos establecidos por el filtro.
Tablas abiertas
Directorio predeterminado
Relaciones vigentes
rea de trabajo seleccionada
Ruta de acceso
Alias de tablas
Configuracin de mrgenes
Expresiones de ndices
15
use alumnos
display status
list status
close tables all
Index on
El comando para crear un ndice es INDEX ON. Como hay varias clases de ndices, el comando tiene muchas variantes. Pero nos reduciremos 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 nombre que va a tener el ndice. Todo lo anterior es obligatorio. Opcionalmente se pueden usar las clusulas que se exponen a continuacin.
La clusula opcional ASCENDING, que se supone escrita, hace que el ndice ordene los registros en secuencia ascendente. La contraria, 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.
16
dir *m*
dir *s
dir *os
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*
dir al*.dbf
dir *.cdx
dir alum*.*
&& Lista las tablas que empiezan con al, en este caso Alumnos
&& Lista las tablas que empiezan con al, en este caso Alumnos
&& Lista todos los archivos de ndices
&& 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 escribe. 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.
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 ndices estructural siempre es compuesto. Un archivo compuesto no siempre es estructural. Un archivo compuesto estructural se abre o cierra siempre que lo hace la tabla. Si se agregan o eliminan registros, todos los ndices se actualizan automticamente. No pasa lo mismo con los archivos compuestos no estructurales, que necesitan 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
17
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 comando 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 acta de otro modo. El comando prueba la condicin WHILE registro a registro, dentro del ALCANCE. Si es verdadera, 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 siguientes registros:
Mu
257
542
645
1377
1702
2388
2406
3161
4315
5201
Nombre
Oro, Eugenio
Surez, Jorge
Vidal, Daniel
Toro, Laura
vila, Mara
Ruiz, Marina
Alba, Alberto
Gil, Ral
Castro, Ana
Corts, Luis
Domicilio
Sexo
Roca 2928
M
Salta 101
M
La Rioja 2246
M
Paso 339
F
Mitre 7047
F
Belgrano 1128
F
Crdoba 175
M
San Martn 5928 M
Sols 4214
F
Jujuy 8543
M
Registro
5
3
7
6
2
4
8
10
9
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
Cualquiera All
Alcance
While
Sexo = "M" es
Cualquiera All
Nombre = "C"
.T. en 5, 3, 7.
Sexo = "F" es .F. en 5,
Cualquiera All
Nombre = "A"
fin del comando.
5
Next 5: 5, 3, 7, 6, 2
Nombre = "T"
6
Rest: 6, 2, 4, 8, 10, 9, 1 Sexo = "M"
Mu < 2400 es
6
Rest
Sexo = "M"
.T. en 6, 2, 4.
Cualquier Record 4
Cualquiera All
For
Nombre = "C"
Nombre = "T"
Nombre # "vila"
18
Regs. afectados
9, 1
Ninguno. While es .F. en 6,
fin del comando.
Ninguno
6
8, 10, 1
Ninguno. While es .F. en 8,
fin del comando.
Ninguno. Nombre del registro
4 no comienza con T.
5, 3, 7, 6. While es .F. en 2.
Para el alcance ALL no importa el registro de partida, porque se incluyen todos los registros, desde el comienzo. 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 alcance 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.
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 establecen mediante ALCANCE, FOR y WHILE, temas que vimos de modo general. Lo nico que debemos agregar aqu es que FOR, para este comando, es obligatorio.
GO TOP
GO BOTTOM
SKIP (que se interpreta skip 1)
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 registros, donde N es un nmero o expresin numrica. Por ejemplo:
skip 5
skip 4 + 3
skip 6
skip 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
go 10 + 5
go 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 agotar 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 EXAMINAR 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 hallado 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
20
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:
21
Reccount( )
La funcin RECCOUNT( ) da la cantidad de registros de una tabla abierta. Si no se escribe un argumento, se aplica a la tabla seleccionada. Para aplicarla a tablas abiertas pero no seleccionadas, se escribe como argumento el alias de la tabla, entre comillas simples 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 REINDEX, 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 cualquier nmero de registros nuevos, AADIR NUEVO REGISTRO agrega uno solo, en blanco. En la ventana EXAMINAR es poco importante.
Append blank
El equivalente en programacin para agregar un registro es el comando append blank, sin ms agregados.
ALTERNAR MARCA DE ELIMINACIN. Si el registro actual no est marcado para ser eliminado, lo marca; si est 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 finaliza 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.
22
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 responden 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 copia 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
257
542
645
Nombre
Oro, Eugenio
Surez, Jorge
Vidal, Daniel
Domicilio
Roca 2928
Salta 101
La Rioja 2246
Sexo
M
M
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
542
645
Oro, Eugenio
Surez, Jorge
Vidal, Daniel
Roca 2928
Salta 101
La Rioja 2246
M
M
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 caracteres 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"
23
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 explcitamente. Ntese que los archivos de texto puro se ven sin problemas. Otros textos, como los documentos de Word, se ven con seales extraas, porque dentro del texto hay muchos comandos para comenzar y terminar negritas, cursivas, etc. En general, ese comando 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
PORTAR. Se presenta el cuadro de dilogo EXPORTAR, con las siguientes opciones:
COPY TO,
usando EX-
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.
ALCANCE,
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
24
origen de la copia, ALUMNOS, es una tabla. En DESDE escriba Alumnos, la tabla origen. Pulse ACEPTAR. Compruebe 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. Compruebe 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 registros 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, pero 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.
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 marcados. 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.
26
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 retroceda 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 particin inactiva queda fija, mientras la activa muestra diferentes registros. nicamente el movimiento del puntero 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 residen 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.
27
Tipo
Carcter
Carcter
Carcter
Carcter
Carcter
Carcter
Ancho
30
30
30
30
30
30
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
05/11/2004
05/11/04
11052004
20041105
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 verdadero y falso. En la ventana EXAMINAR, el campo lgico actual, si es T, se ve V. Los dems campos se ven T. Para 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 delimitadores de los literales de fecha son { a la izquierda y } a la derecha. Hasta la versin 5, la fecha se escribe de
28
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}
{5-8-04}
{^2004-08-05}
{05-08-04}
{5-8-4}
{^2004-8-5}
Los literales de fechahora tambin usan { y } como delimitadores. Se escribe la fecha, una coma o un espacio, 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-2002,13}
{^2004-10-02,13:40}
{01-10-2004,1:40:15PM}
{1-10-4,0}
{^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.
29
EDITAR
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 prrafo 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.
ANCHO DE TABULACIN (CARACTERES). Establece el espacio que saltar el punto de insercin hacia la derecha cada vez que se pulse TAB.
FUENTE. Permite cambiar fuente, estilo y tamao para todo el texto, mediante el dilogo FUENTE.
MOSTRAR POSICIN
hace falta.
APLICAR A LOS ARCHIVOS TIPO MEMO. Guarda la configuracin de estas opciones para aplicar en el futuro a
los campos memo.
DE LNEA
COLUMNA.
Set memowidth
Los comandos LIST y DISPLAY, cuando se emiten sin lista de campos, no muestran el contenido de los campos memo, sino solamente 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 puede 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.
31
ndices
Los ndices son una forma muy eficiente de ordenar una tabla por uno o varios campos. La ordenacin es virtual, 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 efectos, 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 expresiones 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 expresin del ndice ser cdigo + factura. Si el cdigo fuera de caracteres y la factura numrica, la expresin anterior 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 decimales. 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 ndices
Hay cuatro tipos de ndices.
NORMAL. El ndice permite que un mismo valor de la expresin se repita en diferentes registros y cada registro tiene su entrada en el ndice. Entendamos por "entrada" la referencia en el ndice a un registro particular 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)
32
el campo CDIGO de la tabla VENTAS, en el orden de grabacin, (2) los nmeros de registro y (3) las entradas de un ndice normal por la expresin Cdigo, en orden ascendente, ms el nmero del registro que
la contiene.
(1)
Cdigo
327
432
125
327
801
125
(3)
Expresin Registro
125
3
125
6
327
1
327
4
432
2
801
5
NICO. El ndice permite que un mismo valor de la expresin se repita en diferentes registros, pero si varios 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 artculos se han vendido. El esquema siguiente ilustra un ndice nico, con los supuestos del esquema anterior.
Cdigo
327
432
125
327
801
125
(2)
Registro
1
2
3
4
5
6
Registro
1
2
3
4
5
6
Expresin Registro
125
3
327
1
432
2
801
5
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 encuentran 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 ALUMNOS 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 empleado, etc.
Los tres tipos vistos hasta aqu, normal, nico y candidato, se pueden usar en tablas libres y en tablas base. 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 tablas base y puede haber uno solo por tabla. Tiene ventajas sobre los ndices candidato.
Nombre
vila, Mara
Castro, Ana
Ruiz, Marina
Domicilio
Mitre 7047
Sols 4214
Belgrano 1128
33
Sexo
F
F
F
Nacido
Argentino
25-10-1981
T
22-06-1980
T
02-08-1982
F
1377
2406
5201
3161
0257
0542
0645
Toro, Laura
Alba, Alberto
Corts, Luis
Gil, Ral
Oro, Eugenio
Surez, Jorge
Vidal, Daniel
Paso 339
Crdoba 175
Jujuy 8543
San Martn 5928
Roca 2928
Salta 101
La Rioja 2246
F
M
M
M
M
M
M
13-04-1979
17-05-1987
21-03-1982
30-01-1982
02-07-1988
05-10-1978
07-07-1980
T
T
T
T
T
T
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 expresin 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 indexar.
Mu Edad
1200 20
1199 21
1410 28
1413 25
1500 20
Edad + Mu
1220
1220
1438
1438
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, mostrando la correccin de la frmula usada como expresin.
Mu Edad
1200 20
1500 20
1199 21
1413 25
1410 28
Edad * 1000000+ Mu
20001200
20001500
21001199
25001413
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 originales, 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 insuficiente, 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
34
y preciso es usar el ancho y decimales de cada campo, que en este caso se han omitido por ser 0. (Se ha supuesto 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 valernos de la funcin DTOS( ), que transforma una expresin de tipo fecha o fechahora a caracteres. Tiene un argumento, 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 argumento, se obtiene una cadena de caracteres que responde al formato vigente. Si se usa un 1 como segundo argumento, el resultado es adecuado para expresiones de ndice. Si se usa un 2, el resultado es solamente 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 repetido. Si los hay, cmbielos por otros, de modo que ninguno se repita. Modifique la estructura con VER DISEADOR 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 aadido, 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 registro 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 indexar 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
Sexonm
sexonom
nacidonm
sexonacnm
Tipo
Normal
Normal
Normal
Normal
Expresin
sexo + str(mu, 6)
sexo + nombre
dtos(nacido) + str(mu, 6)
sexo + dtos(nacido) + str(mu, 6)
35
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 usando DTOC( ) con tres formatos de SET DATE:
set date dmy
"01012005"
"31122004"
Los formatos DMY y AMERICAN provocan ordenamientos incorrectos. Para entenderlo, imagine que las fechas son nmeros (no considere 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, porque 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, separado 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 argumento; 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 representa 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 vive 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).
36
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.
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 DISEADOR 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 pulse ACEPTAR.
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 ndice. 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 diseador, y quizs la ventana COMANDOS, si estaba abierta. Puede ver las cuatro a la vez si cambia sus dimensiones 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 cosas, 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 tabla base. Las tablas base tienen ms posibilidades estructurales que las tablas libres. Esto las hace superiores, como veremos. Cancele la modificacin.
QUITAR TABLA. Elimina la tabla seleccionada. Seleccione COPIA y pulse el botn. Aparece un mensaje preguntando 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 estructurales de que carecen las tablas libres y que se pierdan otras cosas ms, por lo que se le pregunta si quie37
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 seleccionar 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 siguientes.
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.
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 modificado 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 extensin DCX, y un archivo de campos memo, con extensin DCT. Su estructura est predefinida y la genera VFP al crearla. En lo dems, es una tabla como las que conoce. Cuando se agrega una tabla convencional 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 aumentan 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 archivos dependientes (tablas, ndices, memo). Si agrega la palabra ALL, cierra todas las bases de datos abiertas y sus archivos dependientes, incluso las tablas libres abiertas, sus ndices y sus memo. Tambin puede cerrarlas todas, con un efecto an ms amplio,
con CLOSE ALL.
38
Tipo
Numrico
Numrico
Fecha
Numrico
Ancho
6
2
8
2
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 cometemos 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 cuadro 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 incorrecto. Pero es mejor escribir un mensaje adecuado, como "Materia debe variar entre 1 y 30.". Puede escribirlo 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 ayuda, pero es algo. El mismo recurso existe para escribir delimitadores de fecha, parntesis, operadores y funciones. 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 escribir 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 mi39
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 campo. Como SEXO tiene ancho 1, el efecto se reducir a esa nica posicin. Siendo SEXO un campo de caracteres, 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 posicin. 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 agregar 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:
Ancho Decimal ndice Null
Nombre Tipo
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 agregar 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 restantes campos a mano. Agregue a EXMENES todos los registros de COPIA, valindose de TABLA AADIR REGISTROS 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 matrculas 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 insuficiente 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
40
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 mensaje 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 modificadas, ya sea cambiando el contenido de sus campos, agregando registros o marcando registros para destruir. Incluso si no alterramos 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 activando 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
41
42
Nombre
Gmez, Pedro
Arce, Luis
Vega, Alberto
Alamo, Estela
Jurez, Esteban
Prez, Norma
Sexo
M
M
M
F
M
F
Matrc.
2
2
2
2
Carrera
10
10
10
10
Materia
01
03
02
05
Fecha
06/07/2001
25/07/2001
17/11/2001
07/12/2001
Nota
8
7
10
9
En sentido inverso, podramos relacionar la tabla de exmenes con la de alumnos por el campo matrcula, logrando que, cuando estemos colocados en un examen, solamente est disponible el registro del alumno correspondiente.
Matrc.
8
2
17
2
5
83
Carrera
11
10
08
10
10
10
Materia
24
03
18
05
03
04
Fecha
05/07/2001
25/07/2001
02/03/2001
07/12/2001
16/09/2000
26/11/2000
Nota
5
7
8
9
7
4
Matrc.
2
Nombre
Arce, Luis
Sexo
M
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 tenerlo. 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 requerirlo, 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 madre que va a buscar en el ndice de la hija quede de acuerdo a la expresin. Por ejemplo, si el campo matrcula en la madre se llama MU y el mismo campo en la hija se llama MATRCULA, siendo que el ndice de
43
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 selecciona 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 relacionar 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.
Nombre
Gmez, Pedro
Arce, Luis
Vega, Alberto
Alamo, Estela
Jurez, Esteban
Prez, Norma
Sexo
M
M
M
F
M
F
Matrc.
2
2
2
2
Carrera
10
10
10
10
Materia
01
03
02
05
Fecha
06/07/2001
25/07/2001
17/11/2001
07/12/2001
Nota
8
7
10
9
Lo que presenta la segunda ventana EXAMINAR es una visualizacin de los registros correspondientes al registro 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 EXAMINAR 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 dice 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
8
Gmez, Pedro
2
Arce, Luis
17
43
Vega, Alberto
Alamo, Estela
Sexo
M
M
Matrc.
2
2
2
2
M
F
44
Carrera
10
10
10
10
Materia
01
03
02
05
Fecha
06/07/2001
25/07/2001
17/11/2001
07/12/2001
Nota
8
7
10
9
5
83
Jurez, Esteban
Prez, Norma
M
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 ampliando la relacin.
La ampliacin tambin es til para el caso de un solo Grid que muestre a la vez campos de ambas tablas relacionadas, como el siguiente.
Matrc.
8
2
17
43
5
83
Nombre
Gmez, Pedro
Arce, Luis
Carrera Materia
Fecha
Nota
5
17
08/07/2001
8
10
01
06/07/2001
8
10
03
25/07/2001
7
10
02
17/11/2001
10
10
05
07/12/2001
9
Vega, Alberto
8
06
12/07/2001
5
Alamo, Estela
2
12
06/07/2001
6
2
14
08/07/2001
2
Jurez, Esteban
10
03
25/07/2001
6
Prez, Norma
10
05
07/12/2001
7
En el cuadro Sesin de Datos, una vez establecida la relacin, se pulsa el botn 1 A VARIOS y se establece 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
Campos
matrcula
nombre
sexo
domicilio
dni
Indices
matrcula
nombre
Exmenes
Campos
matrcula
carrera
materia
fecha
nota
Indices
matrcula
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 destruya en la base de datos.
45
Integridad referencial
El propsito de las relaciones permanentes es establecer ciertas reglas que controlen las altas, bajas y cambios en la tablas madre e hija, llamadas reglas de integridad referencial. Las reglas se definen para cada relacin, 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 correspondientes en la hija. Si cambiamos la matrcula de un alumno en Alumnos, cambiarn todas las matrculas 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 correspondientes 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 registros 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 registro 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 poder 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.
46
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 opciones 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.
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.
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 relacin. 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 activo, 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 seleccionar 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.
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 abierta, 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 EXAMINAR, disponindolas adecuadamente. Si cambia de registro en la ventana de ALUMNOS, notar que cambian
48
los exmenes de la ventana respectiva y cambiar la nica materia visible en la ventana correspondiente. Esto 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.
49