Actualizado el 21 de Marzo del 2018 (Publicado el 22 de Enero del 2018)
644 visualizaciones desde el 22 de Enero del 2018
277,0 KB
15 paginas
Creado hace 11a (24/09/2012)
CURSO DE VB
CAPÍTULO 51
Índice de contenido
¡Y LA ESTRELLA INVITADA... DOCMD!.......................................................................................2
CONVERSACIÓN OÍDA AL PASAR............................................................................................2
LLAMAR A LOS FORMULARIOS E INFORMES EN CÓDIGO...............................................2
CREANDO UNA MINI-BD PARA IR “JUGANDO” CON EL CÓDIGO....................................2
DOCMD... PARA ABRIR “ALGO”................................................................................................3
DOCMD... PARA CERRAR “ALGO”............................................................................................4
DOCMD PARA “SALIR”... Y BYE-BYE......................................................................................6
PROFUNDIZANDO: DOCMD CON FORMULARIOS...............................................................7
UN PASEO POR... LOS REGISTROS.......................................................................................7
¿CÓMO DESEA EL FORMULARIO? ¿POCO HECHO, AL PUNTO O MUY HECHO?......9
UTILICEMOS UN FILTRO SENCILLO.................................................................................10
Y COMPLIQUEMOS UN POCO EL FILTRO........................................................................11
UNA PUNTUALIZACIÓN SOBRE LOS FILTROS..........................................................12
Y SIGAMOS EXPLORANDO MANIPULACIONES............................................................12
UN ÚLTIMO EJEMPLO ALGO MÁS COMPLEJO...............................................................14
PARA FINALIZAR...................................................................................................................15
1
La BD donde están los ejemplos de este capítulo os la podéis bajar aquí.
Visítame en http://siliconproject.com.ar/neckkito/
1
¡Y LA ESTRELLA INVITADA... DOCMD!
CONVERSACIÓN OÍDA AL PASAR...
Código VBA: ¡Hola! ¿Qué eres?
Formulario: Un formulario
CVBA: ¡Vaya! No te había reconocido. Así, eres un Forms!
F: ¿Forms!? Pues me parece bien. Me gusta esa
descripción.
CVBA: Y por cierto, ¿cómo te llamas?
F: ¡Ah! Mi nombre es miFormulario
CVBA: Bonito nombre... Te llamaré, pues, Forms!miFormulario
F: Me gusta ese nombre, pero si no voy equivocado vivimos en el mismo edificio
CVBA: ¿Vivimos en el mismo edificio? ¡Entonces somos vecinos!
F: Sí. Por eso creo que Forms!miFormulario es un poco formal, ¿no crees?
CVBA: Tienes razón: como somos vecinos te voy a llamar... Me
LLAMAR A LOS FORMULARIOS E INFORMES EN CÓDIGO
¿Recordamos que en un capítulo anterior vimos que existían unos módulos de objeto? Es decir,
y para este caso en particular, cuando creamos código asociado a un formulario se creaba un
módulo asociado a ese formulario. Y lo mismo podemos decir para los informes.
La “conversación” anterior (teoría pura y dura, como habréis podido comprobar... je, je...)
refleja el hecho de cómo debemos llamar, desde el código, a los formularios. Y eso depende de
dónde esté el código.
Si el código se halla en el módulo asociado al formulario (son vecinos, siguiendo el símil)
podemos referirnos al formulario llamándolo simplemente ME. Si queremos hacer referencia a
otro formulario distinto debemos llamarle por su “nombre completo”; es decir, Forms!
nombreFormulario.
De la misma manera operamos con los informes: si el código está en el módulo asociado al
informe podemos llamarle ME; si, por el contrario, lo queremos llamar desde otro módulo (ya
sea de objeto o estándar) debemos referirnos a él por su nombre “largo”: Reports!
NombreInforme.
Evidentemente podemos sustituir el ME por el nombre largo, pero eso equivale a tener que
escribir mucho... y no podemos cansarnos tanto, ¿verdad? ;)
Es importante tener esto en cuenta porque a partir de ahora vamos a aplicar “al pie de la letra”
lo explicado en las líneas anteriores. Así que nadie se debe despistar y tener bien claro que ME
indica que se llama al objeto del módulo asociado al propio objeto.
CREANDO UNA MINI-BD PARA IR “JUGANDO” CON EL CÓDIGO
Vamos a crear una mini-BD muy simple para ver las “bondades” del método DoCmd para
manipular objetos. Así pues, vamos a crear una BD y vamos a:
–
Añadir una tabla, a la que llamaremos TDatos, con los siguientes campos:
Visítame en http://siliconproject.com.ar/neckkito/
2
–
–
–
→
[Id]
[Nombre]
[Edad]
→
Autonumérico (clave principal)
Texto
→
Número (entero, con cero decimales)
Metamos, a mano, algunos pocos registros en la tabla, a
nuestro gusto.
Creamos un formulario, al que ponemos de nombre
–
FDatos, basado en nuestra tabla TDatos.
Creamos un formulario en blanco, al que llamaremos
–
FMenu
Creamos una consulta de selección sobre TDatos (como queramos) y la llamamos
–
CDatos.
–
Creamos un informe sobre la tabla TDatos y lo llamamos RDatos.
Ya tenemos los principales objetos de Access creados. Ya podemos empezar a “destripar” el
DoCmd
DOCMD... PARA ABRIR “ALGO”
La sintaxis básica para abrir un objeto a través de código es la siguiente:
DoCmd.OpenXXX “nombreObjeto”
Donde XXX va a ser:
–
–
–
Form
Query
Report
Y, más allá de este ejemplo, podemos abrir:
–
–
–
–
–
–
–
Table
DataAccessPage
Diagram
Function
Module
StoredProcedure
View
Vamos a practicar un poco con nuestra BD. Nos situamos en el formulario FMenu, en vista
diseño, e introducimos cuatro botones de comando, y los llamamos así:
–
–
–
–
cmdAbreFDatos
cmdAbreTDatos
cmdAbreCDatos
cmdAbreRDatos
Cogemos el primer botón (cmdAbreFDatos) y en el evento “Al hacer click” generamos el
siguiente código:
…
Private Sub cmdAbreFDatos_Click()
DoCmd.OpenForm "FDatos"
Visítame en http://siliconproject.com.ar/neckkito/
3
End Sub
…
Como vemos si hacemos click sobre él (en vista formulario)
se nos abre el formulario en cuestión. ¿Fácil, no?
Como habréis supuesto, el código de cmdAbreTDatos sería:
…
Private Sub cmdAbreTDatos_Click()
DoCmd.OpenTable "TDatos"
End Sub
…
El código de cmdAbreCDatos es:
…
Private Sub cmdAbreCDatos_Click()
DoCmd.OpenQuery "CDatos"
End Sub
…
Y, finalmente, el código para cmdAbreRDatos es:
…
Private Sub cmdAbreRDatos_Click()
DoCmd.OpenReport "RDatos"
End Sub
…
¡Ojo! Este simple código nos abre el informe enviándolo directamente a la impresora. Más
adelante veremos cómo podemos “manipular” la apertura de informes.
DOCMD... PARA CERRAR “ALGO”
Ya sabemos cómo abrir elementos de Access... Vamos a ver cómo cerrarlos.
La sintaxis es:
DoCmd.Close acXXX, “NombreObjeto”
Vamos a añadir tres botones de comando en nuestro formulario FMenu y los vamos a llamar:
–
–
–
cmdCierraFDatos
cmdCierraTDatos
cmdCierraCDatos
El código que vamos a aplicar al primero va a ser el siguiente:
…
Private Sub cmdCierraFDatos_Click()
DoCmd.Close acForm, "FDatos"
End Sub
…
Si ahora realizamos el siguiente proceso veremos lo bien que nos funciona: abrimos, a través
Visítame en http://siliconproject.com.ar/neckkito/
4
de nuestro botón de comando, el formulario FDatos
FMenu
Cerramos FDatos con nuestro botón.
→
→
Seleccionamos nuestro formulario
Os propongo que programéis los otros dos botones antes de
mirar el código que os indico a continuación. Creo que os va
a resultar muy fácil.
Para cerrar la tabla:
…
Private Sub cmdCierraTDatos_Click()
DoCmd.Close acTable, "TDatos"
End Sub
…
Para cerrar la consulta:
…
Private Sub cmdCierraCDatos_Click()
DoCmd.Close acQuery, "CDatos"
End Sub
…
Esto podría ser algo incómodo, ¿verdad? Me refiero a tener que ir a seleccionar el formulario
FMenu una vez abierto FDatos para poder cerrarlo con nuestro botón.
Vamos a ver cómo podemos situar el enfoque en el formulario que queramos. La idea es abrir
FDatos pero mantenerlo en segundo plano. Para ello utilizaremos el método SETFOCUS.
Si cogemos el código que teníamos asignado a cmdAbreFDatos podemos realizar una pequeña
modificación, de manera que el código nos quede así:
…
Private Sub cmdAbreFDatos_Click()
DoCmd.OpenForm "FDatos"
Me.SetFocus
End Sub
…
Como vemos, debemos preguntarnos: ¿en qué módulo de objeto estamos? Pues estamos en el
módulo asociado a FMenu. Por ello, para decir: “sitúame el enfoque en FMenu” podemos
emplear la palabra reservada ME. Y nos basta con utilizar un punto separador para indicar que:
NombreFormuario.Acción
Y de ahí que escribamos: Me.SetFocus
Si ahora probamos nuestro botón veremos que sí se nos abre FDatos, pero quedándonos en
segundo plano.
Vamos un poquito más allá. Ahora queremos operar sobre FDatos. De nuevo nos preguntamos:
¿en qué módulo de objeto estamos? Como nos hallamos en el módulo asociado a FMenu no
podemos utilizar ME para referirnos a FDatos, por lo que no nos quedará más remedio que
referirnos a él por su nombre largo.
Y si modificamos el anterior código de la siguiente manera veremos cómo se hace lo anterior:
…
Private Sub cmdAbreFDatos_Click()
Visítame en http://siliconproject.com.ar/neckkito/
5
DoCmd.OpenForm "FDatos"
Me.SetFocus
MsgBox "Ahora el foco pasará a FDatos", vbInformation, "SALTITO"
Forms!FDatos.SetFocus
End Sub
…
Creo que con este último ejemplo ha quedado claro cómo
funciona “la cosa”, y cómo debemos utilizar el ME (que, en
nuestro ejemplo, sería equivalente a Forms!FMenu).
¿Y si queremos cerrar el formulario desde el propio formulario? Vamos a abrir FDatos en vista
diseño y vamos a añadirle en el encabezado un botón de comando, al que llamaremos
cmdCerrar. A ese botón le generamos el siguiente código:
…
Private Sub cmdCerrar_Click()
DoCmd.Close acForm, Me.Name
End Sub
…
Como podemos ver, hemos utilizado la estructura que ya conocíamos, pero hemos añadido el
Me.Name para indicar que cierre el formulario de nombre X, donde X es el n
Comentarios de: CursoVB - Capítulo 5 (0)
No hay comentarios