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
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.