Vous êtes sur la page 1sur 14

DATOS A TRAVS DE FICHAS1

INTRODUCCIN
En ocasiones debemos introducir informacin de carcter variado pero relacionada con un mismo origen. Una solucin pasara por dar de alta los datos de ese origen en un formulario para, a continuacin, cerrarlo y abrir otro formulario, dar de alta los datos, cerrarlo y abrir otro... y as sucesivamente. Lgicamente lo anterior no es de lo ms elegante, digamos. Vamos a ver como podemos hacer un todo en uno utilizando los un control ficha. Adems, aprenderemos a mostrar o no la informacin en funcin de condiciones. El ejemplo que vamos a desarrollar se refiere a un club de deportes, y vamos a recoger toda una serie de datos para dar de alta al socio. Lo que haremos ser: Dar de alta al socio a travs de su nombre, asignndole un cdigo de socio Recoger sus datos personales Recoger las actividades a las cuales est suscrito Si el socio tiene pareja, recogeremos los datos de su pareja

Lo anterior se podra complicar todo lo que quisiramos, si necesitramos otro tipo de datos, pero eso nos hara el ejemplo eterno. Con lo que os propongo veremos perfectamente cmo sera la mecnica de la aplicacin (o, al menos, de esta parte de la aplicacin). Tambin os explicar cmo, adems de dar de alta a un socio, poder buscar su ficha por diferentes datos que pueda proporcionarnos el socio para poder visualizarla o cambiar/actualizar datos. Aprovecharemos tambin para ver cmo realizar alguna que otra consulta dado que los datos estarn estructurados de una manera llammosle especial para nuestro ejemplo. Los cdigos VB los pondr ampliamente comentados, para que sepis qu hace el cdigo en cada momento. Dicho lo anterior pongmonos manos a la obra:

PREPARANDO LAS TABLAS


Vamos a necesitar, segn os comentaba en el apartado anterior: Una tabla que nos recoger exclusivamente el cdigo de socio y su nombre Una tabla para los datos personales del socio Una tabla para las actividades Una tabla para las actividades del socio Una tabla para los datos del cnyuge La primera tabla, a la que llamaremos TSocios, tendr la siguiente estructura:

La BD de ejemplo os la podis bajar aqu.

Vistame en http://siliconproject.com.ar/neckkito/

La segunda tabla, a la que llamaremos TDatosSocios, tendr:

Fijaos que, en este caso, al ser una tabla digamos dependiente, el identificador de socio no es autonumrico, sino que es numrico. El ltimo campo, [Pareja], es un campo S/No. Debera salirnos por defecto, como valor predeterminado, el 0. No estara de ms que comprobramos si, efectivamente, nos ha situado el 0 como valor predeterminado. La tercera tabla, que llamaremos TActividades, tendr la siguiente estructura:

Situamos esta tabla, una vez confeccionada, en vista hoja de datos y, manualmente, introducimos unos cuantos registros. Por ejemplo, yo he introducido los siguientes:

La cuarta tabla ser la que llamaremos TActSocios, y que ser as:

Vistame en http://siliconproject.com.ar/neckkito/

Una vez que la tengamos definida vamos a crear una relacin: para ello nos vamos al campo [IdAct] y, en <Tipo de datos>, seleccionamos el asistente para bsquedas. Lo configuramos de la siguiente manera: Deseo buscar los datos en una tabla Elegimos la tabla TActividades Seleccionamos los dos campos que tiene Ordenamos por [Descrip] ascendente Ocultamos la columna clave y redimensionamos a nuestro gusto Dejamos el nombre que nos sale por defecto. Nos pedir que guardemos la tabla. La guardamos para crear la relacin. Finalmente, creamos una quinta tabla, que llamaremos TPareja, y que tendr la estructura siguiente (por poner algunos campos de ejemplo):

Fijaos que, de nuevo, el campo [IdSoc] no es autonumrico. Ya tenemos nuestras tablas construidas. Vamos a por los formularios.

DISEANDO NUESTROS FORMULARIOS


Vamos a crear en primer lugar, un formulario de inicio, desde donde podremos acceder al formulario de los socios en funcin de si queremos dar de alta un nuevo socio o si queremos consultar una ficha. As pues creamos un formulario en blanco, que llamaremos FMenu, y en l aadiremos un botn de comando, que llamaremos cmdAbreFSocios. Para llamarlo as deberemos sacar las propiedades del botn e irnos a Pestaa Otras Nombre, y ah escribir cmdAbreFSocios 2 Ahora nos situamos, todava en las propiedades del botn, en la Pestaa Eventos Al hacer click, y le generamos el siguiente cdigo3: Private Sub cmdAbreFSocios_Click() 'Cerramos el formulario actual DoCmd.Close acForm, Me.Name 'Abrimos FSocios preparado para aadir un nuevo registro DoCmd.OpenForm "FSocios", , , , acFormAdd End Sub

2 3

A partir de ahora, cuando os diga y llamamos al control xxx, me estar refiriendo a esta propiedad del control. Para generar cdigo nos ponemos en la parte en blanco junto al evento que queramos, y veremos cmo nos aparece un pequeo botn de puntos suspensivos. Si hacemos click sobre l nos aparecer una ventana. Le decimos que queremos generar cdigo. Se nos abrir el editor de VB, con dos lneas por defecto (Private Sub... y End Sub). Esas dos lneas no deben tocarse. El cdigo lo escribimos entre dichas lneas

Vistame en http://siliconproject.com.ar/neckkito/

Evidentemente an no existe el formulario FSocios. Lo vamos a crear a continuacin. Pero, antes, comentaros que no vamos a crear ningn formulario para dar de alta las diferentes actividades, porque, visto lo anterior, el proceso es muy sencillo: creamos el formulario sobre la tabla TActividades y, suponiendo que lo llamamos FActividades, el cdigo para el botn en FMenu que nos abrira este formulario sera el mismo que os he puesto, cambiando FSocios por FActividades. Fcil. Pues lo dicho... vamos a crear un formulario sobre la tabla TSocios, que guardaremos como FSocios. Antes de cualquier cosa vamos a aadir un botn de comando en la seccin <Encabezado del formulario>, que nos servir para cerrarlo y volver a FMenu. A ese botn lo llamaremos cmdCerrar, y le asignaremos el siguiente cdigo (evento Al hacer click): Private Sub cmdCerrar_Click() 'Cerramos el formulario actual DoCmd.Close acForm, Me.Name 'Volvemos al men DoCmd.OpenForm "FMenu" End Sub Si sacamos las propiedades del formulario vamos a modificar algunas cosillas: Para quitar la barra de la izquierda (que muestra un triangulito negro): Pestaa Formato Selectores de registro: NO Para quitar, en la parte inferior del formulario, la navegacin por los registros: Pestaa Formato Botones de desplazamiento: NO Para poner un ttulo interesante a nuestro formulario: Pestaa Formato Titulo, y ah escribimos (sin comillas) ALTA SOCIOS Para que no nos salte a un nuevo registro al presionar ENTER o Tabulacin desde el ltimo campo: Pestaa Otras Ciclo: Registro activo Nos situamos sobre el campo [CodSoc] y sacamos sus propiedades. Nos vamos a Pestaa Otras Punto de tabulacin: NO. De esta manera conseguimos que el enfoque se site directamente en el campo [NomSoc] Hacemos ms grande el rea de detalle del formulario. Debajo de esos dos campos vamos a aadir un control de ficha. Una vez introducido sacamos sus propiedades y le ponemos de nombre tabDetalles. Nos debera haber quedado una cosa as:

Vistame en http://siliconproject.com.ar/neckkito/

Vamos a aadir una pgina ms a la ficha. Para ello seleccionamos el control ficha y nos vamos a la cinta de opciones grupo controles Aadir pgina. Debera aparecernos la Pgina 8 (en mi caso, segn podis ver en la ilustracin, porque tena Pgina 6 y Pgina 7). Hacemos doble click sobre el nombre de la primera pgina (en mi caso, Pgina 6) y nos aparecern las propiedades de esa pgina. Nos vamos a la pestaa Formato Ttulo, y escribimos: Datos socio. Ahora nos vamos a la pestaa Otras Nombre, y escribimos pagSocio. Hacemos lo mismo con la pgina 2 (la Pgina 7 en mi caso), y Ttulo: Datos actividades Nombre: pagActividades Hacemos lo mismo con la tercera pgina (la Pgina 8 en mi caso), y cuidado, porque modificaremos una propiedad ms: Ttulo: Datos pareja Nombre: pagPareja Pestaa Formato Visible: No Esto nos ocultar, al principio, la pgina correspondiente a los datos de la pareja. Seleccionamos la primera pgina (Datos socio) y, dentro de ella, insertamos un control subformulario. Es decir, que una vez seleccionado dicho control lo dibujamos dentro de los lmites interiores de esa pgina (se nos pondr el rea dentro de la ficha en color negro). Nos saldr el asistente. Lo configuramos de la siguiente manera: Usar tablas existentes Seleccionamos la tabla TDatosSocios y aadimos todos los campos de la tabla. Definimos nuestra propia relacin: Campo del formulario: [CodSoc]; campo del subformulario: [IdSocio] Ponemos de nombre subFormDatosSocios Nos debera haber quedado una cosa as:

Vistame en http://siliconproject.com.ar/neckkito/

Podemos eliminar la etiqueta del subformulario (la que sale arriba con el nombre de subFrmDatosSocios) No nos preocupamos ahora por el diseo de este subformulario. Ya lo haremos despus. Seleccionamos la pgina Datos actividades y, en su interior, insertamos un control subformulario. Cuando nos aparezca el asistente lo configuramos de la siguiente manera: Usar tablas existentes Seleccionamos la tabla TActSocios y aadimos los campos de la tabla, menos el campo [Id] Definimos nuestra propia relacin: Campo del formulario: [CodSoc]; campo del subformulario: [IdSoc] Escribimos de nombre subFrmActSocios Podemos borrar la etiqueta de nombre de formulario. Nos debera haber quedado una cosa as:

Finalmente (supongo que ya seris especialistas haciendo esto) seleccionamos la pgina Datos pareja y en ella insertamos un control subformulario. Lo configuramos as:

Vistame en http://siliconproject.com.ar/neckkito/

Usar tablas existentes Seleccionamos la tabla TPareja y aadimos todos los campos. Definimos nuestra propia relacin: Campo del formulario: [CodSoc]; campo del subformulario: [IdSoc] Lo llamamos subFrmPareja Tambin podemos quitarle la etiqueta de formulario. A m me ha quedado as:

Y, en principio, dejaremos aqu el tema del formulario. Guardamos los cambios y cerramos. Vamos a centrarnos en nuestros subformularios.

CONFIGURANDO NUESTROS SUBFORMULARIOS


Vamos a empezar por el subformulario que nos recoge los datos de la pareja. As pues, situamos el formulario subFrmPareja en vista diseo. Sacamos las propiedades del formulario y nos vamos a la Pestaa Formato Vista predeterminada, y la situamos en Un nico formulario. Selectores de registro: NO Botones de desplazamiento: NO Pestaa Otras Ciclo: Registro activo Sacamos las propiedades del campo [IdSoc] y nos vamos a la Pestaa Formato Visible: NO. Podemos eliminar su etiqueta y situamos el campo en algn rincn donde no moleste. Podemos arreglar un poco el diseo del formulario a nuestro gusto. A m me ha quedado as:

Vistame en http://siliconproject.com.ar/neckkito/

Guardamos los cambios y cerramos. Ahora situamos nuestro formulario subFrmActSocios en vista diseo. Lo vamos a configurar diferente porque la vista que utilizaremos para el subformulario ser de formularios continuos. En principio sacamos las propiedades del formulario y Pestaa Formato Vista predeterminada: Formularios continuos Botones de desplazamiento: NO Sacamos las propiedades del campo [IdSoc] y Pestaa Formato Visible: NO. Podemos borrar su etiqueta. Lo que viene a continuacin es difcil de explicar si no se tiene una referencia grfica delante. Por ello os pongo antes la ilustracin para que veis cmo lo he hecho yo:

Extendemos un poco el rea de la seccin <Encabezado del formulario> y en ella insertamos una etiqueta que nos indique la Actividad (en amarillo, en la ilustracin) El campo [IdSoc] lo he reducido y lo he situado a la derecha del campo [IdAct]. He ajustado el detalle al mximo a los campos. Guardamos ese formulario y cerramos. Abrimos en vista diseo el formulario subFrmDatosSocios. Sacamos las propiedades del formulario y Pestaa Formato: Vista predeterminada: Un nico formulario. Selectores de registro: NO Botones de desplazamiento: NO Pestaa Otras: Ciclo: Registro activo Sacamos las propiedades del campo [IdSocio] y nos vamos a Pestaa Formato Visible: NO. Podemos eliminar su etiqueta y situar este campo en algn rincn donde no nos moleste. Le damos el formato que ms nos guste. A m me ha quedado as:

Vistame en http://siliconproject.com.ar/neckkito/

Guardamos los cambios y cerramos. Ahora debemos ver cmo se reflejan todos estos cambios en nuestro formulario principal. Para ello abrimos FSocios en vista formulario y miramos cmo quedan los subformularios dentro de nuestras pginas (pensad que Datos pareja no se va a ver porque hemos situado su propiedad Visible en No). Si queremos verla cambiamos en un momento esta propiedad a Visible: S, pero debemos acordarnos de volverla a situar en No al acabar. Si tenemos que perfeccionar algn detalle situamos el formulario en vista diseo y manipulamos desde ah los subformularios.

PROGRAMANDO NUESTROS FORMULARIOS


Vamos a programar nuestro formulario para que se muestre la pgina Datos pareja en funcin de si el check del campo [Pareja], en la tabla TDatosSocios (y su subformulario correspondiente), est marcado o no. El proceso contempla dos situaciones diferentes: La primera situacin se producir cuando estemos dando de alta un nuevo socio y, en ese momento, marquemos el check (o lo desmarquemos si nos hemos equivocado). La segunda situacin se producir cuando queramos consultar la ficha de un socio. Es decir, que los datos ya estarn introducidos. Para programar la primera situacin debemos operar sobre el subformulario subFrmDatosSocios. As pues, situamos este formulario en vista diseo, seleccionamos el check [Pareja] y sacamos sus propiedades. Nos vamos a la Pestaa Eventos Despus de actualizar, y le generamos el siguiente cdigo: Private Sub Pareja_AfterUpdate() 'Declaramos la variable Dim vPar As Boolean 'Cogemos el valor del check vPar = Me.Pareja.Value 'Si el check est marcado... If vPar = True Then 'Hacemos visible la pgina "Datos pareja" del form principal Forms!FSocios.tabDetalles.Pages(2).Visible = True 9

Vistame en http://siliconproject.com.ar/neckkito/

'Si el check est desmarcado la ocultamos Forms!FSocios.tabDetalles.Pages(2).Visible = False End If End Sub Fijaos que, como ndice de pgina, hemos indicado el nmero 2 (Pages(2)), cuando la pgina en cuestin es la tercera. Ello es as porque las pginas, dentro de un control ficha, empiezan su numeracin por cero. Debemos tener esto presente si queremos operar con ellas a travs de cdigo. Guardamos el subformulario y lo cerramos. Ahora vamos a por la segunda situacin. Para poder programarla debemos hacerlo sobre el form principal. As pues, situamos FSocios en vista diseo. Sacamos las propiedades del formulario y nos vamos a la Pestaa Eventos Al activar registro, y ah le generamos el siguiente cdigo: Private Sub Form_Current() 'Declaramos las variables Dim vPar As Boolean 'Cogemos el valor del check de subformulario subFrmDatosSocios vPar = Me.subFrmDatosSocios.Form.Pareja.Value 'Si el check est activado... If vPar = True Then 'Mostramos la pgina "Datos pareja" Me.tabDetalles.Pages(2).Visible = True Else 'Si no est activado la ocultamos Me.tabDetalles.Pages(2).Visible = False End If End Sub Guardamos y cerramos el formulario.

Else

CONSULTANDO FICHAS DE SOCIO


Vamos a ver cmo consultar fichas de socio de tres maneras distintas: por nombre, por DNI y por mvil (campos que tenemos en nuestra tabla TDatosSocios). Situamos nuestro formulario FMenu en vista diseo. Para buscar por nombre de socio debemos hacer lo siguiente: en FMenu aadimos un cuadro combinado. Cuando nos salga el asistente lo configuramos de la siguiente manera: gusto. Buscar valores en tabla Seleccionamos la tabla TSocios Aadimos los dos campos existentes Ordenamos por [NomSoc] ascendente Ocultamos o no (segn nuestro gusto) la clave principal. Redimensionamos a nuestro

Vistame en http://siliconproject.com.ar/neckkito/

10

Como ttulo de etiqueta podemos escribir: Buscar socio Sacamos las propiedades del combo que acabamos de crear y Pestaa Otras Nombre: cboSocio Pestaa Eventos Despus de actualizar, y generamos el siguiente cdigo:

Private Sub cboSocio_AfterUpdate() 'Declaramos las variables Dim vSoc As Long 'Cogemos el valor seleccionado en el combo vSoc = Nz(Me.cboSocio.Value, 0) 'Si no hubiera valor salimos del proceso If vSoc = 0 Then Exit Sub 'Cerramos el formulario actual DoCmd.Close acForm, Me.Name 'Abrimos FSocios para poder editarlo, filtrado en el socio seleccionado DoCmd.OpenForm "FSocios", , , "[CodSoc]=" & vSoc, acFormEdit 'Modificamos el ttulo del formulario, para saber que estamos en edicin Forms!FSocios.Caption = "CONSULTA/EDICIN SOCIOS" End Sub Vamos a ver ahora cmo podemos buscar por DNI. La mecnica del sistema es la siguiente: Introducimos el DNI y buscamos El cdigo nos encuentra el cdigo de socio correspondiente a ese DNI Con el cdigo de socio abrimos el formulario FSocios en vista edicin, filtrado por el socio buscado. Esta mecnica ser la misma para la bsqueda por mvil. La explicar porque el campo [DNI], en la tabla TDatosSocios, la habamos declarado como Texto, mientras que el mvil est declarado como Nmero. Por ello, si bien los cdigos sern muy similares, hay una pequea diferencia en funcin de si el dato es texto o nmero. Vamos all: En FMenu, en vista diseo, aadimos un cuadro de texto. Como ttulo de la etiqueta escribimos: Buscar por DNI Sacamos las propiedades del cuadro de texto y nos vamos a Pestaa Otras Nombre, y escribimos txtDNI. En sus propiedades todava, nos vamos a pestaa Eventos Despus de actualizar, y generamos el siguiente cdigo: Private Sub txtDNI_AfterUpdate() 'Declaramos las variables Dim vDNI As String Dim vSoc As Integer 'Cogemos el valor de txtDNI vDNI = Nz(Me.txtDNI.Value, "") 'Si el campo est vaco salimos del proceso If vDNI = "" Then Exit Sub

Vistame en http://siliconproject.com.ar/neckkito/

11

'Buscamos qu cdigo de socio corresponde a ese DNI vSoc = Nz(DLookup("[IdSocio]", "TDatosSocios", "[DNI]='" & vDNI & "'"), 0) 'Si el valor devuelto es cero es que no ha habido coincidencias. Avisamos If vSoc = 0 Then MsgBox "No hay ningn socio con el DNI introducido", vbInformation, "SIN DATOS" Else 'Si se ha encontrado un cdigo de socio se abre el formulario filtrado DoCmd.Close acForm, Me.Name DoCmd.OpenForm "FSocios", , , "[CodSoc]=" & vSoc, acFormEdit 'Cambiamos el ttulo del formulario para saber que estamos consultando Forms!FSocios.Caption = "CONSULTA/EDICIN SOCIOS" End If End Sub Y ya tenemos nuestro buscador de DNI listo. Vamos a por el mvil. Aadimos otro cuadro de texto, al que pondremos de nombre txtMovil. En el evento Despus de actualizar generamos el siguiente cdigo: Private Sub txtMovil_AfterUpdate() 'Declaramos las variables Dim vMovil As Long Dim vSoc As Integer 'Cogemos el valor de txtMovil vMovil = Nz(Me.txtMovil.Value, 0) 'Si el campo est vaco salimos del proceso If vMovil = 0 Then Exit Sub 'Buscamos qu cdigo de socio corresponde a ese mvil vSoc = Nz(DLookup("[IdSocio]", "TDatosSocios", "[Mov]=" & vMovil), 0) 'Si el valor devuelto es cero es que no ha habido coincidencias. Avisamos If vSoc = 0 Then MsgBox "No hay ningn socio con el mvil introducido", vbInformation, "SIN DATOS" Else 'Si se ha encontrado un cdigo de socio se abre el formulario filtrado DoCmd.Close acForm, Me.Name DoCmd.OpenForm "FSocios", , , "[CodSoc]=" & vSoc, acFormEdit 'Cambiamos el ttulo del formulario para saber que estamos consultando Forms!FSocios.Caption = "CONSULTA/EDICIN SOCIOS" End If End Sub Si analizis detenidamente los cdigos veris las diferencias entre trabajar con un dato tipo Texto y un dato tipo Nmero.

CREANDO CONSULTAS
Para finalizar vamos a ver cmo confeccionamos algunas consultas. Si cogemos la mecnica de

Vistame en http://siliconproject.com.ar/neckkito/

12

cmo realizar las consultas, enlazando los datos de las diferentes tablas, no tendremos problemas en hacer todas las consultas que queramos. Ni que decir tiene que, sobre esas consultas, podramos confeccionar los informes que necesitemos. Supongamos que queremos ver qu socios tienen pareja y los datos dela misma. Para ello, creamos una consulta en vista diseo y aadimos las tablas: TSocios TDatosSocios TPareja

Debemos relacionar las tres tablas. Para ello: De la tabla TSocios clickamos sobre el campo [CodSoc] y lo arrastramos sobre el campo [IdSocio] de la tabla TDatosSocios. Nos saldrn ambos campos unidos por una lnea. De la tabla TSocios clickamos sobre el campo [CodSoc] y lo arrastramos sobre el campo [IdSoc] de la tabla TPareja. Nos saldrn ambos campos unidos por una lnea. Tras esto la estructura de la consulta podra ser la siguiente:

Guardamos la consulta como CParejas Supongamos que queremos ver todos los socios apuntados a Tenis, con su nmero de telfono y su mail. Para ello, creamos una nueva consulta en vista diseo y aadimos las tablas: TSocios TActSocios TActividades TDatosSocios

Como en su momento ya creamos la relacin entre TActSocios y TActividades nos saldr automticamente la lnea que relaciona los campos identificativos. Slo tendremos que las siguientes relaciones: Clickamos sobre el campo [CodSoc] de TSocios y arrastramos hasta el campo [IdSoc] de la tabla TActSocios. Nos saldr la lnea de relacin. Clickamos sobre el campo [CodSoc] de TSocios y arrastramos hasta el campo 13

Vistame en http://siliconproject.com.ar/neckkito/

[IdSocio] de la tabla TDatosSocios. Nos saldr nuestra conocida lnea de relacin. La estructura de la consulta sera la siguiente:

Guardamos la consulta como CTenis. Creo que, tras estos dos ejemplos, ya tenemos ms o menos claro cmo estructurar las consultas de nuestra aplicacin, verdad?

Y PARA FINALIZAR...
Y eso es todo. Ya tenemos nuestra aplicacin para dar de alta o consultar socios a travs de un control ficha. Espero que podis sacar ideas de todo lo que os he explicado a travs de este ejemplo para poder aplicarlas en vuestras aplicaciones. Un saludo y... suerte!

Vistame en http://siliconproject.com.ar/neckkito/

14