Botonera y clases en Visual Foxpro

Como esta. Acá le saludo desde Guatemala. Un abrazo y saludo a la distancia.
Explico,
He revisado en este sitio, alguien que solicito ayuda para poder hacer los botones de mantenimiento (ABC) dentro de un formulario. Pude leer que le guiaba su persona y le indicaba que debía de hacer inicialmente formularios clasados y posterior sus botoneras. También exponía, que era más recomendable utilizar INSERT INTO en lugar de APPEND BLANK, y todo en conjunto me pareció bastante interesante.
A mi manera de pensar, cuando Microsoft tomo Foxpro lo dejo mal, mal en el sentido que a los programadores les quedaron lagunas de donde, como y cuando, se debía de aplicar código. Me paso lo mismo. Entiendo que la forma de programa objetos es más fácil y reutilizable pero me es muy compleja, para el fin que se desea. He sido seguidor de Fox desde Dbase, pero acá si tengo las mismas lagunas. Y los Wizard no digamos.
En síntesis, podrá darle seguimiento a lo comenzado por el usuario que hizo el requerimiento, hasta donde va, hicieron clases de formulario pero no ampliarion clases de botones y su código, lo más importante. Si estoy mal en mi apreciación sírvase disculpar.
Yo tengo algunas aplicaciones, en que al momento de grabar mis registros, o me sigue contando el codigo que sigue (thisform.text1.value=empleados.codigo) y el la linea siguiente (thisform.text1.value=thisform.text1.value+1) o elimina el registro anterior y graba sobre el mismo. Sigo utilizando APPEND BLANk.

1 Respuesta

Respuesta
1
La verdad es que lo que Ud. plantea es acertado en algunos puntos, mientras que en otros no comparto su punto de vista.
Yo también hace muchos años que estoy con fox, desde el fox 2.6 para DOS, y a decir verdad, todavía sigo descubriendo nuevas formas de hacer las mismas tareas de siempre.
Creo que la gran versatilidad del lenguaje deja abierta las posibilidades a la tenacidad, capacidad e imaginación de los programadores. Yo no considero que sean lagunas sino más bien amplitud para que cada programador tome el camino que más le convenga según su necesidad y la de su proyecto.
También creo que todos nosotros inevitablemente nos acostumbramos a trabajar de una forma determinada, es decir que a medida que vamos aprendiendo vamos desarrollando "esquemas" de pensamiento que luego plasmamos en nuestros trabajos. Desarrollamos un método de programación !
Es así que hay quienes prefieren utilizar unos comandos y hay quienes prefieren utilizar otros. Esto es como las opiniones, podemos encontrar muchísimas formas de programar, sin que podamos decir que una es mejor que otra. Por ello creo que estos foros son importantes ya que podemos compartir opiniones y especialmente conceptos.
En cuanto al seguimiento que le brindé al usuario para la creación de clases para ABM, debes tener en cuenta que no se puede pasar de el grado de aprendiz a experto en un sólo paso, no se trata de un flash que nos abre la mente a todo el mundo de las posibilidades. Debemos recorrer un camino, en el cual vamos probando, y en el caso que tu te refieres mepareció que orientarlo hacia ese camino le resultaría más provechoso ya que habiendo captado el concepto el usuario puede continuar haciendo su propio camino.
Como decía, cada comando tiene su utilidad específica, en cuanto al uso del append blank, (una herencia de las primeras versiones) requiere un seguimiento de códimo más amplio para evitar registros en blanco, sin mencionar el hecho de que si utilizas la Integridad Referencial de la base de datos, en muchos casos no se puede ejecutar debido a que te dará un error.
Si tú defines una relación de uno a varios entre dos tablas, Por Ej. Clientes y pedidos, en donde ambas tablas comparten un campo idcliente que sirve para relacionarlas, y en la definición de los desencadenantes pones que no se puedan agregar registros a la tabla secundaria si no existe un registro con clave coincidente en la tabla primaria. Si intentas ejecutar un append blank te dará error debido a que no existe ningún registro con el campo clave en blanco en la tabla primaria.
Y así podríamos seguir indefinidamente. Eso es lo grandioso que tiene este lenguaje, su gran versatilidad.
Te agradezco mucho tu comentario y quedo a tu disposición.
Nuevamente agradezco su aporte al tema que busco. Considero que pasaremos años con los puntos de vista de una y otra persona, pero lo importante es que todos entendamos de que estamos hablando.
Siguiendo con el tema de ABC, quisiera me aportara si pudiera, los procesos que se llevan a cabo cuando se realizan botoneras, ya que es una de las partes más complejas, y aun más cuando se utilizan clases, se si bien creo, es otra de las versatilidades de este lenguaje.
Mi aporte, como FOX DOS, ninguno, más ahora que se puede pegar desde ese antiquísimo lenguaje a una base de datos MySQL.
Saludos y espero su comentario.
No sé si he comprendido tu necesidad de información, de todas formas te expongo lo siguiente:
Cuando programamos, dependiendo del tamaño del sistema, es frecuente que tengamos que realizar las mismas tareas desde distintos lugares de nuestro sistema.
Entonces resulta tedioso desperdiciar nuestro valioso tiempo y talento en repetir una y otra vez líneas y líneas de código.
Es entonces cuando sale a la luz la gran utilidad de las clases, ya que en ellas defines o programas una sola vez objetos y su comportamiento, a los que llamas cada vez que necesitas.
Un caso sencillo:
Supongamos que tú has diseñado 20 formularios, cada uno con un botón salir que has tomado de la definición de clase base de VFP.
Luego decides que en lugar de que tu botón diga salir te gustaría más que dijera Cerrar, entonces tendrás que recorrer los 20 formularios y realizar el cambio en cada uno.
En cambio, si tu hubieras definido una clase para tu botón salir, y en cada formulario hubieras creado el botón salir a partir de tu propia clase, sólo debes ir a la definición de la clase y realizar la modificación una sola vez y se verá reflejada en todos los formularios en la que la hubieras utilizado.
Esa es la ventaja del uso de clases personalizadas, (por supuesto que las ventajas son mucho mayores).
Vonviendo al tema de tu consulta, lo más habitual que tenemos que realizar es diseñar un Formulario Maestro ABM donde habitualmente tenemos un grid y los botones de comando para agregar, editar o eliminar registros entre otras posibles tareas.
Volviendo al ejemplo que te dí, en lugar de diseñar todo esto para cada Formulario Maestro ABM, lo he definido una sola vez en una clase commandgroup que contiene los botones Nuevo, Editar, Eliminar, etc).
Entonces cada vez que necesito admiistrar registros pongo una instancia de mi clase commandgroup en mi formulario y simplemente indico el nombre del formulario al que cada botón debe llamar, el resto del código está definido en la clase.
Gracias por el apoyo.
Pero el que no pregunta se vuelve burro o diputado o presidente. Conste
"Cuando usted indica, utilizo la clase commandgroup, entiendo que visual foxpro ya la trae, si es así donde, sino como la hago.."
Saludos
Visual Fox trae una clase comandgroup pero no es a ella a la que me refiero. Me refiero a una clase personalizada, definida por el usuario y basada en la clase comandgroup de VFP.
Te sugiero que leas el seguimiento para crear estas clases en los siguientes enlaces:
1) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2492099/solicitud-codigo-para-botones-vfp
2) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2492875/crear-clase-para-boton-nuevo
3) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2493598/asignar-codigo-a-botones-de-clase
Creo que con ello te podrás hacer una idea clara de lo que trato de exponer.
http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/visual-fox-pro/respuestas/2492099/solicitud-codigo-para-botones-vfp
En esta sección de crear la clase de formulario, en donde me pide crear un formset.
Te escribí a tu correo lo solicitado
Ya recibí tus archivos.
En cuanto pueda los miro y te aviso.
Te he enviado por correo electrónico un ejemplo funcional de librería de clases.
A diferencia de las que tú me enviaste, esta librería contiene varias clases. Por lo tanto te sugiero que guardes tus clases personalizadas en una sola librería (archivo vcx).
El ejemplo que te envié corresponde al soporte que le brindé al usuario ivanof (al que tu te referías). El código es bastante simple aunque hace referencia a variables que quizás no sepas cómo funcionan.
Trata de rastrearlas comenzando por la clase commandbutton y luego por la clase form.
Analiza el código con tranquilidad y estoy seguro que sacarás tus propias conclusiones.
Si luego tienes dudas vas realizando nuevas preguntas referidas específicamente a cada duda que tengas.
por partes...
¿Cómo guardas las distintas librerías en un solo archivo...?
Del código...! UFF no lo tienes en español...! ja ja . Son bromas lo estoy evaluando.
Me queda pendiente, porque haciendo lo que explicaste a Ivanof, ni por ningún lado me sale una sola clase de form.
Le escribiste en su entonces esto...
1) Desde el Administrador de Proyectos selecciona la pestaña Clases.
Hecho.
2) Dale click al botón Nuevo... y se abrirá el formulario para definir la nueva clase
Hecho
3) Escribe en Nombre de la nueva clase Por Ej. miForm1
Hecho
4) Donde dice basado en selecciona la opción Form
Hecho
5) Donde dice "Almacenar en" debes indicar el directorio "Libs" de tu proyecto y el nombre de la Biblioteta de Clases definidas por ti. Per Ej. "c:\mis documentos\mis proyectos\proyecto1\libs\misclases.vcx"
Hecho
6) Para finalizar das click al botón aceptar y se abrirá el diseñador de Clases, que es igual al diseñador de formularios.
Hecho.
Hice cambios en diseño (iconos, labels, ext)
Bien todo.
Ahora, ¿voy a formularios y como le digo que sea basado en la clase que acabo de hacer...?
Espero.
Ante todo te pido disculpas por haberte pasado los programas en inglés !
La pregunta sería así: ¿Cómo guardar las distintas clases en una sola librería (archivo vcx)?
La respuesta: La primera vez que definas una clase indica en el campo "Almacenar en:" el nombre de archivo que desees y siempre guardalo en la carpeta Libs. Las siguientes clases que vayas creando selecciona el archivo vcx creado como destino de "Almacenar en:". ¿Estamos claros?
En lo que tu describes en los puntos 1 a 6 estás creando una clase Form. ¿Una vez que has creado tu clase y la hayas guardado viene la pregunta del millón?
¿Dónde están mis clases? ¿Cómo las llamo?
Elemental Watson !
1) Vas al menú Archivo, seleccionas Nuevo Formulario, se abre un formulario en blanco basado en la clase VFP.
2) Vas al menú Ver y seleccionas Barra de herramientas de controles de Formularios. Se abre la barra de herramientas con los controles de las clases de VFP. Le das click al primer botón de la derecha (Libros) que dice Ver clases cuando te posas sobre él. Seleccionas la librería de clases vcx que tú desees, en este caso donde tienes definidas tus clases personalizadas.
3) Se cargan los nuevos controles en la barra de herramientas y desaparecen los controles por defecto.
4) Allí tienes tus clases. Ahora le das 1 click a tu clase form y luego le das clic al formulario que se está diseñando.
5) El sistema te dirá que necesita crear un formset. Le dices que sí. Luego te aparece el formulario que tú diseñaste sobre el formulario por defecto. Pinchas con el mouse en la barra de titulo del formulario que tú creaste y lo desplazas un poco hasta que puedas visualizar el formulario que está debajo.
6) Seleccionas el formulario que está debajo, vas al menú formulario y eliges Quitar formulario. Luego vuelves al menú formulario y eliges Quitar conjunto de formularios.
Y eso es todo, ahora puedes continuar diseñando directamente sobre tu formulario basado en tu propia clase.
Si deseas volver a ver los controles por defecto seleccionas nuevamente el botón Ver clases de la Barra de Controles de Formulario y seleccionas Estándar y listo.
Eso es todo, pruébalo !

Añade tu respuesta

Haz clic para o