Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Datos Por Fichas
Datos Por Fichas
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.
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á:
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.
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.
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:
Finalmente, creamos una quinta tabla, que llamaremos TPareja, y que tendrá la estructura
siguiente (por poner algunos campos de ejemplo):
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.
…
Private Sub cmdCerrar_Click()
'Cerramos el formulario actual
DoCmd.Close acForm, Me.Name
'Volvemos al menú
DoCmd.OpenForm "FMenu"
End Sub
…
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.
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 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
5
Visítame en http://siliconproject.com.ar/neckkito/
Podemos eliminar la etiqueta del subformulario (la que sale arriba con el nombre de
“subFrmDatosSocios”)
Podemos borrar la etiqueta de nombre de formulario. Nos debería haber quedado una cosa 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
Y, en principio, dejaremos aquí el tema del formulario. Guardamos los cambios y cerramos.
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.
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:
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.
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.
…
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
…
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
…
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:
10
Visítame en http://siliconproject.com.ar/neckkito/
– Como título de etiqueta podemos escribir: Buscar socio
…
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á:
Sacamos las propiedades del cuadro de texto y nos vamos a Pestaña Otras → Nombre, y
escribimos txtDNI.
…
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
…
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.
– TSocios
– TDatosSocios
– TPareja
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
13
Visítame en http://siliconproject.com.ar/neckkito/
[IdSocio] de la tabla TDatosSocios. Nos saldrá nuestra conocida línea de relación.
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/