El Humilde Manual de Un Aprendiz

download El Humilde Manual de Un Aprendiz

of 17

Transcript of El Humilde Manual de Un Aprendiz

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    1/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 1

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    2/17

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    3/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 3

    INTRODUCCIN

    Por qu nos gusta Visual FoxPro?

    Muchos que jams usaron Visual FoxPro tienen la idea de que es un lenguaje que noofrece muchas prestaciones y que no merece ser aprendido.

    Nada ms lejos de la realidad.

    Visual FoxPro, ha sido y sigue siendo, quizs la mejor herramienta RAD (RapidApplication Development) para el desarrollo de sistemas o aplicaciones para bases dedatos.

    Aun hasta el da de hoy, es posible, emprender desarrollos sustentables con VisualFoxPro, ya que aunque su arquitectura fue concebida para los 32 bits, aun presentaplena compatibilidad con el Sistema Operativo Windows 7 y ha sido probado con xitoen algunas versiones beta de Windows 8 como la Consumer Preview.

    Te conviene aprender Fox ya que aun sigue siendo una de las herramientas msproductivas para el desarrollo desktop.

    Posee adems una gran conectividad con los motores de bases de datos mspopulares como Oracle, SQL Server, MySQL, PostgreSql, Firebird y muchos ms.

    Por lo que puedes notar, Visual FoxPro puede trabajar sin problemas con bases dedatos relacionales en el modelo Cliente Servidor.

    Si en algn momento, tu cliente no tiene los recursos econmicos para pagar por unaestructura Cliente Servidor (Windows Server instalado en un rack de un data center, unexperto de redes que configure la IP fija y supervise el funcionamiento de la red, los

    servicios continuos de un DBA(Data Base Administrator), etc), Visual foxPro puede a suvez ofrecer una solucin para estas PYMES.

    Visual FoxPro (VFP) posee un excelente motor de manejo de base de datos nativo, queposibilita el uso compartido de archivos en una red, con una simple arquitectura puntoa punto (la red para trabajo en grupo o red normal de Windows).

    Para quien posee un nivel experto en VFP, las posibilidades en el campo del desarrolloson muy amplias ya que puede explotar la Orientacin a Objetos, la interoperabilidadcon diferentes motores de datos, la tecnologa Rush More (Correr mas aprisa), el usode vistas y cursores nativos de VFP mediante el lenguaje de consultas SQL nativo que

    VFP trae embebido, las vistas remotas, la conexin a servicios web y un largo etctera.

    En fin, lo mejor ser que empieces a comprobarlo por ti mismo, ya que como dijimos,la idea de este manual es que aprendas rpido los fundamentos de la programacincon VFP y no marearte tanto con cosas avanzadas jeje!

    xito en tu proyecto de aprendizaje con Visual FoxPro!

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    4/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 4

    Para Iniciar Visual FoxPro, haga algo como lo siguiente (dependiendo de laversin de Windows):

    1. Haga click sobre el botn de Inicio.2. Elija todos los programas.3. Microsoft visual FoxPro 9.0

    Para empezar, te presentamos laVentana de Comandos.

    Dicha ventana es muy til porque podemos hacer pruebas de cdigo en modointeractivo desde ella.

    Por ejemplo para imprimir en la pantalla de Fox el mensaje Bienvenido a VisualFoxPro, prueba a hacer lo siguiente:

    1.Activa la ventana de comandos en el men Window/Command Window o

    presionando el metacomando Ctrl+F22. Teclea: ? Bienvenido a Visual FoxPro y presiona enter.

    Debiste ver el mensaje en la pantalla principal de VFP.

    Ahora teclea el comando CLEARdesde la ventana de comandos. Qu tal?..

    Ahora, ve directo a la ayuda y prueba los comandos que te interesen:

    1. Click en el Men Help/Microsoft Visual FoxPro Help o presiona F1.

    NOTA.- A menos que se indique lo contrario, los ejemplos de este manual sebasarn en la versin 9 de VFP.

    TRUCO 1. LIMPIAR LA VENTANA DE COMANDOS EN VFP 9

    Si es molesto para ti ver que los comandos que has tecleado siguen sinborrarse al iniciar VFP 9, teclea lo siguiente en la ventana de comandos:

    ? ADDBS(JUSTPATH(SET("RESOURCE",1)))

    Eso nos muestra la ruta donde se encuentra el archivo _command.prg quedebemos convertir a solo lectura para evitar que guarde los comandos quetecleamos.

    En mi caso, en una mquina XP, la ruta est oculta en:

    C:\Documents and Settings\Miusuario\Datos de programa\Microsoft\VisualFoxPro 9

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    5/17

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    6/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 6

    ENTENDIENDO LA FORMA VISUAL DE TRABAJAR

    En visual Fox, si lo que finalmente deseamos es generar un programaejecutable (que funciona aunque no est instalado VFP), debemos agregar todocomo parte de un proyecto. As que entra a Visual Fox y crea un nuevoproyecto.

    Lo primero que creamos en un ambiente visual es la interfaz de usuario o laGUI. Eso equivale a crear las pantallas de captura en los sistemas de modotexto como Fox o clipper. En visual foxpro (y en casi todo lenguaje de OOP) lellamamos formulario.

    Asi que en la cajita del proyecto agrega un nuevo formulario. Estos archivostienen extension .scx y el sistema crear otro archivo de respaldo .sct

    Agregando y configurando controles en el formulario

    Ya que tienes tu formulario en pantalla y lo has guardado como parte delproyecto. Ahora tienes que agregar controles a ese formulario.

    Ejemplo: Nombre del cliente: Raul Lozano Lopez

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    7/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 7

    Nombre del cliente, generalmente sera un control tipo etiqueta que searrastra y pega desde el cuadro de controles de formularios que por logeneral aparece a tu lado derecho de la pantalla. Debes hacer click en laetiqueta y cambiar la propiedad "Caption"en la cajita de propiedadesdel objeto que por lo general veras a tu lado derecho de la pantalla.

    El texto "Raul Lozano Lopez" debera ser colocado en un control de tipo text.Si deseas dar valor de inicio a ese control debers poner ese nombre en lapropiedad "Value"del control text1.

    Si deseas cambiar el nombre desde el cdigo harias esto, generalmente en elevento Init o Activate, del form1 :

    Thisform.text1.value= "Raul Lozano Lopez"

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    8/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 8

    Para hacer referencia a los objetos, en VFP tenemos 3 opciones:

    THISFORM, sirve para hacer referencia al formulario actual.

    THIS, sirve para hacer referencia al control u objeto actual.

    THISFORMSET, sirve para hacer referencia al conjunto de forms actual.

    Tambin, modificando la propiedad Name del control text1, puedescambiarle el nombre del control en el codigo.

    Entonces si le cambiaste el nombre al text1 y le pusiste txtnombrecliente, tureferencia al objeto en el cdigo seria:

    Thisform.txtnombrecliente.value=""

    El cdigo anterior suele ponerse en el evento Refresh()del objeto formulario

    y llamarse al evento cuando se convierte en el formulario activo. Como se haceeso?... Dale click derecho sobre alguna parte del form donde no haya objetos yelige codigo. (En VFP9 SP2, no funciona eso. Usa doble click sobre elcontrol en su lugar).

    Arriba dice: Objeto: Form1, procedimiento: Activate.

    O sea que estamos en el evento Activatedel form1 y ahi ponemos esto:

    Thisform.Refresh()

    Significa que cuando el form1 se vuelva el formulario activo (porque el usuariole dio click o recibi el enfoque mediante cdigo), llamar al eventoRefresh().

    Y ahi en el Refresh del form1 pondremos el cdigo que limpia el control detexto al iniciar el formasignndole una cadena de texto vaca.

    El mtodo Release()se usa para colocar cdigo que libere el formulario antesde salir como Thisform.Release().

    Activate tambin puede servir para ocultar o deshabilitar controles alarrancar el formulario de forma que el usuario no pueda verlos o alterarlos.

    Thisform.txtnombrecliente.visible=.F.

    Thisform.txtciudadcliente.enabled=.T.

    El evento Initse utiliza para declarar variables locales o publicas o desactivaru ocultar controles desde que arranca el formulario.

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    9/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 9

    Tipos de Variables

    El alcance de las variables locales es el control o la rutina (funcin oprocedimiento) de la que forman parte. Para pasar valores desde una rutina aotra, se puede hacer mediante el traspaso de parmetros. Su sintaxis es lasiguiente:

    Local lnVar1, lcVar2

    Donde ln, es una especie de convencin o costumbre para identificar que setrata de una variable local y numrica y lc, local y tipo carcter. Sin embargopuedes usar cualquier nombre para tus variables, siempre y cuando no sea unapalabra que VFP use como instruccin interna (palabras reservadas).

    El alcance de una variable pblica, mejor llamada global, es mucho masamplio y puede ser llamada desde prcticamente cualquier parte del sistema.

    Uno de los inconvenientes de estas variables es que conservan su valor a lolargo de la ejecucin del programa y pueden originar colisiones por arrastrede dichos valores. Para solucionar eso haga lo siguiente al iniciar una variablepblica utilice el comando Release :

    Evento Init

    Release Gnvar1, Gcvar2

    Public Gnvar1, Gcvar2

    UnaVariable Privadaest disponible para el procedimiento que la cre y paracualquier procedimiento que sea llamado por el que la crea o llamado en lacadena de procedimientos inicializada por el que la crea. Cuando finaliza esteprocedimiento, la variable se libera automticamente.

    No es necesario declarar una variable p rivada. Basta con inicializar suvalor.

    Para hacerlo use el signo igual o el comando STORE.

    Ejemplos:

    pnVar1=50 o STORE 0.00 to X

    pcVar2=space(50) o STORE Javier Lopez to pcVar2

    pdfechaactual=date() o STORE Date() to pdfechaactual

    El comando PRIVATEno se utiliza para declarar variables privadas, sinopara convertir una variable pblica en privada, con la ventaja de que su

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    10/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 10

    valor ser el que tenga de forma privada dentro del mdulo, evitando colisionescon el valor que arrastra de forma global.

    Para mayor informacin acerca del alcance de las variables puedes consultar lossiguientes enlaces:

    Alcance en Visual FoxPro - Parte 1

    http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=79

    Alcance en Visual FoxPro - Parte 2

    http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=80

    Public And Private Variables

    http://fox.wikis.com/wc.dll?Wiki~PublicAndPrivateVariables

    Y recuerda que siempre puedes consultar la ayuda de fox.

    Puedes descargar los archivos de ayudaaqu:

    Para VFP 8 en Espaol:

    http://www.portalfox.com/press/index8.htm

    Para VFP 9 SP2 Corregido por la Comunidad Fox mundialhttp://vfpx.codeplex.com/wikipage?title=VFP%209%20SP2%20Help%20File

    La traduccin de ayuda para VFP9 no se realiz.

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    11/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 11

    TRABAJANDO CON DATOS

    El evento Loaddel formulario resulta muy til para declarar configuraciones oseteos y para poner en uso datos desde el arranque de formularios.

    Algunas instrucciones de configuracin comunes son:

    CLOSE DATABASESCierra la base de datos actual y sus tablas.

    CLOSE ALLCierra todas las bases de datos, tablas e ndices de la sesin dedatos actual.

    SET DELETED ON Evita que se muestren y tomen en cuenta registrosmarcados para su eliminacin.

    SET DATE FRENCHConfigura la fecha con format DD/MM/AAAA.

    SET EXCLUSIVE OFFActiva el modo compartido para trabajo en red.

    SET SAFETY OFF Evita que aparezcan mensajes de confirmacin en lapantalla, antes de sobreescribir un archivo existente.

    El evento unload sirve para poner cdigo sobre limpiar y cerrar bases otablas antes de abandonar el formulario.

    Comandos y Funciones Comunes para el manejo de datos

    Para manejar datos, se recomienda el uso de archivos de ndice ya que estos

    funcionan tal como un ndice de un libro, permitiendo buscar sobre unascuantas pginas y una vez que se tiene el nmero de pgina ir directamente aella, en vez de leer de forma secuencial cada pgina.

    En otras palabras, para efectuar bsquedas rpidas en VFP es imprescindible eluso de ndices. Los ndices tambin permiten ordenaruno o varios camposen base a un criterio determinado.

    Por lo general se acostumbra usar ndices estructurales CDXque son comocontenedores que guardan varios criterios de ordenamiento o etiquetas deorden.

    Estos ndices se crean una sola vez y se abren automticamente al abrirlas tablas. Luego, cuando por alguna razn se corrompen, pueden volver agenerarse con la orden REINDEXo bien borrarse y volverse a crear.

    Cabe aclarar que las operaciones de creacin, borrado y regeneracin dendices son tareas que se efectan espordicamente como parte delmantenimientoy requieren del uso exclusivo, es decir, nadie mas debe estarusando las tablas.

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    12/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 12

    Para crear un ndice hacemos lo siguiente:

    SET EXCLUSIVE ON

    USE Mitabla

    INDEX ON ALLTRIM(CampoNombre) TAG CampoNombre

    USE

    Si deseamos crear un ndice de clave compuesta que involucre a mas campos,hacemos esto:

    SET EXCLUSIVE ON

    USE Mitabla

    INDEX ON ALLTRIM(Nombre)+DTOS(FechadeIngreso) TAG NOMBRE

    USE *USE sin parmetros cierra la tabla

    Esto ltimo significa que se crear un archivo de ndice ordenado primeramentepor el nombre y luego por la fecha de ingreso.

    Cuando deseamos utilizar una de las etiquetas de ordenamiento delarchivo de ndice .CDX, despus de poner en uso la tabla, simplemente

    hacemos esto:SET ORDER TOMiCampoEtiqueta

    Ej. SET ORDER TO Nombre

    Otras rdenes tiles para el manejo de tablas son:

    ? Select() Muestra el rea de trabajo actual.

    ? Alias() Muestra el nombre alias de la tabla actual.

    ? used() Determina si hay una tabla abierta en un rea de trabajo especfica.

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    13/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 13

    USE Mitabla IN 0 (Alias)Abre una tabla en la siguiente rea de trabajo librede menor nmero. Puede agregar un nombre alias, pero sino lo especifica, elnombre de la tabla ser tomado como tal.

    Select Mitabla(Cursor) Selecciona una tabla en el rea de trabajo en quefue abierta.

    Ejemplo para abrir tablas:

    SET EXCLUSIVE OFF

    CLOSE DATABASES

    OPEN DATABASE (HOME(2) + 'Data\testdata')

    USE customer IN 0

    USE orders IN 0

    SELECT customer

    BROWSE

    SELECT orders

    BROWSE

    Si ests abriendo las tablas por medio de un grid, es probable de que en alguna

    ocasin te marque un error de que el archivo est en uso. Esto puede debersea que, como veremos ms adelante, Visual FoxPro abre los cursores o tablas enel entorno de datos y al parecer esto se ejecuta antes del evento Load del form.Por ello, cuando intentas poner en uso la tabla, te indica que ya est en uso.

    Para solucionar esto debes poner algo en el evento Load y Unload que cierrelas tablas antes de que se intente poner la misma en uso. Segn tuscircunstancias puedes usar CLOSE DATABASES yCLOSE ALL.

    BOF() Determina si el puntero de registro est situado al principio de una tabla.

    EOF() Determina si el puntero de registro est situado o no ms all del ltimo registrode la tabla actual o especificada.

    GO TOP Sita el puntero de registro en el primer registro de la tabla. Si la tabla tieneen uso un ndice ascendente, el primer registro ser el registro con el valor clave ms

    bajo.

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    14/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 14

    GO BOTTOM Sita el puntero de registro en el ltimo registro de la tabla. Si la tablatiene activo un ndice ascendente, el ltimo registro ser aqul con el valor de clave ms

    elevado.

    GO NumDeRegistro Sita el puntero de registro en el registro indicado.

    RECNO() Devuelve el nmero del registro actual de la tabla actual o la especificada.

    SKIP Mueve el puntero de registro hacia adelante o hacia atrs en una tabla.

    MANIPULACIN DE REGISTROS

    Para poder manipular informacin es necesario comprender algunos conceptos.

    BASE DE DATOS.Es un conjunto de tablas, generalmente relacionadas.

    TABLA.Es una coleccin de informacin estructurada por filas y columnas.

    CAMPO.Vista en renglones y columnas, se referira a una columna quecontiene informacin sobre un mismo tipo de dato. Ej. El campo direccin,contendra todas las direcciones de los clientes.

    REGISTRO.Es una fila de informacin que contiene muchos datos acerca deuna misma entidad. Ejemplo: El registro o fila 7, puede contener el Id, nombre,

    direccin, telfono, etc. de una persona.Para crear una Base de Datospuede utilizar la ficha Data/Databases y elegirel botn New/New database del administrador de proyectos de VFP 9.

    O teclear en la ventana de comandos la orden:

    CREATE DATABASENombreBasedeDatos

    Para crear una nueva Tablapuede utilizar la ficha Data/Free Tables y elegirel botn New/New Table

    Tambin puede crear una tabla mediante cdigo tecleando CREATE en laventana de comandos.

    Agregar registros. Para insertar un nuevo registro en la tabla utilice elcomandoAPPEND BLANK.

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    15/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 15

    Ejemplo:

    CLOSE DATABASES

    USE Mitabla IN 0

    Select Mitabla

    GO BOTTOM

    APPEND BLANK

    USE

    Para agregar registros desde otra tablautiliceAPPEND FROM.

    Ejemplo:

    CLOSE DATABASES

    USE Mitabla IN 0

    SELECT Mitabla

    GO TOP

    COPY STRUCTURE TO MinuevaTablaUSE MinuevaTabla IN 0

    SELECT MinuevaTabla

    APPEND FROM Mitabla

    USE

    Para marcar registros para su borradoutiliceDELETE.

    Ejemplo:

    SET DELETED ON

    USE Mitabla IN 0

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    16/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico, 23 de marzo de 2012 16

    GO TOP

    LOCATE FOR IdCliente=28

    IF FOUND()

    DELETE

    ELSE

    WAIT WINDOW No se localiz el ID del cliente TIMEOUT 2

    ENDIF

    Para eliminar un registrodel disco duro utilicePACK.

    Este PACK solo debe usarse cuando se tiene el modo exclusivo, esdecir, ningn otro usuario est usando las bases de datos o tablas, ysolo con fines de mantenimiento.

    Para modificar manualmente registrosen las tablas utiliceEDIT.

    Para visualizar una tablautiliceBROWSE.

    Para cerrar una tabla utilice el comandoUSE sin parmetros.

    Controlar el enfoque

    El evento LostFocus() le indica a fox que debe hacer cuando el controlpierde el enfoque. (o sea que el usuario hizo click en otro objeto o bien, sepuso el enfoque en otro control va cdigo).

    El mtodo SetFocus(), pone el enfoque en cierto control (como si el usuariohubiera hecho click sobre el).

    Ejemplo: Thisform.txtcliente.setfocus()

    El evento GotFocus() le indica a fox que debe hacer cuando un controlrecibe el enfoque.

  • 7/22/2019 El Humilde Manual de Un Aprendiz

    17/17

    EL HUMILDE MANUAL DE UN APRENDIZ. (O Los 35 trucos ocultos de Visual FoxPro).

    Mxico 23 de marzo de 2012 17

    El evento click(), le indica a fox que debe hacer cuando el usuario ( omediante cdigo) hizo un click sobre el objeto. Para provocar un click mediantecdigo sera:

    Ejemplo: Thisform.txtcliente.click()

    El evento Keypress(), permite colocar el tpico cdigo para que al presionarcierta tecla como F7, se realice una accin como llamar a otro formulario quecontiene generalmente un grid para efectuar bsquedas.

    Ejemplo:

    Evento Keypress() del form.

    ON KEY LABEL F7Wait WindowSe ha presionado F7 TIMEOUT 2

    Como regresar el enfoque al mismo control

    Uno de los mtodos que pueden ser de gran utilidad para validar que lainformacin introducida en cierto control cumpla con ciertos criteriosnecesarios es el mtodo valid().

    Cabe aclarar que el mtodo Valid(), se dispara antes del evento LostFocus()en la secuencia de eventos , por lo que debe idear una estrategia parasalir de l, pues de otra forma podra obligar al usuario a teclear datos que enocasiones no son del todo necesarios y pueden provocar molestia al usuario.

    Para aprender ms acerca de la secuencia de eventos, consulte este artculo:

    http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=26

    El formato para utilizar correctamente el mtodo Valid(), es el siguiente:

    SelectMitabla

    Locate forCampoaBuscar = This.value

    If found()

    * Pon aqu tus instrucciones para hacer lo que necesitas

    Else* Enviar aviso de no encontrado

    Return 0

    Endif