Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
Vistame en http://siliconproject.com.ar/neckkito/
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:
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.
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.
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.
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
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