Está en la página 1de 32

MODULO 2

PROGRAMACION VISUAL FOX PRO

Programa: Alumno:

Mdulo No. 9 PROGRAMACION VISUL FOX PRO Preparado por: Jhon Jairo Hernndez Reservados todos los derechos Prohibida su reproduccin total o parcial Diseo e Impresin: Comunicamos Ideas Tel 653 6517 Ideas@telesat.com.co

Pag. 1

CONTENIDO

LOS REPORTES Y LAS CONSULTAS EN LAS APLICACIONES EL GENERADOR DE REPORTES EL FORMULARIO PARA SELECCIONAR EL DESTINO DE UN REPORTE FORMA DE UTILIZAR EL FORMULARIO REPORTE LAS CONSULTAS EN LAS APLICACIONES ANEXO A LA GUA DE CLASES LA INSTRUCCIN SELECT SQL EL SISTEMA COMPLETO EL GENERADOR DE MENUS DEL FOXPRO MODO DE PROGRAMAR LA ACCIN EN LAS OPCIONES DEL MEN EL PROGRAMA PRINCIPAL DE LA APLICACIN LA PANTALLA DE ACCESO AL SISTEMA COMPILACIN Y DISCOS DE DISTRIBUCIN DE UNA APLICACIN GENERANDO EL ARCHIVO EJECUTABLE DE LA APLICACIN ANTES DE CREAR LOS DISCOS DE INSTALACIN DE LA APLICACIN CREACIN DE LOS DISCOS DE INSTALACIN O DISTRIBUCIN

Pag. 2

La potencia de las aplicaciones, viene marcada por lalas cantidad de informes y consultas que permitan hacer sobre la informacin almacenada en tablas que componen a un sistema de informacin. La cantidad de informes queda limitada a la capacidad de cada programador y a los reportes que solicite la persona que nos ha contratado para desarrollar un proyecto. Lo cual significa, que un sistema por pequeo que sea puede incluir una serie de reportes que haran que el proyecto se viese como un gigante. Las consultas pueden ser utilizadas para enviar resultados de bsquedas basadas en criterios ofrecidos por los usuarios y su resultado se puede enviar a la pantalla o a la impresora. EL GENERADOR DE REPORTES pueden incluir texto, campos, imgenes, El FoxPro incluye un generador de reportes bastante potente. Dentro de un reporte se lneas, cuadros, campos calculados, unin botn Modificar. Si lo que desea es agregar de campos, funciones, etc. un reporte que hace falta dentro del proyecto, Si se domina (como programador) el tema de haga clic en Agregar y seleccione el nombre las funciones, se pueden ejecutar una serie del reporte desde sus unidades de disco. de acciones que ahorraran mucho tiempo a Si lo que se desea es crear un nuevo la hora de disear reportes. Las expresiones formulario, haga clic en nuevo, seleccione que conjuguen una serie de funciones, capos de la pantalla de dilogo que aparece el y cadenas de caracteres, permiten ampliar botn Nuevo Informe. Esta accin abrir an ms las posibilidades del generador de un formulario en blanco, sobre el cual reportes del FoxPro. iniciaremos las actividades que definirn el Tenga presente que el FoxPro amarra las nuevo reporte. Recuerde que el reporte no tablas utilizadas para sacar la informacin, es funcional en este punto debido a que no al reporte que las utiliza. Si analizamos la existe ninguna tabla abierta en memoria. Una forma en que hemos venido trabajando hasta tcnica utilizada por muchos programadores, el momento, en ningn momento debemos consiste en crear una rutina que abre las permitir que tal cosa pase. Nuestra aplicacin tablas necesarias para la funcio-nalidad utiliza tablas ubicadas en directorios diferentes del reporte, ejecutarla antes de entrara la dependiendo del campo DIRECTORIO en la creacin de mismo, y verificar el correcto tabla CIAS.DBF. funcionamiento del reporte en el sistema. Como no podemos dejar que el FoxPro Si no se utiliza ninguna tcnica de estas, amarre las tablas a los reportes, iniciaremos nuestro reporte solo ser funcional cuando lo el generador en blanco y disearemos el llamemos desde el formulario que hace uso reporte teniendo a la mano los campos de las tablas requeridas por el reporte. requeridos para el informe. Seleccione la pestaa Docs en el administrador Para este ejemplo, crearemos el reporte de proyectos y seleccione los objetos Programa.frt para mostrar la informacin formularios para que FoxPro nos muestre de la tabla Programas. los reportes diseados. Si es un reporte Recuerde que el reporte no funcionar desde a modificar, haga clic en la lista sobre el el modo diseo, as que no intente ejecutar nombre del reporte, luego haga clic en el un vista preliminar del reporte. La barra controles de informes nos facilita el Pag. 3

LOS REPORTES Y LAS CONSULTAS EN LAS APLICACIONES

manejo de los objetos que pueden aparecer dentro de un informes. Si no parece, haga clic en el men Ver y Barra de herramientas Controles de informes. Utilice el siguiente esquema para disear el reporte para la tabla programas: Como aspecto importante a considerar a la hora de disear reportes, es la inclusin del

Seleccionar objetos Etiquetas de texto Campos de tablas Dibujar lneas Dibujar rectngulo Dibujar Crculos Imgenes, control OLE dependiente Bloqueo de botn seleccionado Barra controles de informe Berifique que la barra de herramientas controles de informe aparerzca para poder trabajar en el diseador de informes.

nombre de la empresa para la cual se disea la aplicacin. En algn sitio del encabezado del reporte debe aparecer el nombre del reporte. Incluir la fecha del sistema es tambin una buena idea para el usuario que tome uno de los reportes en un futuro posterior a la impresin.

Los objetos 1, 2 y 3 se disean con el botn Campos de Tablas. Utilice estos parmetros para indicarle al generador de reportes de donde proviene la informacin: #Objeto Expresin origen de datos Formato 1 Fecha: +dtoc( date()) 2 programa.codigo @! Pag. 4

3 Programa.nombre @! En la pantalla de Propiedades del campo, coloque el parmetro de Posicin a Flotante. E L F O R M U L A R I O PA R A SELECCIONAR EL DESTINO DE REPORTE U N E l

siguiente paso despus de disear el reporte, es construir un formulario de uso global que nos permita llamarla desde cualquier formulario, permitirle al usuario seleccionar el destino

de un reporte (pantalla o impresora), recoger la seleccin hecha por el usuario y ejecutar el reporte seleccionado. En cada formulario diseado hasta el momento, se venia dejando un botn denominado Reporte. En este botn insertaremos el cdigo necesario para activar el formulario que se disear a continuacin. Vea ms adelante en esta gua, la serie de ordenes que utilizan el formulario Reportes. El formulario se disear una sola vez, en los dems formularios, se invocar a este formulario para permitirle al usuario que seleccione el destino de un reporte. Construya el siguiente formulario y gurdelo con el nombre de reportes. 1: btnPantalla 2: btnImpresora 3: btnCerrar CDIGO EN LOS OBJETOS DEL FORMULARIO REPORTES En las propiedades del formulario, active la pestaa Otras, busque la propiedad WindowType y colquela al valor 1-Modal. Si no hace esto, el formulario generar un error al tratar de ejecutarlo. Esto sucede debido a que se retornarn datos que indicarn la seleccin hecha por el usuario. EVENTO INIT DEL FORMULARIO REPORTES (REPORTES.INIT) public _porPantalla, _porImpresora, _btnCerrar

Pag. 5

EVENTO UNLOAD DEL FORMUARIO (REPORTE.UNLOAD) if _porPantalla _resultado = 1 endif if _porImpresora _resultado = 2 endif if _btnCerrar _resultado = 0 endif retornar a la aplicacin que llam al formulario. La instruccin RETURN es la encargada de devolver el parmetro a la aplicacin que llame a esta rutina. btnPantalla.Click btnImpresora.Click *botn Pantalla

return( _resultado) _porPantalla = .t. Este evento se ejecuta cuando se cierra el formulario. Observe que cada vez que el usuario _porImpresora = .f. hace clic en cada botn, se le asignan valores a unas variables lgicas, indicadoras al final _btnCerrar = .f. de sobre cual botn se hizo clic. thisform.release En esta parte del formulario, se recogen los valores de esas variables y se asigna un valor para *botn Impresora _porPantalla = .f. _porImpresora = .t. _btnCerrar = .f. thisform.release BtnCerrar.Click *botn Cerrar libera al formulario y a su vez, asigna unos valores lgicos equivalentes a los tres nicos botones en la pantalla. Existe una variable por cada botn y cuando se hace clic en cada botn, este coloca

_porPantalla = .f. _porImpresora = .f. _btnCerrar = .t. thisform.release Observe que cada botn

el valor de verdadero sobre la variable equivalente al botn pulsado y coloca el valor de falso a las otras variables. En la rutina del evento Unload del formulario, se chequea el estado de esas tres variables y se asigna un nuevo valor al parmetro que se debe retornar. Se ha determinado que la rutina devolver 0 cuando el usuario no escoja nada o haga clic en el botn Cerrar. Retorna 1 cuando se hace clic sobre el botn Pantalla y retorna un 2 cuando se hace clic sobre el botn Impresora.

Pag. 6

FORMA DE UTILIZAR EL FORMULARIO REPORTE Hasta el momento tenemos un reporte diseado (Programas.frt), un formulario llamado Reportes que permite seleccionar el destino de un reporte y un formulario, diseado en momento no se haba utilizado, denominado btnReporte. clases anteriores llamado Programas. En ese formulario, aparece un botn que hasta el Cuando el usuario haga clic sobre este botn, el sistema debe mostrar una pantalla donde el usuario pueda seleccionar el destino del reporte. Eso es lo programaremos a continuacin: Abra el formulario Programa en modo de diseo, ubique el botn btnReporte y haga doble clic sobre este. Busque el evento Clic y escriba el cdigo que se especifica a continuacin. BtnReporte.Click *generar reporte de programas
*consultar el destino para el reporte do form forms\reportes to mDestino do case case mDestino = 1 && pantalla

report form informes\programa preview case mDestino = 2 && impresora *verificar estado de la impresora if printstatus() && verificar el estado de la impresora report form informes\programa to print noeject noconsole else +chr(13) endif endcase mMens1 = La impresora no esta lista. Preparela e intente de nuevo... mOpc = messagebox( mMens1, 0+48, Atencin!)

*regresar a la pantalla go top scatter memvar memo thisform.refresh return Observe que el cdigo incluye la instruccin: do form forms\reportes to mDestino Con sta orden lo que se hace es invocar al formulario Reportes e indicarle al FoxPro que deseamos almacenar el valor que retorne el formulario en la variable mDestino. El formulario Reportes se ejecuta, permite que el usuario haga su seleccin, retorna el valor en la variable

Pag. 7

mDestino, y lo nico que resta es verificar el valor retornado. Recuerde que un valor de 1 indica que seleccionaron Pantalla, un valor de 2, Impresora, y un valor de 0, indica que el usuario no seleccion nada.

LAS CONSULTAS EN LAS APLICACIONES

Una de las caractersticas potentes en un gestor de bases de datos, lo constituye la capacidad de generar consultas a la informacin almacenada en las tablas de un sistema de informacin determinado. La forma en que se puede generar consultas a las tablas son muchas, pero una de las ms sencillas SELECT-SQL. es verdaderamente potente y son permite programar instrucciones de y que permiten Esta granorden flexibilidad durante la ejecucin, las ofrecidas por la instruccin consultas en forma fcil. Por ejemplo, se puede disear un formulario, unos datos en los cuales se recogen los parmetros de la consulta, y basado en esos datos entrados por el usuario, ejecutar una consulta en tiempo real. Abra el diseador de formulario con un formulario en blanco y disee el siguiente formulario. Cuando termine gurdelo en la carpeta de los formularios con el nombre de SQLProg. El anteponer SQL a los formularios de consulta, har que estos se agrupen visualmente en el administrador de proyectos, permitindonos en un futuro, administrar de forma fcil las pantallas de consultas. 1: mNombreSQL 2: btnEjecutarSQL 3: btnCerrar El usuario deber entrar en el campo 1 un texto. Cuando haga clic en el botn Ejecutar Consulta, el sistema ejecutar una instruccin SELECT-SQL y traer de la tabla PROGRAMA los programas que incluyan en su nombre el texto entrado. FORMULARIO.INIT
*abrir entorno utilizando las variables pblicas close data

mFile1 = _dircia +programa.dbf if !file( mFile1) do cPrograma in prg\creartbl endif sele 1 use &mFile1 order tag codigo alias programa

En botn ejecutar lanza la consulta en el sistema. Observe el uso que se hace del parmetro entrado por el usuario. Si entra algo, se usa como parmetro, si deja el campo en blanco, simplemente se traen todos los registros. El resultado de la consulta es mostrado en una ventana examinar, que debe ser cerrada con ctrl.+w. BtnEjecutarSQL.Click *ejecutar consulta copn los parmetros entrados mNombreSQL = alltrim( thisform.mNombreSQL.value)

return

Pag. 8

if empty( mNombreSQL) select * from programa else select * from programa where mNombreSQL $ programa.nombre endif return BtnCerrar.Click thisform.release Por ejemplo, si introducimos como parmetro la palabra PROG obtendremos como resultado la siguiente pantalla: Para cerrar esta pantalla, pulse Ctrl.+W. Aunque en este ejemplo se hizo una bsqueda basado una clase datos, no indica que siempre se tenga que hacer de tal forma. Las posibilidades de programar parmetros son muchas y la capacidad de programar tales ordenes dentro de una instruccin SELECT-

SQL hacen de esta orden lo mximo para controlar consultas. Para mayor informacin acerca de la orden SELECT-SQL, consulte el manual de comandos y funciones ANEXO A LA GUA DE CLASES LA INSTRUCCIN SELECT SQL El siguiente texto fue tomado de la ayuda del FoxPro. Recupera datos de una o ms tablas. Sintaxis SELECT [ALL | DISTINCT] [TOP nExpresin [PERCENT]] [Alias.] Elemento_Seleccin [AS Nombre_Columna] [, [Alias.] Elemento_Seleccin [AS Nombre_Columna] ...] FROM [FORCE]

Pag. 9

[NombreBaseDatos!]Tabla [Local_Alias] [[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN NombreBaseDatos!]Tabla [Alias_Local] [ON CondicinCombinacin ] [[INTO Destino] [TO FILE NombreArchivo [ADDITIVE] | TO PRINTER [PROMPT] TO SCREEN]] [PREFERENCE NombrePreferencia] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE CondicinCombinacin [AND CondicinCombinacin ...] [AND | OR CondicinFiltro [AND | OR CondicinFiltro ...]]] [GROUP BY ColumnaGrupo [, ColumnaGrupo ...]] [HAVING CondicinFiltro] [UNION [ALL] SELECTCommand] [ORDER BY Elemento_Orden [ASC | DESC] [, Elemento_Orden [ASC | DESC] ...]]

Argumentos SELECT Especifica los campos, constantes y expresiones que se mostrarn en el resultado de la consulta. ALL De forma predeterminada, se muestran todas la filas del resultado de la consulta. DISTINCT Excluye duplicados de cualquier fila del resultado de la consulta. Nota Puede utilizar DISTINCT nicamente una vez por clusula SELECT. TOP nExpresin [PERCENT] Especifica que el resultado de la consulta contenga un nmero determinado de filas o un porcentaje de filas en el resultado de la consulta. Es necesario incluir una clusula ORDER BY si incluye la clusula TOP. La clusula ORDER BY especifica las columnas en las que la clusula TOP determinar el nmero de filas que se va a incluir en el resultado de la consulta. Puede especificar desde 1 a 32,767 filas. Las filas de valores idnticos para las columnas especificadas en la clusula ORDER BY se incluyen en el resultado de la consulta. A partir de entonces, si especifica 10 para nExpr, el resultado de la consulta podr obtener ms de 10 filas si hay ms de 10 filas con valores idnticos para las columnas especificadas en la clusula ORDER BY. Si se incluye la palabra clave PERCENT, se redondear al nmero entero ms alto el nmero de columnas devuelto en el resultado. Los valores permitidos para nExpr cuando se incluye la palabra clave PERCENT son 0.01 a 99.99. Alias. Califica nombres de elementos coincidentes. Cada elemento que especifique con Elemento_Seleccin genera una columna de los resultados de la consulta. Si dos o ms

Pag. 10

elementos tienen el mismo nombre, incluya el alias de la tabla y un punto antes del nombre del elemento para impedir la duplicacin de las columnas. Elemento_Seleccin especifica un elemento a incluir en el resultado de la consulta. Un elemento puede ser uno de los siguientes: El nombre de un campo de una tabla de la clusula FROM. Una constante especificando que el mismo valor constante ha de aparecer en cada fila del resultado de la consulta. Una expresin que puede ser el nombre de una funcin definida por el usuario (FDU). AS Nombre_Columna Especifica el ttulo de una columna en el resultado de la consulta. Esta opcin resulta muy til cuando Elemen-to_Seleccin es una expresin o contiene una funcin de campo y desea dar un nombre significativo filas de la tabla a la izquierda de la palabra a la columna. Nombre_Columna puede ser una clave JOIN y slo las filas que concuerden expresin pero no puede contener caracteres procedentes de la tabla a la derecha de la (por ejemplo, espacios) que no estn permitidos palabra clave JOIN. La palabra clave OUTER para nombres de campos de tablas. es opcional; se puede incluir para resaltar que FROM Enumera las tablas que contienen los se ha creado una combinacin externa. datos que obtuvo la consulta. Si no hay ninguna tabla abierta, Visual FoxPro mostrar el cuadro RIGHT [OUTER] JOIN Especifica que el de dilogo Abrir para permitirle especificar resultado de la consulta contenga todas las filas la ubicacin del archivo. Una vez abierta, la desde la tabla hasta la derecha de la palabra tabla permanecer abierta cuando la consulta clave JOIN y slo las filas que concuerden se haya terminado. desde la tabla hasta la izquierda de la palabra FORCE Especifica que las tablas se combinarn clave JOIN. La palabra clave OUTER es en el orden de aparicin en la clusula FROM. opcional; puede incluirse para resaltar la Si se omite FORCE, Visual FoxPro intentar creacin de una combinacin externa. optimizar la consulta. Sin embargo, es posible FULL [OUTER] JOIN Especifica que el que la consulta se ejecute ms rpido si resultado de la consulta contenga todas las filas, se incluye la palabra clave FORCE para concuerden o no, de ambas tablas. La palabra desactivar la optimizacin de consultas de clave OUTER es opcional; se puede incluir Visual FoxPro. para resaltar que se ha creado una combinacin NombreBaseDatos! Especifica el nombre de externa. una base de datos inactiva que contiene la ON CondicinCombinacin Especifica las tabla. Es necesario incluir el nombre de la columnas segn las cuales se combinan las base de datos que contiene la tabla en caso tablas. de que no sea la base de datos activa. Incluya INTO Destino Determina donde se almacenan el delimitador de signo de exclamacin (!) los resultados de la consulta. Si incluye una despus del nombre de la base de datos y antes clusula del nombre de la tabla. INTO y una clusula TO en la misma consulta, Alias_Local Especifica un nombre temporal la clusula TO se pasar por alto. Si no incluye para la tabla indicada en Tabla. Si especifica un la clusula alias local, debe utilizar el alias local en lugar INTO, los resultados de la consulta se mostrarn de la tabla a travs de todo el SELECT. en la ventana Examinar. Los resultados de INNER JOIN Especifica que el resultado de la consulta pueden dirigirse tambin a la la consulta contenga slo filas para una tabla impresora o a un archivo mediante la clusula con la que coincidan una o varias filas en otra TO. tabla. Destino puede ser uno de los siguientes: LEFT [OUTER] JOIN Especifica que el resultado de la consulta contenga todas las ARRAY NombreMatriz, que almacena los resultados de la consulta en una Pag. 11

matriz de variable de memoria. Si la consulta selecciona 0 registros, la matriz no se crear. CURSOR Nombre Cursor [NOFILTER], que almacena los resultados de la consulta en un cursor. Si especifica el nombre de una tabla abierta, Visual FoxPro generar un mensaje de error. Despus de que se ejecute SELECT, el cursor temporal permanecer abierto y estar activo pero solamente para lectura. Una vez que cierre este cursor temporal, se borrar. Los cursores pueden existir como un archivo temporal en la unidad SORTWORK. Incluya NOFILTER para crear un cursor que se pueda usar en consultas posteriores. En versiones anteriores de Visual FoxPro, era necesario incluir una expresin o una constante adicional como un filtro para crear un cursor utilizable en consultas posteriores. Por ejemplo, la adicin de un Logical verdadero como una expresin de filtro creaba una consulta utilizable en consultas posteriores: SELECT *, .T. FROM customers INTO CURSOR myquery Si se incluye NOFILTER es posible que disminuya el rendimiento de la consulta, puesto que se crear una consulta temporal en el disco. Cuando se cierre el cursor se eliminar del disco la consulta temporal. DBF | TABLE NombreTabla [DATABASE NombreBaseDatos [NAME NombreLargoTabla]] que almacena el resultado de la consulta en una tabla. Si especifica una tabla que ya est abierta y SET SAFETY est en OFF, Visual FoxPro sobrescribir la tabla sin previo aviso. Si no ha especificado ninguna extensin, Visual FoxPro dar una extensin .DBF a la tabla. La tabla permanecer abierta y activa despus de ejecutar SELECT. Incluya DATABASE NombreBaseDatos para especificar una base de datos a la que se agregar la tabla. Incluya NAME NombreLargoTabla para especificar un nombre largo para la tabla. Los nombres largos pueden contener un mximo de 128 caracteres y

pueden utilizarse en lugar de nombres cortos en la base de datos. TO FILE NombreArchivo Si incluye una clusula TO pero no una clusula INTO, podr dirigir el resultado de la consulta a un archivo de texto ASCII llamado NombreArchivo, o a la impresora adems de al escritorio o la ventana principal de Visual FoxPro. ADDITIVE aade la salida de la consulta al contenido existente del archivo de texto especificado en TO FILE Nom-breArchivo. TO PRINTER [PROMPT] Dirige la salida de la consulta a una impresora. Utilice la clusula PROMPT opcional para que aparezca en pantalla un cuadro de dilogo antes de que empiece la impresin. En este cuadro de dilogo podr modificar la configuracin de la impresora. Los valores de la impresora modificables dependen del controlador de impresora instalado en este momento. Site la palabra clave PROMPT inmediatamente despus de TO PRINTER. TO SCREEN Dirige la salida de la consulta a la ventana principal de Visual FoxPro o a una ventana definida por el usuario que est activa. PREFERENCE NombrePreferencia Guarda los atributos y opciones de la ventana Examinar para uso posterior, si se enva el resultado de la consulta a una ventana Examinar. Emitiendo SELECT con un Nombre Preferencia de PREFERENCE, la primera vez se crea la preferencia. Emitiendo posteriormente SELECT con el mismo nombre de preferencia, se restaurar la ventana Examinar con el mismo estado de preferencia. Cuando se cierra la ventana Examinar, se actualiza la preferencia. Si sale de una ventana Examinar presionando CTRL+Q+W, no se guardarn los cambios de la ventana Examinar en el archivo de recurso.

Pag. 12

NOCONSOLE Impide que el resultado de la consulta se enve a un archivo, a la impresora o a la ventana principal de Visual FoxPro. PLAIN Impide que aparezcan las cabeceras de las columnas al mostrar la salida de la consulta. PLAIN puede utilizarse tanto si est presente una clusula TO como si no. Si se incluye una clusula TO, se pasar por alto PLAIN. NOWAIT Contina la ejecucin del programa despus de abrir la ventana Examinar y de dirigir a ella los resultados de la consulta. El programa no esperar a que la ventana Examinar se cierre, sino que continuar con la ejecucin de la lnea de programa inmediatamente siguiente a la instruccin SELECT. Cuando se incluye TO SCREEN para dirigir la salida hacia la ventana principal de Visual FoxPro o una ventana definida por el usuario, la salida se detiene cuando la ventana principal de Visual FoxPro se llena con resultados de la consulta. Presione una tecla para ver el siguiente conjunto de resultados de la consulta. Si se incluye NOWAIT, los resultados de la consulta se desplazarn fuera del escritorio, la ventana principal de Visual FoxPro o una ventana definida por el usuario sin esperar a que se presione una tecla. NOWAIT se pasa por alto si se incluye con la clusula INTO. WHERE Indica a Visual FoxPro que incluya nicamente ciertos registros en el resultado de la consulta. WHERE es necesario para recuperar datos de varias tablas. CondicinCombinacin especifica los campos que vinculan las tablas de la clusula FROM. Si incluye ms de una tabla en una consulta, deber especificar una condicin de combinacin para cada tabla despus de la primera. Las condiciones de combinacin mltiple deben conectarse mediante el operador AND. Cada condicin de combinacin tiene la forma siguiente: NombreCampo1 Comparacin

NombreCampo2 NombreCampo1 es el nombre de un campo de una tabla, NombreCampo2 es el nombre de un campo de otra tabla y Comparacin es uno de los operadores siguientes: Operador Comparacin = Igual == Exactamente igual LIKE SQL LIKE <>, !=, # Distinto de > Mayor que >= Mayor o igual que < Menor que <= Menor o igual que Cuando utiliza el operador = con cadenas, acta de forma distinta dependiendo del ajuste de SET ANSI. Cuando SET ANSI est OFF, Visual FoxPro trata las comparaciones de cadenas en la forma habitual en Xbase. Cuando SET ANSI est a ON, Visual FoxPro sigue las normas ANSI para comparaciones de cadenas. Vea SET ANSI y SET EXACT para obtener informacin adicional sobre la forma en que Visual FoxPro realiza las comparaciones de cadenas. La clusula WHERE acepta el operador ESCAPE para la CondicinCombinacin, lo que le permite realizar consultas significativas sobre datos que contengan caracteres comodn _ y % de SELECT - SQL. La clusula ESCAPE le permite especificar que se traten los caracteres comodn de SELECT - SQL como si fueran caracteres literales. En la clusula ESCAPE se especifica un carcter, el cual, cuando se sita inmediatamente antes del carcter comodn, indica que se tratar al carcter comodn como a un carcter literal. CondicinFiltro Especifica los criterios que deben cumplir los registros para que se incluyan en el resultado de la consulta. Una consulta puede incluir tantas condiciones de filtro como se deseen, conectadas con el operador AND y OR. Tambin puede utilizar el operador NOT para invertir el valor de una expresin lgica o utilizar EMPTY( ) para

Pag. 13

comprobar si un campo est vaco. CondicinFiltro puede presentar una de estas formas: Ejemplo 1 En el Ejemplo 1 se muestra la CondicinFiltro en el formulario de NombreCampo1 Comparacin NombreCampo2

customer.cust_id = orders.cust_id Ejemplo 2 En el Ejemplo 2 se muestra CondicinFiltro en el formulario de NombreCampo Comparacin Expresin payments.amount >= 1000

Ejemplo 3 En el Ejemplo 3 se muestra CondicinFiltro en el formulario de NombreCampo Comparacin ALL (Subconsulta) Cuando la condicin de filtro incluye ALL, el campo debe cumplir la condicin de comparacin para todos los valores generados por la subconsulta antes de que se incluya el registro en el resultado de la consulta. company < ALL ; (SELECT company FROM customer WHERE country = Reino Unido) Ejemplo 4 En el Ejemplo 4 se muestra CondicinFiltro en el formulario de NombreCampo Comparacin ANY |SOME (Subconsulta) Cuando la condicin de filtro incluye ANY o SOME, el campo debe cumplir la condicin de comparacin en al menos uno de los valores generados por la subconsulta. company < ANY ; (SELECT company FROM customer WHERE country = Reino Unido) Ejemplo 5 En el Ejemplo 5 se muestra CondicinFiltro en el formulario de NombreCampo [NOT] BETWEEN Inicio_Rango AND Fin_Rango Este ejemplo comprueba si los valores del campo estn dentro de un intervalo de valores especificado. customer.postalcode BETWEEN 90000 AND 99999 Ejemplo 6 En el Ejemplo 6 se muestra CondicinFiltro en el formulario de [NOT] EXISTS (Subconsulta) Este ejemplo comprueba si al menos una lnea cumple los criterios de la subconsulta. Cuando la condicin de filtro incluye EXISTS, la condicin de filtro se evala como verdadera (.T.) a no ser que la subconsulta sea un conjunto vaco. EXISTS ; (SELECT * FROM orders WHERE customer.postalcode = orders.postalcode)

Pag. 14

Ejemplo 7 En el Ejemplo 7 se muestra CondicinFiltro en el formulario de NombreCampo [NOT] IN Conjunto_Valor Cuando una condicin de filtro incluye IN, el campo debe contener uno de los valores antes de que el registro se incluya en los resultados de la consulta. customer.postalcode NOT IN (98052,98072",98034") Ejemplo 8 En el Ejemplo 8 se muestra CondicinFiltro en el formulario de NombreCampo [NOT] IN (Subconsulta) Aqu, el campo debe contener uno de los valores devueltos por la subconsulta antes de que su registro se incluya en los resultados de la consulta. customer.cust_id IN ; (SELECT orders.cust_id FROM orders WHERE orders.city=Seattle) Ejemplo 9 En el Ejemplo 9 se muestra CondicinFiltro en el formulario de NombreCampo [NOT] LIKE cExpresin customer.country NOT LIKE Reino Unido Esta condicin de filtro busca cada uno de los campos que coinciden con cExpresin. Puede utilizar el signo de porcentaje (%) y subrayado ( _ ) como parte de cExpresin. El signo de porcentaje representa a cualquier secuencia de caracteres desconocidos en la cadena. El subrayado representa un solo carcter desconocido en la cadena. GROUP BY ColumnaGrupo [, ColumnaGrupo ...] Agrupa las filas de la consulta basndose en los valores de una o ms columnas. ColumnaGrupo puede ser el nombre de un campo normal de una tabla, o un campo que incluya una funcin de campo SQL, o una expresin numrica indicando la posicin de la columna en la tabla resultado (la columna ms a la izquierda tiene el nmero 1). HAVING CondicinFiltro Especifica una condicin de filtro que los grupos deben satisfacer para quedar incluidos en el resultado de la consulta. HAVING debe utilizarse con GROUP BY. Puede incluir tantas condiciones de filtro como se deseen, conectadas con el operador AND u OR. Tambin puede utilizar NOT para invertir el valor de una expresin lgica. CondicinFiltro no puede contener una subconsulta. Una clusula HAVING sin una clusula GROUP BY acta como una clusula WHERE. Puede utilizar alias locales y funciones de campo en la clusula HAVING. Utilice una clusula WHERE para acelerar el rendimiento si su clusula HAVING no contiene funciones de campo. No olvide que la clusula HAVING debera de aparecer antes de una clusula INTO porque, de lo contrario, se producir un error de sintaxis.

Pag. 15

[UNION [ALL] ComandoSELECT] Combina el resultado final de una SELECT con el resultado final de otra SELECT. De forma predeterminada, UNION comprueba el resultado combinado y elimina las filas duplicadas. Puede utilizar parntesis para combinar mltiples clusulas UNION. Utilice la palabra clave opcional ALL para impedir que UNION elimine filas duplicadas de los resultados combinados. Las clusulas UNION siguen las reglas siguientes: No puede utilizar UNION para combinar subconsultas. La salida de ambos SELECT debe tener el mismo nmero de columnas. Cada columna de los resultados de la consulta de un SELECT debe tener el mismo tipo de dato y anchura que su columna correspondiente en el otro SELECT. nicamente el SELECT final puede tener una clusula ORDER BY, que debe referirse a las columnas de salida por su nmero. Si se incluye otra clusula ORDER BY, afectar al resultado completo. Tambin puede usar la clusula UNION para simular una combinacin externa. Cuando combina dos tablas en una consulta, solamente se incluyen en la salida los registros que tengan valores coincidentes en los campos de combinacin. Si un registro de la tabla primaria no tiene un registro correspondiente en la tabla secundaria, el registro de la tabla primaria no se incluye en la salida. Una

combinacin externa le permite incluir todos los registros de la tabla primaria en la salida, junto con los registros coincidentes de la tabla secundaria. Para crear una combinacin externa en Visual FoxPro, necesita utilizar un comando SELECT anidado, como en el siguiente ejemplo:

En lo que respecta a la siguiente: La instruccin SELECT incluida entre parntesis se procesa en primer lugar. Esta instruccin da como resultado una seleccin de todos los nmeros de clientes de la tabla orders. La clusula WHERE busca todos los nmeros de cliente de la tabla customer que no estn en la tabla orders. Puesto que la primera seccin del comando proporcion todas las empresas que tenan un nmero de cliente en la tabla orders, todas las empresas de la tabla customer estn incluidas en los resultados de la consulta. Puesto que las estructuras de las tablas incluidas en UNION deben ser idnticas, hay

SELECT customer.company, orders.order_ id, orders.emp_id ; FROM customer, orders ; WHERE customer.cust_id = orders. cust_id ; UNION ; SELECT customer.company, , ; FROM customer ; WHERE customer.cust_id NOT IN ; (SELECT orders.cust_id FROM orders) Nota Asegrese de incluir el espacio que aparece justo delante de cada punto y coma. De lo contrario, recibir un error. La seccin del comando situada antes de la clusula UNION selecciona los registros de ambas tablas que contienen valores coincidentes. Las empresas cliente que no tengan facturas asociadas no se incluyen. La seccin del comando situada tras la clusula UNION selecciona los registros de la tabla customer que no tienen registros coincidentes en la tabla orders. segunda seccin del comando, observe lo

Pag. 16

dos marcadores de posicin en la segunda instruccin SELECT para representar orders. order_id y orders.emp_id de la primera instruccin SELECT. Nota Los marcadores de posicin deben ser del mismo tipo que los campos que representan. Si el campo es de tipo Date, el marcador de posicin deber ser { / / }. Si el campo es de tipo Character, el marcador de posicin deber ser la cadena vaca (). ORDER BY Elemento_Orden Ordena el resultado de la consulta basndose en los datos de una o varias columnas. Cada Elemento_ Orden debe corresponder a una columna del resultado de la consulta, y puede ser uno de los siguientes: Un campo de una tabla FROM que tambin es un elemento de seleccin en la clusula principal SELECT (no en una subconsulta). Una expresin numrica que indica la ubicacin de la columna en la tabla resultante. (La columna de la izquierda es la nmero 1.) ASC Especifica un orden ascendente para los resultados de la consulta, de acuerdo con el elemento o los elementos de orden, y es el valor predeterminado para ORDER BY. DESC Especifica un orden descendente para los resultados de la consulta. Los resultados de la consulta aparecern desordenados si no especifica un orden con ORDER BY. Comentarios SELECT es un comando SQL que est incorporado en Visual FoxPro como cualquier otro comando de Visual FoxPro. Cuando utiliza SELECT para componer una consulta, Visual FoxPro interpreta la consulta y recupera los datos especificados de las tablas. Puede crear una consulta SELECT: En la ventana Comandos

En un programa Visual FoxPro (como cualquier otro comando de Visual FoxPro) El Diseador de consultas Cuando emite SET TALK ON y ejecuta SELECT, Visual FoxPro muestra la duracin de la consulta y el nmero de registros del resultado. _TALLY contiene el nmero de registros del resultado de la consulta. SELECT no respeta la condicin de filtro actual especificada con SET FILTER. Una subconsulta, a la que se hace referencia en los argumentos siguientes, es un comando SELECT dentro de otro SELECT y debe incluirse entre parntesis. Puede tener mltiples subconsultas al mismo nivel (no anidadas) en la clusula WHERE (consulte esta seccin de los argumentos). Las subconsultas pueden contener mltiples condiciones de combinacin. Cuando se obtiene el resultado de una consulta, las columnas se denominarn segn las siguientes reglas: Si un elemento seleccionado es un campo con un nombre nico, el nombre de la columna de resultado es el nombre del campo. Si hay ms de un elemento seleccionado con el mismo nombre, se aadirn un signo de subrayado y una letra al nombre de la columna. Por ejemplo, si una tabla llamada Cliente tiene un campo llamado CALLE, y una tabla llamada Empleados tambin tiene un campo llamado CALLE, las columnas de resultado se llamarn Extensin_A y Extensin_B (CALLE _A y CALLE _B). En el caso de un elemento seleccionado con un nombre de 10 caracteres, se truncar el nombre para aadir el smbolo de subrayado y la letra. Por ejemplo, DEPARTMENT se convertira en DEPARTME_A. Si un elemento seleccionado es una expresin, su columna de resultado se llamar EXP_A. Cualquier otra expresin recibir el nombre de EXP_B, EXP_C, y as sucesivamente.

Pag. 17

Si un elemento seleccionado contiene una funcin de campo como, por ejemplo, COUNT( ), la columna de resultado se llamar CNT_A. Si otro elemento seleccionado contiene SUM( ), su columna de resultado se llamar SUM_B. Funciones definidas por el usuario con SELECT Aunque la utilizacin de funciones definidas por el usuario en la clusula SELECT ofrece unas ventajas evidentes, tambin debera tener en cuenta las siguientes limitaciones: Es posible que la velocidad de realizacin de las operaciones con SELECT se vea limitada por la velocidad a la que se ejecutan las funciones definidas por el usuario. Las manipulaciones de un gran volumen que impliquen funciones definidas por el usuario se pueden realizar mejor utilizando funciones API y funciones definidas por el usuario escritas en C o en lenguaje ensamblador. No se puede prever nada acerca de la entrada/salida de Visual FoxPro (E/S) ni del entorno de la tabla en funciones definidas por el usuario invocadas a partir de SELECT. Generalmente, no se puede saber qu rea de trabajo se ha seleccionado, ni el nombre de la tabla actual, ni los nombres de los campos que se estn procesando. El valor de dichas variables depende del lugar especfico, dentro del proceso de optimizacin, en el que se invoque la funcin definida por el usuario. En funciones definidas por el usuario invocadas desde SELECT, no es seguro cambiar la E/S de Visual FoxPro ni el entorno de la tabla. Por norma general, los resultados son impredecibles. La nica forma segura de pasar valores a funciones definidas por el usuario invocadas desde SELECT es mediante la lista de argumentos pasada a la funcin cuando es invocada. Si prueba y descubre una manipulacin tericamente prohibida que funciona correctamente en una versin determinada de FoxPro, eso no significa que tambin funcione en versiones posteriores. Salvando dichas limitaciones, las funciones

definidas por el usuario son aceptables en la clusula SELECT. Sin embargo, recuerde que la utilizacin de SELECT puede ralentizar el rendimiento. Las siguientes funciones de campo estn disponibles para ser utilizadas con un elemento seleccionado que sea un campo o una expresin que implique a un campo: AVG(Elemento_Seleccin), que realiza una media de una columna de datos numricos. COUNT(Elemento_Seleccin), que cuenta el nmero de elementos seleccionados en una columna. COUNT(*) cuenta el nmero de filas en el resultado de la consulta. MIN(Elemento_Seleccin) determina el menor valor de Elemento_Seleccin en una columna. MAX(Elemento_Seleccin) determina el mayor valor de Elemento_Seleccin en una columna. SUM(Elemento_Seleccin) que proporciona el total de la suma de una columna de datos numricos. No se pueden probar las funciones de campo. Combinaciones Visual FoxPro acepta sintaxis de combinacin de 1992 SQL ANSI, lo que le permite crear consultas que vinculen las filas en dos o ms tablas mediante la comparacin de los valores de campos especificados. Por ejemplo, una combinacin interna selecciona filas procedentes de dos tablas slo cuando los valores de los campos combinados son iguales. Visual FoxPro admite combinaciones anidadas. Dado que SQL se basa en la teora de conjuntos matemtica, se puede representar a cada tabla con un crculo. La clusula ON que especifica las condiciones de la combinacin determina el punto de interseccin, el cual representa el conjunto de filas que coinciden. En el caso de una combinacin interna, la interseccin tendr lugar en el interior o en una parte interna de los dos crculos. Una combinacin externa incluye tanto las filas coincidentes que se han encontrado en la seccin de interseccin interna

Pag. 18

de las tablas, como las filas de la parte externa del crculo a la izquierda, o a la derecha, de la interseccin. Importante Tenga presente la siguiente informacin a la hora de crear condiciones de combinacin: Si incluye dos tablas en una consulta y no especifica una condicin de combinacin, cada registro de la primera tabla se combinar con cada registro de la segunda tabla hasta que surtan efecto las condiciones del filtro. Una consulta tal puede producir unos resultados interminables. S e a p r u d e n t e a l u t i l i z a r, e n condiciones de combinacin, funciones tales como DELETED( ), EOF( ), FOUND( ), RECCOUNT( ), y RECNO( ), que aceptan un rea de trabajo o un alias opcional. La inclusin de un alias o de un rea de trabajo en dichas funciones puede producir resultados inesperados. SELECT no utiliza sus reas de trabajo; realiza lo equivalente a USE ... AGAIN. Las consultas de una nica tabla que utilizan estas funciones sin un rea de trabajo o un alias opcional, tendrn resultados correctos. De todas formas, las consultas de varias tablas que utilicen dichas funciones (incluso sin un rea de trabajo o un alias opcional) pueden tener resultados inesperados. Sea prudente al combinar tablas que contengan campos vacos porque Visual FoxPro concuerda campos vacos. Por ejemplo, si combina CUSTOMER.ZIP e INVOICE. ZIP, y CUSTOMER contiene 100 cdigos postales vacos e INVOICE contiene 400 cdigos postales vacos, el resultado de la consulta contendr 40.000 registros ms, como resultado de los campos vacos. Use la funci n EMPTY( ) para eliminar los registros vacos del resultado de la consulta. Para obtener ms informacin sobre combinaciones, consulte Definicin y modificacin de condiciones de combinacin en el captulo 8, Creacin de vistas, en el Manual del programador.

Pag. 19

EL SISTEMA COMPLETO
Hasta el momento hemos generado formularios, reportes y consultas, partes bsicas de un sistema de informacin automatizado. Para que ese sistema est completo, agregaremos el men principal, el formulario de entrada (clave de acceso) y las utilidades del sistema. Como paso final, aprenderemos a compilar la aplicacin, generar un programa autoejecutable (.EXE) y los respectivos discos de instalacin del proyecto.

El FoxPro tiene un generador de mens que permite crear, probar y generar el cdigo de un men para agregar a nuestra aplicacin. El docente explicar el manejo de este potente generador de mens. El men creado en clase debe llamarse MENUPPAL y debe crearse en la pestaa OTROS del administrador de proyectos en la seccin Mens. Cuando modifique las opciones del
Haga clic en esta pestaa para administrar los mens de su aplicacin Haga clic para generar un men nuevo Haga clic para agregar un men existente en las unidades de disco Haga clic para modificar el men seleccionado Haga clic para ejecutar el men seleccionado

EL GENERADOR DE MENUS DEL FOXPRO

men, recuerde siempre ejecutar la opcin Men/Generar. Esta opcin genera un archivo de cdigo con las rdenes suficientes para crear nuestro sistema de mens. El archivo de cdigo fuente quedar almacenado con el mismo nombre del men y la extensin .MPR. Este es el programa que ejecutaremos desde cualquier formulario o programa para cargar el men en el sistema (MENUPPAL.MPR). Por el momento disearemos el siguiente men principal: Maestros Secretara Utilidades Programas Asignaturas Matrcula Indexar Ventana de Comandos sistema Usuarios del sistema Hojas de Copias de soporte Restaurar datos Empresas del vida Profesor Grupos Salir

Pag. 20

Las opciones Programas, Asignaturas, Profesor, Hojas de vida, Matrcula y Grupos, tienen respectivamente un submen con las opciones: Actualizar Consultar

El entorno de trabajo del generador de reportes es bastante sencillo de manipular. Para pasar de un submen a otro, recuerde hacerlo haciendo clic en la lista desplegable Nivel de Men . Para verificar el funcionamiento del sistema de mens diseado, haga clic en el botn Vista Previa. Una tecla caliente (Hot Key) se programa anteponiendo los signos \< antes de la letra
Selecciona el nivel de men al cual se desea mover Insertar una opcin en la posicin del cursor Insertar una opcin igual a las que aparecen en las opciones de FoxPro; por ejemplo Salir Eliminar la opcin en la lnea del Haga clic para ver una vista previa de su sistema de mens

que uno desea programar como la tecla caliente. Por ejemplo, \<Utilidades programa a la combinacin de teclas ALT+U como la tecla caliente para activar esta opcin en el sistema de mens. MODO DE PROGRAMAR LA ACCIN EN LAS OPCIONES DEL MEN
Seleccione para ir a la barra de men principal o retroceder en las opciones programadas

Seleccione para insertar una barra equivalente a una de las opciones del men de FoxPro

Las acciones a programar dentro de las opciones de un men son: Submen, Comando o Procedimiento. Si la accin a tomar es desplegar un submen, seleccione la accin Submen y haga clic en el botn Crear para programar las opciones del submen. Si la accin a ejecutar es una orden del FoxPro, por ejemplo, ejecutar un formulario o un programa, seleccione la accin Comando. Luego, programe la orden en la casilla correspondiente y acorde al tipo de rutina a ejecutar.

Pag. 21

Si es un formulario, utilice el formato: Do form formulario Si es un programa: Do NombrePrograma Si la accin a tomar es ejecutar un procedimiento, seleccione Procedimiento, luego haga clic en el botn Crear. El sistema abre un editor de comandos con el objetivo de que usted introduzca la secuencia de rdenes que debe ejecutar el FoxPro cuando se seleccione la opcin. De esta pantalla salimos pulsando CTRL.+W. OPCIN SALIR Programe la accin de esta opcin como COMANDO. Entre la orden QUIT en el rea destinada para introducir la orden de la opcin. OPCION VENTANA DE COMANDOS Programe como accin para esta opcin, Procedimiento. Introduzca como cdigo dentro del procedimiento la secuencia de comandos siguiente: CLEAR EVENTS SET SYSMENU TO DEFAULT RETURN

EL PROGRAMA PRINCIPAL DE LA APLICACIN Para que nuestra aplicacin tome forma, debemos crear un programa que junte todo lo creado hasta el momento. Ese programa deber cargar el formulario de acceso al sistema, verificar el usuario conectado, definir la ruta de datos dependiendo de la empresa identificada, cargar el sistema de mens y permitir la navegacin por los diversos mdulos componentes del sistema. Cree en la pestaa cdigo del proyecto un archivo de programa y gurdelo con el nombre de PPAL en la carpeta destinada para los programas (en el caso de la gua: c:\clasefox\ prg). El programa incluye el cdigo que permite configurar el entorno de trabajo con el objetivo de personalizar la ventana de ejecucin de la aplicacin. El FoxPro incluye el objeto _screen para configurar las propiedades a nivel de cdigo, de la ventana principal. Este resulta un muy buen mtodo para personalizar de forma simple nuestra aplicacin. Muchos programadores utilizan formularios y vistosos botones de comandos para controlar las opciones del sistema, en nuestro caso particular, utilizaremos el ms elemental y simple de todos: un sistema de barras de mens que ejecutan y juntan las partes componentes del sistema.

Pag. 22

Este es el cdigo fuente del programa PPAL.PRG: * * Ppal.prg * Mdulo principal del Sistema ClaseFox set echo off set talk off set safety off set color to set clock status set century on set date to dmy clear all close all clear clear events close data mDir = sys(5) +curdir() mIDir = sys(5) +curdir() + icons\icon.ico set defa to &mDir set path to &mDir *** configurar entorno de trabajo _screen.caption = Clase Fox 1.0 _screen.icon = mIDir _screen.windowstate = 2 && maxim _screen.picture = _screen.backcolor = rgb( 192,192,192) *** cargar mdulo de entrada al sistema set sysmenu off do form forms\acceso read events close data return

Pag. 23

LA PANTALLA DE ACCESO AL SISTEMA


La primer sesin de clases nos mostr la forma de generar un formulario de acceso al sistema. Lleg la hora de utilizar tal formulario con el objetivo de controlar la entrada de los usuarios a nuestra aplicacin. Ese formulario se llama ACCESO y debe estar almacenado en el directorio de la aplicacin destinado para los formularios (en el caso de la gua c:\clasefox\forms\). Recuerde que nuestra aplicacin hace uso de la tabla CIAS.DBF almacenada dentro de la carpeta de nuestra aplicacin (para la gua CLASEFOX). Esta tabla posee un campo destinado para almacenar la ruta de datos llamado directorio. Debemos agregar el siguiente cdigo en el botn ACEPTAR (btnAceptar.Click), con el objetivo de configurar la aplicacin para que apunte al directorio de datos dependiendo de la empresa seleccionada para trabajar. Busque dentro del cdigo la seccin dejada en clases pasadas con el texto de: *dejar entrar *wait windowPuede entrar el Sistema nowait y reemplace por el cdigo que se muestra en cursiva. BtnAceptar.Click if alltrim (usuarios.clave)=mclave *ruta para los datos _dircia = alltrim( cias.directorio) _nomcia = alltrim( cias.nombre) do menuppal.mpr release thisform else wait window Clave Incorrecta nowait endif Recuerde que en sesiones pasadas, con el objetivo de verificar la ejecucin de nuestros programas, ejecutbamos la rutina PUBLIC.PRG. Ya no es necesario hacerlos, y la forma correcta es la ejecutar el programa PPAL.PRG. Este a su vez, llama al formulario ACCESO, y este dependiendo de los datos entrados, lleva al usuario a la pantalla principal de la aplicacin. Esta pantalla enlaza todos los mdulos componentes del sistema. A continuacin se muestra la forma en que se relaciona todo el sistema. En un sistema automatizado, el men principal es el que integra los elementos diseados en forma modular. La creacin de sistema de mens requiere de prctica y es el pro

Pag. 24

gramador el que debe buscar el esquema adecuado para que las partes del sistema se integren. El programador es el que debe colocar en forma lgica los elementos del men y hacerlo de forma tal, que el usuario no tenga que dar tantas vueltas para acceder a opciones que tienen de cierta forma una relacin. Una buena clave para disear opciones de mens, es la de agrupar procesos, donde cada proceso tomar un nombre dentro del men principal. Las opciones Maestro y Utilidades se constituyen por el momento como las opciones claves iniciales.

PPAL.PRG FORMULARIO ACCESO


Empresa: 01 Usuario: 01 Clava de acceso: **

MENU PRINCIPAL MENUPPAL.MPR


Maestro Secretara Programas Asignaturas

RUTA DE DATOS
C:clasefox 01

Formularios

Queda pendiente generar los formularios componentes del men utilidades. Y por supuesto, la generacin de los discos de instalacin y del respectivo programa ejecutable (.EXE).

Una vez diseado y programado todos los componentes de la aplicacin, lo nico restante por hacer es generar el programa ejecutable de la aplicacin. Un programa ejecutable ya no requiere del cdigo fuente para su funcionamiento. Realmente este archivo es el que se le entrega al cliente final. Como programadores, debemos proteger el cdigo fuente y no permitir que otras personas manipulen el cdigo fuente de nuestra aplicacin. Si otra persona toma nuestro cdigo fuente, puede generar una nueva versin de nuestro proyecto y distribuirlo a su vez con otro nombre de producto, contribuyendo con esto al delito de robo de derechos de autor. Nuestra tica nos debe forzar a no tomar el cdigo fuente que otros programadores hayan dejado a nuestro alcance. GENERANDO EL ARCHIVO EJECUTABLE DE LA APLICACIN

COMPILACIN Y DISCOS DE DISTRIBUCIN DE UNA APLICACIN

Pag. 25

El primer paso para este proceso es indicarle al FoxPro cual es el archivo principal. En nuestro ejemplo, es el programa PPAL.PRG. Para hacer esto haga clic en la pestaa

CODIGO, seleccione el archivo PPAL.PRG, haga clic derecho, y del men emergente que aparece seleccione Establecer Principal. Este archivo ser el utilizado por el FoxPro para enrutar toda la aplicacin dentro del programa ejecutable. Podemos cambiar el programa principal en cualquier momento que lo deseemos.

El siguiente paso es hacer clic sobre el botn generar. Este evento activa la caja de dilogo

Opciones de Generacin, seleccione la opcin Generar ejecutable , marque la casilla Volver a compilar todos los archivos y haga clic en le botn Aceptar.

Pag. 26

Ahora FoxPro preguntar por el nombre a dar al archivo ejecutable generado. Entre el nombre y haga clic en el botn Guardar. Ahora FoxPro empezar a mostrar el proceso de compilacin de la aplicacin. Cuando encuentre errores responder con mensajes de error. Haga clic en el botn Ignorar de esta caja y FoxPro continuar con el proceso de compilacin. Si existieron errores durante el proceso de compilacin, FoxPro generar un archivo con el mimo nombre de la aplicacin y la extensin .ERR. Una vez terminado el proceso, puede verificar en el disco duro que el programa ejecutable con el nombre que usted defini, existe con la extensin .EXE. Este archivo puede ser ejecutado en la memoria de su computador. ANTES DE CREAR LOS DISCOS DE INSTALACIN DE LA APLICACIN Una vez definido el archivo ejecutable en la carpeta de su aplicacin, el siguiente paso es crear los discos de instalacin o distribucin. Para hacer esto hagamos primero lo siguiente: Cree una carpeta en el directorio raz del disco duro y denomnela con el mismo nombre de su aplicacin pero con extensin .EXE. Por ejemplo, para la aplicacin gua CLASEFOX, la nueva carpeta se llamara CLASEFOX.EXE. Esta carpeta se utilizar para mantener una copia de la aplicacin sin el cdigo fuente. Si se generan los discos de instalacin con todo el cdigo fuente en la misma carpeta de generacin, se incluiran automticamente todos los archivos en los discos de instalacin. Copie el programa ejecutable a la nueva carpeta (CLASEFOX.EXE) Copie ahora la carpeta de conos si los hay. Para que FoxPro guarde en los discos de instalacin las imgenes utilizadas en la aplicacin. Cree una nueva carpeta en el directorio raz del disco duro y denomnela con el mismo nombre de la aplicacin pero con extensin .DSK. Esta carpeta ser utilizada durante el proceso de creacin de los discos de instalacin para guardar los archivos resultantes. Ahora ya estamos listos para ejecutar el proceso de creacin de los discos de instalacin. Pag. 27

CREACIN DE LOS DISCOS DE INSTALACIN O DISTRIBUCIN Haga clic en el men Herramientas, y seleccione Instalacin del submenu. FoxPro muestra ahora la ventana para indicarle donde se encuentran los archivos a distribuir

Seleccione la carpeta donde reside el archivo ejecutable (CLASEFOX.EXE). Ahora haga clic en el botn Siguiente.

Pag. 28

FoxPro muestra la ventana donde se le indican que componentes deseamos inclur en los discos de instalacin. Seleccione Runtime de Visual FoxPro. Al marcar esta casilla, nuestra aplicacin ejecutar en cualquier equipo sin necesidad de tener el Visual FoxPro instalado. Marque las otras opciones si su aplicacin hacen uso de ellas. Ahora haga clic en el botn Siguiente.

Ahora FoxPro muestra la caja de dilogo donde se le debe indicar la carpeta donde colocar los discos de instalacin. En nuestro ejemplo, utilizaremos la carpeta CLASEFOX.DSK. El contenido de esta carpeta es que utilizaremos para copiar a los discos de instalacin. FoxPro crear un directorio denominado como DISK144 o con otra estructura dependiendo del tipo de discos especificados en esta pantalla. Dentro de la carpeta resultante, FoxPro crear una carpeta con el contenido de disco por disco (dependiendo del tamao de la aplicacin). Indique la carpeta destino (CLASEFOX.DSK). Marque la casilla 1.44 MB de 3 pulgadas. Luego haga clic en el botn Siguiente. Ahora escriba la informacin que aparecer cuando el usuario ejecute el proceso de

Pag. 29

instalacin. Entre el ttulo de la aplicacin en el cuadro Ttulo del cuadro de dilogo de la instalacin. Entre la informacin de derechos de autor en el cuadro Informacin de copyright. Seleccione ahora el programa que debe ejecutar el sistema una vez finalizada la instalacin (c:\clasefox.exe\clasefox.exe). Ahora haga clic en le botn Siguiente. La siguiente caja de dilogo permite indicar el directorio de instalacin (CLASEFOX.EXE). Indique el grupo de programas a definir en el sistema de mens del Windows durante la ejecucin de la instalacin. Seleccione la forma en que la instalacin debe crear el directorio

y el grupo de programas. Ahora haga clic en el botn Siguiente.

Pag. 30

La siguiente ventana permite definir la forma en que FoxPro debe distribuir ciertos archivos dentro del nuevo sistema instalado. Parta nuestro caso no cambiemos nada y hagamos clic en el botn Siguiente. FoxPro nos mostrar la pantalla de haber llegado a la meta de los parmetros de instalacin.

Hagamos clic en el botn Finalizar para que FoxPro inicie el proceso de creacin de los discos de instalacin.

Pag. 31

FoxPro muestra una caja de dilogo donde aparece el progreso del proceso de creacin de los discos de instalacin.

Cuando haya finalizado mostrar una ventana con la informacin sobre el proceso generado. Hagamos clic en el botn Listo. FoxPro regresar a la ventana de comandos a esperar una nueva orden.

Es el momento propicio para dar una mirada a nuestro disco duro y revisar que fue lo que el proceso de creacin de instalacin defini. Miremos el contenido de la carpeta C:\CLASEFOX.DSK. Para probar la eficacia del proceso de instalacin, borre la carpeta CLASEFOX.EXE y ejecute el proceso de instalacin desde la carpeta C:\CLASEFOX.DSK\DISK144\DISK1\INSTALAR.EXE. Una vez ejecutado el proceso de instalacin, verifique el funcionamiento de la aplicacin. Es importante verificar la salida de la aplicacin, lo mismo que el enrutamiento correcto de los datos dentro de la estructura de disco duro.

Pag. 32

También podría gustarte