Está en la página 1de 14

DATOS A TRAVÉS DE FICHAS1

INTRODUCCIÓN
En ocasiones debemos introducir información de carácter
variado pero relacionada con un mismo origen. Una
solución pasaría por dar de alta los datos de ese origen en
un formulario para, a continuación, cerrarlo y abrir otro
formulario, dar de alta los datos, cerrarlo y abrir otro... y
así sucesivamente.

Lógicamente lo anterior no es de lo más “elegante”, digamos. Vamos a ver como podemos


hacer un “todo en uno” utilizando los un control ficha. Además, aprenderemos a mostrar o no
la información en función 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 través de su nombre, asignándole un código 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 podría complicar todo lo que quisiéramos, si necesitáramos otro tipo de datos,
pero eso nos haría el ejemplo eterno. Con lo que os propongo veremos perfectamente cómo
sería la mecánica de la aplicación (o, al menos, de esta parte de la aplicación).

También os explicaré cómo, además 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 también para ver cómo realizar alguna que otra consulta dado que los datos
estarán estructurados de una manera llamémosle “especial” para nuestro ejemplo.

Los códigos VB los pondré ampliamente comentados, para que sepáis qué hace el código en
cada momento.

Dicho lo anterior pongámonos manos a la obra:

PREPARANDO LAS TABLAS


Vamos a necesitar, según os comentaba en el apartado anterior:
– Una tabla que nos recogerá exclusivamente el código 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 cónyuge

La primera tabla, a la que llamaremos TSocios, tendrá la siguiente estructura:

1 La BD de ejemplo os la podéis bajar aquí.

1
Visítame 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 autonumérico, sino que es numérico.

El último campo, [Pareja], es un campo Sí/No. Debería salirnos por defecto, como valor
predeterminado, el 0. No estaría de más que comprobáramos 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í:

2
Visítame en http://siliconproject.com.ar/neckkito/
Una vez que la tengamos definida vamos a crear una relación: para ello nos vamos al campo
[IdAct] y, en <Tipo de datos>, seleccionamos el asistente para búsquedas. 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 relación.

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 autonumérico.

Ya tenemos nuestras tablas construidas. Vamos a por los formularios.

DISEÑANDO NUESTROS FORMULARIOS


Vamos a crear en primer lugar, un formulario de inicio, desde donde podremos acceder al
formulario de los socios en función 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 añadiremos un


botón de comando, que llamaremos cmdAbreFSocios. Para llamarlo así deberemos sacar las
propiedades del botón e irnos a Pestaña Otras → Nombre, y ahí escribir cmdAbreFSocios2

Ahora nos situamos, todavía en las propiedades del botón, en la Pestaña Eventos → Al hacer
click, y le generamos el siguiente código3:


Private Sub cmdAbreFSocios_Click()
'Cerramos el formulario actual
DoCmd.Close acForm, Me.Name
'Abrimos FSocios preparado para añadir un nuevo registro
DoCmd.OpenForm "FSocios", , , , acFormAdd
End Sub

2 A partir de ahora, cuando os diga “y llamamos al control xxx”, me estaré refiriendo a esta propiedad del control.
3 Para generar código nos ponemos en la parte en blanco junto al evento que queramos, y veremos cómo nos aparece un pequeño
botón de puntos suspensivos. Si hacemos click sobre él nos aparecerá una ventana. Le decimos que queremos generar código.
Se nos abrirá el editor de VB, con dos líneas por defecto (Private Sub... y End Sub). Esas dos líneas no deben tocarse. El código lo
escribimos entre dichas líneas

3
Visítame en http://siliconproject.com.ar/neckkito/
Evidentemente aún no existe el formulario FSocios. Lo
vamos a crear a continuación. Pero, antes, comentaros que
no vamos a crear ningún 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
código para el botón en FMenu que nos abriría este
formulario sería el mismo que os he puesto, cambiando
FSocios por FActividades. Fácil.

Pues lo dicho... vamos a crear un formulario sobre la tabla


TSocios, que guardaremos como FSocios. Antes de cualquier cosa
vamos a añadir un botón de comando en la sección <Encabezado
del formulario>, que nos servirá para cerrarlo y volver a FMenu. A
ese botón lo llamaremos cmdCerrar, y le asignaremos el siguiente
código (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): Pestaña


Formato → Selectores de registro: NO
– Para quitar, en la parte inferior del formulario, la navegación por los registros: Pestaña
Formato → Botones de desplazamiento: NO
– Para poner un título interesante a nuestro formulario: Pestaña Formato → Titulo, y ahí
escribimos (sin comillas) “ALTA SOCIOS”
– Para que no nos salte a un nuevo registro al presionar ENTER o Tabulación desde el
último campo: Pestaña Otras → Ciclo: Registro activo

Nos situamos sobre el campo [CodSoc] y sacamos sus propiedades. Nos vamos a Pestaña
Otras → Punto de tabulación: NO. De esta manera conseguimos que el enfoque se sitúe
directamente en el campo [NomSoc]

Hacemos más grande el área de detalle del formulario. Debajo de esos dos campos vamos a
añadir un control de ficha. Una vez introducido sacamos sus propiedades y le ponemos de
nombre tabDetalles.

Nos debería haber quedado una cosa así:

4
Visítame en http://siliconproject.com.ar/neckkito/
Vamos a añadir una página más a la ficha. Para ello seleccionamos el control ficha y nos vamos
a la cinta de opciones → grupo controles → Añadir página. Debería aparecernos la “Página 8”
(en mi caso, según podéis ver en la ilustración, porque tenía “Página 6” y “Página 7”).

Hacemos doble click sobre el nombre de la primera página (en mi caso, “Página 6”) y nos
aparecerán las propiedades de esa página. Nos vamos a la pestaña Formato → Título, y
escribimos: Datos socio. Ahora nos vamos a la pestaña Otras → Nombre, y escribimos
pagSocio.

Hacemos lo mismo con la página 2 (la “Página 7” en mi caso), y


– Título: Datos actividades
– Nombre: pagActividades

Hacemos lo mismo con la tercera página (la “Página 8” en mi caso), y cuidado, porque
modificaremos una propiedad más:
– Título: Datos pareja
– Nombre: pagPareja
– Pestaña Formato → Visible: No

Esto nos ocultará, al principio, la página correspondiente a los datos de la pareja.

Seleccionamos la primera página (Datos socio) y, dentro de ella, insertamos un control


subformulario. Es decir, que una vez seleccionado dicho control lo “dibujamos” dentro de los
límites interiores de esa página (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 añadimos todos los campos de la tabla.
– Definimos nuestra propia relación: Campo del formulario: [CodSoc]; campo del
subformulario: [IdSocio]
– Ponemos de nombre subFormDatosSocios

Nos debería haber quedado una cosa así:

5
Visítame 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 diseño de este subformulario. Ya lo haremos después.

Seleccionamos la página “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 añadimos los campos de la tabla, menos el campo
[Id]
– Definimos nuestra propia relación: Campo del formulario: [CodSoc]; campo del
subformulario: [IdSoc]
– Escribimos de nombre subFrmActSocios

Podemos borrar la etiqueta de nombre de formulario. Nos debería haber quedado una cosa así:

Finalmente (supongo que ya seréis especialistas haciendo esto) seleccionamos la página


“Datos pareja” y en ella insertamos un control subformulario. Lo configuramos así:

6
Visítame en http://siliconproject.com.ar/neckkito/
– Usar tablas existentes
– Seleccionamos la tabla TPareja y añadimos todos los campos.
– Definimos nuestra propia relación: Campo del
formulario: [CodSoc]; campo del subformulario: [IdSoc]
– Lo llamamos subFrmPareja

También 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 diseño.

Sacamos las propiedades del formulario y nos vamos a la


→ Pestaña Formato
→ Vista predeterminada, y la situamos en “Un único formulario”.
→ Selectores de registro: NO
→ Botones de desplazamiento: NO
→ Pestaña Otras
→ Ciclo: Registro activo

Sacamos las propiedades del campo [IdSoc] y nos vamos a la Pestaña Formato → Visible: NO.
Podemos eliminar su etiqueta y situamos el campo en algún rincón donde no moleste.
Podemos arreglar un poco el diseño del formulario a nuestro gusto. A mí me ha quedado así:

7
Visítame en http://siliconproject.com.ar/neckkito/
Guardamos los cambios y cerramos.

Ahora situamos nuestro formulario subFrmActSocios en


vista diseño. 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


→ Pestaña Formato
→ Vista predeterminada: Formularios continuos
→ Botones de desplazamiento: NO

Sacamos las propiedades del campo [IdSoc] y Pestaña Formato → Visible: NO. Podemos borrar
su etiqueta.

Lo que viene a continuación es difícil de explicar si no se tiene una referencia gráfica delante.
Por ello os pongo antes la ilustración para que veáis cómo lo he hecho yo:

Extendemos un poco el área de la sección <Encabezado del formulario> y en ella insertamos


una etiqueta que nos indique la “Actividad” (en amarillo, en la ilustración)

El campo [IdSoc] lo he reducido y lo he situado a la derecha del campo [IdAct].

He ajustado el detalle al máximo a los campos.

Guardamos ese formulario y cerramos.

Abrimos en vista diseño el formulario subFrmDatosSocios. Sacamos las propiedades del


formulario y
→ Pestaña Formato:
→ Vista predeterminada: Un único formulario.
→ Selectores de registro: NO
→ Botones de desplazamiento: NO
→ Pestaña Otras:
→ Ciclo: Registro activo

Sacamos las propiedades del campo [IdSocio] y nos vamos a Pestaña Formato → Visible: NO.
Podemos eliminar su etiqueta y situar este campo en algún rincón donde no nos moleste.

Le damos el formato que más nos guste. A mí me ha quedado así:

8
Visítame en http://siliconproject.com.ar/neckkito/
Guardamos los cambios y cerramos.

Ahora debemos ver cómo se reflejan todos estos cambios en nuestro formulario principal. Para
ello abrimos FSocios en vista formulario y miramos cómo quedan los subformularios dentro de
nuestras páginas (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” algún detalle situamos el formulario en vista diseño y


manipulamos desde ahí los subformularios.

PROGRAMANDO NUESTROS FORMULARIOS


Vamos a programar nuestro formulario para que se muestre la página “Datos pareja” en
función 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 situación 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 situación se producirá cuando queramos consultar la ficha de un socio. Es
decir, que los datos ya estarán introducidos.

Para programar la primera situación debemos operar sobre el subformulario


subFrmDatosSocios. Así pues, situamos este formulario en vista diseño, seleccionamos el
check [Pareja] y sacamos sus propiedades. Nos vamos a la Pestaña Eventos → Después de
actualizar, y le generamos el siguiente código:


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 página "Datos pareja" del form principal
Forms!FSocios.tabDetalles.Pages(2).Visible = True

9
Visítame en http://siliconproject.com.ar/neckkito/
Else
'Si el check está desmarcado la ocultamos
Forms!FSocios.tabDetalles.Pages(2).Visible = False
End If
End Sub

Fijaos que, como índice de página, hemos indicado el


número 2 (Pages(2)), cuando la página en cuestión es la
tercera. Ello es así porque las páginas, dentro de un control
ficha, empiezan su numeración por cero. Debemos tener
esto presente si queremos operar con ellas a través de
código.

Guardamos el subformulario y lo cerramos.

Ahora vamos a por la segunda situación. Para poder programarla debemos hacerlo sobre el
form principal. Así pues, situamos FSocios en vista diseño. Sacamos las propiedades del
formulario y nos vamos a la Pestaña Eventos → Al activar registro, y ahí le generamos el
siguiente código:


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 página "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.

CONSULTANDO FICHAS DE SOCIO


Vamos a ver cómo consultar fichas de socio de tres maneras distintas: por nombre, por DNI y
por móvil (campos que tenemos en nuestra tabla TDatosSocios).

Situamos nuestro formulario FMenu en vista diseño.

Para buscar por nombre de socio debemos hacer lo siguiente: en FMenu añadimos un cuadro
combinado. Cuando nos salga el asistente lo configuramos de la siguiente manera:

– Buscar valores en tabla


– Seleccionamos la tabla TSocios
– Añadimos los dos campos existentes
– Ordenamos por [NomSoc] ascendente
– Ocultamos o no (según nuestro gusto) la clave principal. Redimensionamos a nuestro
gusto.

10
Visítame en http://siliconproject.com.ar/neckkito/
– Como título de etiqueta podemos escribir: Buscar socio

Sacamos las propiedades del combo que acabamos de crear


y
→ Pestaña Otras → Nombre: cboSocio
→ Pestaña Eventos → Después de actualizar, y generamos el
siguiente código:


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 título del formulario, para saber que estamos en edición
Forms!FSocios.Caption = "CONSULTA/EDICIÓN SOCIOS"
End Sub

Vamos a ver ahora cómo podemos buscar por DNI. La mecánica del sistema es la siguiente:
– Introducimos el DNI y buscamos
– El código nos encuentra el código de socio correspondiente a ese DNI
– Con el código de socio abrimos el formulario FSocios en vista edición, filtrado por el
socio buscado.

Esta mecánica será la misma para la búsqueda por móvil. La explicaré porque el campo [DNI],
en la tabla TDatosSocios, la habíamos declarado como “Texto”, mientras que el móvil está
declarado como “Número”. Por ello, si bien los códigos serán muy similares, hay una pequeña
diferencia en función de si el dato es texto o número.

Vamos allá:

En FMenu, en vista diseño, añadimos un cuadro de texto. Como título de la etiqueta


escribimos: Buscar por DNI

Sacamos las propiedades del cuadro de texto y nos vamos a Pestaña Otras → Nombre, y
escribimos txtDNI.

En sus propiedades todavía, nos vamos a pestaña Eventos → Después de actualizar, y


generamos el siguiente código:


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á vacío salimos del proceso
If vDNI = "" Then Exit Sub

11
Visítame en http://siliconproject.com.ar/neckkito/
'Buscamos qué código 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 ningún socio con el DNI introducido",
vbInformation, "SIN DATOS"
Else
'Si se ha encontrado un código de socio se abre el
formulario filtrado
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FSocios", , , "[CodSoc]=" & vSoc,
acFormEdit
'Cambiamos el título del formulario para saber que estamos consultando
Forms!FSocios.Caption = "CONSULTA/EDICIÓN SOCIOS"
End If
End Sub

Y ya tenemos nuestro buscador de DNI listo.

Vamos a por el móvil.

Añadimos otro cuadro de texto, al que pondremos de nombre txtMovil. En el evento “Después
de actualizar” generamos el siguiente código:


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á vacío salimos del proceso
If vMovil = 0 Then Exit Sub
'Buscamos qué código de socio corresponde a ese móvil
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 ningún socio con el móvil introducido", vbInformation, "SIN DATOS"
Else
'Si se ha encontrado un código de socio se abre el formulario filtrado
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FSocios", , , "[CodSoc]=" & vSoc, acFormEdit
'Cambiamos el título del formulario para saber que estamos consultando
Forms!FSocios.Caption = "CONSULTA/EDICIÓN SOCIOS"
End If
End Sub

Si analizáis detenidamente los códigos veréis las diferencias entre trabajar con un dato tipo
“Texto” y un dato tipo “Número”.

CREANDO CONSULTAS
Para finalizar vamos a ver cómo confeccionamos algunas consultas. Si cogemos la mecánica de

12
Visítame en http://siliconproject.com.ar/neckkito/
cómo 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, podríamos


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 diseño y añadimos


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 saldrán ambos campos unidos por una línea.
– De la tabla TSocios clickamos sobre el campo [CodSoc] y lo “arrastramos” sobre el
campo [IdSoc] de la tabla TPareja. Nos saldrán ambos campos unidos por una línea.

Tras esto la estructura de la consulta podría ser la siguiente:

Guardamos la consulta como CParejas

Supongamos que queremos ver todos los socios apuntados a Tenis, con su número de teléfono
y su mail. Para ello, creamos una nueva consulta en vista diseño y añadimos las tablas:

– TSocios
– TActSocios
– TActividades
– TDatosSocios

Como en su momento ya creamos la relación entre TActSocios y TActividades nos saldrá


automáticamente la línea que relaciona los campos identificativos. Sólo 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 línea de relación.
– Clickamos sobre el campo [CodSoc] de TSocios y “arrastramos” hasta el campo

13
Visítame en http://siliconproject.com.ar/neckkito/
[IdSocio] de la tabla TDatosSocios. Nos saldrá nuestra conocida línea de relación.

La estructura de la consulta sería la siguiente:

Guardamos la consulta como CTenis.

Creo que, tras estos dos ejemplos, ya tenemos más o menos claro cómo estructurar las
consultas de nuestra aplicación, ¿verdad?

Y PARA FINALIZAR...
Y eso es todo. Ya tenemos nuestra aplicación para dar de alta o consultar socios a través de un
control ficha.

Espero que podáis sacar ideas de todo lo que os he explicado a través de este ejemplo para
poder aplicarlas en vuestras aplicaciones.

Un saludo y...

¡suerte!

14
Visítame en http://siliconproject.com.ar/neckkito/

También podría gustarte