Visual FoxPro.

Formularios, las Propiedades y Métodos creados por el Usuario y los Botones. II Parte.


En la entrega anterior aprendimos a crear Propiedades y Métodos diseñados por nosotros mismos, así como también a enlazar los datos de las Base de Datos con los Formularios que manejan información de tablas independientes, es decir, aquellas que no son generadas por el cruce o asociación (relación) de datos de otras tablas. Ahora le toca el turno a los Formularios que requieren de un Entorno de Datos con tablas relacionadas, para lo cual habrá que cambiar un poco el código que ya manejamos los formularios anteriores.

¿Ya Tengo mis Formularios y Ahora que Hago?.

Una vez que tengamos nuestro formulario completamente diseñado, realizamos el enlace de los datos de las tablas o de una Base de Datos a dicho formulario a través del Entorno de Datos, el cual permite que todas las tablas, vistas y relaciones que se abran cuando ejecutes o modifiques un formulario o un informe.

Ya está listo el entorno de datos, nos queda como única tarea mostrar o visualizar los datos o campos del entorno en nuestro formulario. Asegúrate que en el diseño de tu formulario cuente con una serie de cajas de texto "TextBox" para desplegar la información del entorno de datos.

Para cada Etiqueta de Texto, en la Propiedad ControlSource muestra todos los campos (asociados a sus respectivas tablas) del entorno de datos, te queda como última tarea, asignarle o seleccionar el campo o el dato que quieres mostrar en cada una de ellas.

 

Si en los formularios, utilizamos una cuadrícula o Control Grid, dicho control requiere que actualicemos cuatro propiedades básicas: ChildOrder, LinkMaster, RecordSource y RelationalExpr y Visual FoxPro hace el resto para que los datos se muestren en la cuadrícula.

ChildOrder: Es una Propiedad que específica la etiqueta de índice del origen de registro del control Grid . Utilice esta propiedad para vincular dos tablas que tengan una relación de uno a muchos. Por ejemplo, una tabla de clientes que contenga más de un registro por cliente se vincula con una tabla de pedidos que contenga múltiples pedidos por cliente. Para esta relación de uno a muchos, establezca la propiedad ChildOrder en el campo de etiqueta de índice del código del cliente. La propiedad ChildOrder simula el comportamiento de SET ORDER. Si se ha establecido la propiedad ChildOrder, se pasará por alto la propiedad Order del Cursor para la tabla secundaria. Representa el campo o índice de la tabla principal dentro del formulario.

LinkMaster: Propiedad que específica la tabla primaria vinculada a la tabla secundaria que se muestra en un control Grid. Específica el alias de la tabla primaria que dirige la presentación de la tabla secundaria en un control Grid. Utilice la propiedad LinkMaster para establecer una relación de uno a varios entre la tabla primaria, o principal, del formulario, y la tabla a la que hace referencia la propiedad RecordSource de la cuadrícula. Viene a ser la tabla principal dentro del formulario.

RecordSource: Propiedad que específica el origen de los datos del cual depende el control Grid. La propiedad RecordSource especifica el cursor principal del que depende la Grid. Si específica una fuente de registros para una cuadrícula, puede especificar el contenido de columnas individuales en la cuadrícula estableciendo su propiedad ControlSource. Si no establece la propiedad ControlSource para una columna en una cuadrícula, la columna muestra el siguiente campo disponible que no está en pantalla de la fuente de registros de la cuadrícula. Es la tabla con la cual se relaciona la tabla principal dentro del formulario.

RealtionalExpr: Propiedad que específica la expresión basada en los campos de la tabla primaria que se relaciona con un índice en la tabla secundaria, combinando las dos tablas. Especifica una expresión típica de Visual FoxPro, que empareja los índices actuales de la tabla secundaria de acuerdo con lo especificado por la propiedad ChildOrder. Nombre del índice de la tabla primaria, que permite la relación con otras tablas.

Cursor: Objeto que se crea al agregar una tabla o una vista al entorno de datos de un formulario, un conjunto de formularios o un informe. El objeto cursor permite especificar o determinar propiedades para la tabla o la vista cuando se ejecuta el formulario, el conjunto de formularios o el informe.

¿Pero Puedo Usar el mismo Código empleado para los Botones y Métodos en los Formularios de Tablas Independientes o Mejor Dicho sin Relación, en estos Formularios que si cuentan con Tablas Relacionadas entre sí?.

Los únicos códigos que sufrirán una pequeña modificación, son los pertenecientes a los Botones Siguiente, Anterior y Buscar y el Método Load del Formulario. Debido a que es necesario moverse no sólo dentro de una sola tabla, sino dentro de varias tablas al mismo tiempo.

Códigos para los Botones.

Botón Siguiente:

Select Nombre_de_la Tabla_Principal_Dentro_del_Formulario.

Set Skip To

ThisForm.Botones

If Not Eof( )

Skip

If Eof( )

Go Bottom

EndIf

Endif

Set Skip To Nombre_ de_la_Tabla_Secundaria_o_Relacionada

ThisForm.Show

ThisForm.Botones

 

Botón Anterior:

Select Nombre_de_la Tabla_Principal_Dentro_del_Formulario.

Set Skip To

ThisForm.Botones

If Not Bof( )

Skip - 1

If Bof( )

Go Top

EndIf

Endif

Set Skip To Nombre_ de_la_Tabla_Secundaria_o_Relacionada

ThisForm.Show

ThisForm.Botones

Botón Buscar:

Select Nombre_de_la Tabla_Principal_Dentro_del_Formulario.

Set Skip To

ThisForm.UltimoRegistro.Value = Recno( )

On Key Label Enter Keyboard Chr(23)

On Key Label RightMouse Keyboard Chr(23)

Browse NoModify NoAppend

On Key Label Enter

On Key Label RightMouse

Set Skip To Nombre_ de_la_Tabla_Secundaria_o_Relacionada

If Lastkey( ) = 27

Go ( ThisForm.UltimoRegistro )

EndIf

ThisForm.Show

ThisForm.Botones

Método Load:

Select Nombre_de_la Tabla_Principal_Dentro_del_Formulario.

Set Order To Campo_de_Orden_de_la_Tabla_Principal

Select Nombre_de_la Tabla_Secundaria_o_Relacionada

Set Order To Campo_de_Orden_de_la_Tabla_Secundaria

Set Filter To NombreTablaPrincipal.CampoOrden = NombreTablaSecundarial.CampoOrden

Select Nombre_de_la Tabla_Principal_Dentro_del_Formulario.

Set Relation To CampoOrdenTablaPrincipal Into CampoOrdenTablaSecundaria

Set Skip to NombreTablaSecundarial

Comentarios: Para que el objeto Cuadrícula (Grid) funcione, tiene que proveer las tablas y las relaciones. Para coordinar que los archivos (tablas) del Grid, es necesario que exista un índice común entre ambas (relación), por eso se emplean los siguientes comandos:

Set Relation To: Comando que crea una relación de uno a varios entre tablas.

Set Skip To: Comando que crea una relación de uno a varios entre tablas.

Con SET RELATION puede establecer relaciones entra tablas abiertas en diferentes áreas de trabajo. Cuando el puntero de registro se mueve en la tabla primaria, el puntero de registro de la tabla secundaria se mueve al primer registro correspondiente. El registro al que se mueve el puntero de registro de la tabla secundaria viene determinado por la expresión relacional SET RELATION. Se crea una relación uno a uno, por cada registro de la tabla primaria y el puntero de registro se mueve al primer registro coincidente de la tabla secundaria. Si no se encuentra un registro coincidente en la tabla secundaria, el puntero de registro de la tabla secundaria se moverá al final de la tabla. Con frecuencia, una tabla secundaria contiene varios registros que se corresponden con un registro de la tabla primaria. SET SKIP le permite establecer una relación uno a varios entre un registro de la tabla primaria y varios registros de la tabla secundaria. Cuando se mueve a través de la tabla primaria, el puntero de registro permanece en el mismo registro de la tabla primaria hasta que el puntero de registro se mueva a través de todos los registros relacionados de la tabla secundaria. Para establecer una relación uno a varios, cree primero la relación entre las tablas primaria y secundaria con SET RELATION. Entonces, ejecute SET SKIP para crear la relación uno a varios.

Set Filter To: Comando que específica una condición que deben cumplir los registros de la tabla actual para estar accesibles. Si la tabla actual está indexada por uno o varios campos especificados en la expresión, la tecnología Rushmore de Visual FoxPro optimizará las consultas basadas en el campo o los campos. Una vez emitido SET FILTER, solamente están disponibles en la tabla los registros que satisfacen la condición especificada con la expresión lógica la expresión. Todos los comandos que acceden a la tabla respetan la condición SET FILTER. Se puede definir un filtro distinto para cada tabla abierta. La condición especificada por SET FILTER no se evalúa hasta que el puntero de registro se mueve en la tabla.

Select Nombre_de_la Tabla_Principal_Dentro_del_Formulario.

Set Relation To CampoOrdenTablaPrincipal Into CampoOrdenTablaSecundaria

Set Skip to NombreTablaSecundarial

Esta líneas de código aseguran que cada vez que usted se cambie a otro registro en la tabla principal el objeto Cuadrícula mostrará los registros de la tabla asociada que concuerden con el registro actual.

Set Filter To NombreTablaPrincipal.CampoOrden = NombreTablaSecundarial.CampoOrden

Esta línea asegura que sólo aparezcan registros que hagan juego o concuerden entre las dos tablas relacionadas con el Set Relation To.

Nota: Te recuerdo que tanto el Código del Evento GotFocus (evento que se produce cuando un objeto recibe el enfoque, bien mediante acciones del usuario o mediante código) como el del Evento LostFocus (Se produce cuando un objeto pierde el enfoque), deben ser incluidos dentro de todas las Etiquetas de Texto (Control TextBox) existentes dentro de un formulario.

 

Arriba


Para más información contactar con:
Francisco A. Ponte R.
Correo electrónico: fponte@uc.edu.ve