Visual Fox Pro 2003
Visual Fox Pro 2003
1.1 Historia
Durante los 80s cuando la PC se hizo popular, dBase II de Ashton-Tate emergi con rapidez como programa lder en el manejo de las bases de datos, era simple y fcil pero no poda manejar ms de una base de datos a la vez. El lenguaje era fcil de aprender y utilizar, con esto permita a los usuarios empresariales el crear aplicaciones personalizadas. Se estim que el 80 por ciento de las aplicaciones de base de datos estaban en dBase, as se volvi un estndar industrial. A dBase II le sigui dBase III y dBase III Plus. Pero muchos usuarios consideraban que el dBase era difcil debido a que el usuario tena que memorizar todos los comandos para manipular una base de datos, an si fuera la ms simple. Si un comando se escriba de una manera incorrecta o tena un ligero error, dBase exhiba un mensaje de error y se rehusaba a ejecutar cualquier cosa que se le indicara. La queja ms comn fue que dBase no inclua un compilador, solo interpretaba lnea por lnea; un programa interpretado tiene dos desventajas contra un programa compilado: el programa corre ms despacio y tiene que ser distribuido junto con las aplicaciones porque no puede correr por si slo, teniendo que ser comprado por los usuarios finales. En respuesta a estas quejas, un par de compaas introdujeron compiladores y pseudocompiladores, una de estas fue Fox Software, misma que desarroll FoxBase que inclua un pseudocompilador (no traduce los programas y puede correr de manera directa) compatible con dBase. As el sistema corre con ms rapidez y puede ser distribuido con un mdulo de ejecucin. Se pens que FoxBase era uno de los mejores compiladores compatible con y de dBase, estos enriquecan el lenguaje dBase original; posteriormente dBase IV no logr un sitio en el mercado. Los programadores utilizan el concepto xBASE para referirse a los elementos comunes entre los distintos
CBTis 122 / Chihuahua Pg: 1
lenguajes de programacin compatibles con dBase. A finales de los 80 FoxBase pretendi ser un clon de dBase, pero mejor y ms rpido que fue bien recibido por muchos usuarios y programadores; en FoxPro 1.0 se introdujeron algunos conceptos GUI (interfaz grfica de usuario), en la 2.0 se incluy la tecnologa rushmore que consulta millones de registros en fracciones de segundo, instrucciones SQL que reemplazan procedimientos completos y el desarrollo de pantallas e informes o reportes tipo WYSIWYG. En la 2.5 salt al entorno Windows que tena apariencia de una aplicacin bajo DOS tipo ventanera. En la versin Visual FoxPro 3.0 incluy el contenedor de base de datos (DBC almacenamiento de procedimientos, reglas de datos y un conjunto de funciones adicionales), vistas o cursores SQL actualizables y la implantacin completa y robusta de la orientacin a objetos. La versin 5.0 fue una mejora de la 3.0 y correccin de errores; en la 6.0 agreg algunos cambios, nuevos componentes y clases y el cambio ms significativo, un mejor soporte a creacin e implantacin de servidores COM. Los das de las aplicaciones escritas solamente en Visual FoxPro estn contadas. Visual FoxPro es parte de la suite Visual Studio; que crea soluciones en el mbito empresarial. Conforme los navegadores ganan inteligencia, las aplicaciones sern transportadas hacia ellos, el origen de los datos del lado del servidor ser cualquiera (Visual FoxPro, Oracle, SQL Server o cualquier otro), Visual FoxPro estar a la mitad. Cada vez se construyen aplicaciones ms complejas, que requieren de generadores de pantallas e informes, administradores de proyectos, acceder datos almacenados en otros formatos; todo esto desarrollado en un ambiente visual. Las versiones anteriores de FoxPro atacaron estos problemas, hubo avances pero faltaba algo. Hasta que lleg la programacin orientada a objetos. Algunos productos proporcionan objetos con definicin fija y el programador tiene que usarlos tal como estn o no usarlos, ya que
jofeque@[Link]
no tienen mecanismos para comenzar con la definicin y construir sobre ella. Muchos se refieren a este tipo de programacin como la basada en objetos y no orientada a objetos. De hecho la orientada a objetos busca caractersticas como el polimorfismo, la creacin de subclases y la programacin de eventos. Han surgido muchos productos que poseen muchas de estas caractersticas, pero Visual FoxPro presenta la mejor implantacin de un lenguaje de programacin de base de datos orientada a objetos y compatible con xBase.
1.2 Conceptos
Durante los 60 se empezaron a utilizar las computadoras para llevar los registros de seguimiento en vez de almacenarlas en archivos de papel. Se desarrollo nuevos mtodos para manejar los datos. Una base de datos simple se organiza de manera similar a la organizacin de los datos sobre papel. Un tpico archivo de oficina antigua se compona de una coleccin de formas idnticas con espacios en blanco, donde se supona debera ir la informacin. Un ejemplo comn puede ser un listado de nombres mediante tarjetas indizadas en las cuales se escriba el nombre, direccin, ciudad, estado, cdigo postal y nmero de telfono. Una base de datos simple se organiza de la misma manera, pero se necesita aprender nuevos trminos que describen a los datos: Campo (FIELD): Espacio en blanco para ser llenado, es decir, hay un campo para el nombre, otro para la direccin, etctera. Registro (RECORD): Conjunto de datos que aparecen en una misma forma, es decir, el nombre, direccin y telfono de cada persona componen un registro. Archivo o tabla (TABLE): Coleccin de registros, es decir, todas las tarjetas. Puede decirse, cada campo es una columna, cada registro es un rengln y todo el archivo es una tabla. Es decir, los datos estn organizados en forma tabular. En los das en que todo se registraba sobre papel en una tpica empresa
CBTis 122 / Chihuahua Pg: 2
grande, la cual tena docenas de formas que llenar e incluan el nombre y direccin de cada empleado; en el departamento de nmina incluan el nombre, direccin y salario de cada empleado; el de recursos humanos usaba otra forma para el nombre, direccin y cursos de entrenamiento; el de seguridad social utilizaba el nombre, la direccin y los beneficios por recibir. Esta repeticin era inadecuada, si el empleado se mudaba a otro departamento una docena de personas en una docena de departamentos tendran que cambiar la direccin en una docena de formas diferentes. Debido a esto se diseo un mtodo para que la empresa introdujera una sola vez los nombres y direcciones; de tal forma que cada departamento los usase en combinacin con los datos especficos necesarios acerca de su salario, cursos, beneficios o lo que fuera; pero este mtodo era complejo e ineficaz, utilizaba apuntadores que slo programadores con entrenamiento entendan esta teora. En 1970 se invent un nuevo mtodo que enlazaba una base de datos con otra mediante un campo llave comn, a esto se le denomin base de datos relacional, As cada empleado tendra un nmero nico o cdigo que se relacionara con los datos esenciales de cada empleado y especiales para cada departamento. As, la base de datos relacional, minimiz la repeticin al
y fciles de emplear. En una base de datos simple no existe distincin entre archivo y base de datos, porque consiste de un solo archivo. Sin embargo, las bases de datos relacionales consisten en ms de un archivo, entonces el trmino base de datos es composicin de todos los datos que se usan de una manera conjunta en una aplicacin, ya sea que se guarden en un solo archivo o en varios.
campo y su tipo, debido a que algunos almacenan nmeros, valores lgicos o fechas. Primero deber inicializar Visual FoxPro, el cursor estar en la ventana de Command. Especifique la unidad y/o carpeta de trabajo. Del men File seleccione New y especifique Table y de un clic al cono de New File, de un nombre a la base de datos a crear (podr elegir la unidad de trabajo y/o carpeta. Como podr, ver el cuadro de dilogo contiene columnas con encabezados Name, Type, Width, decimal (nmero de posiciones decimales), entre otras. Use TABULAR para moverse de una columna a otra, utilice FLECHA ARRIBA y FLECHA ABAJO para moverse en el listado. El botn INSERT agrega un nuevo campo y DELETE elimina uno ya escrito. Los nombres de los campos tiene como mximo diez caracteres (incluye las letras de la A a la Z, nmeros enteros y el guin bajo). El campo debe comenzar con una letra y no puede contener espacios. No puede existir dos campos con el mismo nombre. TIPOS DE DATOS La columna Type debe contener uno de los trece tipos de datos soportados por Visual FoxPro: Character. Este tipo de campo puede incluir cualquier caracter (letras, nmeros, espacios, puntos, espacios, caracteres especiales, etc.) La amplitud mxima es de 254. Escoja este tipo cuando desee almacenar tales como nombres, direcciones, nmeros que no impliquen clculos matemticos (como por ejemplo nmeros telefnicos y cdigos postales), etc. Numeric. Puede contener un valor numrico con dgitos del 0 al 9 y opcionalmente un punto decimal y signo + o -. La amplitud mxima es de 20 posiciones. El punto decimal y los signos ocupan un espacio, as que debemos tomarlos en cuenta. Float. Parecido a Numeric, pero almacena ms dgitos significativos (inter-namente FoxPro redondea a 16 dgitos). Este tipo de dato se utiliza para clculos cientficos, aunque por lo general no se usa.
Antes de trabajar con un archivo de base de datos se tendr que definir la estructura del mismo. Se deber especificar los campos, la longitud mxima de caracteres para cada
CBTis 122 / Chihuahua Pg: 3
jofeque@[Link]
Logical. Puede contener slo el valor T o F, para indicar True o False (verdadero o falso). Date. Incluye a los datos tipo fecha, su longitud es de 8. Se puede mostrar el ao con cuatro caracteres en vez de dos. Memo. Pueden contener un cantidad no determinada de dato alfanumricos, como un texto grande, una grfica, un sonido, etc. General. Se utiliza para insertar objetos OLE, como una hoja de clculo, un grfico o sonido creado por otra aplicacin.
de nombre [Link] el cual contendr informacin de los empleados de una empresa, con los siguientes campos: Nombre, Domicilio, Colonia, Cod_Postal, Salario, Fecha_Nac, Estatura, Sexo_Masc y Referencias.
Por omisin, los archivos de base tienen la extensin DBF (Data Base File). Si una base de datos contiene un campo de tipo Memo, Visual FoxPro crear un archivo con el mismo nombre de la base de datos pero de extensin FPT, en este archivo se guardarn los datos de los campos Memo. Los tipos de datos debern ser elegidos de acuerdo a la manera en que van a ser usados. Aquellos que requerirn clculos numricos, sern de tipo Numeric, Flota, Double, Integer o Currency. Antes no exista campos de tipo fecha y estas tenan que ser guardadas en un campo tipo caracter, no era posible ordenar los registros por fecha y no podan efectuarse clculos; hoy existe un campo de este tipo donde se almacenarn los datos de tipo fecha que no incluyan la hora. Tome en cuenta las necesidades antes de definir adecuadamente los campos que conformaran la estructura de la base de datos. Vea que tan conveniente es la fragmentacin de los datos; como por ejemplo en el nombre de un cliente; deber definir un campo para el nombre, otro para el apellido paterno y otro para el materno, o simplemente un solo campo que incluir todo el nombre. Talvez desea ordenar la lista alfabticamente por nombre y sus apellidos, por tal razn defina correctamente la estructura. Prctica # 1 Ahora est preparado para crear un nuevo archivo base de datos mediante el cuadro de dilogo Table Designer, el cual llam con anterioridad. Vamos a crear un archivo
CBTis 122 / Chihuahua Pg: 4
Discuta los tipos y longitudes de cada campo. Para introducir los nombres de los campos, el cursor deber estar posicionado en la columna Name, cuando un campo es llenado, Visual FoxPro automticamente lo define como tipo Character y de longitud 10. Viaje con el TABULAR y SHIFT+TAB para ir a otra columna, tambin podr utilizar el puntero del ratn. Si se equivoco en un nombre de campo, podr modificarlo (recuerde que deben de empezar con una letra, no podr contener espacios y no debern de existir dos campos con el mismo nombre en la misma base de datos). El campo Cd_Postal defnalo de tipo caracter. Cuando termine de definir la estructura de un clic al botn de OK. FoxPro preguntar si desea introducir registros (Input data records now?), conteste NO.
el cuadro de dilogo que aparece especifique como tipo de archivos a una Tabla *.dbf, y elija la base de datos que cre en el punto anterior. Cuando se selecciona esta opcin la lnea de comando USE <nombre de archivo> se agrega en la ventana de Command. El comando USE abre un archivo desde la ventana de Command o dentro de un programa. Un mtodo para obtener informacin acerca del archivo en uso, es la utilizacin del comando DISPLAY STRUCTURE, el cual muestra el nombre del archivo en uso con los nombres, tipos y amplitudes de sus campos. Si abre otra base de datos, el archivo actual ya no estar en uso y se cierra de manera automtica. Recuerde que la opcin Close del men File, slo cierra la ventana actual y no la base de datos, esta continuar abierta. Para cerrar un archivo utilice el comando USE pero sin un nombre de archivo. Prctica # 2 1. Abra el archivo [Link], recuerde que para poner en uso una base de datos puede utilizar el men File y la opcin Open, despus especificar como tipo de archivos a las Tablas o archivos con extensin dbf, (no confunda con Database dbc, estos tipos de archivos son catlogos que agrupan a muchos archivos y estos componen una base de datos mltiple) y elija del cuadro de dilogo el archivo deseado; o utilice el comando USE, teclendolo en la ventana Command, seguido del nombre del archivo base de datos que desea abrir, en este caso EMPLEADOS. 2. Introduzca en la ventana de Command la instruccin DISP STRU (abreviatura de DISPLAY STRUCTURE, FoxPro podr aceptar comandos con solo teclear las primeras cuatro letras de estos) 3. Escriba el comando USE en la ventana Command para cerrar el archivo actual 4. Para verificar que el ltimo comando funcion, escriba CLEAR (comando que permite limpiar la pantalla o ventana actual) y despus introduzca otra vez DISP STRU. FoxPro desplegar un cuadro de dialogo (no seleccione ningn archivo) para que pueda especificar una base de datos y desplegar su estructura;
CBTis 122 / Chihuahua Pg: 5
debido a que ninguna esta en uso porque fue cerrada en el punto 3. 5. En vez de seleccionar una base de datos, presione ESCAPE. FoxPro desplegar un mensaje de error, el cual indica que no puede completar con xito el comando DISP STRU ya que no existe ninguna base de datos en uso. 6. Si un archivo esta en uso, recuerde que no existe ninguna indicacin obvia en pantalla de su uso. Para modificar la estructura de una base de datos, primeramente esta deber estar en uso, luego en la ventana del Command teclee el comando MODIFY STRUCTURE, el cual le permitir especificar otra estructura diferente a la inicial. Pero, si observa en el cuadro de dilogo aparece una leyenda de Read Only, la cual indica que la estructura no puede ser modificada, es decir, el cambio de estructura requiere que el archivo sea usado en forma exclusiva (que no este compartido limitando el acceso a otros usuarios, por ejemplo, en una red de computadoras). Por tal motivo, use la base de datos [Link] tecleando el siguiente comando en la ventana Command: USE EMPLEADOS EXCLUSIVE, as podr modificar la estructura. Aqu podr agregar campos nuevos, eliminar los existentes. modificar el nombre de los campos, su tipo o longitud. Prctica # 3 1. Abra la base de datos en forma exclusiva con el anterior comando 2. Teclee el comando MODI STRU en la ventana Command para modificar la estructura del la base de datos en uso 3. Posicinese al final de la lista de campos y de un clic al botn Insert, as podr agregar un campo de nombre Edo_civil, tipo caracter y longitud de uno. 4. De un clic al botn OK 5. Conteste que s a la pregunta de Hacer los cambios de la estructura de forma permanente. Con esto la estructura de la base de datos en uso se
jofeque@[Link]
modific, agregando un campo nuevo el cual ser utilizado para especificar el estado civil del empleado.
FoxPro ofrece dos mtodos distintos para examinar una base de datos en el momento de agregar, editar (modificar los datos de los campos) o ver los datos: Edit permite trabajar con un registro a la vez, y Browse despliega los registros como una tabla o lista en una ventana, para salir de esta ventana presione ESCAPE (recuerde que FoxPro no proporciona ningn aviso antes de cerrar la ventana y puede descartar cualquier cambio hecho en la columna donde se encuentra; si est en una columna o campo y presiona el ENTER, TABULAR o utiliza las FLECHAS DE MOVIMIENTO, se entiende que acepta las modificaciones hechas a la base de datos). Para que los cambios hechos sean guardados, cierre la ventana utilizando CTRL+End o CTRL+W. Browse se encuentra en el men View, recuerde que deber tener una base de datos en uso. Al usar Browse, podr especificar el tipo de vista que desea utilizar para visualizar la base de datos mediante el men View el cual contiene las dos opciones: Browse y Edit. En este mismo men podr modificar la estructura de la tabla (Table Designer), colocar lneas o no de divisin (Grid Lines), entre otras cosas. Tambin al estar activo el Browse se agrega la opcin Table al men principal de FoxPro, en este men se encuentra las siguientes opciones: 1. Font. Fuente a utilizar en la edicin 2. Go to record. Ir a un registro en particular: inicio, fin, siguiente, previo, un nmero en particular o localizar un registro que cumpla con un criterio 3. Append new record. Agregar un nuevo registro, es decir, un rengln que podr ser llenado con datos. CTRL+Y 4. Toggle deletion mark. Intercambiar entre un registro marcado para borrar o no. Esta marca se indica en la parte izquierda de la edicin en cada registro. CTRL+T 5. Agregar registros de un archivo externo, marcar registros para ser eliminados posteriormente, desmarcar registros y borrar fsicamente los registros marcados para ser borrados.
CBTis 122 / Chihuahua Pg: 6
6. Reemplazar un campo o campos con determinados datos bajo ciertos criterios, cambiar el tamao de la columna de cierto campo y cambiar de posicin un campo. 7. Y modificar ciertas caractersticas de visualizacin mediante la unin de ligas entre Edit y Browse. Para anexar (agregar un registro o rengln mediante el Browse) datos deber primeramente, poner en uso la base de datos, utilizar el Browse. Y como se dijo antes en el punto #3, presionar Ctrl+Y o elegir del men Table la opcin Append new record. As agregar un registro al final de la base de datos y se le permitir llenar los campos (columnas) con informacin o datos (esto depender del tipo de campo, por ejemplo, si el campo es de tipo numrico, como el sueldo del trabajador, los datos a introducir tendrn que ser numricos). Al llenar toda la extensin del campo, FoxPro se pasa al siguiente campo automticamente, esto ahorra tiempo. Browse agrega campos mediante una tabla o lista mostrando tantos registros o renglones como quepan en la ventana; en cambio Edit slo despliega registro por registro. Un error comn, es la introduccin de registros en blanco, incluso con espacios. Este registro se guardar, examine los datos para asegurarse de que no haya agregado registros o renglones en blanco. El comando BROWSE LAST se genera al activar el Browse mediante el men View, este comando puede ser til porque FoxPro guarda las definiciones de la ventana y el orden de los campos y sern desplegados como la ltima vez en que fue utilizado el Browse, an y cuando apague su computadora. Si desea eliminar un rengln o registro desde Browse o Edit, utilice la opcin Toggle deletion mark (nombrada en el punto #4), que se encuentra en el men Table. Al seleccionarla el registro en que se encuentra actualmente (puntero), ser marcado para eliminarlo posteriormente (de hecho no se elimina, solo es marcado); cuando se marca para ser borrado, el borde izquierdo se oscurece (podr marcar o desmarcar el registro mediante el ratn, dando un clic en esta rea). Con esta misma opcin podr desmarcar un registro
jofeque@[Link]
para ser eliminado, es decir, si un registro est marcado, al utilizar esta opcin se desmarcar; y si no est marcado se marcar. Existen comandos, que se vern ms adelante, los cuales toman en cuenta, para ciertas operaciones, o no a los registros marcados para ser borrados. Los registros marcados para eliminacin de hecho no se borran, hasta que usted elige la opcin Remove deleted record del men Table al estar usando Browse (nombrado en el punto #5). Esta opcin utiliza el comando PACK, el cual empacar el archivo dejando slo los registros que no estn marcados para ser borrados, este proceso comprime el archivo dejndolo con un tamao ms pequeo que el original. Si est trabajando con un archivo grande que tenga demasiados registros, el proceso llevar algn tiempo y sera muy molesto estar empacando cada vez que se elimina un registro. Por lo tanto, utilice PACK slo cuando sea necesario. Por ltimo, existe un comando muy peligroso, ZAP. Este comando borra fsicamente, de la base de datos, todos los registros. Estos registros se irn para siempre y no los podr recuperar, debe ser utilizado con mucha precisin. Es equivalente a introducir los comandos DELETE ALL y PACK, excepto que ZAP trabaja ms rpido. Normalmente FoxPro pregunta si desea borrar todos los registros si se activa con SET SAFETY ON. Prctica # 4 1. Poner en uso la base de datos empleados (mediante el men File o el comando USE en la ventana Command) 2. Activar el Browse mediante el men View o con su comando en la ventana Command. As se abrir una ventana nueva en la cual podr editar la base de datos en uso (EMPLEADOS) 3. Agregue un registro o rengln mediante el men Table o presionando CTRL+Y, as se agregar un registro en blanco al final de la base de datos. De esta forma la ventana del Browse le permite teclear datos en cada una de las columnas (campos). Desde el men View existe la opcin Append Mode la cual, si se activa, permite entrar en modo de
CBTis 122 / Chihuahua Pg: 7
agregar automticamente registros. As, cuando un registro es agregado e introducido sus datos, otro registro en blanco se agrega al final despus de registro actual, despus de teclear los datos en el registro actual, pase al siguiente, si est en Browse, mediante la tecla FLECHA ABAJO y si activ el Edit, pasar automticamente al presionar ENTER en el ltimo campo de la base de datos. Recuerde que si se cierra la ventana, y no se han introducidos datos al registro agregado automticamente con el Append Mode activo, dicho registro no se guardar. 4. Agregue al menos otros 4 registros con datos ficticios o inventados, llene todos los campos o columnas. Cuando introduzca una fecha no teclee el signo de divisin que separa al da, mes y ao. Los campos lgicos slo admiten los datos F o T. Los campos de tipo Memo se editan presionando CTRL+PGDN o dando doble clic sobre este. Al editar un campo Memo se abre una ventana con el ttulo de la base de datos seguida del campo editado; el texto contina automticamente en el siguiente rengln, cuando se llega a la orilla de la ventana; el texto se justifica dependiendo del tamao de la ventana, es decir, podr modificar su tamao mediante el ratn o maximizndola; cuando termine de editar un campo Memo en la ventana de edicin, termine esta con CTRL+W; observe que la palabra Memo tiene una M mayscula, es decir, el campo tiene datos y no est vaco. 5. Cuando haya introducido los registros, finalice la edicin cerrando la ventana o presionando CTRL+W o CTRL+END. Recuerde que la base de datos an est en uso; aunque haya seleccionado Close del men File, slo se cerr la ventana actual y no la bse de datos. Para cambiar o editar los datos use las teclas convencionales de edicin. Primero deber elegir el registro a editar, desplazndose hacia arriba o abajo mediante las flechas de movimiento, utilizando las barras de desplazamiento o presionando varias veces PGDN. Luego posicinese en el campo o columna a editar
jofeque@[Link]
y teclee el dato nuevo sobre escribiendo el existente o editndolo. Esto, tambin, se utiliza al corregir errores de captura. Browse permite examinar los datos de una manera rpida. Puede utilizar el ratn para cambiar el ancho de la columna que despliega un campo determinado, de un clic sostenido en la orilla del encabezado del campo y arrstrelo hasta obtener el ancho deseado. Tambin puede cambiar el orden de los campos, dando un clic sostenido sobre el encabezado del campo y movindolo a la nueva posicin. El apuntador lo mantiene informado acerca del registro activo cuando se le esta cambiando o examinando, es decir, es donde se encuentra el cursor. Cada registro es enumerado en forma secuencial de acuerdo como se vayan introduciendo; el primer registro ser el nmero 1, y as sucesivamente. Existe una barra de estado la cual se despliega en la parte inferior de la ventana principal de FoxPro, la cual muestra el nombre del archivo en uso, seguido por el nmero del registro activo y el total de registros en el archivo de la base de datos. Puede activar la barra de estados mediante el comando SET STATUS ON y SET STATUS BAR ON, estos comandos muestran la barra o no de estado, el primer comando basada en caracteres y el segundo en forma grfica. Es posible mover el apuntador (estando en la ventana de Browse) a un determinado registro mediante el men Table y opcin Go to Record (visto en la parte 2 del punto 1.7) Las opciones son: Top. Mueve el apuntador al primer registro de la base de datos, es decir, al inicio (En la ventana del Command se agrega GO TOP) Bottom. Mueve el apuntador al ltimo registro, es decir, al final (GO BOTTOM) Next. Mueve el apuntador al siguiente registro (SKIP), cuando nos encontramos en el registro final, el apuntador permanece en el mismo. Previous. Posiciona el puntero en el anterior registro (SKIP 1). Record #. Podemos indicar el nmero del registro fsico a posicionar el puntero (GO [RECORD] <registro_nmero> o
GOTO [RECORD] <registro_nmero>) Locate. Mediante cierto alcance (Scope: All todos-. Next dentro de los siguientes-, Record determinado nmero de registro y Rest de aqu en adelante o el resto) podemos posicionar el puntero cuando una condicin se cumpla (For) o mientras una condicin sea verdadera (While).
jofeque@[Link]
NODELETE y no se puede utilizar CTRL+Y para agregar un registro al final de la base de datos NOAPPEND. BROWSE NOMBRE, DOMICILIO, ESTATURA FOR ESTATURA >= 1.65 FONT TAHOMA,10 FREEZE ESTATURA Visualiza los registros que cumplan con la condicin de que la estatura sea mayor o igual a 1.65 ( - FOR - los nmeros no se colocan entre comillas, solo los datos tipo caracter). Se indica que se utilice en el desplegado la fuente TAHOMA tamao 10 (FONT). El cursor slo puede ser posicionado en ESTATURA (FREEZE)
jofeque@[Link]
1. Candidate. No puede tener valores nulos o duplicados. 2. Unique. ndice que no permite que dos registros tengan el mismo valore de la expresin del ndice. 3. Regular. No es ni candidato ni primario, utilice este tipo de ndices para no forzar a que la base de datos tenga registros nicos en su expresin. Y tambin, cuando utilice relaciones de uno a muchos. Para crear un ndice puede realizarlo desde la definicin de la estructura de la base de datos o mediante instrucciones o comandos. En la pestaa de Indexes, cuando define la estructura de una base de datos usada en forma exclusiva, le podr modificar o agregar ndices, especificando primero el nombre de la etiqueta interna que identificar al ndice (name); su tipo, aqu utilizaremos el regular (visto anteriormente); la expresin que se utilizar para el orden incluir un campo, campos u operaciones con estos, para definirla, de un clic al botn situado a la derecha de la expresin e ir al cuadro de dilogo del Constructor de expresiones (Expression Builder); y por ltimo un filtro que incluir en el ndice a los registros que cumplan con cierta condicin, esta opcin no la utilizaremos. Prctica # 5 Crear dos ndices, uno por el campo nombre y otro por el domicilio; ambos tendrn el mismo nombre del campo como etiqueta interna. 1. El primer paso es la utilizacin de la base de datos EMPLEADOS en forma exclusiva, mediante comandos tecleados en la ventana Command. 2. Modificar la estructura mediante su comando teclendolo en la ventana Command 3. En el cuadro de dilogo de modificacin de estructura, dar un clic en la pestaa Indexes para entrar a la creacin de los dos ndices; teclear la etiqueta interna de nombre (el nombre de la etiqueta interna no es significativo entre minsculas y maysculas, FoxPro convertir las etiquetas a maysculas posteriormente) en la columna name. Cuando se teclea un nombre, FoxPro
jofeque@[Link]
Los ndices compuestos estructurales se abren automticamente cuando la base de datos se pone en uso. Se le da el mismo nombre de la base de datos con la extensin CDX. Un ndice se actualiza al momento de introducir datos o cada vez que este se empaca. Los tipos de ndices de acuerdo a su expresin, son:
4. 5.
6.
7.
8.
permite especificar el orden (order, identificado por una flecha, por omisin es ascendente), tipo (aqu siempre utilizaremos el regular) y la expresin (como indicamos en le primer punto, crearemos un ndice para ordenar los registros por nombre y otro por domicilio; por lo tanto, la expresin para el primero ser el campo nombre y para el segundo el campo domicilio). Dejar el orden por omisin (ascendente) Dar un clic al botn situado a la derecha de expression. En la parte inferior del constructor de expresiones, se encuentran todos los campos de la base de datos en uso. De dos clic al campo nombre para que en la parte superior (expression) aparezca el nombre del campo elegido. Observe que podr hacer operaciones con funciones involucrando o no a los campos, estas funciones estn divididas en: de cadena, numricas, lgicas y de fecha. Puede teclear la expresin en la parte superior del constructor de expresiones sin tener que elegir los campos de la parte inferior; o ms sencillo. Desde el cuadro de dilogo al modificar la estructura, en la pestaa indexes, podr teclear directamente la expresin sin entrar al constructor de expresiones. De un clic al siguiente rengln para anexar otro ndice, el cual contendr el nombre o etiqueta interna de domicilio y la expresin domicilio. Al momento de guardar los cambios y una expresin contiene errores, FoxPro nos indicar que no puede evaluar determinada expresin. Podr eliminar un ndice, posicionndose en el rengln de este y dando un clic al botn Delete. Una vez introducidos los dos ndices, de un clic al botn OK y confirme que si proceden los cambios a la modificacin de los ndices. Para poder visualizar que los registros estn en orden de acuerdo a los dos ndices que hemos creado, de un BROWSE a la base de datos. Dentro del Browse, eligiendo del men Table la opcin Propierties podr especificar el orden activo (Index order), el cual en primera instancia se encuentra sin orden. Si da un clic a esta persiana observar que en la parte inferior se
encuentran los dos ndices que creamos. Elija el de Nombre y de un clic a OK. 9. Visualice que la distribucin de los registros en el Browse apareci ordenada por el nombre. Si no ve la columna nombre, desplcese por el Browse. Podr especificar otro orden o sin orden en el men Table opcin Propierties. 10. Cierre la ventana Browse y la base de datos.
La anterior prctica puede realizarse mediante comandos en la ventana Command, pueden utilizarse los siguientes: USE EMPLEADOS EXCLUSIVE. Utiliza la base de datos EMPLEADOS de forma exclusiva. Es necesario la utilizacin en forma exclusiva cuando va a realizarse una modificacin en la estructura o creacin o modificacin de un ndice. MODIFY STRUCTURE. Permite entrar al cuadro de dilogo para modificar estructura e ndices. Si no est en uso una base de datos, FoxPro no pedir que eligamos una. Si no se uso en forma exclusiva, el cuadro de dilogo no permitir modificacin alguna y en la parte superior indicar que es [Read Only] (slo lectura). Para la creacin de un ndice tipo CDX teniendo en uso y en forma exclusiva una base de datos, utilice el siguiente
jofeque@[Link]
formato INDEX ON <expresin> TAG <etiqueta_interna> [ASCENDING 1 DESCENDING] [UNIQUE] [CANDIDATE]. La expresin especifica el nombre de un campo o campos de la actual base de datos. El argumento etiqueta_interna se refiere al nombre con que ser conocido el ndice al tratrsele, deber empezar con una letra o guin bajo de hasta 10 caracteres; se recomienda utilizar el nombre del campo o primer campo. ASCENDING o DESCENDING permiten especificar el tipo de orden ascendente (por omisin) o descendente. Con UNIQUE tomar en cuenta slo al primer registro que encuentre de acuerdo a la expresin y CANDIDATE previene valores duplicados, generando FoxPro un error si existen actualmente en la base de datos valores duplicados al crear este tipo de ndice o al tratar de introducir datos en el campo como expresin. Los ndices se crean y anexan al archivo CDX conforme se teclee el comando INDEX. Para eliminar un ndice, utilice DELETE TAG <etiqueta_interna>; con esto quitar un ndice del archivo CDX. Con DELETE TAG ALL son eliminados todos los ndices CDX y el archivo del disco. SET ORDER TO [<etiqueta_interna> 1 <nmero_de_ndice>] especifica el orden activo o ndice controlador para la base de datos actual. Podr utilizar el nombre dado a la etiqueta interna o el nmero de ndice de acuerdo a como fueron creados (SET ORDER TO 1 para nombre y SET ORDER TO 2 para domicilio), para definir que orden prevalece o especificar SET ORDER TO 0 para especificar ningn ndice u orden activo (los registros sern tratados en el orden natural, es decir, en el orden en el cual fueron introducidos). Podr especificar un orden y utilizar BROWSE para corroborar el cambio, volviendo a especificar otro ndice y regresar al BROWSE. No hay que preocuparse por el mantenimiento de los archivos ndice. Cada vez que se abre una base de datos y su ndice, estos se actualizan cuando se agregan o editan datos. Sin embargo,
en ocasiones los ndices pueden daarse, que no estn actualizados o que se modifique al archivo base de datos sin utilizar el archivo ndice; para reconstruir el archivo ndice, utilice REINDEX. Con esto se actualiza todos los ndices que pertenecen a la base de datos abierta en el rea actual. Mediante CLOSE DATABASES podr cerrar todos los archivos base de datos e ndices, y establecer el rea actual a la 1 (Podr utilizar USE sin argumento para cerrar la base de datos del rea actual).
Hemos aprendido a crear ndices mediante el cuadro de dilogo Propiedades de la Tabla y con la utilizacin de comandos en al ventana Command, podr utilizar el mtodo deseado; pero el ltimo, mediante comandos, es el ms sencillo.
2.3 Expresiones
Existen ocasiones en que se desea elaborar un ndice en base a una expresin, y no sobre un campo(s). Una expresin, como se dijo anteriormente, puede incluir varios elementos: 1. Nombres de campo. Por lgica, son los nombres que se da a los campos en una base de datos, por ejemplo NOMBRE o DOMICILIO. Los nombres de todos los campos aparecen en el Expression Builder 2. Variables de memoria. Son tiles, primordialmente en la programacin. No se recomienda usar en los ndices: variables, arreglos o expresiones de campos de otra tabla. 3. Constantes. Son letras. nmeros o fechas do cambia. Las constantes incluyen delimitadores al definirse, de acuerdo al tipo de dato, y son: a. Constante de caracter. Se deben encerrar entre comillas dobles o sencillas. b. Fecha. Deben encerrarse entre llaves {}
jofeque@[Link]
c. Nmero. No se utiliza ningn delimitador, tan slo el nmero. 4. Funciones. En el cuadro de dilogo del Constructor de Expresiones, se despliegan los cuatro tipos de funciones: matemticas, de cadena, numricas y de fecha. Estas generan un valor y algunas reciben uno o ms argumentos. 5. Operadores. Ejecutan operaciones de suma + (adicin), resta - (sustraccin), multiplicacin *, divisin /, exponenciacin ^ o ** y agrupamiento (). Prctica # 6 Utilice el comando ? para desplegar resultados de una expresin precedidos por una lnea nueva. Incluso puede hacer operaciones matemticas con ?, por ejemplo, teclee ? 8*5, FoxPro desplegar el resultado de la multiplicacin. 1. En la ventana de Command, teclee ? para saltarse una lnea. 2. Utilice ? UPPER(esto es una prueba) para que FoxPro despliegue en pantalla ESTO ES UNA PRUEBA. La funcin UPPER(expresin) regresa la expresin caracter en maysculas; como esta slo recibe expresiones tipo caracter, estas debern ir entre comillas si no son una variable o campo. Lo contrario a UPPER es LOWER(); PROPER() regresa la cadena con la primera letra de cada palabra en maysculas, utilcelos en ejemplos. Algunas funciones no reciben argumentos y dependen del sistema, como DATE(), TIME(), PI(). Utilice SET DATE TO [ANSI 1 AMERICAN 1 YMD 1 DMY ] para especificar el formato en que las expresiones de fecha y tiempo son desplegadas. Con SET CENTURY [ ON | OFF ] se especifica si FoxPro interpretar las fechas a 4 o 2 dgitos. Despliegue la fecha con DATE() para ver los cambios. 3. Para ejemplificar la diferencia entre un nombre de campo y una variable enviada como argumento, use la base de datos EMPLEADOS y teclee en la ventana de Command ? UPPER(domicilio). En este caso, domicilio es tratado como campo y no como variable; si domicilio lo coloca
entre comillas, se desplegara DOMICILIO. 4. Existen un grupo de funciones que convierten los datos tipo caracter en datos numricos y viceversa. Por ejemplo, si por una extraa razn, alguna vez quisiera ejecutar un clculo y usar un cdigo postal, no lo podra ejecutar porque este campo es de tipo caracter. Aqu utilizaremos la funcin VAL(<exp_caracter>), la cual convierte la exp_caracter a nmeros. Pruebe con ? cod_postal y ? VAL(cod_postal)+100, cul es la diferencia? Qu resulta de ? VAL(88A) y de ? VAL(88A8)?. Recuerde que esta en uso el archivo EMPLEADOS. Lo contrario a VAL es STR(<exp_num>[,<longitud>[.<deci males>]]) que convierte una expresin tipo numrica a caracter con determinada longitud total y a tantas decimales (obvio que los decimales no pueden ser mayor a la longitud). Intente con ? STR(10), con ? STR(10,8,4) y con ? STR(estatura,7,2). 5. Para concatenar cadenas se utiliza el signo +. En la ventana de Command teclee: ? Hoy es + DATE(). Visual FoxPro nos remite al error de que los tipos de datos no corresponden, es decir, los datos que intentamos concatenar son de diferente tipo. Hoy es es de tipo catacter y DATE() es de tipo fecha; por lo tanto FoxPro no los puede unir. DTOC(<fecha>) permite convertir un dato tipo fecha en caracter (dependiendo de SET CENTURY y SET DATE TO); DTOS(<fecha>) convierte una fecha en cadena con formato aaammdd (no afecta SET CENTURY y SET DATE TO); para resolver lo anterior utilice ? Hoy es +DTOC(DATE()). CTOD(<cadena>) convierte una cadena a un dato tipo fecha, la cadena deber estar entre comillas o ser una variable o campo, estar afectada por SET CENTURY y SET DATE TO; pruebe con ? CTOD(25/2/2001). 6. DAY(<fecha>), MONTH(<fecha>) y YEAR(<fecha>) generan, respectivamente, el da, mes y ao de un dato tipo fecha. Pruebe con ? Fecha_nac, con ? DAY(fecha_nac), con ? MONTH(fecha_nac), con ?
jofeque@[Link]
YEAR(fecha_nac), con ? CMONTH(fecha_nac), con ? DOW(fecha_nac), con ? CDOW(fecha_nac) y con ? WEEK(fecha_nac),. Qu devuelven las 4 ltimas funciones y ? YEAR(DATE()) ?. Cuando desee realizar un clculo sobre una fecha y no la tenga en un campo, utilice las llaves para especificar un tipo fecha. Como en: ? year({^2001/5/7}). Note que los datos que no son tipo fecha se definen en formato aaaa-mm-dd, antecedindoles el acento circunflejo; independientemente del formato de SET DATE TO o SET CENTURY.
3. 4. 5. 6.
(nombre y fecha_nac) y estar ordenado por fecha de nacimiento. El comando SET SAFETY ON previene que un archivo existente, no sea sobrescrito; si SET SAFETY est en OFF, FoxPro no confirmar la sobre escritura. Cierre la base de datos EMPLEADOS Abra [Link] Corrobore con BROWSE de que FIESTAS contiene slo dos campos y est ordenada por fecha_nac. Cierre la base de datos
2.4 Ordenamiento
Un ndice cambia aparentemente el orden de los registros, el orden de la base de datos sigue siendo la misma. Sin embargo es posible cambiar el orden de los registros utilizando el SORT, Con esta instruccin se crear un nuevo archivo de base de datos en el cual los registros estarn ordenados de acuerdo a nuestro criterio. La sintaxis de este comando es SORT TO <archivo_nuevo> ON <campo1> [/A] [/D] [/C] [, campo2> [/A] [/D] [/C]] [ASCENDING] [DESCENDING] [FIELDS <campos>]. Donde archivo_nuevo es el nombre de la base de datos nueva a crear con el orden especificado En <campo1> en forma /A ascendeten, /D descendente y/o /C ignorando maysculas de minsculas (podr hacer combinaciones de /AC o /DC). O a nivel general, ASCENDING en orden ascendente o DESCENDING en orden descendente. Si se incluye FIELDS se especifica que campos sern copiados a la nueva base de datos. Prctica # 7 Usando la base de datos EMPLEADOS, crear otra base de datos de nombre FIESTAS. Esta base de datos contendr nicamente el nombre del empleado y su fecha de nacimiento, pero, estar ordenada fsicamente por la fecha de nacimiento. 1. Desde la ventana de Command utilice la base de datos EMPLEADOS 2. Mediante el comando SORT TO fiestas ON fecha_nac FIELDS nombre,fecha_nac. Esto crear un archivo [Link] con dos campos
CBTis 122 / Chihuahua Pg: 14
indicar que ha intentado ir ms all de donde existen registros. EOF() tambin regresa .T. cuando se trata de localizar algo bajo cierto criterio y ningn registro lo cumpli, y el apuntador est al final. Los operadores relacionales se emplean para hacer comparaciones. Se pueden utilizar para comparar nmeros, cadenas o fechas. El operador = es un ejemplo. Se pueden utilizar expresiones tales como Fecha_Nac={15/7/83}, Salario=15000 UPPER(Nombre)=Roberta Hernndezpara localizar registros en las cuales, los ejemplos cumplas con tales valores o la expresin sea verdadera. Los tipos de datos que se comparan, debern de ser del mismo tipo. Es posible usar operadores con varios tipos de datos; no se podr usar, UPPER(Nombre)={28/2/2001}; la parte izquierda del signo = es una expresin de tipo caracter y la expresin de la derecha es de tipo fecha. Pero cuando la comparacin es de diferente tipo, FoxPro desplegar un mensaje de error. La comparacin UPPER(Nombre)=DTOC(fecha_nac) es correcta, se estn comparando dos expresiones de tipo caracter y no se desplegar error alguno. Aunque es obvio que no se localizar una persona con este nombre. Operadores = > < >= <= <> # != $ == relacionales Igual a Mayor que Menor que Mayor o igual que Menor o igual que Diferente a Contenido en (slo datos tipo caracter) Idntico a (slo datos tipo caracter)
FoxPro como otro mtodo para representar a not (no); si se usa en combinacin con el igual, representa no igual a. A excepcin de $ y ==,se puede utilizar estos operadores con datos de tipo caracter, numrico o de fecha. $ y == slo se usan en los datos tipo caracter. $ busca una subcadena. Por ejemplo, puede utilizar la expresin RAMONA $ Nombre para localizar los registros de las personas que se nombren RAMONA en cualquier punto del campo Nombre. == significa idntico a, no es igual que =, el cual quiere decir es igual a. Pruebe con ? ALEXANDRO=ALEX, esta expresin es evaluada por FoxPro como verdadera (.T.), pero ? ALEXANDRO==ALEX se evalua como falsa (.F.). SI introduce SET EXACT ON solo las cadenas idnticas regresarn verdadero (.T.) an y cuando utilice =. Con SET EXACT OFF se regresa al mtodo por omisin. Otra cuestin es que, FoxPro utiliza la segunda cadena como criterio y la compara con la primera. Primero usa ALEX como criterio y analiza ALEXANDRO para verifica que todas las letras en ALEX aparezcan, es verdadero. Pero con ? ALEX==ALEXANDRO desplegar .F.. Los operadores lgicos, en un sentido ms estricto, se utilizan para hacer comparaciones ms complejas, estos se muestran a continuacin:
.AND. Ambas mitades de la expresin deben ser verdaderas para que toda la expresin se evale como tal Una de las mitades de la expresin deber ser verdadera a fin de que toda se evale como tal La expresin que siga no debe ser verdadera para que toda la expresin se evale como verdadera Se emplea para agrupar
.OR.
.NOT. o !
El signo <> se utiliza en matemticas. # era comn en lenguajes antiguos compatibles con xBase per confunde a principiantes al tratar de leer Salario#10 como salario nmero 10 y no como salario diferente a 110, este signo es el igual atravesado con dos lneas verticales para mostrar que no es verdadero. ! se agreg a
CBTis 122 / Chihuahua Pg: 15
()
Puede omitir los delimitadores de la palabra con un punto a cada lado de esta-, sin embargo es til emplearlos para saber que se estn utilizando expresiones lgicas y hacer el lenguaje compatible con SQL.
jofeque@[Link]
Estos operadores se utilizan para construir expresiones complejas a partir de dos o ms expresiones lgicas. Por ejemplo, si quisiramos localizar los registros de los empleados que viven en la colonia guilas, se tendra que usar la expresin colonia=GUILAS; para localizar los de San Rafael, se usara colonia=SAN RAFAEL; para los que viven en cualquiera de ambas colonias se tendran que combinar las dos expresiones con un .OR. para crear as, la expresin compleja: colonia=[Link]. colonia=SAN RAFAEL. En el lenguaje diario se usa quiero un listado de los empleados de las guilas y San Rafael, pero tambin podra decir quiero un listado de los empleados de las guilas o de San Rafael; sin dar a entender ninguna diferencia en el significado. Sin embargo, cuando se trabaja con computadoras, tiene que usar .AND. y .OR. en el sentido lgico y preciso de las mismas. La expresin compleja colonia=[Link]. colonia=SAN RAFAEL, slo sera verdadera si ambas mitades fuesen verdaderas; cosa que es imposible, por supuesto. .AND. es exclusiva (ambas mitades deben de ser verdaderas al mismo tiempo; .OR. es inclusiva (la expresin es verdadera si cualquier mitad es verdadera, por lo que incluye ms registros). Por eso .OR. amplia las consultas y .AND. las reduce al ampliar los criterios. Por ejemplo, con SALARIO < 5000 .AND. YEAR(fecha_nac)>1975 reduce la consulta para que localice los registros en los cuales los empleados ganen menos de 5000 pesos de salario y hayan nacido posteriormente al ao de 1975. El .NOT. es ms obvio, invierte el significado de una expresin: .NOT. Colonia=SAN RAFAEL, listar todos los empleados de todas las colonias, excepto los de San Rafael. El uso de los parntesis en expresiones ms complejas, permite combinar expresiones lgicas con .AND. o .OR., creando as expresiones an ms complejas. Cuando las expresiones contienen ms de uno de estos operadores, es recomendable agruparlos
CBTis 122 / Chihuahua Pg: 16
mediante parntesis para indicar su prioridad. Por ejemplo, supongamos que queremos consultar los empleados que viven en la colonia San Rafael con cdigo postal 31060 y los de las guilas con cdigo postal de 31237. Para localizar los registros de San Rafael se usa: Colonia=SAN RAFAEL Cod_Postal=31060 Y para los de las guilas: Colonia=LAS GUILAS Cod_Postal=31237 .AND.
.AND.
Despus para localizar todos los registros que desee, combinara estas dos expresiones con un .OR. para obtener: (Colonia=SAN RAFAEL Cod_Postal=31060) (Colonia=SAN RAFAEL Cod_Postal=31060) .AND. .OR. .AND.
FoxPro evala todas las expresiones en el siguiente orden de prioridad, si se omiten los parntesis: 1. 2. 3. 4. 5. 6. 7. 8. Exponenciacin Multiplicacin y divisin Adicin y sustraccin Concatenacin de cadenas de caracter Operadores relacionales .NOT. .AND. .OR.
Las razones para estas prioridades son obvias, FoxPro tiene que evaluar las expresiones numricas antes de compararlas, como en el caso del operados =, evaluara la parte derecha y la comparar con la izquierda; si son iguales la expresin es verdadera, si no es falsa. De igual manera, los operadores relacionales estn por encima de los operadores lgicos. Es posible omitir parntesis, sin embargo las expresiones demasiados complejas se hacen difciles de leer, y por lo mismo aumenta la posibilidad de cometer errores.
de datos grande, las bsquedas seras tardadsimas si no se usar un ndice; por lo tanto es recomendable el uso de ndices, de acuerdo a la consulta que desea realizar.
consulta slo localizara los registros que vinieran despus de la ubicacin del apuntador y no aquellos que vinieran antes. Deber evitar el uso de WHILE y FOR a la vez. Si utiliza ambas, WHILE tiene prioridad. Prctica # 9 1. Utilice la base de datos [Link] 2. Cercirese que existan al menos 30 registros con diferentes nombres, los cuales inicien con la mayora de las letras. Si no existen, agrguelos mediante el comando BROWSE y regrese a la ventana Command 3. Consulte los empleados que vivan en la colonia Villa. 4. Consulte los que tengan como cdigo postal al 32000. 5. Despliegue mediante BROWSE y el argumento FOR los empleados que tengan nombres entre la C y la M. 6. Regrese a Command. Utilice dos opciones con FOR y WHILE para consultar los empleados cuyo nombre este desde la A hasta la M. Recuerde posicionarse en el primer registro con WHILE (utilice BROWSE en forma pura) 7. Cierre la base de datos
jofeque@[Link]
tosos los registros). NEXT (limitan a un nmero determinado de los siguientes registros). RECORD (a un nmero de registro especfico). REST (al resto de los registros desde la posicin actual) 2. FOR. LOCATE debe tener la clusula FOR. As se localizar el primer registro que cumpla con la condicin lgica especificada despus de FOR. Esa clusula podr definirla en su botn, para llamar al Constructor de Expresiones. 3. WHILE. Clusula opcional para limitar el nmero de registros. Cuando utiliza este cuadro de dilogo, se generan automticamente comandos en la ventana Command, los cuales simulan la seleccin e introduccin de datos en este cuadro de dilogo. Si ningn registro cumple con el criterio, FoxPro deplegar End of Locate scope. Si LOCATE FOR localiza un registro, pero adems desea ver el siguiente registro que satisfaga el criterio, utilice el comando CONTINUE. Este permitir continuar con la bsqueda en base al criterio del ltimo LOCATE utilizado. De igual manera, si ya ningn registro cumple con el criterio, se deplegar End of Locate scope.
(no existe un cuadro de dilogo para SEEK en Visual FoxPro). Recuerde que: 1. Las bsquedas mediante el SEEK se realizan en toda la base de datos, esto quiere decir que no comienzan desde el sitio donde se encuentra el apuntador. 2. Al utilizar el criterio o valor para el comando SEEK, piense con cuidado en la expresin exacta que se us en el ndice controlador (maysculas o minsculas y datos de diferente tipo). 3. No hay necesidad de utilizar CONTINUE con SEEK. Todo lo que necesita hacer es examinar el siguiente registro en la ventana de BROWSE, dado que se etpa utilizando un ndice mediante el campo llave y el siguiente registro que satisface el criterio (si lo hay) es el siguiente registro del archivo. 4. Si la bsqueda no fue exitosa, el apuntador se posicionar al final del archivo de base de datos. Pero si utiliza el comando SET NEAR ON antes de usar SEEK, el apuntador se coloca en el registro que se acerque ms al criterio del ndice. As EOF() y FOUND() regresarn falso. Prctica # 10 1. Abra la base de datos empleados 2. Cree un ndice por colonia con etiqueta colonia 3. Busque la primera colonia que empiece con la letra R 4. Verifique con el BROWSE la posicin del puntero 5. Realice una bsqueda de una colonia que no exista 6. Confirme la bsqueda infructuosa mediante la funcin EOF() y FOUND() Qu valores regresan? 7. Establezca con SET NEAR ON para que las bsquedas no exitosas posicionen al apuntador al registro cercano que satisfaga al criterio de bsqueda 8. Busque una la colonia que no exista en su base de datos y confirme, mediante BROWSE, que el apuntador se encuentra en la coincidencia ms cercana 9. Compruebe que EOF() y FOUND() regresan .F. por qu? 10. Cierre la base de datos
Los registros marcados para borrar son tomados en cuenta en los comandos de salida y en ocasiones, esto puede crear problemas. Por ejemplo, al utilizar la clusula FOR para localizar determinadas personas de un cdigo postal para hablarles por telfono, Visual Foxpro incluir los registros marcados para borrarse y puede que termine hablando a personas a quienes se supona las haba eliminado de la lista. Para eliminar este problema, podr utilizar el comando PACK que no es nada difcil, pero si la base de datos es muy grande tendr que esperar a empacar la base de datos docenas de veces si es que con frecuencia elimina registros, cosa que podra tardar horas. Otra forma es utilizar el comando SET DELETED ON en la ventana de comandos, con el cual los comandos que seleccionen registros no incluirn a ninguno que este marcado para borrarse. Y viceversa, si introduce SET DELETED OFF, los comandos si los incluirn. SET DELETED ON es confuso porque desactiva los registros eliminados, pero con recordar que este establece la caracterstica que borra los elementos eliminados, as puede comprender lo que esto significa. Tambin puede utilizar la funcin DELETED(), la cual regresa verdadero (.T.) si un registro est marcado para borrarse, de no ser as generar .F.. Por ejemplo, COPY TO NOBORRADOSDESR FOR Colonia=San Rafael .AND. .NOT. DELETED() usando la base de datos empleados. Con esto, FoxPro crear un archivo noborradosdesr, el cual contendr a los empleados de la colonia San Rafael y que cada registro no est marcado para ser eliminado. Como podr ver, FoxPro realiza la misma tarea de muchas formas. El lenguaje xBase creci de manera gradual con ms comandos y funciones que permiten efectuar acciones de manera ms conveniente. No hay necesidad de aprenderse todos, muchos de ellos realizan la misma tarea de distinta manera, segn prefiera el usuario. Tenga conciencia de ello
2.10 Filtros
Ya utiliz LOCATE y CONTINUE, SEEK, FOR y WHILE para realizar consultas de aquellos registros que satisfagan un criterio. Al establecer un filtro, todos los comandos subsecuentes no les ser necesario agregarles el criterio hasta que se elimine el filtro o se especifique otro. Con SET FILTER TO <expression_logica>, se crear un filtro y slo aquellos que satisfagan el criterio se usaran con cualquier comando que seleccione registros. El filtro no se desactivar hasta que se elimine el criterio, se establezca otro o se cierre la base de datos. Prctica # 11 1. Usando la base de datos empleado, despliegue mediante un BROWSE utilizando SET FILTER, los registros de los empleados que vivan solamente, en la colonia Santa Rosa. Podr crear un ndice con un filtro mediante la clusula FOR. De esta forma, slo los registros que satisfagan determinado criterio lgico. Por ejemplo, puede crear un ndice que incluya solo los registros de los empleados que vivan en la colonia Santa Rosa. Cada vez que se actualice la base de datos con dicho ndice activo, los registros se seguirn incluyendo en el ndice siempre y cuando sean de la colonia Santa Rosa. Para llevar a cabo este ejemplo, realice la siguiente prctica slo mediante comandos en la ventana Command. Prctica # 12 1. Use [Link] 2. Cree un ndice sobre el campo Nombre y que slo incluya a los de la colonia Santa Rosa. Realice lo anterior con INDEX ON nombre TAG nombresr FOR colonia=Santa Rosa 3. Verifique la creacin del ndice con el BROWSE, agregue registros diversos desde aqu, algunos con colonia igual a Santa Rosa y otros no.
jofeque@[Link]
4. Establezca el orden a 0 o a ningn ndice para consultar todos los registros. Verifique con BROWSE. 5. Establezca el orden a la etiqueta nombresr y verifique. 6. Elimine el ndice creado en el punto #2 7. Cierre la base de datos.
corresponde el registro de salario con dicho nmero. Si alguna vez cambia este valor, no podr seguir relacionando con los registros que se encuentran del lado muchos de la relacin. Por eso el campo llave debe ser un valor arbitrario, como el nmero del empleado y nunca un valor significativo (como el nombre) este podra duplicarse o cambiar. La normalizacin es evitar la repeticin, hay una teora completa acerca de ella. Pero la mayora de las aplicaciones en microcomputadoras, la normalizacin es casi un aspecto de sentido comn: slo tiene que buscar relaciones de uno a muchos. Relacin de muchos a muchos y de uno a uno. En algunas aplicaciones tambin existen relaciones de muchos a muchos, por ejemplo en la inscripcin de estudiantes, Cada estudiante tiene la posibilidad de tomar varias clases y cada clase puede incluir varios estudiantes. Se pueden utilizar tcnicas semejantes a la relacin de uno a muchos. Tambin existe la relacin de uno a uno, en un archivo pueden almacenarse los datos esenciales de una persona como el nombre y direccin y en un segundo archivo otros datos. Desde luego, esto no se hara normalmente. Siempre que exista relacin de uno a uno, es mucho ms fcil almacenar todos los datos en un solo archivo.
jofeque@[Link]
Puede moverse entre las reas y abrir un archivo diferente de base de datos en cada una de ellas. Para referirse a los campos, utilice sus respectivos nombres. No importa en cualquier rea se encuentre, podr utilizar los campos de cualquier archivo abierto en otra rea. Para hacer referencia a un campo de otra rea de trabajo se utiliza el operador de flecha -> o el punto; utilice el nombre del archivo o alias (algunos programadores abren los archivos con un alias para que sea ms sencillo el tratamiento en los programas, use el comando USE <nombrearchivo> ALIAS <nombrealias>, as podr referirse al archivo por su alias y no por el nombre. El operador del punto es el punto ortogrfico y el de flecha se compone de dos caracteres, el guin y el mayor que. Referencia mediante el punto: [Link] Referencia mediante la flecha: EMPLEADOS->salario Para abrir (USE <archivo>) un archivo de un clic al botn Open y se desplegar un cuadro de dilogo donde podr seleccionar un archivo. Para cerrar (USE) una base de datos seleccione de la lista de alias el archivo o rea a cerrar, de un clic al botn Close. Para seleccionar un rea de trabajo, eljala desde la lista de los alias en la parte izquierda de la ventana Data session. Puede moverse entre las reas mediante las teclas de flechas arriba y abajo, resaltando el rea deseada. Si da doble clic (oprimir el ENTER es su equivalente) en esta lista, llamar a la ventana BROWSE (esta opcin se encuentra en el men View y la de modificacin de la estructura Table designer). Podr especificar desde el botn e Propierties el ndice activo. Como podr darse cuenta, al seleccionar diferentes opciones de la ventana Data session, algunos comandos se anexan a la ventana Command.
2. Crear un ndice, sobre la base de datos EMPLEADOS, sobre el cdigo con etiqueta interna cdigo 3. Crear una base de datos, con nombre [Link], la cual contendr 3 campos, empleado, salario y fecha. 4. Agregue al menos cinco empleados con diferente cdigo, y en NOMINA agregue al menos tres registros para cada empleado (15) con diferente fecha y salario. 5. Cerrar las base de datos con CLOSE DATABASE 6. Continuar... Para conocer ms a fondo la manera en que se establece una relacin, considere el tipo de relacin de uno a muchos. Su archivo EMPLEADOS contiene un registro para cada empleado y el archivo NOMINA tendr varios registros por cada empleado. Cuando viaje a travs del archivo NOMINA, podr ver los datos correspondientes al archivo EMPLEADOS; mientras observa el salario pagado cada semana y la fecha de pago, tambin tendr a la vista el nombre de la persona que tiene ese nmero de empleado. Por lo tanto, usted deber colocarse en el rea de trabajo del archivo que pertenece al lado muchos de la relacin muchos a uno al momento de establecer la relacin y al utilizar la base de datos relacional. El archivo del lado uno de la relacin, debe indizarse sobre el campo llave (en este caso el cdigo del empleado); FoxPro necesita este ndice para buscar el nombre de la persona que tenga el mismo nmero del empleado que el registro actual del archivo NOMINA. El archivo del lado muchos es conocido como archivo controlador o padre. No podr tener acceso al archivo del lado muchos o NOMINA y registrar salarios para
jofeque@[Link]
empelados que no existan en el lado uno; de esta forma introducir salarios para una persona que no es empleado de la empresa. La continuacin de la prctica aclarar lo anterior. Primero establecer la relacin y observar como se mueven los apuntadores en el archivo de EMPLEADOS. Recuerde que los campos llaves de los dos archivos pueden o no tener el mismo nombre. Usted especifica el campo en el archivo del lado muchos y la relacin se establece dentro del campo en el cual el archivo del lado uno tiene como ndice activo. Prctica # 13a. 5. Mediante la ventana Data session abrir las base de datos EMPLEADOS en la primer rea de trabajo 6. Activar el ndice sobre el cdigo del empelado mediante el botn Propierties. Una flecha aparece al lado izquierdo del nombre de la base de datos, indicando que existe un ndice activo ascendente. 7. Abrir el archivo NOMINA en otra rea (esta no tiene ndice y no es necesario para una relacin de este tipo) 8. Con NOMINA, lado muchos, resaltada, dar un clic al botn Relations (al lado derecho aparece las relaciones activas), luego dar un clic sobre la base de datos EMPLEADOS, lado uno, y seleccionar, del cuadro de dilogo que aparece, el campo a relacionar de la base de datos NOMINA, lado muchos. 9. Al lado derecho de Data session aparece grficamente la relacin efectuada. 10. Continua... Para relacionar un archivo base de datos con otro, se deber tener las siguientes condiciones: 1. Los dos archivos debern estar en uso en diferentes reas de trabajo 2. Deber existir un campo, del mismo tipo y longitud, de referencia en cada uno de ellos que los una. 3. El archivo relacionado deber tener un ndice activo sobre ese campo(s) relacionado Observe que podr tener una relacin de uno a muchos y de muchos a uno, en el primer caso es de NOMINA a EMPLEADOS (prctica #13), y en el segundo es de
CBTis 122 / Chihuahua Pg: 22
EMPLEADOS a NMINAS. Ver todos los sueldas con su semana de pago para cada empleado y cada empleado con sus pagos, respectivamente. Cuando efectu la segunda parte de la prctica #13, algunos comandos se anexaron a la ventana Command. SELECT 1 USE EMPLEADOS ORDER CODIGO SELECT 2 USE NOMINA SET RELATION TO [Link] INTO EMPLEADOS SELECT <nmerodeareadetrabajo| alias> Permite especificar que rea de trabajo estar activa o que rea de trabajo activar que contenga una tabla en uso. Puede especificar de la letra A a la J como alias en las primeras 10 reas de trabajo. Al iniciar Visual FoxPro, el rea 1 es la que est activa. Si el nmero de rea de trabajo es 0; el nmero menor del rea de trabajo sin una base de datos en uso, se activa. Para acceder un campo de otra rea de trabajo, utilice el formato: [Link] o alias->campo. SET RELATION TO <campo> INTO <alias> Especifica el tipo de relacin que entrar en juego entre dos archivos. El campo deber estar en la base de datos activa y este ser buscado en el alias, colocando el puntero en la primera ocurrencia.
Prctica # 13b. 10. Para observar que la relacin entre los dos archivos se efectu correctamente. Utilice la ventana Data session la cual permitir dar un BROWSE a cada una de las reas. Al cambiarse de registro en el archivo de NOMINA, notar como un solo registro aparece en EMPLEADOS (el mismo nmero en el campo [Link] y [Link]). 11. Resalte el alias EMPLEADOS y de dos clic sobre el o un clic al botn Browse con EMPLEADOS resaltado 12. Regrese a la ventana Data session sin cerrar el primer Browse y resalte el alias
jofeque@[Link]
NOMINA y de dos clic sobre el o un clic al botn Browse con NOMINA resaltado. Viaje a travs de NOMINA y acomode las ventanas para visualizar que en el Browse de EMPLEADOS, el apuntador cambiar conforme nos movemos en NOMINA. Slo un registro se desplegar en el Browse EMPLEADOS y [Link] ser igual a [Link]. 13. Si desea ver el efecto, pero ms vistoso, seleccione el rea de trabajo de NOMINA y teclee el siguiente comando: BROWSE FIELD [Link], FECHA, SALARIO, [Link], EMPLEADO Observe que estamos en la base de datos NOMINA y esta rea est activa, por tal razn no es necesario indicar que los campos: fecha, salario y empleado son de NOMINA; pero los campos nombre y empleado pertenecen a EMPLEADOS, por tal razn debemos indicarle al Browse a quien pertenecen. Si no indicamos a quien pertenecen, obtendremos un error y VFP nos indicar que determinada variable no existe. 14. Cierre las base de datos y la ventana Data session. La siguiente prctica relacional la base de datos EMPLEADOS a la de NOMINA, es decir, realizaremos una relacin de uno a muchos y no de muchos a uno como la prctica #13. Para efectuar esto deberemos de crear un ndice sobre el campo empleado en la base de datos NOMINA, para que cuando se viaje sobre EMPLEADOS el VFP se posicione en la primera ocurrencia en NOMINA. Pero, como es una relacin de uno a muchosy estaremos sobre EMPLEADOS, existirn uno o ms registros en NOMINA para cada registro de EMPLEADOS. Para que la ventana BROWSE funcione correctamente, estando en el rea de EMPLEADOS, utilizaremos el comando SET SKIP TO <alias>. Este permitir que crear una relacin de uno a muchos, lo cual permitir observar todos los registros de la tabla que esta en el lado muchos. Recapitulando, SET RELATION TO establece una relacin entre tablas de
CBTis 122 / Chihuahua Pg: 23
diferentes reas de trabajo. Cuando el puntero se mueve en la tabla padre, el puntero de la tabla hijo se mueve a la primera registro que corresponda a la relacin. Aqu se crea una relacin de uno a uno. Si ningn registro es encontrado en la tabla hijo, el puntero en esta se mueve al final de la tabla. Frecuentemente la tabla hijo contiene mltiples registros que corresponden a un registro en la tabla padre. SET SKIP le permite establecer una relacin de uno a muchos; cuando se mueva en la tabla padre el puntero permanece en el mismo registro hasta que en la tabla hijo no encuentre ninguna relacin con el registro de la tabla padre Primero establezca una relacin de uno a uno con SET RELATION y luego use SET SKIP para crearla de tipo uno a muchos. Este ltimo comando permitir observar todos los registros en la tabla hijo sin cambiar de registro en la padre. Prctica # 14 1. Use las base de datos, dejando a EMPLEADOS como activa CLOSE DATABASE SELECT 1 USE EMPLEADOS ORDER 1 SELECT 2 USE NOMINA INDEX ON EMPLEADO TAG EMPLEADO SELECT 1 SET RELATION TO codigo INTO nomina 2. Para visualizar todos los pagos registrados en NOMINA para cada empleado, utilice lo siguiente: SET SKIP TO NOMINA BROWSE FIELD codigo, nombre, [Link], [Link], [Link] 3. Observe que si existen mltiples registros en NOMINA (archivo hijo), espacios en blanco sern creados debajo de los campos del archivo padre y son llenados o se sombrean. Algunas precauciones: Debi haber aprendido de la magnitud del dao que puede ocasionarse al
jofeque@[Link]
modificar el campo llave indizado en la base de datos que se estableci la relacin. Si se comete el error de eliminar un empleado o cambiarle su cdigo, se tendra que determinar a que empleado corresponden los movimientos de NOMINA que estn colgados de nada Nunca incluya el campo llave en una ventana Browse, se realiz la prctica anterior para visualizar su efecto
jofeque@[Link]
Smbolo Funcin A Slo caracteres alfabticos B Alinea datos numricos a la izquierda C CR despus de datos numricos D Activa a formato segn SET DATE E Estilo fecha tipo europeo I Centra el texto dentro de un campo J Alinea el texto a la derecha K Permite la edicin completa del campo L Ceros antes de los datos numricos M M<Lista> de opciones predefinidas R Despliega pero no almacena el formato S<n> Anchura de despliegue a <n> caracteres T Recorta espacios entre lneas X Base dbido despus de un nmero negativo Z Espacios en blanco en campos numricos a 0 ( Encierra nmeros negativos entre parntesis ! Convierte a maysculas $ Formato monetario Suponga que adems de pedir la edad de una persona(prctica anterior), se le solicitar su nombre y CURP con formato. Prctica # 15 1. En la ventana de Command escriba MODI COMM programa2 2. Cuando aparezca la ventana de edicin, teclee el siguiente programa: 3. Guarde el programa, para ejecutarlo escriba DO programa2 en la ventana
******************* *[Link] ******************* CLEAR
de Command. Cuando pruebe el programa, trate de utilizar letras minsculas en el nombre. Observe que el usuario puede moverse hacia delante y hacia atrs en los campos de nombre y edad. Pero estos se vuelven inaccesibles despus de ejecutarse el primer READ.
un ciclo. El cual desplegar una serie de wedad = 0 disparos de un juego primitivo. Observe la wnombre=SPACE(50) manera en que se colocan los mrgenes del @ 5,1 SAY Qu edad tienes? GET wedad PICTURE 99 programa. Dondequiera que tenga un ciclo, @ 6,1 SAY Tu nombre: GET wnombre PICTURE como el DO WHILE, deber poner sangra al @! READ CBTis 122 / Chihuahua jofeque@[Link] @ 8,1 SAY 25 siento, + PROPER(wnombre) Pg: Lo @ 9,1 SAY El prximo ao tendrs +STR(wedad+1)
cdigo que est dentro del ciclo. No afecta a FoxPro en la ejecucin del programa, pero hace mucho ms fcil que usted entienda el cdigo. Cmo funciona exactamente el programa? Primero se crea la variable wcol, la cual ser un contador que almacenar los nmeros de la columna que se utilice en el programa. Debe de definirse esta variable antes de que el DO WHILE la utilice. Si la variable tiene como valor inicial 0, la expresin lgica del DO WHILE es verdadera y el cdigo dentro del ciclo se ejecuta. Se limpia la pantalla. Se utiliza el comando SAY para desplegar el caracter > en el rengln 10 columna 0 (ya que el valor 10,wcol es 10,0 en este caso a lo largo del ciclo). Despus el programa incrementa esta variable en uno, asignndole mediante el igual el valor actual de wcol+1. Luego el programa llega al ENDDO y lo enva de nuevo a la parte superior del ciclo, donde se verifica la condicin que sigue al DO WHILE una vez ms. Debido a que wcol es igual a 1, la condicin an es verdadera y el ciclo continua. Cuando wcol es igual a 79 se imprime el caracter > en la coordenada 10,79 y se incrementa en uno a esta variable llegando a 80 y la condicin del DO WHILE es falsa, por lo que el cdigo dentro del ciclo no se ejecuta y se transfiere el flujo a la siguiente lnea del cdigo despus del ENDDO. Prctica # 16 1. Crear y ejecutar un programa llamado programa3
******************* *[Link] ******************* wcol_ctrl = 0 CLEAR DO WHILE wcol_ctrl < 80 @ 10,wcol_ctrl SAY > wcol_ctrl=wcol_ctrl+1 ENDDO WAIT
ser ejecutado mientras su valor sea menor a 20. Existen dos ciclos intermedios, el primero despliega el signo el rengln wren wren desde la columna 0 a la 79. Observe que antes ******************* del ciclo, *[Link] *ejemplo que recorre una base de datos wcol se ******************* le asigna 0 para SET DEFAULT TO A: que este USE EMPLEADOS ORDER 1 sea
CLEAR ? ? ******************* DO *[Link] .NOT. EOF() ? PROPER(empleados) ******************* SKIP CLEAR wren = 0 ENDDO ? DO WHILE wren<20 wcol = 0 USE WAIT DO WHILE wcol < 80 @ wren,wcol SAY > wcol = wcol + 1 ENDDO wtiempo = 0 DO WHILE wtiempo < 1000 Wtiempo = wtiempo + 1 ENDDO ENDDO
ejecutado por primera vez, si no se hiciere esta asignacin, este ciclo no se ejecutara; el siguiente ciclo es para detener el programa un tiempo, manejado por la variable wtiempo la cual forzar a que se incremente a mil veces, permitiendo retardar el ciclo principal para que sea percibido por el usuario. Prctica # 17 1. Crear y ejecutar un programa llamado programa4 Por ltimo utilizaremos el ciclo DO WHILE con una base de datos. Recorreremos el archivo EMPLEADOS utilizando la funcin EOF(), que regresa .T. hasta que el apuntador se encuentra despus del ltimo registro de la base de datos. As se desplegarn en pantalla todos los nombres. Prctica # 18 1. Crear y ejecutar un programa llamado programa5 En este programa, todo el archivo de EMPLEADOS es ledo y se despliega el
jofeque@[Link]
El anterior programa muestra ciclos anidados complejos, adems de cambiar la columna, se modificar el rengln donde ser desplegado el signo > en toda la pantalla. El ciclo principal lo maneja wren y
CBTis 122 / Chihuahua Pg: 26
nombre del empleado. El comando SKIP sita el puntero en el siguiente registro de la base de datos EMPLEADOS. La sintaxis es SKIP [<nregistros>] [IN <area> | <alias>]. As como EOF(), la funcin BOF() regresa verdadero si el puntero est colocado al inicio de la base de datos (se le puede indicar como argumento opcional el rea o el alias). Este programa equivale a la utilizacin del comando LIST (lenguaje de cuarta generacin) en lugar de tener que escribir todo el programa. La seleccin es uno de los tres mtodos en el flujo de control de un programa y existen dos comandos bsicos. Cuando slo hay una o dos opciones, es ms conveniente utilizar el IF ... ELSE ... ENDIF. Cuando se tiene un gran nmero de opciones, es conveniente emplear el comando DO CASE ... ENDCASE. El formato de IF ... ELSE ... ENDIF, es sencillo y fcil de entender: IF <exp_lgica> [ELSE ] ENDIF Los puntos suspensivos representan cualquier nmero de lneas de cdigo. Si la expresin lgica es verdadera, el cdigo que sigue a IF se ejecuta, si es falsa, el cdigo que sigue a la clusula ELSE se ejecuta. Como lo indican los corchetes [], este comando se puede utilizar sin la clusula ELSE. En la forma: IF <exp_lgica> ENDIF As el cdigo se ejecuta si la expresin lgica es verdadera. Si el usuario no oprime S el programa no preguntar si se desean desplegar los nombres en maysculas, ni el ciclo interno. Dentro de este ciclo, la variable wresp2, que se utiliza para saber la respuesta del usuario al uso de maysculas, se evalua dentro del ciclo y segn su valor, se
CBTis 122 / Chihuahua Pg: 27
imprimen los nombres o no en maysculas. Observe que este programa puede contener dos ciclos internos al IF, uno para el desplegado de nombres en minsculas y otro para maysculas. La nica diferencia es que el cdigo es ms conciso en la forma original. Prctica # 19 1. Crear y ejecutar un programa llamado programa6
******************* *[Link] ******************* SET DEFAUL TO A: CLEAR USE EMPLEADOS ORDER 1 WAIT Desea listar los empleados? TO wresp IF UPPER(wresp)=S WAIT En maysculas TO wresp2 ? DO WHILE .NOT. EOF() IF UPPER(wresp2)=S ? UPPER(nombre) ELSE ? PROPER(nombre) ENDIF SKIP ENDDO ENDIF ? USE WAIT
El comando DO CASE ...ENDCASE es til, cuando existe un mayor nmero de opciones. Es posible utilizar el IF ... ELSE ... ENDIF para elegir mltiples opciones y anidar otro IF dentro de otro; siendo muy difcil la lectura del programa. DO CASE funciona como una escalera del IF/ENDIF. El programa mira a lo largo de las
******************* *[Link] ******************* wnum=0 CLEAR @ 5,1 SAY Teclee un nmero entre 1-3 GET wnum READ DO CASE CASE wnum=1 @ 6,1 SAY Tecleaste el uno CASE wnum=2 @ 6,1 SAY Tecleaste el dos jofeque@[Link] CASE wnum=3 @ 6,1 SAY Tecleaste el tres OTHERWISE @ 6,1 SAY Error, solo entre 1-3 ENDCASE
instrucciones DO CASE para encontrar si una es correcta; si es as se ejecutan las instrucciones que siguen al CASE. OTHERWSIE funciona como un ELSE del CASE, si es que ninguna condicin es verdadera se ejecuta las instrucciones seguidas al OTHERWISE. Si el DO CASE no contiene OTHERWISE y ninguna condicin es verdadera, no se ejecuta cdigo alguno. Prctica # 20 1. Crear y ejecutar un programa llamado programa7 EXIT y LOOP son dos comandos que pueden estar dentro de un ciclo, as puede crear ciclos infinitos en forma deliberada y utilizar EXIT para irrumpirlos haciendo el control del ciclo ms explcito. EXIT envia el control hacia la siguiente instruccin del ENDDO. LOOP regresa el control a la instruccin DO WHILE. Esto hace posible regresar al principio del ciclo sin tener que usar algunos comandos que estn en l. Es ms claro colocar un EXIT dentro del ciclo en lugar de una condicin despus del DO WHILE. Usted puede crear un ciclo infinito; por ejemplo DO WHILE 1=1. Sin embargo para ahorrar ms problemas al programa y hacerlo ms elegante, utilice DO WHILE .T. Prctica # 21
******************* *[Link] ******************* DO WHILE .T. wnum=0 CLEAR @ 5,1 SAY Teclee un nmero entre 1-4 GET wnum READ DO CASE CASE wnum=1 @ 6,1 SAY Tecleaste el uno CASE wnum=2 @ 6,1 SAY Tecleaste el dos CASE wnum=3 @ 6,1 SAY Tecleaste el tres OTHERWISE @ 6,1 SAY Error, solo entre 1-3 ENDCASE WAIT Quiere continuar TO wsino IF UPPER(wsino)=S LOOP ELSE EXIT ENDIF ENDDO CBTis 122 / Chihuahua Pg: 28
1. Crear y ejecutar un programa llamado programa8 Observe que el comando LOOP no se necesita; el programa llevara a cabo el ciclo de todos modos al alcanzar el ENDDO. Puede escribir la condicin final como sigue:
WAIT Quiere continuar TO wsino IF .NOT. UPPER(wsino)=S EXIT ENDIF
Y el programa se ejecutara de la misma manera. LOOP es conveniente al estilo de hacer un programa. En otros casos, LOOP se utiliza para saltar algunos comandos dentro de un ciclo DO WHILE.
control del programa regresa a la instruccin que llam a ese mdulo, puede cambiar ese campo de accin con dos comandos sencillos de utilizar: PRIVATE <lista varmem> Limita la disponibilidad de las variables para el programa activo y para los mdulos llamados por l en forma directa o indirecta. Si un mdulo llama a un PRG y tiene una variable con el mismo nombre, FoxPro la considera una variable diferente PUBLIC <lista varmem> Hace que las variables estn disponibles para todos los programas y procedimientos. Se recomienda utilizar este comando en el mdulo que se encuentre en el nivel ms alto desde donde se empiezan a utilizar las variables. Adems de las dos alternativas anteriores, hay varias situaciones en las que se desea que las variables estn disponibles slo por dos mdulos. El mdulo invocador le pasar el valor de una variable al mdulo que llama, este utilizar el comando PARAMETER <lista varmem>, como primer comando de este mdulo. Para pasar un parmetro a este mdulo al llamarlo, se utiliza el comando DO ... WITH de acuerdo a las variables de memoria por recibir con PARAMETER. Intente escribir un procedimiento que despliegue en maysculas la primera letra de una cadena. Como sabe PROPER() convierte la primer letra de cada palabra en maysculas, pero no tiene una funcin para colocar la primer letra de una cadena.
******************* *[Link] ******************* PARAMETER wcadena PRIVATE wresultado wresultado=UPPER(SUBSTR(wcadena,1,1)) wresultado=wresultado + LOWER(SUBSTR(wcadena,2) ? wresultado RETURN
llamado
Es fcil ver como funciona el programa, para ejecutarlo, como se dijo antes, se tiene que hacer con el formato DO ... WITH, entonces teclee en la ventana de Command: DO mayprimerletra WITH Conoces a Julio! EL programa mayprimerletra recibe como parmetro la cadena Conoces a Julio! y la almacena en la variable privata wcadena, que ser utilizada slo en este programa. Observe que el primer comando de mayprimerletra deber ser PARAMETER. Este mdulo crea una segunda variable de trabajo wresultado la cual almacenar inicialmente la primer letra de la cadena pero en mayscula. Mediante la funcin SUBSTR(<cadena>, <inicio> [, <fin>]), que devuelve una subcadena desde inicio y opcional mente se le indica la posicin final. Despus se le anexa a wresultado el resto de la cadena empezando desde la segunda posicin de wcadena, para despus desplegarlo y regresar el control al mdulo que lo llam mediante RETURN. No deber estar limitado con las funciones que FoxPro trae consigo, podr adems definir las propias. Utilizando el mismo ejemplo de la prctica anterior, se creara una funcin llamada mayprimerletra. Los parmetros no sern pasados con el argumento WITH, sino irn en parntesis precedidos por el nombre de la funcin. Esta, a su vez, regresar el valor mediante el comando RETURN <exp>, donde expresin es el valor que regresa la funcin. Parece complicado, pero realice la siguiente prctica. Prctica # 23 1. Escriba la funcin [Link] y llmela
PARAMETER wcadena RETURN UPPER(SUBSTR(wcadena,1,1))+; LOWER(SUBSTR(wcadena,2)
Prctica # 22
Slo coloque el parmetro que pas a la funcin en el parntesis que sigue al nombre de esta. Recuerde que las funciones
jofeque@[Link]
debern llevar parntesis. Pruebe con esto desde la ventana de Command ? maypl(Conoces a Julio!) Las funciones definidas por el usuario pueden ser mucho ms poderosas que las internas de FoxPro, debido a que pueden hacer mucho ms que regresar un valor. En realidad, pueden contener cualquier comando y ejecutarlo antes de que encuentre un RETURN y regrese un valor, haciendo cosas ms tiles. Prctica # 24 1. Preguntar al usuario un nmero entre 0 y 100, indefinidamente hasta que este sea 0. Al pedir cada nmero desplegar desplegando el nmero mayor tecleado, el menor y suma de todos los nmeros tecleados. Prctica # 25 1. Solicitar al usuario de que sexo es, validando que solo conteste correctamente F o M. Si es hombre, preguntarle su edad, y si es mujer preguntar su salario. Prctica # 26 1. Preguntar al usuario que personal se desea desplegar teniendo un sueldo mnimo y un determinado tipo de sexo que se le solicitar, es decir, solo los empleados que ganen el sueldo mnimo diario solicitado o ms y que sean de determinado sexo, sern desplegados en pantalla. Prctica # 27 1. Simular la impresin de una nmina de una semana con los empleados contenidos en la base de datos. Desplegar nombre y sueldo por semana (el sueldo guardado en salario es el diario), desplegar al ltimo el sueldo total de la empresa.
jofeque@[Link]