14.05.2013 Views

Creación de Proyectos en Visual FoxPro Parte 3 - foxeando

Creación de Proyectos en Visual FoxPro Parte 3 - foxeando

Creación de Proyectos en Visual FoxPro Parte 3 - foxeando

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Creación</strong> <strong>de</strong> <strong>Proyectos</strong> <strong>en</strong> <strong>Visual</strong> <strong>FoxPro</strong><br />

<strong>Parte</strong> 3<br />

Hasta el mom<strong>en</strong>to vimos como se crean los proyectos, como se g<strong>en</strong>era un prg para<br />

guardar funciones y procedimi<strong>en</strong>tos, otro <strong>de</strong> arranque con los seteos principales y un<br />

formulario <strong>de</strong> ABM básico.<br />

En este docum<strong>en</strong>to veremos como se <strong>de</strong>fin<strong>en</strong> las clases propias y como se las utiliza,<br />

como se agregan los objetos por código y por último como po<strong>de</strong>mos utilizar un solo<br />

formulario ABM para todas las tablas.<br />

La imag<strong>en</strong> muestra el DER (diagrama <strong>de</strong> <strong>en</strong>tidad-relación) <strong>de</strong> la base <strong>de</strong> datos que<br />

usamos para el proyecto CursoFoxpro.


Los pasos a seguir van a ser los sigui<strong>en</strong>tes:<br />

1) <strong>Creación</strong> <strong>de</strong> clase para selección <strong>de</strong> sexos.<br />

2) <strong>Creación</strong> <strong>de</strong> clase para relación <strong>de</strong> tablas. (ejemplo: <strong>en</strong> alumnos guardar <strong>en</strong> el<br />

campo id_loc el id <strong>de</strong> la localidad que seleccionamos).<br />

3) Crear plantillas <strong>de</strong> carga.<br />

4) Modificar el form ActAlumnos por el Actualiza g<strong>en</strong>érico.<br />

Clase Sexo:<br />

Las clases se almac<strong>en</strong>an <strong>de</strong>ntro <strong>de</strong> librerías <strong>de</strong> clases, permiti<strong>en</strong>do agruparlas por<br />

funcionalidad. Ejemplo:<br />

Hay dos librerías abm y herrami<strong>en</strong>tas, cada una <strong>de</strong> ellas ti<strong>en</strong><strong>en</strong> clases relacionada con la<br />

funcionalidad.<br />

Para crear una clase nueva presionamos new y nos aparece el sigui<strong>en</strong>te formulario:<br />

Nombre <strong>de</strong> la clase, ejemplo<br />

sexo.<br />

En que clase esta basada, <strong>en</strong> la<br />

lista figuran las nativas <strong>de</strong>l vfp<br />

o con los tres puntitos po<strong>de</strong>mos<br />

elegir una nuestra creada<br />

previam<strong>en</strong>te.<br />

Seleccionamos la librería don<strong>de</strong><br />

la vamos a almac<strong>en</strong>ar. Si aun no<br />

existe la crea.


Entonces vamos a crear una clase llamada sexo, basada <strong>en</strong> combobox y la guardamos<br />

<strong>de</strong>ntro <strong>de</strong> abm. Nos va a aparecer algo así:<br />

El objeto combobox nos sirve para mostrar una lista <strong>de</strong> opciones posibles a seleccionar,<br />

por ejemplo masculino y fem<strong>en</strong>ino. Esta clase la po<strong>de</strong>mos utilizar <strong>en</strong> cualquier lugar<br />

don<strong>de</strong> haya selección <strong>de</strong> sexo, eso es lo bu<strong>en</strong>o <strong>de</strong> las clases propias, ahorramos código y<br />

si mas tar<strong>de</strong> queremos agregar una nueva opción no t<strong>en</strong>emos que rastrear todos los<br />

lados sino solo modificamos la clase.<br />

El combobox ti<strong>en</strong>e mucha similitud con el listbox, la única difer<strong>en</strong>cia es que el listbox<br />

siempre aparece como lista y el combo aparece solo lo que seleccionamos. Por lo tanto<br />

las propieda<strong>de</strong>s y métodos que vamos a explicar sirv<strong>en</strong> para cualquiera <strong>de</strong> las dos<br />

clases.<br />

Las propieda<strong>de</strong>s que vamos a utilizar son:<br />

ColumnCount = 2 **Define la cantidad <strong>de</strong> columnas a mostrar <strong>en</strong> la lista.<br />

ColumnWidths = 100, 50 **El ancho <strong>de</strong> cada columna para mostrar el valor.<br />

Style = 2 **Como se comporta visualm<strong>en</strong>te.<br />

SelectOnEntry = .T. **Despliega automáticam<strong>en</strong>te la lista al tomar foco.<br />

Value = Nos da el valor <strong>de</strong>l dato que seleccionamos, <strong>de</strong> la columna que seteamos <strong>en</strong> la<br />

propiedad sigui<strong>en</strong>te.<br />

BoundColumn = 2 **Por <strong>de</strong>fecto es 1, esto nos dice la propiedad value que valor <strong>de</strong><br />

columna nos <strong>de</strong>vuelve.<br />

Por ultimo <strong>en</strong> el método init vamos a realizar la carga <strong>de</strong>l combobox:<br />

This.AddListItem("Masculino", 1, 1)<br />

This.AddListItem("M",1,2)<br />

This.AddListItem("Fem<strong>en</strong>ino", 2, 1)<br />

This.AddListItem("F", 2, 2)<br />

El método AddlistItem ti<strong>en</strong>e como parámetros el texto a mostrar, la i<strong>de</strong>ntificación <strong>de</strong>l<br />

elem<strong>en</strong>to y la columna don<strong>de</strong> se mostrara. Si queremos agregar mas <strong>de</strong> una columna<br />

para un mismo elem<strong>en</strong>to lo único que t<strong>en</strong>emos que hacer es <strong>de</strong>finir la misma<br />

i<strong>de</strong>ntificación para todas las columnas.<br />

La propiedad controlsource, tanto <strong>en</strong> este como <strong>en</strong> otros objetos, nos dice cual es el<br />

orig<strong>en</strong> <strong>de</strong> datos para la propiedad value, <strong>en</strong> la mayoría <strong>de</strong> los casos va a ser una campo<br />

<strong>de</strong> una tabla. No la <strong>de</strong>finimos <strong>en</strong> la clase porque la po<strong>de</strong>mos usar <strong>en</strong> mas <strong>de</strong> una tabla<br />

distinta.<br />

Clase Relación:<br />

La finalidad <strong>de</strong> esta clase es po<strong>de</strong>r <strong>de</strong>finirle que datos necesitamos, <strong>de</strong> que tabla son y<br />

<strong>en</strong> que campo los queremos grabar. Ella sola abrirá la tabla, configurara todas las<br />

propieda<strong>de</strong>s necesarias para establecer el vínculo.


Vamos a crear una clase nueva llamada relación y la guardamos <strong>de</strong>ntro <strong>de</strong> abm, basada<br />

<strong>en</strong> combobox, igual que la anterior, y <strong>de</strong>finimos las mismas 4 propieda<strong>de</strong>s. Otra<br />

propiedad a <strong>de</strong>finir es RowSourceType = 2, <strong>en</strong> ella le indicamos que el tipo <strong>de</strong> orig<strong>en</strong> <strong>de</strong><br />

datos es una tabla.<br />

En los formularios y las clases po<strong>de</strong>mos crear propieda<strong>de</strong>s y métodos a<strong>de</strong>más <strong>de</strong> los que<br />

ya vi<strong>en</strong><strong>en</strong> por her<strong>en</strong>cia, para hacer eso vamos al m<strong>en</strong>ú form o class y clickeamos <strong>en</strong><br />

“New property” o <strong>en</strong> “New method”. Los métodos sirv<strong>en</strong> para guardar procedimi<strong>en</strong>tos o<br />

funciones <strong>de</strong>ntro <strong>de</strong> la clase y las propieda<strong>de</strong>s para guardar ciertos valores a los que<br />

podrán acce<strong>de</strong>r todos los objetos.<br />

Necesitamos crear dos propieda<strong>de</strong>s:<br />

a) Campos Vamos a obt<strong>en</strong>er la tabla y los campos que queremos mostrar.<br />

b) Destino Va a ser nuestro valor para el ControlSource.<br />

En el método init vamos a agregar el sigui<strong>en</strong>te código:<br />

(Las funciones utilizadas a continuación están <strong>en</strong> el apunte: www.<strong>foxeando</strong>.com.ar/paginas/funciones_vfp.htm)<br />

Los ejemplo <strong>de</strong> los valores que se cargan <strong>en</strong> las propieda<strong>de</strong>s son:<br />

*campos = "alumnocat.id, nombre"<br />

*<strong>de</strong>stino = "alumnos.id_cat<br />

TabOri = "bd/" + LEFT(this.campos,AT(".",this.campos)-1)<br />

*La tabla que necesitamos abrir la vamos a obt<strong>en</strong>er <strong>de</strong>l string campos.<br />

SELECT 0<br />

USE (tabOri) ORDER id<br />

*abrimos la tabla para que la propiedad sigui<strong>en</strong>te <strong>en</strong>cu<strong>en</strong>tre el alias<br />

This.RowSource = This.campos<br />

This.ControlSource = This.Destino<br />

De esta forma ya t<strong>en</strong>emos la clase g<strong>en</strong>érica relación, a la hora <strong>de</strong> usarla solo <strong>de</strong>bemos<br />

cargar <strong>en</strong> las propieda<strong>de</strong>s campos y <strong>de</strong>stino los valores para que se configure sola al<br />

ejecutarse el código.<br />

En la próxima parte veremos los puntos que quedan.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!