162
1 Curso Teórico práctico de Programación Desarrolle aplicaciones de alta performance y robustez en pocos minutos

Domine Vfp9sp2

Embed Size (px)

Citation preview

  • 1Curso Terico prctico de Programacin

    Desarrolle aplicacionesde alta performance yrobustez en pocosminutos

  • 2Sobre el Autor

    Ernesto Fabin Coronel ~ Analista de Sistemas en Computacin.Es egresado de la U.E.P 69 de la ciudad de Villa ngela, Chaco, con el Titulo de Analista deSistemas en computacin. Se ha iniciado en el mundo de la informtica desde los principios delos aos 1980 cuando los microordenadores eran grotescos teclados que se conectaban a losviejos televisores y el nico lenguaje en estos dispositivos era el famoso Basic, y los manualesestaban en ingles y portugus ya que la mayora de ellos venan del Brasil.

    Actualmente trabaja como desarrollador de software y consultor informtico en el rea deempresas y usuarios hogareos.Es estudiante de Abogaca en la Facultad de Derecho de la UNNE de la ExtensinUniversitaria de General Pinedo, es autodidacta en Idioma de Ingles y Ruso.

  • 3DOMINE VISUAL FOXPRO 9.0 SP2 Introduccin

    INTRODUCCION

    El avance que ha experimentado el desarrollo del software hace que un programador odesarrollador de sistemas informticos deba usar como herramienta de programacin dos yhasta tres lenguajes para obtener una aplicacin final. Por suerte con Visual FoxPro nonecesitamos llegar a este punto, disponemos de todas las herramientas para generar tantos lasclsicas aplicaciones de sistemas tales como administracin, gestin , pos y como si esofuera poco podemos desarrollar aplicaciones para Pda y Palm, permitiendo portabilidad dedatos y aplicaciones en forma remota y online en caso de ser necesario.!!Visual FoxPro no conoce lmites, su gran capacidad de almacenamiento en tablas y suenriquecido entorno I.D.E, cumpliendo con los estndares del tipo RAD, esto nos permitegenerar todo tipo aplicacin en pocas horas y minutos en algunos casos.A partir de la versin 7.0 Visual FoxPro se hace multi lenguaje, se puede desarrollaraplicaciones en diferentes idiomas con tan solo tener configurada la configuracin regional deWindows y Listo!!. Esta prestacin entre otras, hizo posicionar a esta herramienta dedesarrollo en Nmero 1 para los programadores y desarrollares en distintos pases del mundo.Despus de varios aos Microsoft incorpora esta utilidad en otros lenguajes.Esta manual pretende ser una gua para toda persona que le gusta o son entusiastas en el artede programar o desarrollador, concepto adoptado para adaptarlo a los nuevos paradigmas delos lenguajes de programacin actuales.En programacin el mejor profesor es la experiencia, y al igual que el piloto comercial omilitar, uno elige al mas avezado y con mejor experiencia, en el desarrollo de sistemas lashoras de desarrollo y herramientas de avanzada convierten al programador o desarrollador enel favorito para ganarse un lugar entre los genios de eso que es tan temido por algunosllamado programacin. Al igual que en medicina, la teora y la practica es un todo, endesarrollo de programacin es lo mismo.La programacin de Pcs tiene algo divino: Absolutamente de la la nada aparecen sistemas oprogramas maravillos y muy complejos, sea Usted un creador y desarrollar de sistemas, a estoapunta este libro.Antes de comenzar con el desarrollo de Visual FoxPro, damos una breve resea til en ciertosconceptos generales a cualquier lenguaje de programacin y refrescamos la memoria paraesos que cometen el error de saltar la teora, para ir a escribir cdigo en la Pcs.

  • 4DOMINE VISUAL FOXPRO 9.0 SP2 Agradecimientos

    AGRADECIMIENTOS

    La inmortalidad es un sueo casi inalcanzable para algunos, no para los ms futuristas, perouna forma de tener una pizca de inmortalidad, es tener hijos, una familia, unos amigos yescribir un libro.

    Agradezco a mi familia por siempre, por apoyarme en el tiempo que no les dedique, por estarabocado en mi proyecto de escribir este libro.A mi esposa Julia e hijos: Igor, Ernesto y Cristina.

    DEDICATORIASA mis amigos:A Michi, Marcos,Lus, Julio, Guille, Cacho, Pablo y Sergio alias pegui por el apoyoincondicional en la Universidad y las incontables cenas de estudio.A Vitalii Schev SPACIBO DRUG ( gracias amigo en ruso)Especialmente a nuestra Querida Presidenta de la Nacin: Cristina Isabel Fernndez deKirchner. DIOS SALVE VUESTRA HONORABILIDAD.

    A todos GRACIAS, os quiero.

    Todas las marcas mencionadas en este libro son propiedad de sus [email protected]

  • 5VISUAL FOXPRO 9.0 SP2 Capitulo Preliminar

    QU ES UN LENGUAJE DE PROGRAMACION?Es un lenguaje que se utiliza para controlar el comportamiento de una mquina,particularmente de las computadoras. Un conjunto de reglas sintcticas y semnticas quedefinen la estructura y el significado de sus elementos, respectivamente. Un lenguaje deprogramacin le permite al programador especificar con precisin sobre qu datos unacomputadora debe operar, cmo deben ser almacenados y transmitidos, y qu acciones debetomar bajo determinadas circunstancias. Todo esto, mediante un lenguaje que intenta estarrelativamente cerca del lenguaje humano o natural.

    QU ES LA PROGRAMACIN?En trminos informticos, se denomina programacin a la creacin de un programa decomputadora, un conjunto de instrucciones que la computadora puede interpretar, ya seacdigo mquina compilado e interpretado directamente desde el ncleo del sistema operativo odesde un Script, o cdigo fuente interpretado en tiempo de ejecucin o uso. El programa sepuede escribir en un lenguaje de programacin o directamente en lenguaje de mquina. steltimo trae aparejadas ciertas dificultades. Un programa se puede dividir en partes o mdulos,que pueden estar escritos en lenguajes distintos.

    QU ES UN PROGRAMADOR?Se denomina programador a toda aquella persona que escribe programas o software paracomputadoras, que permiten optimizar tareas de diversos tipos. Un programador que tambinrealiza anlisis de sistemas y diseo puede denominarse analista / programador.

    QU ES UN ALGORITMO?Un algoritmo es secuencia ordenada y sistemtica de pasos que lleva a la solucin de unproblema o realizar cierto clculo complejo. Se debe tener en cuenta la importancia del ordende las operaciones. El programador debe tener la habilidad de para deducir algoritmos a partirde un problema, ya que esta tarea conforma el primer paso para la implementacin decualquier aplicacin de software de software. Los diagramas de flujo ayudan en forma visual yprecisa en los puntos de decisin.

  • 6VISUAL FOXPRO 9.0 SP2 Capitulo Preliminar

    PROGRAMACIN ORIENTADA A OBJETOS: DEFINICINLa programacin orientada a objetos (POO u OOP, segn sus siglas en ingls) define losprogramas en trminos de clases de objetos, objetos que son entidades que combinan estado(es decir, datos), comportamiento (esto es, procedimientos o mtodos) e identidad (propiedaddel objeto que lo diferencia del resto). La programacin orientada a objetos expresa unprograma como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas.Esto permite hacer los programas y mdulos ms fciles de escribir, mantener y reutilizar. Deesta forma, un objeto contiene toda la informacin, (los denominados atributos) que permitedefinirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e incluso entreobjetos de una misma clase, al poder tener valores bien diferenciados en sus atributos). A suvez, dispone de mecanismos de interaccin (los llamados mtodos), que favorecen lacomunicacin entre los objetos (de una misma clase o de distintas), y en consecuencia, elcambio de estado en los propios objetos. Esta caracterstica lleva a tratarlos como unidadesindivisibles, en las que no se separan (ni deben separarse) informacin (datos) yprocesamiento (mtodos). - Dada esta propiedad de conjunto de una clase de objetos, que alcontar con una serie de atributos definitorios requieren de unos mtodos para poder tratarlos(lo que hace que ambos conceptos estn muy entrelazados), el programador debe pensarindistintamente en ambos trminos, ya que no nunca debe separar o dar mayor importancia alos atributos en favor de los mtodos, ni viceversa. Hacerlo puede llevar al programador aseguir el hbito errneo de crear clases contenedoras de informacin por un lado y clases conmtodos que manejen esa informacin por otro lado (llegando a una programacinestructurada camuflada en un lenguaje de programacin orientado a objetos). - Esto difiere dela programacin estructurada tradicional, en la que los datos y los procedimientos estnseparados y sin relacin, ya que lo nico que se busca es el procesamiento de unos datos deentrada para obtener otros de salida. La programacin estructurada anima al programador apensar sobre todo en trminos de procedimientos o funciones, y en segundo lugar en lasestructuras de datos que esos procedimientos manejan. En la programacin estructurada seescriben funciones y despus se les pasan datos. Los programadores que emplean lenguajesorientados a objetos definen objetos con datos y mtodos, y despus les envan mensajes a losobjetos para que realicen esos mtodos. - Algunas personas tambin distinguen la POO sinclases, que a veces se denomina programacin basada en objetos.

  • 7VISUAL FOXPRO 9.0 SP2 Capitulo 1

    BIENVENIDOS!

    El Administrador de Proyectos.

  • 8VISUAL FOXPRO 9.0 SP2 Capitulo 1

    El Administrador de Proyectos.

    El Administrador de proyectos es la herramienta principal para construir nuestras aplicaciones.A travs de esta herramienta comenzaremos a disear, modificar y ejecutar todas las tareascomunes a nuestro proyecto. Todo nuestro desarrollo rondara entorno a un proyecto.

    A travs de esta herramienta contenedora de tipo visual, estara todo al alcance de nuestrasmanos pudiendo de esta manera organizar todo en un solo proyecto, siendo esto las bases dedatos, Tablas libres, Formulario, Consultas, Menes , Clases, Libreras, Programas, imgenesque harn a nuestras aplicaciones mas vistosas y tambin podemos incorporar los famososformatos Gifs animados para que nuestras aplicaciones tengan una apariencia de estar vivosal tener movimientos. El buen diseo grafico de nuestros sistemas har que sean masvendibles nuestros productos.

    En la Figura 1 podemos observar el proyecto llamado Ivaempre, podemos ver que contieneseis solapas principales ordenadas por el contenido segn el tipo de archivos. Si hacemos clicen Data, podremos ver a las bases de datos, tablas libres y consultas contenidas en ella.

    Figura 1. El Administradorde Proyectos junto con laventana Command

  • 9VISUAL FOXPRO 9.0 SP2 Capitulo 1Iniciando El Administrador de Proyectos.Cuando iniciamos un nuevo proyecto, el mismo estar vaco, en el podemos ir agregandonuestros elementos o bien agregar los existentes en el.

    Iniciemos un proyecto nuevo a modo de ejemplos. Iniciemos Visual Foxpro y cuandoaparezca el men hacemos clic en File, Luego en New y se nos aparecera un cuadro deopciones que estar marcada por defecto en proyecto y hacemos clic en New File.

    Se debe ingresar un nombre de Proyecto, ingresamos el nombre de example 1 y hacemosclic en Save. En la figura 2. Tenemos un ejemplo de cmo empezar.

    Figura 2. Iniciando elAdministrador deproyectos

  • 10

    VISUAL FOXPRO 9.0 SP2 Capitulo 1Estaremos frente a una pantalla similar a la figura 3. Inicio de un proyecto Nuevo.

    Figura 3. Proyecto example 1

  • 11

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Proyecto Example 1 con todas las opciones principales desplegadas. Figura 4

    Figura 4. Proyectoexample 1

    Ahora estamos listos para empezar a desarrollar una aplicacin con todas sus opciones de:Bases de Datos, Tablas Libres, Consultas, formularios, Reportes, Etiquetas, Libreras deClases, Cdigo de programa (muy til para configurar las opciones de inicio de nuestrasaplicaciones), Mens al mejor estilo Windows y adems poder agregar las imgenes e iconosque harn mas intuitivas nuestros sistemas.

    Ahora es el momento de empezar a conocer las opciones de trabajo del Administrador deProyectos. Empecemos!!

  • 12

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Si disponemos de un monitor de 17 Pulgadas como mnimo, no ser necesario hacer clic encada solapa, ya que teniendo desplegada la solapa todos, podremos ver todas las opcionesnecesarias para trabajar.

    Comencemos mencionando brevemente las cinco solapas del Administrador de Proyectos.

    Datos:Se desplegara una figura tal cual como lo muestra la figura 5.

    Figura 5. DatosDesde aqu estamos en condiciones de crear o agregar una base de datos, que actuara comocontenedor de las tablas dependientes, lo cual nos va a permitir desplegar todo la potenciarelacional que dispone Visual FoxPro con las tablas dependientes y para los programadorestipo Xbase (Dbase, Clipper, etc) existe la posibilidad de trabajar con tablas libres y contamos

  • 13

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Adems con la opcin de crear o agregar consultas, esto no es ms que comandos SQLautomatizados en cuestin de minutos con un asistente intuitivo.

    Documentos:En esta solapa sera pasaremos la mayor parte de nuestro tiempo, ya que desde aqu pondremostoda nuestra potencia y creatividad a la hora de disear aplicaciones. La Figura 6 nos muestralas opciones que disponemos: Formularios, Informes, y etiquetas. Es la solapa conocida comola de trabajo ya que la interfase que vern los usuarios de nuestras aplicaciones, serncreadas, modificadas y rediseadas desde aqu.

    Figura 6. Documentos

  • 14

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Clases:en la figura 7 tenemos la figura de clases, esta herramientas nos permite ahorrar horas y horasde programacin una vez que hayamos desarrollado varias aplicaciones ya que demanda untiempo considerable el diseo de las misma, ya que tenemos clases visuales y no visuales,tambien tenemos la posibilidad de utilizar clases de otros programadores que no estenprotegidas, Visual FoxPro es pionero y unos de los primeros lenguajes en ofrecer estaherramienta de avanzada desde hace mas de 10 aos atrs, ya que evita que el programador odesarrollador malgaste horas de escritura de codigo y diseo repetitivo para la mismaaplicacin como asi tambien como para otras. Aqu entra en juego conceptos nuevos enprogramacin de Clases, Herencia, y polimorfismos. Se ha dedicado un capitulo entero sobreeste tema ya que es muy complejo explicarlo en unas pocas lneas.

    La clase debe tener un nombre y estar basada en un objeto o en una clase no visual y estaralmacenada en un lugar determinado.

    Figura 7. Clases

  • 15

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Code:En esta solapa code (Figura 8) podremos incluir nuestros programas (prg), que sern muytiles al momento de iniciar nuestras aplicaciones y las bibliotecas de Windows (API) y otraslibrerias propias como lo que maneja Visual FoxPro (FLL). Al momento de desarrollar nuestraaplicacin de ejemplo daremos ejemplos prcticos sobre estos temas.

    Figura 8. Code

    Other :En esta solapa contamos con la posibilidad de agregar mens a nuestras aplicaciones ytambin imgenes tipo bmp, jpg, y archivos gif animados.

  • 16

    VISUAL FOXPRO 9.0 SP2 Capitulo 1Asistentes rpidos.Comenzaremos con mostrar con un ejemplo para ir viendo las virtudes del tipo R.A.D quetenemos para desarrollar aplicaciones en tiempo mnimo. Empecemos con dos ejemplos:

    Iniciemos Visual FoxPro y en caso de no estar abierto el proyecto example 1, (Visual FoxProcrea por defecto dentro de la carpeta mis documentos una carpeta especial llamada VisualFoxPro Projects) debemos abrirlo haciendo Clic en File -> Open y buscamos el proyectoexample 1 y hacemos clic en OK. Tal cual como lo muestra la siguiente figura 9.

    Figura 9. abrir el proyecto example 1De esta manera ya estamos listos para trabajar con nuestro primer proyecto example 1.

  • 17

    VISUAL FOXPRO 9.0 SP2 Capitulo 1Teniendo abierto el proyecto example 1, ya estamos comenzando a disear nuestra primeraaplicacin. En primer lugar debemos seleccin la solapa data en caso de estar activada laopcion de todos, hacemos clic en Databases, y luego en New para crear la Base de datos,esto es para crear una base de datos que actuara como contenedor de todas nuestras tablasdependiente de la base de datos a crear, luego se mostrara en un pequeo formulario tituladoNew Database, hacemos clic en la opcion New Database que muestra como figura unahoja en Blanco con un pequeo doblado en el margen superior derecho .

    Figura 10. Creando unabase de datos.

    Una vez hecho clic en el botn New Database, Tendremos una imagen similar en pantalla a lafigura 11 en la que se nos pedir en nombre de la Base de Datos , la llamaremos con elnombre de sistema y hacemos clic en save o guardar.

  • 18

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 11. Creacin de la base de datos sistema.

    Ahora estamos listos para empezar a trabajar y definir nuestras tablas dependientes en nuestrocontenedor de tablas llamado sistema, RECORDAMOS QUE EN CAPITULOS MASADELANTE, tablas es el nombre con que se designa al archivo que en forma fsica seguardan los datos de nuestro sistema, por ejemplo el de clientes, proveedores, etc.detallaremos todo sobre bases de datos y tablas dependiente y libres. Manos a la obra ahoraestamos con el diseador de base de datos y podemos comenzar a crear nuestras tablas paranuestro proyecto. A partir de este momento tendremos en pantalla la imagen de la figura 12que nos permitir crear, agregar, modificar nuestras tablas.

  • 19

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 12. Creacin de tablas

    Ahora tenemos dos opciones podemos hacer clic con el lado derecho del Mouse y elegimos laopcion de New Table o bien hacer clic en para crear nuestra primera tabla, hagamos clicen cualquiera de estas dos opciones y estaremos en condiciones de empezar a definir loscampos que seran de nuestra utilidad para el desarrollo de nuestra aplicacin. Ahora debemosescoger la opcion de New tabla como lo muestra la figura 13.

  • 20

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 13. Creacin de tablas

    Ahora es el momento de introducir el nombre de nuestra tabla, la llamaremos clientes yhacemos clic en guardar. Ahora debemos designar cuales sern nuestros campos a utilizar paranuestra tabla, solamente utilizares a modo de ejemplo unos nombres de campos bsicos talescomo: idcliente, nombres, direccin, telfono, ciudad,provincia,email.

    Los campos a completar sern como los muestra la figura 14. En la definicin del tipo decampo nos limitaremos a definirlos a todos como carcter a modo de ejercicio practico y en elancho podemos aumentar o disminuir segn nuestras necesidades, tengamos en cuenda que alaumentar el ancho de los campos y ser estos muy extensos se superpondrn unos sobre otros ola informacin se cortara al no alcanzar el ancho del tamao de la hoja en la cual debemosimprimir el informe. Luego hacemos clic en OK y estaremos listos para introducir nuestrosdatos.

  • 21

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 14. Diseador de Tablas

    Ahora el paso a seguir es muy fcil, una vez hecho clic en botn OK, estaremos de nuevo en eldiseador de bases de datos, lo cerramos y ahora estamos listos para disear nuestro primerformulario para la introduccin de datos.

    Hacemos clic en caso de ser necesario en la solapa Docs, y luego en clic en Form y por ultimoclic en New y luego en Form Wizard (Asistente de Formularios). Esto esta graficado en lafigura 15.

  • 22

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 15. Asistente deFormularios.

    A partir de este momento comenzamos a disear nuestro formulario. Escogemos la primeraopcin de Form Wizard y presionamos OK. Tal como lo muestra la figura 16.

    a partir de ahora debemos hacer clic en todostodos los next (siguientes) a fin de obtenernuestro tan querido formulario. Pero antesvamos a mostrar una parte importe antes dehacer clic en todos los next.

    Figura 16. Asistente de Formularios

  • 23

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Ahora debemos hacer clic en la flecha doble que seala hacia la derecha para que todoslos campos sean seleccionados. Aqu vemos un detalle muy importante que es que en formaautomtica ha seleccionado la base de datos SISTEMA y la tabla CLIENTES, esto se hahecho posible ya que al tener activado el proyecto example 1 las base de datos con todassus tablas estn en memoria y en la carpeta Visual FoxPro Projects que es donde estamostrabajando como lo muestra la figura 17.

    Figura 17.Asistente deFormularios

    De aqu en mas solo debemos hacer clic en Next, hasta llegar al Paso 4 en que debemosseleccionar la opcin save and run form y luego hacemos clic en Finish como lo muestra lafigura 18. Al final se nos pedir un nombre para guardar el formulario, lo llamaremosclientes, y haremos clic en guardar, si hemos hecho todos los pasos en forma correcta elasistente nos sugerir el nombre clientes. En lo posible debemos introducir por lo menos 10datos de personas para verlos reflejados en el informe.

  • 24

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 18.Asistente deFormularios

    Aqu tenemos un ejemplo de nuestro primer formulario creado para la introduccin de datos.

    Figura 19. Vista de un formulario creado con el asistente

  • 25

    VISUAL FOXPRO 9.0 SP2 Capitulo 1Asistente para Informes Rpidos.Con este ultimo ejemplo mostraremos como crear Informe con el asistente rpido, todos lospasos a ejecutar son similares al igual que en la creacin de formularios.

    Comencemos. Estando abierto el proyecto abierto en la solapa All nos situamos en la opcinDocuments y hacemos clic en Report y hacemos clic en la opcin de Report Wizard ydespus hacemos clic en Report Wizard y se nos mostrara una pantalla similar a la figura 20.A partir de aqu debemos prestar especial atencin porque vamos a seleccionar los camposnecesarios para emitir nuestro informe de acuerdo a nuestras necesidades.

    Figura 20. Asistente para lacreacin de informes.

    Desde este momento nuestro desafi aumenta ya que debemos seleccionar los campos:nombres, direccin, ciudad, telfono y nada ms. Para esto utilizaremos la flecha de seleccinde campos.

    Es muy posible que necesitemos abrir la tabla cliente para disear nuestro informe,entonces haremos lo siguiente.

  • 26

    VISUAL FOXPRO 9.0 SP2 Capitulo 1En caso de ver una pantalla similar a la figura 21, en la se no este activa ninguna tabla,debemos hacer clic en el boton que esta a la derecha de Free Tables y buscamos la tablaclientes. La seleccionamos y hacemos clic y aceptamos o directamente pulsamos doble clicsobre ella y de esta manera tendremos en memoria la tabla clientes activa que depende de labase de datos example 1.

    Figura 21. Diseode informes.

    Una vez hecho esto tendremos una figura similar a la figura 22 y demos seleccionar loscampos necesarios para nuestro informe final y estos campos sern: nombres, direccin,ciudad, telfono.

    Esto se puede hacer seleccionando los Campos Disponibles con la flecha y los campos quehas sido seleccionado pasaran al lado derecho en el cuadro de campos seleccionados y deesta manera haremos clic en Next.

  • 27

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 22.Seleccin decampos.

    Ahora se nos pedir que seleccionemos por que grupo de registros lo queremos agrupar,seleccionamos None , y hacemos clic en Next > y tendremos una pantalla similar a la figura23.

  • 28

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 23.Agrupamiento deregistros.

    Hacemos clic en Next > y en el paso 3 elegimos el estilo de reporte estndar y en el paso 4debemos seleccionar en definir el diseo de informe el estilo porta retrato, pantallarepresentada en la figura 24. Hacemos clic en Next >

    Figura 24.Diseo deinforme

  • 29

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Ahora estaremos en el paso 5 debemos optar por que campo ordenaremos los registros denuestro informe, seleccionamos el campo idcliente y hacemos clic en para quequede ordenado por el campo idclientes , hacemos clic en Next > y estaremos frente a la figura25, por el cual el campo ya estar ordenado por el campo idclientes.

    Figura 25.Ordenacin deregistros.

    En este momento estamos en el paso 6 en el cual debemos hacer clic en la opcin guardar yejecutar el informe, clic en Finish para finalizar. De esta manera estaremos en la presencia dela figura 26. Se nos pedir un nombre para nuestro informe, lo llamaremos clientes tal cual losugiere el sistema.

  • 30

    VISUAL FOXPRO 9.0 SP2 Capitulo 1

    Figura 26.guardar yejecutar elformulario

    Et Voila Monsier !. Aqu tenemos un ejemplo de lo fcil que es disear sistemas en VisualFoxPro 9 sp2.

  • 31

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Bases de Datos y TablasTabla: Conjunto de datos almacenados en un archivo DBF, si una tabla no forma parte de unaBase de Datos se le denomina Tabla Libre. Base de Datos: Conjunto de Tablas relacionadasEn el mundo de la programacin es muy comn de hablar de Bases de Datos, ya existendiferentes lenguajes que utilizan este concepto lo cierto es que adaptado a VFP podramosdecir que constituye una BD una coleccin de tablas y dems elementos que iremos detallandodetenidamente, esto quiere decir que la BD en VFP actuara como contenedor de las tablas,sean estas libres o dependientes, entonces el termino tabla utilizaremos para designar a unaarchivo tipo DBF, que esto si seria una coleccin de registros. A modo de ejemplo, lograficamos en la Figura 1, aqu tenemos a la BD con el nombre Contenedor que estacompuesta las tablas: empresa, clientes, provedor, tpfiscal, compfac, compras, ventas.

    Tambin existen 2 vistas locales: ivdh y icdh

    Figura 1. Base de Datos con tablas y dos vistas locales.

  • 32

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    CONTENIDO DE UNA BASE DE DATOS.De acuerdo a lo que estamos describiendo, mencionaremos detallaremos los elementos masimportantes que conforman una base de datos en VFP

    Tablas Relaciones Integridad Referencial Procedimientos almacenados Consultas Vistas locales y remotas

    Al crear una BD, como es fcil de advertir, la BD estar completamente vaca y por lo tantodebemos ir creando nuestras tablas para almacenar nuestra informacin, el nombre de lastablas debern ser nombradas de acuerdo a la finalidad de la misma, como por ejemplo sicreamos una tabla que contendr los datos de los alumnos profesores de una escuela, lolgico es que una tabla se le nombre como alumnos y a la otra profesores y a la BDescuela

  • 33

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    COMANDOS E INSTRUCCIONES PARA EL MANEJO EN BASES DE DATOS.Existe dos formas de trabajar con las instrucciones en BD, una es a travs de los menescontextuales que dispone VFP, que es la mas amigable e intuitiva, o podemos escribirlosdirectamente en la ventana Command, muchos programadores que trabajan desde versionesantiguas de VFP, hacen casi todo desde la ventana Command, pero para los nuevosprogramadores pueden optar por un mtodo u otro.

    Create DatabaseCreamos una BD nueva y se activa automticamente. Desde la ventana Command , podriamosescribir por ejemplo CREATE DATABASE escuela. Desarrollemos un ejemplo maselaborada desde la Ventana Comandos, escribiremos lo siguiente para crear la BD escuelay una tabla materias

    CREATE DATABASE escuelaCREATE TABLE materias (CodeName C (3), DescName C (20))CLEARDISPLAY TABLES && despliega las tablas en la base de datosDISPLAY DATABASES && despliega la informacin de las tablas incluidas en la base dedatos

    Modify DatabaseAbre la el generador de BD para modificar o introducir tablas nuevas por ejemplo, y ahpodemos ver todas las bases creadas desde VFP, en la cual se abre en un cuadro desplegable.

  • 34

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    OPEN DATABASENos permite abrir una BD creada previamente, recordemos que VFP abre las bases de datos enforma SHARED (compartida) esto significa que si necesitamos modificar la misma base dedatos o tablas cuando estemos programando ser necesario en algunos casos abrirla en formaEXCLUSIVE .OPEN DATABASE [FileName | ?] [EXCLUSIVE | SHARED] [NOUPDATE] [VALIDATE]

    FileNameEspecifica el nombre de la base de dato para abrir. No es necesario especificar una extensinpara el nombre de archivo, Visual FoxPro asigna Automticamente la extensin .dbc

    ?Despliega la caja del dilogo Abierto que usted puede escoger en una base de datos existente opuede entrar el nombre de un nuevo formulario para crear. Esto lo hemos visto al usar elcomando MODIFY DATABASE.

    EXCLUSIVEAbre la base de dato en modo exclusivo. Si usted abre la base de datos exclusivamente, otrosusuarios no podrn acceder y ellos recibirn un error si ellos intentan tener acceso. De todasformas podemos fijar con el comando SET EXCLUSIVE el estado de compartido o exclusivo.

    SHARED

    VFP abre las bases de datos en modo Compartido (shared). De esta forma todos los usuariosque estn conectados en red con nuestro sistema podrn usar nuestra base de datos. Una vezque distribuyamos nuestras aplicaciones para evitar errores de acceso a los datos podemos fijarel comando SET EXCLUSIVE ON para que todos los usuarios puedan acceder desde la red ala base de datos.

  • 35

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    NOUPDATE

    Especifica que los cambios no pueden ser hechos en la base de datos, en otras palabras, la basede dato es de solo lectura solamente. El contenido de la base de datos no ser modificado nitampoco sus tablas, esta es una utilidad a considerar para los usuarios novatos.

    VALIDATE

    Especfica que VFP verifique si las referencias in la base de datos son validas. VFP chequealas referencias de los ndices estn disponibles en el disco. VFP tambin chequea los camposque contienen ndices de etiquetas dentro de la tabla si estn validos o corruptos.

    SET DATABASE TO

    Fija una base de datos determinada, cuando tenemos varias en memoria, esto tambin esposible utilizado

    DELETE DATABASE

    DELETE DATABASE DatabaseName | ? [DELETETABLES] [RECYCLE]

    DatabaseName

    Especifica el nombre de la base de datos para anular del disco. La base de datos que ustedespecifica no puede estar abierta. DatabaseName puede incluir el camino a la base de datoscon el nombre de la base de datos. Es muy importante utilizar esta comando ya que eliminatanto la base de datos como las referencias que tengan las tablas contenidas en la base dedatos, no es recomendable borrar desde el sistema operativo ya las tablas contendrn lainformacin de las cabeceras que apuntan a la base de datos, esto quiere decir que al intentarabrir las tablas que estn contenidas dentro de base de datos dar un error.

  • 36

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    PACK DATABASELuego de eliminar una tabla de la BD, queda la referencia de esa tabla, que la hemos borradoen forma lgica, de la misma manera que con los registros de una tabla, tenemos la posibilidadde empaquetar los datos y borrar fsicamente las tablas.

    ?

    Despliega el cuadro de dialogo desde donde usted puede elegir la base de datos a eliminar.

    DELETETABLES

    Elimina las tablas contenidas en la base de datos desde el disco y la base de datos.

    RECYCLEEspecifica que la base de datos no se borra inmediatamente del disco y se la enva a laPapelera de reciclaje.

    VALIDATE DATABASE [RECOVER] [NOCONSOLE] [TO PRINTER [PROMPT] TOFILE FileName]RECOVER

    Despliega el cuadro de dialogo para localizar las tablas e ndices que no encuentran ubicadosdentro de la base de datos. Comenzando desde la versin de VFP 7, la clusula es soportada enlos programas.

    NOCONSOLE

    Suprime el mensaje de salida en la ventana principal de VFP o la ventana activa definida porel usuario.

  • 37

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    TO PRINTER [PROMPT]

    Enva el mensaje de salida de error desde VALIDATE DATABASE hacia la impresora

    PROMPT despliega el cuadro de dialogo antes de iniciar la impresin. Ubique el parmetroinmediatamente despus de TO PRINTER.

    TO FILE FileName

    Enva la salida del mensaje de error para un archive especificado con FileName. Si el archivoexiste y SET FAFETY esta en ON, se le preguntara si usted quiere sobrescribir el archivo.

    CLOSE DATABASECLOSE [ALL | ALTERNATE | DATABASES [ALL] | DEBUGGER | FORMAT | INDEXES| PROCEDURE | TABLES [ALL]]

    Cierra la Base de Datos que esta en memoria y todas sus tablas, si establecemos el parmetroALL cierra todas las bases datos abiertas.

    Dbc()Despliega el nombre de la base de datos en memoria y su ruta de acceso. No debemosolvidarnos de anteponer el ? antes del comando para que la podamos visualizar.

    DbUsed()Con esta funcin podemos saber si una Base de Datos esta en memoria.

    DISPLAY DATABASE [TO PRINTER [PROMPT] | TO FILE FileName [ADDITIVE]][NOCONSOLE]Despliega la informacin sobre la base de datos.

  • 38

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    CONCEPTO DE AREA.Este es el momento estamos en condiciones, de comenzar a trabajar con tablas. Con el simplehecho de abrir una tabla, ya estamos accediendo a su informacin, esta accin de abrir unatabla cualquiera supone que se carga en un lugar de la memoria, en otras palabras en un readeterminada. Podemos abrir tantas tablas como sean necesarias, el nico limite es de 255tablas, claro esta que difcilmente necesitemos mas 64 tablas por base de datos, esto ya es masque suficiente.

    Es muy fcil acceder a la informacin de todas las tablas, ya las mismas estn accesibles enforma paralela. Podemos hacer esto con la ventana Sesin de Datos, como lo muestra la figurasiguiente. A modo de comentario es necesario recordar que con VFP 9 SP2 podemosdesarrollar nuestras aplicaciones para plataformas de Windows 98 en adelante, y nuestrasaplicaciones podran corren en Pcs con 64 Mb de R.A.M Y UN PROCESADOR DE 400MHZ, hacer esto es casi imposibles con otros lenguajes de programacin . Por lo tanto vale lapena programar en VFP 9 SP2 por lo escasos recursos que necesitamos en hardware.

    Ventana Sesin de Datos.

  • 39

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    TABLAS DEPENDIENTES Y TABLAS LIBRES.Recordaremos que una tabla que se encuentra en una base de datos esta enlazada a ella. A estoes lo que llamamos tabla dependiente. Por otro lado podemos crear la tabla fuera de ella, loque la convertira en tabla libre. Las diferencias entre ellas son abismales, ya que las tablasdependientes disponen de mayores prestaciones tanto a nivel de campos y la misma base dedatos. En lo posible debemos trabajar con tablas dependientes, pero esto queda a criterio del laexperiencia y gusto del programador ya que en la actualidad todava existen muchosprogramadores de VFP que prefieren trabajar con tablas libres.

    Detallaremos las principales prestaciones que de las tablas dependientes en una base datos.

    Nombres largos para la tabla y los campos Propiedades de campos Propiedades de registros Triggers ndices principal y candidatos Relaciones permanentes Integridad referencial Procedimientos almacenados

    Se amplia las prestaciones eliminando las antiguas limitaciones que tenamos con las tablaslibres, ocho mas tres de extensin para el nombre de las tablas y diez posiciones para nombresde campo. Si por algn motivo especial necesitramos hacerlas a estas tablas libres, lo idealseria que mantuviramos los ochos nombres para las tablas y diez para los campos, de estamanera evitaremos que los nombres se trunquen y al pasar el tiempo es difcil recordarnombres largos.

    Al crear una tabla dependiente, tendremos una pantalla similar a esta ventana:

  • 40

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Automticamente se activan las propiedades a nivel de campo y tabla tal como aparecen en lasiguiente figura.

  • 41

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    COMANDOS Y PARAMETROS EN EL MANEJO DE TABLAS DEPENDIENTES.Estos comandos debern ser tipiados en forma manual desde la ventana command, como lomuestra la figura siguiente.

    Display Tables y List TablesDISPLAY TABLES [TO PRINTER [PROMPT] | TO FILE FileName [ADDITIVE]][NOCONSOLE]LIST TABLES [TO PRINTER [PROMPT] | TO FILE FileName [ADDITIVE]][NOCONSOLE]Permite visualizar las tablas que se encuentran dentro de la base de datos, as como su ruta deacceso.

  • 42

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Add TableADD TABLE TableName | ? [NAME LongTableName]Agrega una tabla libre a una base de datos, podemos modificar el nombre de la tabla para quesea mas largo agregando la clusula, NAME seguido del nuevo nombre.

    Remove TableREMOVE TABLE TableName | ? [DELETE] [RECYCLE]Elimina una tabla de la base de datos que la contiene y la convierte en una tabla libre, estosignifica que perderemos todas sus propiedades, ndices principales y las relaciones quepudieran existir con otras tablas.

    Si por alguna necesidad deseamos borrar la tabla no solamente de la base de datos sino quetambien del disco rgido, debemos anteponer el parmetro DELETE.

    Free TableFREE TABLE TableNameElimina la referencia de la cabecera de la tabla contenida en la base de datos. Aclaremos quela tabla permanecer en la base de datos, pero esta vez como libre y no dependiente.

    Drop TableElimina una tabla de la base de datos y la borra del disco. Incluyendo el argumentoNORECYCLE evitamos que quede en la papelera de Windows.

    InDbc()INDBC(cDatabaseObjectName, cType)

    Devuelve verdadero si el objeto por el se pregunta esta contenido dentro de la base datosactive. Se debe indicar como segundo parmetro el tipo de objeto que es, TABLE, INDEX,FIELD, VIEW o CONNECCTION.

  • 43

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    COMANDOS GENERALES EN LA OPERACION DE TABLAS.Al tener abierta una BD o cuando necesitemos usar tablas libres, utilizaremos las siguientesrelaciones de instrucciones. Para los programadores de versiones tipo Xbase les resultara muyfamiliar todo esto, por lo cual VFP aun las usa por cuestiones de compatibilidad con versionesanteriores.

    UseUSE [[DatabaseName!] TableName | SQLViewName | ?][IN nWorkArea | cTableAlias] [ONLINE] [ADMIN] [AGAIN][NOREQUERY [nDataSessionNumber]] [NODATA][INDEX IndexFileList | ? [ORDER [nIndexNumber | IDXFileName| [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]]]][ALIAS cTableAlias] [EXCLUSIVE] [SHARED] [NOUPDATE][CONNSTRING cConnectionString | nStatementHandle ]

    No necesitamos nada mas que el nombre de la tabla anteponiendo el comando USE , se cargala tabla, junto con sus ndices en caso de existir, en el primer rea disponible para podertrabajar. Si necesitamos que la tabla se abra en un rea determinada debemos incluir laclusula IN seguido del nmero de rea. Si queremos que VFP asigne la primera rea noasignada, pondremos el valor 0 en el numero de rea. Ejemplo:

    CLOSE DATABASESOPEN DATABASE (HOME(2) + Data\Data)ACTIVATE WINDOW View && activa la ventana Sesin de datosUSE alumnos IN 0 && abre la tabla alumnosUSE profesores IN 0 && abre la tabla profesoresUSE materias IN 0 && abre la tabla

  • 44

    VISUAL FOXPRO 9.0 SP2 Capitulo 2SelectSELECT nWorkArea | cTableAlias

    Especifica un rea de trabajo para activar. Por defecto el rea que activa VFP

    Para cambiar de area de debemos acompaar al SELECT con el numero de area, o bienescribir el alias de la tabla.

    Para los programadores que gustan de las ventajas de SQL, preferirn cambiar el comandoSELECT por sentencias de SQL lo cual en algunas circunstancias es lo mejor.CLOSE DATABASESOPEN DATABASE (HOME(2) + Data\testdata)SELECT 1 && area de trabajo 1USE clientes && abre la tabla clientesSELECT 2 && area de trabajo 2USE ordenes && abre tabla ordenesSELECT clientes && Work area 1BROWSE

    Append BlankAgrega uno o ms registro al final de la tabla. Puede editar un nuevo registro con browse,change, o edit.

    APPEND [BLANK] [IN nWorkArea | cTableAlias] [NOMENU]El siguiente ejemplo muestra como agregar 10 registro con la clusula for en un programa .prg

    Este ejemplo es muy til cuando necesitemos programar para una tienda o comerciocualquiera y los pagos se harn en cuotas o varios pagos por medio de una tarjeta de crdito.En algunos casos es mejor usar comandos tipo SQL, INSERT INTO, ya que reemplaza alAPPEND BLANK y REPLACE.CLOSE DATABASESCREATE TABLE curRandom (nValue N(3))FOR nItem = 1 TO 10APPEND BLANKREPLACE nValue WITH 1 nItemENDFOR? nValue

  • 45

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    ReplaceREPLACE FieldName1 WITH eExpression1 [ADDITIVE][, FieldName2 WITHeExpression2 [ADDITIVE]] ... [Scope] [FOR lExpression1] [WHILElExpression2] [IN nWorkArea | cTableAlias][NOOPTIMIZE]Reemplaza o actualiza la informacin de cada campo en una tabla. Su sintaxis es :

    REPLACE campo with datos

    CLOSE DATABASESCREATE TABLE Random (cValue N(3)), (cLastnames C (30))FOR nItem = 1 TO 10 && Append 10 records,APPEND BLANKREPLACE cValue WITH 22 && Reemplaza todos los registros por el valor 22ENDFORCLEARLIST && Display the values

    DeleteBorra lgicamente el o los registros donde esa situado el puntero en latabla. Podemos borrar selectivamente con los argumentos FOR o WHILE,mediante DELETE ALL, podemos borrar todos los registros. Podemos borrarregistros que estn en otra rea de trabajo mediante IN.Se puede trabajar y visualizar los registros marcados para borrar medianteset delete offCLOSE DATABASESSET DELETE OFF & Activa los registros marcados para su eliminacinOPEN DATABASE (HOME(2) + Data\testdata)USE random && Abre la tabla randomDELETE ALL && Marca para la eliminacinCLEARLIST FIELDS cValue FOR DELETED( ) && Lista registros marcados para borraren caso de no este activo el SET DELETED OFF

  • 46

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    RecallRecupera un registro borrado lgicamente en la tabla seleccionada. Al igual que DELETEpodemos recuperar todos los registros mediante ALL o seleccionarlos con FOR o WHILE.

    CLOSE DATABASESSET DELETE OFF & Activa los registros marcados para su eliminacinOPEN DATABASE (HOME(2) + Data\testdata)USE random && Abre la tabla randomCLEARRECALL ALLLIST FIELDS cValue,cLastnames FOR DELETED( ) && Lista registros marcadospara borrar en caso de no este activo el SET DELETED OFFPackBorra fsicamente todos los registros marcados con la marca de borrado y actualiza el archivode ndices y los archivos .FTP que contienen los campos memo. En ningn caso debemosutilizar ZAP, ya que no borrara los campos memos asociados a la tabla.PACK [MEMO | DBF] [Tablename ] [IN nWorkarea | cTableAlias]CLOSE DATABASESOPEN DATABASE (HOME(2) + Data\testdata)USE random && Abre la tabla randomCLEARDELETE ALLPACKLIST FIELDS cValue,cLastnames

    TABLAS EN MODO BROWSEPermite visualizar los datos de una tabla y en caso de ser necesario, agregar, modificar yborrar. En la ayuda de VFP tenemos sobrados ejemplos de cmo utilizar este comando, lo cualrecomendamos una lectura muy detenida del mismo ya que tiene muchas variantes en suimplementacin, a modo de ejemplo daremos un breve ejemplo del mismo.

  • 47

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    BROWSE [FIELDS FieldList] [FONT cFontName [, nFontSize [, nFontCharSet]]][STYLE cFontStyle] [FOR lExpression1 [REST]] [FORMAT] [FREEZE FieldName][KEY eExpression1 [, eExpression2]] [LAST | NOINIT] [LOCK nNumberOfFields][LPARTITION] [NAME ObjectName] [NOAPPEND] [NOCAPTIONS] [NODELETE] [NOEDIT |NOMODIFY] [NOLGRID] [NORGRID][NOLINK] [NOMENU] [NOOPTIMIZE] [NOREFRESH][NORMAL] [NOWAIT][PARTITION nColumnNumber [LEDIT] [REDIT]][PREFERENCEPreferenceName] [SAVE] [TIMEOUT nSeconds] [TITLE cTitleText] [VALID [:F]lExpression2 [ERROR cMessageText]][WHEN lExpression3] [WIDTH nFieldWidth] [WINDOW WindowName1][IN [WINDOW] WindowName2 | IN SCREEN] [COLOR SCHEME nSchemeNumber]

    CLOSE DATABASESUSE c:\ivaempre\bases\clientes.dbf SHAREDSELECT 1 && area de trabajo 1USE clientes && abre la tabla clientesCLOSE DATABASESBROWSE FIELDS cust_id:R, company NOEDIT

    CAMPOS.

    TIPOS DE CAMPOS.

    VFP 9 tiene predefinidos los campos a utilizar, ya que disponemos de todos los tipos decampos necesarios para desarrollar nuestras aplicaciones.Aqu tenemos un detalle de los principales campos usados en VFP 9. a efectos de tener unaidea mas pura de los tipos de campos describimos aqu todos los tipos de datos transcriptos enla ayuda de Visual FoxPro. Una recomendacin para todos los usuarios de este libro es quecomo es muy fcil de advertir, que tengan un dominio en Ingles tcnico, ya que siempre semantiene la ayuda en su idioma puro y las pginas web, las mejores, en su mayora estn enidioma Ingles.

  • 48

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Visual FoxPro Tipos de Datos

    Tipo dedato Descripcin Tamao Rango

    Blob

    Binary data ofindeterminate length.

    Blob values are in amemo (.fpt) file.

    No code page translationis performed on Blobdata.

    4 bytes in atable

    Limited by available memoryand/or 2GB file size limit.

    Character

    Alphanumeric text

    For example, a customeraddress

    1 byte percharacter to254

    Any characters

    Currency

    Monetary amounts

    For example, the price ofan item

    8 bytes - $922337203685477.5807 to$922337203685477.5807

    Date

    Chronological dataconsisting of month, day,and year

    For example, an orderdate

    8 bytes

    When using strict date formats,{^0001-01-01}, January 1st, 1 A.Dto {^9999-12-31}, December 31st,9999 A.D.

    DateTime

    Chronological dataconsisting of month, day,year, hours, minutes, andseconds

    8 bytes

    When using strict date formats,{^0001-01-01}, January 1st, 1 A.Dto {^9999-12-31}, December 31st,9999 A.D., plus 00:00:00 a.m. to11:59:59 p.m.

  • 49

    For example, date andtime of arrival

    Logical

    Boolean value of True orFalse

    For example, whether ornot an order has beenfilled

    1 byte True (.T.) or False (.F.)

    Numeric

    Integers or decimalnumbers

    For example, the quantityof items ordered

    8 bytes inmemory; 1 to20 bytes intable

    - .9999999999E+19 to.9999999999E+20

    Varbinary

    Binary values.

    Varbinary data is similarto Varchar data in thatvalues do not includepadding with zero (0)bytes. The length of thecontained value is storedinternally.

    No code page translationis performed onVarbinary data.

    1 byte perhexadecimalvalue up to 255total bytes

    Any hexadecimal value

    Variant

    Variant data can be anyof the Visual FoxPro datatypes and the null value.

    Once a value is stored to avariant, the variantassumes the data type ofthe data it contains.

    See other datatypes. See other data types.

  • 50

    Variants are designatedwith an e prefix inlanguage syntax.

    Adems, FoxPro Visual proporciona tipos de datos que slo se aplican a los campos en lastablas.

    Visual FoxPro Tipos de Datos

    Field type Description Size Range

    Character(Binary)

    Any Character data that you donot want translated across codepages

    For example, user passwords storedin a table and used in differentcountries or regions.

    1 byte percharacter to254

    Any characters

    Double

    A double-precision floating-pointnumber

    For example, scientific datarequiring a high degree ofprecision.

    8 bytes+/-4.94065645841247E-324 to +/-8.9884656743115E307

    Float Same as Numeric

    8 bytes inmemory; 1 to20 bytes intable

    - .9999999999E+19 to.9999999999E+20

    General

    Reference to an OLE object

    For example, a Microsoft Excelworksheet.

    4 bytes intable

    Limited by availablememory.

    Integer

    Numeric value with no decimals

    For example, a line number in anorder.

    4 bytes -2147483647 to2147483647

  • 51

    Integer(Autoinc)

    Same as Integer but also anautomatically incrementing value.Read-only.

    4 bytesValue controlled byautoincrement Next andStep values.

    Memo

    Alphanumeric text of indeterminatelength or reference to a block ofdata

    For example, notes about a phonecall in a phone log.

    4 bytes intable

    Limited by availablememory.

    Memo(Binary)

    Same as Memo except that memofield data does not change acrosscode pages

    For example, a login script used indifferent countries or regions.

    4 bytes intable

    Limited by availablememory.

    Varchar

    Alphanumeric text.

    Varchar is similar to Characterexcept values in Varchar fields donot include padding with additionalspaces. The length of the containedvalue is stored internally.

    1 byte percharacter upto 254 totalbytes

    Any characters

    Varchar(Binary)

    Varchar type data that you do notwant translated across code pages.

    1 byte percharacter upto 254 totalbytes

    Any characters

    Recordamos que los campos mas usados en cualquier aplicacin son: carcter, numrico,lgico, fecha, general y memo, hacemos notar que el campo Character (Binary) es muyinteresante para los campos que no sern traducidos a travs de los cdigos de pagina.

  • 52

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Debemos tener especial cuidado al concatenar variables, sobre todo al hacer comparaciones. Amodo de ayuda ilustramos una breve tabla de conversiones.

    En el prximo capitulo instrucciones bsicas, detallaremos, funciones de conversin ycomandos necesarios para una correcta programacin en VFP.

    PROPIEDADES DE CAMPO.Es muy til, al momento de fijar nuestros campos dentro de la tabla, as de esta manerapodemos controlar el tipo de dato ingresado por el operador a fin de evitar errores por partedel usuario no experimentado, de todas maneras tambin podemos hacer todo esto de formamanual desde las propiedades de cada objeto, ya que esta manera podemos tener un controlmas detallado sobre nuestras aplicaciones.

    En los ejemplos prcticos que detallaremos en los prximos captulos, mostraremos como usarlas tcnicas de validacin desde los objetos. El programador podr por decidirse por uno uotro mtodo, ya que en algunos casos los resultados son los mismos.

  • 53

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Display (Mostrar)

    En este apartado esta pensado para ver como aparareceran las propiedad del control alejecutarse en un formulario.

    Format: Es lo mismo que la propiedad Format del control TextBox del mismo nombre quepermite especificar el tipo de informacin que el usuario puede incluir en el campo.

  • 54

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    InputMask: equivale a la propiedad InputMask del control TextBox, la cual coloca en elcontrol correspondiente un formato preestablecido de entrada de datos, el cual no ser grabadoen el campo, es a modo de ayuda para el usuario.

    Caption:Valor que aparecer por defecto en las propiedades del control asociado al campo enel formulario correspondiente. En este caso, se mostrara en la propiedad Caption.

    Field Validation (Validacion de Campos)Es muy til para evitar que el usuario del sistema introduzca datos errneos en el campocorrespondiente, as tambin para establecer un valor por defecto.

    Regla de validacin: condicin que examina cuando introducimos un nuevo valor en el campocorrespondiente y se efecta un movimiento a otro campo de la tabla.

    Texto de validacin: al no cumplirse la regla de validacin desde aqu podemos emitir unmensaje.

    Valor predeterminado: valor que tomara por defecto al crearse un nuevo registro.

    Asignar tipo de campos a clases (Map field type to Classes)Cuando creamos un formulario, cada campo esta asociado a un control o clase de base queVFP determinara por defecto. Las clases bases se trataran en un capitulo dedicado al mismo.

    Librera de Clases: es la librera donde esta alojada la clase que queremos asociar al campo.

    Clase: tipo de control que aparecer por defecto al incluir el campo en un formulario.

  • 55

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    PROPIEDADES DE REGISTRO. DESENCADENANTES.

    Aqu estn definidas como propiedades de tabla, pero en realidad afectan directamente a losregistros. Los conocidos en ingles como Triggers es un cdigo que es ejecutado cuando seproduce una insercin, una modificacin o borrado de un registro. Este cdigo no cabe en laventana, por la cual debemos incluir aqu en nombre de la funcin que tendremos que definiren procedimientos almacenados, lugar donde VFP la buscara.

  • 56

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    INDICES

    Cuando creamos una tabla, podemos ordenar los datos para acelerar la obtencin de datosmediante ndices. Con los ndices, puede procesar rpidamente los registros para mostrarlos,consultarlos o imprimir. Tambin puede seleccionar registros, controlar si se introducenvalores duplicados en un campo y admitir relaciones entre tablas. Esto hace en bases de datosde millones de registros podamos obtener informes en cuestin de segundos para emitirlos porpantalla o impresora.

    VFP ofrece cuatro tipos de ndice diferentes, cada uno con caractersticas propias:

    Principal Candidato Normal nico

    Los ndices principales aseguran que slo se introducen valores nicos en un campo ydeterminan el orden en el que se procesan los registros. Puede crear un ndice principal paracada tabla si la tabla est incluida en la base de datos. Si la tabla ya tiene un ndice principal,agregue un ndice candidato. Este ndice es el que define el campo clave

    Los ndices candidatos tambin imponen valores nicos y determinan en qu orden seprocesan los registros, como un ndice primario. Puede tener varios ndices candidatos portabla en bases de datos y en tablas libres.

    Los ndices normales determinan el orden en que se procesan los registros pero permite que seintroduzcan valores duplicados en un campo. Puede agregar ms de un ndice normal a unatabla. Es muy til ya la mayora del tipo ndices normales.

    Por compatibilidad con versiones anteriores, tambin puede crear un ndice nico queselecciona y ordena un subconjunto de registros segn la primera aparicin de un valor en elcampo que especifique. Si quiere seleccionar registros de esta manera, es posible que quieracrear una consulta o una vista en lugar de ello.

  • 57

    VISUAL FOXPRO 9.0 SP2 Capitulo 2Cuando deseamos ndices a utilizarOrdenar los registros para aumentar Un ndice normal, candidato o principalla velocidad a la que se presentan,se consultan o se imprimen.

    Controlar la entrada de valores Un ndice principal o candidato para una tablaDuplicados en un campo y ordenar de base de datos o un ndice candidato paralos registros una tabla libre.

    INTRODUCCIONES PARA USAR CON LOS INDICESIndexPermite crear ndices tipo .IDX y .CDX en las tablas. Los ndices tipo .IDX no se utilizan y lautilidad de crear ndices la podemos incluir dentro de un programa .prg, en el caso quenecesitemos reconstruir los ndices que estn corruptos en caso de cerrarse incorrectamente elsistema o haberse producido una falla elctrica, o tambin cuando se produce una interrupcinpor corte de energa elctrica.

    Para nuestra comodidad es mejor crear los ndices dentro del diseador de tablas. La funcinque tienen los ndices es de crear un archivo que apunta en forma directa a la tabla paraordenar a los mismos en forma virtual, permitiendo de esta manera un acceso mas rpido,siendo esto de gran utilidad para tablas gigantes. Indexar tambin puede ser usado comosinnimo de ordenado.INDEX ON eExpression TO IDXFileName | TAG TagName [BINARY][COLLATE cCollateSequence] [OF CDXFileName] [FOR lExpression][COMPACT] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE] [ADDITIVE]

    Ejemplo de como crear indices sobre la tabla clientes.CLOSE DATABASESUSE ClientesINDEX ON idcliente TAG clienteINDEX ON direccion TAG direccionCLEARDISPLAY STATUS

  • 58

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Set Order to TagFija el orden de una tabla una vez que el archivo de ndices esta abierto, por defecto las tablasse orden de acuerdo al primer ndice increado, esto quiere decir que al crear el TAG serconsiderado el primer tag en caso de tener mas de uno, y para establecer el segundo tag pordefecto solo debemos activarlo:

    Set Order TO Tag direccionSi necesitamos dejarlo en el orden fsico inicial de la tabla, solamente debemos fijarlo denuevo con:

    Set Order TO

    REINDEXReconstruye los ndices de una tabla, lo cual la tabla debe estar abierta en forma exclusiva, seaconseja utilizarlo en el entorno de programacin. Es mas til utilizar reindex que borrarcompletamente el archivo de ndices y crear todos sus tag, claro esta que esto depende delcriterio de cada programador.

    Relaciones Permanentes y TemporalesRecordemos brevemente que en VFP existen las relaciones permanentes, y que tienen lassiguientes caractersticas:

    Se establecen dentro de la BDRelaciona ndices, no campos.La relacin existe siempre que tengamos abierta la BD abiertaPermite al igual que access, utilizar integridad referencial con los ndices, esto debe ser en elcaso de la tabla madre, principal o candidato, nunca normal, y en la tabla hija pueden ser delos tres tipos, estableciendo la relacin en Uno a Uno con los dos primeros ndices y en Uno aVarios si el ndice es normal.

  • 59

    VISUAL FOXPRO 9.0 SP2 Capitulo 2La relacin permanente se consigue arrastrando el ndice de la tabla madre y soltndolo sobreel ndice de la tabla hija con el que queramos relacionarlo. Por comodidad a la hora deprogramar o actualizar nuestros sistemas veremos que es ms til establecer relacionestemporales, ya que son ms verstiles en todos los aspectos, sobre todo cuando necesitemosreconstruir los ndices de nuestras relaciones por eventuales cadas del sistema.

    Caractersticas de las relaciones temporales:Se pueden crear sobre tablas dependientes o libresSe relaciona un campo de la tabla madre con un ndice de la tabla hijas.No es necesario que la tabla madre este ordenada, ni que el ndice sea de un tipo especial.Es necesario que la tabla hija este ordenada por el ndice coincidente con la expresin de larelacin.

    La relacin se pierde cuando se cierra una de las tablas de la relacin.

    Establecimiento de la relacin la podemos hacer mediante la ventana Sesin de Datos o pormedio de una instruccin en la ventana de comandos, claro esta que es ms simple desde laventana Sesin de Datos. No permite utilizar integridad referencial.

  • 60

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Set RelationEstablece una relacin temporal entre dos tablas, debemos colocarnos en el rea de la tablamadre y luego tipiar.

    SET RELATION TO alumno INTO alumnos

    Claro esta como hemos mencionado, todo esto se resuelve, con la ventana Sesin de Datos.INTEGRIDAD REFERENCIAL.Para todos los programadores de VFP de versiones anteriores, desde la versin 5 msexactamente, disponemos la posibilidad de trabajar al igual que Access, con integridadreferencial. Debemos tener en cuenta que en la mayora de casos, los programadores conexperiencia en VFP optan por no utilizar integridad referencial, ya que en algunos casos puedecomplicarnos las cosas.

    La integridad referencial consiste en que los datos contenidos en la tabla madre e hija en unrelacin no tengan incoherencias, esto es que sean concordantes entre si. Para esto debemostener en cuenta que:

    1) Modificacin del campo clave de la relacin en la tabla madre, si existen registros enla tabla hija con esa clave, habr que cambiarlos igualmente, caso contrario tendramosen la tabla hija registros sin padre.

    2) Eliminacin de un registro en la tabla madre, cuando eliminamos un registro de lamadre, debe borrarse este y tambin todos los tengan la misma clave en la tabla hija, yaque de lo contrario, estaramos en la misma situacin descripta anteriormente.

    3) Insercin de un nuevo registro en la tabla, al un registro nuevo en la tabla hija debemoscomprar que exista un registro con la misma clave en la tabla madre, si no, estaramosen la misma situacin que en los casos anteriores, este registro estara hurfano.

    En la imagen de la prxima pagina, mostramos brevemente lo descrito en los tres temsanteriores.

  • 61

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    En estos tres tems podemos ver como trabaja la integridad referencial en el mantenimiento deuna relacin. No nos olvidemos que la integridad referencial es posible dentro de la Base deDatos.

    Haciendo doble clic sobre la lnea que une a las dos tablas relacionadas podremos ver laventana informativa de la relacin que es muy similar a la Access.

    Recordemos que para editar o modificar todas las opciones que nos ofrece la integridadreferencial, la base de datos debe estar abierta forma exclusiva, ya que estamos trabajandosobre ella en modo de diseo. La ventana ser similar a la que mostramos en la siguientepgina.

  • 62

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    A modo de recordar, debemos hacer notar que la tabla madre deber tener un ndice tipoPrincipal, y la tabla hija uno de tipo candidato, en caso de tener un ndice del tipo normal, laintegridad referencial simplemente no funcionara.

    Nuestro consejo, que a modo de inicio para los programadores juniors no es muyaconsejable trabar con IR, ya que en algunos casos por falta de experiencia, terminacomplicando la programacin, sobre todo cuando debemos actualizar los sistemas de nuestrosclientes, ya que al tener mas de 20 tablas es difcil que recordemos todos los ndicesestablecidos en nuestras tablas.

  • 63

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    COMANDOS DE BUSQUEDAS EN TABLAS.Despus de que tenemos a las tablas indexadas, podemos acceder con rapidez a sus registros.

    SkipAvanza o retrocede dentro de los registros. Debemos controlar siempre que el avance o elretroceso no desborden el principio o el final de la tabla. Para ello contamos con doscomandos.

    Bof()Retorna (verdadero) .T. si el puntero del esta mas alla del primer registro, es decir en lacabecera.

    Eof()Retorna (verdadero) .T. al llegar al final del registro el puntero, cuando esta la cabecera de latabla.

    GoPermite ir directamente a un registro, tambin podemos indicarte por medio de un numero deregistro determinado. Con GO TOP nos ubicamos en el primero y con GO BOTTOM nosubicamos en el ltimo. Recordemos que el desplazamiento esta supeditado al campo en queeste indexada la tabla.

    Por medio de la clusula IN podemos mover el puntero en otras reas de trabajo.

    SeekBusca directamente un valor dentro del archivo de ndices, ubicndose el puntero en eseregistro en el caso de encontrarlo, o bien accediendo al final de la tabla en caso de noencontrarlo. En caso de tener activo en VFP en Herramientas, Opciones, Data, el check SETNEAR on dentro del cuadro de String Comparison, podemos acceder al valor mas prximo denuestra bsqueda. Activar esta opcin de de gran utilidad al momento de realizar bsquedas.

  • 64

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Found()Con este comando podremos saber si un valor cualquiera sea ha encontrado o no. Se lo debeubicar despus de la instruccin de bsqueda.

    Seek()Sustituye a las dos instrucciones anteriores y al SET ORDER, lo que la hace mucho maspractica. Un ejemplo a implementar seria el siguiente:CLOSE DATABASESOPEN DATABASE (HOME(2) + Data\testdata)USE clientes ORDER cliente? SEEK(CORONEL) && Retorna .T., si encontr el registro

    Do WhileEste clasico bucle es muy utilizado en cualquier lenguaje de programacin, en lo posibledebemos olvidarnos de este bucle y sustituirlo por el Comando Scan, que es mucho masrpido y practico. Un ejemplo seria:

    DO WHILE !EOF()Skip 1

    ENDDOEsto hara que avance por la tabla de un registro por ves hasta que encuentre el final delregistro.

    ScanEs mucho mas practico que el anterior, porque adems de recorrer toda la tabla en formaautomtica, permite filtrar las bsquedas mediante la clusula FOR y WHILE. Para ellodebemos indicarle por que valor empezara la bsqueda. Es muy importante volver al rea de latabla sobre la cual se esta trabajando con el SCAN si nos hemos situado en otra tabla dentrodel bucle para realizar alguna operacin. Un simple ejemplo seria.

  • 65

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    CLOSE DATABASESOPEN DATABASE (HOME(2) + Data\testdata)USE profesoresCLEARSCAN FOR UPPER(profesor) = CORONEL? idprofesor, profesor, edadENDSCAN

    COMANDOS DE CALCULOS EN TABLAS.El uso de estos comandos en forma correcta, puede simplificarnos a la hora de escribir cdigo.

    AverageRealiza la media de un campo o campos determinados por la clausula FOR o WHILE.Podemos guardar el resultado de una variable o varias variables dependiendo de los campospromediados.

    SumSimilar al comando anterior, pero este hace una suma

    CountCuenta los registros dependiendo del ndice y del estado de eliminacin.

    Reccount ()Cuenta todos los registros estn o no eliminados. No se pueden incluir las clusulas FOR yWHILE.

    CalculatePodemos realizar varios clculos, utilizando una sola instruccin, los clculos principales entreotros, que podemos hacer son:

  • 66

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Argumento Se usa para

    AVG( ) Realiza la media. Muy similar a AVERAGE

    CNT( ) Cuenta el numero de registros. Igual a COUNT

    MAX( ) Encuentra el valor maximo de todos los campos

    MIN( ) Halla el valor minimo

    NPV ( ) Calcula el valor neto de una inversion

    STD ( ) Podemos realizar la desviacin tpica.

    SUM ( ) Suma los valores de los campos.

    VAR ( ) Halla la varianza de un promedio

    En algunos ejemplos que daremos, vamos a mostrar algunos de estos comandos ya quedetallarnos en este omento no es necesario.

    SISTEMA DE ALMACENAMIENTO EN BUFFERSi hemos llegado detenidamente hasta aqu, es porque la programacin o el desarrollo desistemas es lo nuestro. Y como no serlo si programando podemos construir y darle vida anuestra pc!. Entonces felicitaciones, a partir de ahora nos introduciremos en la programacinen forma mas detallada, en el caso que el ejemplo no sea lo suficientemente claro de entender,con el desarrollo de las aplicaciones ejemplos daremos por finalizado este tema.

    Que es el Sistema de almacenamiento en buffer?Consiste en la creacin automtica de un espacio de memoria destinado a guardar el o losregistros que se estn editando sin necesidad de tipiar largos cdigos. VFP se encarga pornosotros de esto en forma inteligente, a nosotros nos queda chequear si se ha producido algunamodificacin por parte del usuario, y por ultimo en caso de ser necesario guardar o descartarlos cambios. Esto evita que se graben registros en blanco en las tablas en forma innecesaria.

  • 67

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Esto es una gran utilidad que trae aparejado VFP entre tantas herramientas de avanzada queiremos descubriendo a lo largo de este libro, La programacin orientada a objetos y entornosvisuales se han impuesto! y ni hablar de cuando tratemos la Herencia y Polimorfismo que VFPes un pionero desde hace ya aproximadamente 15 aos!!! Visual FoxPro siempre ha estado unpaso adelante en todo. Esto lo convierte en el favorito a la hora de disear aplicacionescomerciales o financieras por ejemplo.

    El almacenamiento para el trabajo en redAdems de facilitar el mantenimiento de las tablas, tambin podemos controlar el tipo deacceso de los usuarios a las tablas desde los distintos puestos de red. Tenemos la tcnica debloqueo pesimista, cuando se produce una modificacin, o por el otro lado, dejar absolutalibertad a los usuarios de la red bloqueando solo a la hora de grabar, que es lo que se llamabloque optimista.

    Tanto para un caso, como para el otro, tenemos defensores y detractores. Por un lado estn loque afirman que no se debe permitir tocar a otro usuario de la red si uno esta editando elmismo registro, ya que si esto ocurriese se grabara la actualizacin o modificacin querealizara el ultimo, con lo cual el programa actualizara una modificacin hecha por uno de losusuarios y no lo del otro; por otra parte estn los que aseguran si se bloquea el registro y elusuario en cuestin no cierra la ventana o aplicacin donde esta modificando, puede dejarbloqueada la red, las dos teoras son aceptadas y VFP las acepta, ya que permite ambos tiposde bloqueos.

    Detallaremos los 3 tipos de Buffers existentes VFP, para el almacenamiento de datos:

    1 buffer: Valor predeterminado, contiene los valores que el usuario visualiza en pantalla.

    2 buffer : Almacena la informacin original que tenia la tabla.

    3 buffer : Guarda el valor ultimo recibido de la red.

    Como activar el almacenamiento en bufferEsto se logra a travs de la funcin CURSORSETPROP ( ). Por cada tabla que abramostendremos que escribir un CURSORSETPROP. La sintaxis ser diferente de acuerdo al tipode almacenamiento que hayamos elegido, de acuerdo al formato:

  • 68

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    =CURSORSETPROP (Buffering, < valor de almacenamiento >)En este tipo de almacenamiento podemos usar 5 tipos (valores) de almacenamiento:

    Valor Significado del Valor Numrico

    1 Es ignorado el almacenamiento en buffer, por lo tanto no lo utilizamos

    2 Se bloquea a nivel registro y pesimista. El registro estar bloqueado hastaQue se grabe la modificacin.

    3 El bloqueo ser a nivel registro, aunque esta ves ser optimista. Entonces seProduce el bloqueo cuando se actualiza la modificacin o se produce un

    desplazamiento a otro registro.

    4 Bloqueo pesimista a nivel de tabla. Funciona en forma muy similar que aNivel registro, lgicamente que a nivel tabla.

    5 Bloqueo optimista a nivel tabla. Sucede cuando se actualizan las modificaciones

    Para todos los casos debemos tener, el acceso no exclusivo ( SET EXCLUSIVE OFF), elSET MULTILOCKS ON.Despus de incluir este comando ya podremos disfrutar de las cualidades del sistema.

    Comprobar si ha habido modificacionesA partir de ahora debemos realizar la comprobacin si el usuario ha realizado algunamodificacion.

    La verificacin la podemos realizar de dos maneras con las siguientes funciones:GETFLDSTATE ( ), como es fcil de advertir, esta funcin nos informa el estado de losregistros y con GETNEXTMODIFIED( ) nos informara el estado de la tabla. Esto quieredecir que podemos utilizar GETFLDSTATE ( ) tanto para el bloqueo a nivel de registro

  • 69

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Como para el de tabla, mientras que con GETNEXTMODIFIED( ) esta recomendado a niveltabla, auque a continuacin veremos cmo se puede utilizar tambin a nivel de registro.

    La sintaxis de GETFLDSTATE ( ) es:

    =GETFLDSTATE ( , )Los valores posibles a devolver son:

    Valor Significado

    1 No se ha editado el campo o no ha cambiado el estado de eliminacin.

    2 Se ha editado el campo o ha cambiado el estado de eliminacin.

    3 No se ha editado el campo de un registro aadido o ha cambiado el estado deEliminacin del registro aadido.

    4 Se ha editado el campo de un registro aadido o ha cambiado el estado deeliminacin para el registro aadido.

    0 Nos permite saber si ha cambiado el estado de eliminacin del registro.

    -1 Nos devuelve todos los estados del registro, eliminacin, edicin, etc

    Mostramos esta forma de programar con el sistema de buffers, por una cuestin decompatibilidad con las versiones 6,7,8 ya que en la versin 9 tenemos una forma massimplificada de hacer todo esto. De todas maneras no esta de ms saberlo.

    IF 2 $GETFLDSTATE (-1) OR 3 $GETFLDSTATE(-1) ;

    OR 4 $GETFLDSTATE(-1)

    WAIT WINDOW Tenemos una modificacin

    ENDFOR

  • 70

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    A nivel registro podemos hacer la comprobacin con SETFLDSTATE( ). Para saber queregistro se ha modificado o eliminado dentro de la tabla, esto significa que tenemos unatcnica mas que podemos incluir en nuestros programas. A modo de ejemplo:=SETFLDSTATE(cFieldName | nFieldNumber, nFieldState [, cTableAlias| nWorkArea])

    Si no se ha modificado o borrado registro alguno, el valor devuelto ser 1. Debemos tener encuenta que SETFLDSTATE devuelve el valor del primer registro que encuentra con flag demodificacin, por lo cual es importante el nmero de registro que se le pase como parmetro.

    Tanto una tcnica como la otra son validas, Cualquiera de las dos tcnicas son validas.

    Como actualizar la tabla.Hemos llegado al ltimo paso que es Guardar o Descartar las modificaciones.Esto se lleva a cabo, con las funciones: =TABLEUPDATE( ) y =TABLEREVERT ( ).Debemos recordar que estamos trabajando sobre una tabla intermedia, que esta en memoria, yque todos estos datos debe ser volcada a la tabla fsica. Este paso difiere del tipo dealmacenamiento que hayamos elegido.

    TABLEUPDATE () dispone de cuatro parmetros:

    =TABLEUPDATE( [nRows [, lForce]] [, cTableAlias | nWorkArea] [, cErrorArray] )

    Al actualizar la tabla fsica, lo podemos hacer para el registro en que se esta trabajando o paratodos los registros de la tabla. El primer parmetro est destinado a este fin, los valoresposibles a tomar son:

  • 71

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Valor Significado del Valor

    0 Por defecto. Se actualizara el registro en el que est el puntero sea cual sea el tipode almacenamiento elegido.

    1 Se actualizarn todos los registros si el almacenamiento es a nivel de tabla y sloEl registro actual si el almacenamiento se estableci a nivel de registro.

    2 Similar funcionamiento que el valor 1 pero en este caso VFP no emitir un si laactualizacin no termin con xito.

    Recordemos lo dicho que para el almacenamiento en buffer optimista, habr que establecer .T.el segundo de los parmetros, con lo que se producir la actualizacin desde el buffer de red.

    Si por el contrario, queremos descartar los cambios hechos, deberemos utilizar la funcinTABLEREVERT de la siguiente manera:

    =TABLEREVERT( [lAllRows [, cTableAlias | nWorkArea] ] )

    Deberemos establecer .T. para que se realice el descarte de los cambios realizados en todos losregistros. Con esta funcin recuperamos los datos del 2 buffer, es decir los datos originales dela tabla.

    En nuestros programas o aplicaciones, usaremos los 2 clsicos botones de Guardar yCancelar y simplemente incluiremos dentro de los botones =TABLAUPDATE o=TABLEREVERT segn sea necesario. Debemos tener cuidado de completar todos loscomandos para que todo quede bien programado, si no ejecutamos alguna de estas dosinstrucciones, VFP mostrara en pantalla un mensaje de error cuando queramos cerrar la tablaen cuestin. Esto suceder cuando hemos realizado el bloqueo a nivel tabla, esto quiere decirque hasta que no grabemos o descartemos los cambios no se podr cerrar.

    Todo esto ser bien ampliado al momento de crear nuestras aplicaciones de ejemplo

  • VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Implementar todo esto es ms fcil de lo que parece.

    CONSUCon VF os en principio incluircomand a interactiva, lo queestamosprincipasobre la

    No vamdebemoconsulta

    GETFLDSTATE(cFieldName | nFieldNumber [, cTableAlias | nWorkArea])

    SETFLDSTATE(cFieldName | nFieldNumber, nFieldState[, cTableAlias | nWorkArea])

    CURSORSETPROP( cProperty [, eExpression] [,cTableAlias | nWorkArea])

    =TABLEUPDATE() =TABLEREVERT()LTAS Y VISTAS.P 9, hacer consultas y vistas es muy fcil, tan fcil que no debemos tipo SQL, ya que al construir consultas y vistas en form72

    haciendo es establecer comandos 100 % de SQL. Debemos dejar bien en claro, que lal diferencia entre vistas y consultas, es que las primeras permiten la actualizacins tablas de origen, mientras que las consultas no.

    os a detallar excesivamente en consultas y vistas ya que son muy intuitivas, pero sis tener en claro, que el programador debe tener amplio dominio en el lenguaje des SQL.

  • 73

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Hacemos notas que en el caso de las consultas, se crea un archivo por separado, con extensin.QPR, que puede ser ejecutado en cualquier momento. En cambio las vistas que pueden serLocales o Remotas se almacenan dentro de la Base de Datos y son separables de ellas, lo quelas convierte en menos flexibles.

    CONSULTASTeniendo abierto nuestro proyecto, en el cual debemos tener por lo menos 2 tablas, hacemosclic en la solapa Data y luego clic en New , similar a la figura de abajo y elegimos 2 tablas enlas cuales una sera por ejemplo la tabla madre y la otra actuara como tabla hija, esto hacemosa los fines de tener un ejemplo mas elaborado. Para nuestro caso usamos una tabla llamadaArticulos y la otra Rubros

  • 74

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    En la siguiente figura se nos solicitara que tipo de combinacin queremos para nuestraconsulta, elegimos left join , esto quiere decir que creara un conjunto de resultados queincluye los registros de Artculos y los que coincidan con Rubros. La figura de abajo ilustraeste ejemplo. Claro esta que podemos usar tantas tablas como sean necesarias para construirnuestra consulta. Luego de escoger nuestras tablas debemos cerrar la ventana de AgregarTabla o Vista.

    En detalle la forma de realizar esta union entre estas dos tablas seria las siguientes:

    1) Interna: se tomaran solo aquellos registros de las dos tablas que cumplan la condicinespecfica.

  • 75

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    2) Izquierda: Se tomaran todos los registros de la tabla de la izquierda y aquellos de la tabla dela derecha que cumplan la condicin.

    3) Derecha: de igual manera que la anterior, pero con la diferencia que esta ves se tomarantodos los registros de la tabla de la derecha y solo aquellos de la tabla de la izquierda quecumplan la condicin.

    4) Completa: se usaran todos los registros de ambas tablas, cumplan o no la condicinestablecida.

    Luego de esto debemos ir seleccionando en las distintas solapas las opciones que nos ofrece eldiseador de consultas que son las siguientes, hacemos notar que siempre que se trabajemostanto con vistas como con consultas se deben agregar la menor cantidad de campos, uniones,filtros, y agrupamientos, esto a fin de entender mejor su funcionamiento.

    Las solapas que nos ofrece el diseador de consulta a fin de extraer informacin, todo estoson comandos SQL ocultos en el asistente para que resulte ms intuitivo para el programador,estas solapas son:

    1) Fields: es donde debemos indicar cuales son los campos de la tabla o tablas quequeremos que aparezcan en la consulta.

    2) Join: aqu aparecen las uniones que hemos hecho al principio al escoger las tablas ylos campos a relaciones.

    3) Filter: desde aqu establecemos relaciones que deben cumplir los registros resultantesde la consulta. No debemos confundirlo con Join.

    4) Oder By: fija un orden determinado para los datos que se mostraran en la consulta.Aqu se refiere al orden fisico de los registros de la tabla seran usados en la consulta.

    5) Group By: Realiza un agrupamientos de la consulta. Muy util al momento de tener uninforme detallado por grupo.

    6) Micellaneous: entre varios opciones que ofrece, tenemos la de forzar a la union y nopermitir valores duplicados.

    por ultimo debemos establecer haciendo clic en la consulta, debemos establecer el destino denuestra consulta Output Settings en el cual debemos establecer por ejemplo si queremos

  • 76

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Como destino de la consulta el de Tabla, de esta manera por ejemplo, tendremos una unin dedos tablas, ya que a traves del asistente la hemos unidos a dos tablas en forma oculta concomandos SQL. En la figura de abajo tenemos las opciones para escoger el destino de nuestraconsulta.

    No entraremos en muchos detalles ya que en VFP las consultas son incluidas por cuestin decompatibilidad, en cambio en las vistas, daremos mas detalle ya que son mas flexibles a lahora de trabajar con ellas y en las aplicaciones practicas daremos ejemplos prcticos con vistasdel tipo locales.

    VISTAS

    Lo primero que tenemos que saber que contamos con la posibilidad de trabajar con VistasLocales y Vistas Remotas, en las Vistas Locales, nosotros trabajaremos con tablas propias deVFP; en cambio con las Vistas Remotas podemos trabajar con tablas ajenas a VFP, lo cual esmuy util si deseamos construir Cliente-Servidor. Las vistas remotas son tiles en el caso deque un sistema administrativo en una empresa o un banco, tenga un sistema prximo a ser

  • 77

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    dado de baja y el Gerente no quiere perder ciertos datos que son de vital importancia para laempresa. De todas maneras contamos con muchas herramientas de conversin de datos, siendoAccess una de ellas por ejemplo, en las cuales podemos exportar las tablas o bases de datos aun Formato tipo DBF. Esto har en algunas circunstancias los programadores de VFP,queden como hroes al permitir que todos los datos sean traspasados a un nuevo sistema sinnecesidad de cargarlos todo de nuevo.

    El generador de Vistas es prcticamente igual al visto al de Generador de Consultas, salvo enla ltima de las pginas que permite actualizar el origen de datos.

    Iniciemos una Vista Local, a modo de ejemplo:

    Iniciemos un proyecto y no posicionamos en Databases luego hacemos clic en Local Views yhacemos otro clic en NEW y por ultimo en new view y tendremos delante nuestro la ventanade Agregar Tabla o Vista. Aqu debemos elegir la tabla Rubros y Artculos, tal cual como lomuestra la figura de abajo.

  • 78

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Luego hacemos clic en Close, y veremos el cuadro que nos preguntara que tipo de relacinqueremos establecer, elegimos Left join, y hacemos clic en Ok, luego en caso de que aparezcade nuevo la ventana para agregar Tablas o Vistas hacemos clic en Cerrar.

    Ahora tendremos que trabajar en todas y cada una de las solapas que disponemos en eldiseador de vistas. Las solapas que disponemos son las siguientes:

    Fields: aqu debemos elegir algunos campos de la tabla artculos que necesitemos visualizar,entre ellos debemos elegir los campos mas elementales a modo de ejercicio, ellos son:Articulos.codart, Articulos.articulo, Articulos.rubro, Articulo.precio. esto seleccin ladebemos hacer con el boton y la solapa Fields quedara de la siguiente maneracomo lo muestra la figura de la siguiente pagina.

  • 79

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Ahora hacemos clic en la solapa Join y veremos como quedaron unidas las dos tablas pormedio de la relacin. En caso de haber hecho todo bien la solapa Join quedara de la siguientemanera tal cual como lo grafica la imagen de abajo.

    Aqu vemos que la tabla Rubros esta unida de izquierda a derecha con la tabla Rubros que estaa la derecha, es muy facil advertir que siempre que queramos relacionar tablas tanto dentro deuna Base de Datos o dentro de una Vista, ambas tablas tienen un campo en comn, estecampo en comn o igual hace que dos o tablas por ejemplo estn relacionadas, esto es comna cualquier lenguaje de programacin, sobre todo en el mbito relacional de bases de datos.

    En la solapa Filter: no hacemos nada.

  • 80

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    En Cambio en la Solapa Order By: seleccionamos el campo Articulos.rubro y hacemos clicen boton y la solapa quedara de la siguiente manera como lo muestra la figura deabajo.

    A partir de ahora trminos con la construccin de nuestra consulta !. Ahora lo que debemos eshacer con el lado derecho del Mouse y hacemos clic en Run Query y podremos ver comoqueda terminada nuestra vista local, lo cual la podremos utilizar en el diseo de nuestrosinformes. Y por su puesto, despus de tanto trabajo, no debemos olvidarnos de salvar o grabarnuestra primera vista local, la grabaremos con el nombre de viewart.

    En caso de haber cometido errores la vista ser visualizada en pantalla de la siguiente maneracomo lo muestra la figura de la pagina siguiente.

    xitos en el estudio de este libro estimado lector y lectora, ya que nos falta un largo caminopor recorrer.

    Update Criteria: Aqu es donde trabajaremos directamente con opciones propias de SQL, noes necesario por el momento detallarlas ya que para el ejemplo que hemos mostrado no esnecesario activar algunas de estas opciones, pero de acuerdo al tipo proyecto que estemostrabajando mas de una ves ser necesario activar algunas de estas opciones.

    Micellaneous: aqu disponemos de las opciones, entre otras, la de forzar las uniones y de laposibilidad de evitar que se emitan valores duplicados.

  • 81

    VISUAL FOXPRO 9.0 SP2 Capitulo 2

    Vista final de nuestra primera vista creada a partir de dos tablas. A esta vista que la hemosllamado visart la podremos usar con dentro de un reporte por ejemplo para emitir un listadoque luego podr ser impreso.Ya estamos en condiciones de decir que estamos programando o diseando aplicaciones!

  • 82

    VISUAL FOXPRO 9.0 SP2 Capitulo 3

    Funciones de Microsoft Visual FoxPro.

    A partir de aqu ingresaremos a ver o en el caso de los programadores de versiones masantiguas de VFP, o de otros lenguajes, un repaso de los comandos mas usados en el desarrollode nuestros programas y aplicaciones, al final del capitulo veremos un pequeo repaso de loscomandos mas importantes de SQL. Estos ejemplos pueden ser escritos dentro un programatipo .PRG o bien dentro de nuestros aplicaciones, a ser mas exactos dentro de nuestros objetosde la clase base por ejemplo. a los antiguos programadores de D.O.S que es probable quetodava existan algunos, esto ser muy facial de aprender. A los fines didcticos, y paraahorrar espacios y hojas usaremos un tamao mas pequeo al escribir este capitulo. Esincreble las horas que se pierden en cualquier lenguaje de programacin al no conocer comotrabajar con funciones, por eso consideramos muy importe el correcto uso de ellas, ya que latarea de que desarrollan muchos programadores o desarrolladores lo hacen en forma solitaria.

    FUNCIONES DE CADENAS.

    ASC() (Funcin)

    Retorna el cdigo ANSI del carcter situado ms a la izquierda de una expresin de caracteres. Tipode valor devuelto: Carcter.

    ASC(cExpression)

    STORE 'AaBbCcDdEeFf' TO gcANSI && 10 charactersCLEARFOR nCOUNTER = 1 TO 10

    ? SUBSTR(gcANSI, nCOUNTER,1) && Display a character?? ASC(SUBSTR(gcANSI, nCOUNTER)) && Display ANSI value

    ENDFOR

    Ltrim ( ), Rtrim ( ) y Alltrim ( ). Funciones

    LTRIM(Expression [, nFlags] [, cParseChar [, cParseChar2 [, ...]]])

    RTRIM(cExpression [, nFlags] [, cParseChar [, cParseChar2 [, ...]]])

    ALLTRIM(Expression [, nFlags] [, cParseChar [, cParseChar2 [, ...]]])

  • 83

    VISUAL FOXPRO 9.0 SP2 Capitulo 3

    Para las tres funciones, la utilidad que tenemos es que podemos quitar los que pudieran tener unacadena caracteres, ya sea esta desde la izquierda, por la derecha o por ambos lados.Valor devuelto: Carcter.

    Left ( ) y Right ( ).Funciones

    Devuelve un numrico especificado de caracteres de una expresin de caracteres, empezando por elcarcter situado a la izquierda o bien a la derecha.

    Un ejemplo de todo lo anteriormente detallado podra ser:

    a = " bad boy"b = "Fabian is ... a man ...."c = " Hi Master "? a? LTRIM(Right(a,5))? LTRIM(LEFT(a,8))? b? RTRIM(RIGHT(b,2))? c? ALLTRIM(c)

    AT( ), Rat ( ) y Atc ( ). Funciones

    Devuelve la posicin numrica inicial de la primera aparicin de una expresin de caracteres o de uncampo memo dentro de otra expresin de caracteres o de campo memo, contando desde el carctersituado ms a la izquierda. Con Rat ( ) por la derecha, pero el valor devuelto siempre sera la posicinque empieza por la izquierda.Si queremos ignorar las letras tantos en maysculas como en minsculas podemos utilizar ATC(). notiene mucha utilidad a la hora de desarrollar aplicaciones comerciales.

    CHR() (Funcin)Devuelve el carcter asociado al cdigo ANSI numrico especificado. Valor devuelto tip o Carcter.

    nCdigo ANSI Especifica un nmero entre 0 y 255 cuyo carcter ANSI equivalente devuelveCHR().Utilice ASC() para devolver el valor ANSI de un carcter especificado.

  • 84

    VISUAL FOXPRO 9.0 SP2 Capitulo 3

    CLEARFOR nCode = 0 TO 255

    ? nCode && Display numeric value?? ' ' + CHR(nCode) && Display character

    ENDFOR

    CHRTRAN() (Funcin)

    Reemplaza cada carcter de una expresin de caracteres que coincida con un carcter de unasegunda expresin de caracteres con el carcter correspondiente de una tercera expresin decaracteres.

    CHRTRAN(cSearchedExpression, cSearchExpression, cReplacementExpression)

    CTOBIN() (Funcin)

    Convierte una representacin de caracteres binarios en un valor entero.

    CTOBIN(cExpression [, cFlags])

    Argumentos: cExpresin Especifica la representacin de caracteres binarios que se va a convertir.Valor devuelto: Numrico.

    CURVAL() (Funcin)

    Devuelve valores de campo directamente desde disco para una tabla o un origen de datos remoto.