CMS modules by everest poker.

Formularios (II)

Imprimir
Valoración del Usuario:  / 5
MaloBueno 
Categoría: Teórico-práctico
Escrito por Neckkito

Si queréis bajaros este artículo en pdf pulsad aquí.

 

Índice de contenidoFormularios2


UN POQUITO MÁS SOBRE FORMULARIOS
¿SÓLO FORMULARIOS?
PREPARANDO NUESTRO FUTURO “KIT DE FORMULARIOS”
MI PRIMERA VEZ… Y EN BLANCO
TIPO: UN ÚNICO FORMULARIO
TIPO: FORMULARIOS DIVIDIDOS
CONFIGURANDO NUESTRO PRINCIPAL FORMULARIO
CREEMOS UN FORMULARIO CON SUBFORMULARIO. TIPO: FORMULARIOS CONTINUOS
PROGRAMANDO NUESTROS BOTONES DEL MENÚ
PROGRAMANDO EL RESTO DE FORMULARIOS
DOS MANERAS DIFERENTES DE LLAMAR A UN FORMULARIO
RECAPITULACIÓN FINAL

 

UN POQUITO MÁS SOBRE FORMULARIOS
Empezamos un nuevo capítulo para hablar de nuestros magníficos formularios. En este artículo veremos la tipología de formularios. Como ya se comentaba en el artículo Formularios (I), vamos a realizar nuestra “exploración” a través de un ejemplo. Insisto en que lo ideal sería que vosotros fuerais desarrollando paralelamente el ejemplo a medida que avanzáis en el artículo no sólo para ver lo que se hace, sino para investigar por vuestra cuenta (me refiero a eso de: “¿qué pasaría sí en vez de esta opción seleccionara esta otra?”). Bueno. Lo importante es que se aprenda alguna cosa interesante.


Todo lo que se va a explicar está en una BD de ejemplo que, para quien le interese, puede bajársela aquí.


¿SÓLO FORMULARIOS?
Creo que este es un buen momento no sólo para explicar cosas sobre formularios sino que, ya que vamos a realizar un ejemplo, aprovechar la ocasión para añadir un poco de código VBA fácil y repetitivo para poder operar con formularios. Este código será un 100% compatible con los formularios de vuestras BD’s (con las adaptaciones para vuestros nombres de objetos, por supuesto), por lo que pienso que, si es útil, ¿por qué no explicarlo también?


Pues lo dicho: habrá también un poquito de VBA


PREPARANDO NUESTRO FUTURO “KIT DE FORMULARIOS”
Vamos a realizar una pequeña aplicación para llevar un control de las compras e información de nuestra colección de libros. Ya os aviso que el planteamiento de esta BD quizá no sea el óptimo, porque lo voy a enfocar para que sea posible mostrar las tipologías de formularios. Con ello quiero decir que lo importante es que os fijéis en la mecánica de funcionamiento para cada elemento, y no lo consideréis “la mejor manera de crear una BD para controlar una colección de libros”.


Dicho lo anterior vamos a realizar una serie de operaciones base para poder desarrollar el artículo:


1.- Creamos una BD con las siguientes tablas:
    · TAutores: que contendrá los siguientes campos:
o [IdAut]: autonumérico
o [NomAut]: texto


    · TGenero: que contendrá el siguiente campo
o [Gen]: texto (no tendrá clave principal)


    · TCompras: que contendrá los siguientes campos
o [Id]: autonumérico
o [FechaC]: fecha/hora
o [Imp]: moneda
o [CodAut]: numérico (nos enlazará con TAutores)
o [Tit]: texto
o [Gen]: asistente para búsquedas. El proceso para configurarlo será el siguiente:
§ Deseo buscar…
§ Tabla: TGenero
§ Campo seleccionado: Gen
§ Ordenado ascendente
§ Redimensionamos a nuestro gusto
§ Nombre: Gen


    · TComent: que contendrá los siguientes campos
o [IdCom]: autonumérico
o [IdCompra]: numérico
o [Coment]: memo


Y con esto ya tenemos la base para poder seguir con el artículo.


Vamos para allá.


MI PRIMERA VEZ… Y EN BLANCO
Un formulario, generalmente, irá ligado a una tabla o consulta, pero lógicamente también podemos crear un formulario sin ningún tipo de origen.


Vamos a empezar pues creando un formulario que nos hará las veces de menú, sin ligarlo a ningún objeto.


Nota: en Access 2003 hay una opción llamada “panel de control”. Como crearlo es prácticamente seguir un asistente no lo explicaremos aquí.


Vamos pues a crear un formulario en blanco a través del botón correspondiente: menú Crear->Grupo Formularios->Icono del formulario en blanco.


Lo guardamos como FMenu y, dado que no contendrá registros, configuramos sus propiedades para que no nos salga ni el selector de registros, ni la barra de navegación, etc. (todo lo anterior está explicado en el artículo Formularios (I)).


Como ya tendremos planificado todo lo que respecta a nuestra BD (o la mayoría de cosas), tal y como comentábamos en los artículos de la sección Pre-Access, vamos a necesitar los siguientes botones de comando:
    - Dar de alta géneros
    - Dar de alta autores
    - Dar de alta compras
    - Dar de alta comentarios
    - Salir de la aplicación


Para ello, creamos los botones de comando pertinentes en nuestro FMenu


Truco: podemos crear un primer botón de comando y copiarlo. Después bastará con que pulsemos CRTL+v tantas veces como botones necesitemos.


Nos meteremos con el código de estos botones un poco más tarde. Por ahora, saber que ya hemos acabado con este formulario.


TIPO: UN ÚNICO FORMULARIO
Aunque no seamos conscientes (o sí) el formulario que acabamos de crear es del tipo “un único formulario”. Este es el tipo que viene por defecto en Access. Nosotros vamos a crear otro formulario basado en la tabla TAutores.


Lógicamente tenemos la opción de crear un formulario a través del asistente, pero como el proceso es guiado y no tiene mayor complicación obviaremos esta opción.


Nos situamos sobre la tabla TAutores haciendo un click sobre ella, de manera que quede remarcada. Ahora nos vamos al menú Crear->Grupo Formularios->Formulario.


Al darle a este botón se nos crea un formulario estándar, al que según nuestro buen gusto vamos a tener que dar el diseño que queramos. El nuevo formulario nos incluirá todos los campos de la tabla.


Truco: por defecto todos los campos están agrupados. Veremos que, al situarnos sobre uno de ellos nos aparece, en la esquina superior izquierda, una especie de “cruz”. Si clickamos sobre esa cruz veremos que se nos selecciona toda la agrupación.


Si queremos que cada campo sea independiente, una vez marcado todo el grupo, nos situamos sobre cualquiera de los campos y hacemos click con el botón de la derecha. En el menú emergente seleccionamos Diseño->Quitar. De esta manera ahora hemos “roto” la agrupación y podemos retocar los campos de manera independiente.


Vamos a guardar este formulario con el nombre de FAutores. En el encabezado del formulario vamos a añadir un botón de comando. Lo programaremos más adelante.


Ya tenemos el formulario como “un único formulario”.


TIPO: FORMULARIOS DIVIDIDOS
Vamos a crear este tipo de formularios aprovechando nuestra tabla TGenero. El formulario dividido nos permite ver una parte como si fuera un único formulario y otra parte como si fuera una vista hoja de datos.


En nuestro caso, como vamos a dar de alta a la vez varios géneros nos interesa verlo así para esos casos en los que estamos haciendo algún trabajo “en serie” y el compañero de al lado nos empieza a hablar, o nos suena el teléfono, y cuando retomamos la introducción de datos no sabemos dónde nos hemos quedado.


Así pues marcamos la tabla TGenero y nos vamos a menú Crear->Grupo Formularios->Formulario dividido.


Como antes, modificamos las propiedades del formulario a nuestro gusto. Incluimos, en el encabezado, un botón de comando que ya programaremos más adelante.


Como cosa interesante de este tipo de formularios podemos ver que si nos situamos en la parte de la hoja de datos y clickamos con el botón de la derecha sobre la columna del campo veremos que tenemos diferentes posibilidades que nos brinda el menú emergente, y, entre ellas, las de ocultar columnas y poder aplicar formato condicional.


CONFIGURANDO NUESTRO PRINCIPAL FORMULARIO
Vamos a crear un formulario sobre la tabla TCompras. Lo crearemos como ya sabemos: marcamos la tabla, menú Crear->Grupo Formularios->Formulario.


Ya tenemos nuestro formulario creado. Lo llamaremos FCompras. ¿Nos acordamos que, cuando creamos el campo [Gen], le dijimos que queríamos el asistente para búsquedas? Ello se refleja en que ese campo ya nos ha salido como un combo.


Vamos a modificar un poco el formulario. Lo primero que debemos hacer es quitar la agrupación de todos los campos, tal y como hemos explicado en epígrafes anteriores. Una vez pudiendo operar con los campos independientemente, cogemos el campo [CodAut] y lo borramos. Insertamos en su lugar un cuadro combinado, y siguiendo las instrucciones del asistente lo configuramos así:
    · Buscar los valores en una tabla…
    · Tabla: TAutores
    · Seleccionamos todos los campos disponibles
    · Ordenamos ascendente por [NomAut]
    · Redimensionamos y dejamos marcada la opción de ocultar la clave principal.
    · Almacenamos el valor en el campo [CodAut]
    · Nombre de la etiqueta: autor


Ya tenemos nuestro combo de búsqueda. Ahora, sin embargo, el orden de tabulación no será el correcto, porque, al ser el último elemento que hemos introducido, tendrá el último índice de tabulación. Vamos a corregir esto:


Sacamos las propiedades del combo y nos vamos a la pestaña Otras. Vamos a cambiar su nombre. Nos situamos en la propiedad Nombre: y cambiamos su valor por cboAutor.


Utilizar nombres descriptivos es una práctica que yo recomiendo mucho, por dos motivos. El primero porque cuando tenemos una lista de campos del formulario (como la vamos a tener cuando cambiemos el orden de tabulación), si tenemos muchos controles independientes o dependientes con los nombres por defecto, cada vez tendremos que volver al formulario para saber cómo se llama ese control. En segundo lugar, porque cuando programamos en VBA es más fácil recordar “cboAutor” que recordar “Cuadro combinado24”.


Sigamos. En esa misma pestaña hay una propiedad que es “Índice de tabulación”. Si hacemos click sobre la parte blanca de su derecha veremos que nos sale un pequeño botón con puntos suspensivos, y si hacemos click sobre él veremos que nos aparece una lista de los controles en el orden actual.


Hacemos un solo click sobre cboAutor, para seleccionarlo, y después hacemos otro click y lo arrastramos al lugar que queramos, que en nuestro caso será debajo del campo [Imp] (si hacemos un click y arrastramos directamente lo que haremos será una selección múltiple).


En el encabezado del formulario vamos a situar un botón de comando, que ya programaremos más adelante. Ahora debemos preguntarnos, ¿qué pasaría si, al dar de alta una compra, no existe el autor, o no existe el género?


Veremos dos maneras diferentes de añadir un valor si se dan estar circunstancias. En principio, a la derecha de nuestro cboAutor, situamos un pequeño botón de comando, de texto el signo de suma “+”. Lo programaremos más adelante.


Y, por ahora, ya tenemos todos nuestros formularios mínimos creados.


CREEMOS UN FORMULARIO CON SUBFORMULARIO. TIPO: FORMULARIOS CONTINUOS
Vamos, en primer lugar, a preparar nuestro menú para acceder a este futuro formulario FComent. Así, pues, con FMenu en vista diseño creamos un cuadro combinado y seguimos el asistente de la siguiente manera:
    · Deseo buscar valores en tabla o consulta
    · Tabla: TCompras
    · Seleccionamos sólo el campo [Tit]
    · Ordenamos ascendente
    · Redimensionamos (y sí ocultamos la clave principal)
    · El nombre de la etiqueta será: “Seleccionar título”


Ojo: cuando seleccionemos el título en ese cuadro combinado hay que tener presente que el valor que el combo guardará, sin que nosotros lo veamos, será el de la clave principal, y no el titulo en sí.


Sacamos las propiedades de ese cuadro combinado y Pestaña Otras->Nombre: cboTitulo


Vamos a aprovechar el trabajo que hemos hecho y vamos a copiar nuestro formulario FCompras. Lo pegamos como FComent.


Ponemos FComent en vista diseño y borramos los campos [FechaC], [Imp]. Borramos el botón de comando al cual le pusimos el “+”.


Insertamos, debajo del campo [Gen] un subformulario. Nos saldrá el asistente. Lo configuramos de la siguiente manera:
    · Usar tablas y consultas existentes
    · Seleccionamos la tabla TComent y añadimos todos sus campos
   · Ahora debemos definir la relación entre el formulario principal y el subformulario. En “Campos del formulario/informe” elegimos el campo [Id], y en “Campos del subformulario/subinforme” elegimos el campo [IdCompra].
    · Como nombre del subformulario le pondremos subFComent


Si ahora ponemos el formulario en vista Presentación veremos como nuestro subformulario aparece en vista Hoja de Datos. Vamos a cambiarlo para que se vea en forma de formularios continuos.


Abrimos subFComent en vista diseño. Sacamos sus propiedades y en la Pestaña Formato->Vista predeterminada, seleccionamos “Formularios continuos”.


Deberemos cambiar el diseño para que nos quede más elegante. Para ello, las etiquetas que tenemos a la izquierda de los campos debemos situarlas en el encabezado del formulario, como si fueran las celdas A1, A2, A3 de una hoja de cálculo, y justo debajo de cada una debemos situar los campos, como si fueran las celdas B1, B2 y B3 de una hoja de cálculo. Debemos ajustar al máximo tanto el encabezado como el detalle, de manera que nos queden los espacios lo más delgado posibles (es muy difícil explicar con palabras lo anterior. Si tenéis dudas echad un vistazo al subformulario de la aplicación de ejemplo).


Ahora debemos volver a sacar FComent en vista diseño y realizar los ajustes necesarios para que el formulario se vea correctamente en función de los cambios realizados.


PROGRAMANDO NUESTROS BOTONES DEL MENÚ
Bueno… Ha llegado el momento de toquetear un poco VB. Empezaremos por nuestro formulario FMenu. En general existen dos maneras más o menos generalizadas de actuar con el formulario menú: la primera, dejar siempre el Menú “abajo”, en segundo plano; la segunda, ir abriendo y cerrando el menú en función de la interacción del usuario con la BD.


Yo voy a optar por la segunda opción, básicamente porque así podréis ver un poquito más de código.


Lo que sí es interesante saber antes de nada es que existe una palabreja casi mágica en VB para Access, que es DoCmd. Si la tuviera que traducir a un lenguaje común la traduciría como “HAZ”. Es decir, “haz esto” = DoCmd.Esto. Evidentemente cada instrucción tendrá sus parámetros y argumentos propios, pero todas empezarán por DoCmd.


Con esta idea en la cabeza vamos a poner FMenu en vista diseño. Nos vamos al botón para dar de alta géneros, sacamos sus propiedades y nos vamos a Pestaña Otras->Nombre: cmdAltaGeneros


Ahora nos vamos a la pestaña Eventos->”Al hacer click”. Veremos un pequeño botón con puntos suspensivos. Hacemos click sobre él y en la ventana que nos aparece le decimos que queremos generar código. Se nos abrirá el VBE con dos líneas por defecto (Private Sub… y End Sub), y en medio es donde debemos escribir el código.


Con lo anterior ya sabéis (para el que no lo supiera) llamar al VBE. A partir de ahora ya os diré directamente: “generamos el siguiente código”.


Pues el código que hay que poner es el siguiente:


---
Private Sub cmdAltaGeneros_Click()
    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "FGenero", , , , acFormAdd
End Sub
---


Vamos a interpretar a nuestra manera el código:


DoCmd.Close -> Haz.Cerrar …(¿qué?) -> acForm -> Un formulario …(¿cuál?) -> Me.Name …(el formulario en el que estoy).
DoCmd.OpenForm -> Haz.Abrir Formulario …(¿cuál?) -> “FGenero” …(¿de qué manera?) -> acFormAdd …(preparado para añadir registros).


DoCmd.OpenForm tiene una serie de argumentos, la mayoría opcionales, que van separados por comas. Aunque no queramos indicar argumento debemos respetar su posición, y eso lo conseguimos marcando las posiciones con las comas.


Dicho de otra manera, si hubiéramos puesto


DoCmd.OpenForm “FGenero”


El código hubiera funcionado igualmente, pero el formulario se nos abriría siempre en el primer registro.


Y, para aquellos que quieran emociones más intensas, si en el VBE escribimos DoCmd.OpenForm y, con el cursor encima de esa palabreja, pulsamos F1, se nos abrirá la ayuda y podremos ver “todo el conjunto posibilidades que nos brinda este método”.


Ahora que ya sabemos la mecánica vamos a programar el resto de botones:


Botón para dar de alta autores: le ponemos de nombre cmdAltaAutores y le asociamos el siguiente código:


---
Private Sub cmdAltaAutores_Click()
    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "FAutores", , , , acFormAdd
End Sub
---


Botón para dar de alta Compras: le ponemos de nombre cmdAltaCompras. Le asociamos el siguiente código:


---
Private Sub cmdAltaCompras_Click()
    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "FCompras", , , , acFormAdd
End Sub
---


Vamos a centrarnos ahora en el botón para añadir comentarios. En principio, y ya directamente, le ponemos de nombre cmdComment.


La idea del proceso es: seleccionar un valor en el combo->hacer click sobre el botón->debe abrirse un formulario filtrado por la selección que habíamos hecho.


Vamos a utilizar una variable para recoger el valor del combo. No entraremos a explicar la teoría sobre definición de variables. Simplemente, viéndolo, podremos intuir cómo funciona a nuestros efectos.


El código que debemos asignar al botón cmdComment es el siguiente:

---
Private Sub cmdComment_Click()
    Dim vTit As Variant
    vTit = Me.cboTitulo.Value
    If IsNull(vTit) Then Exit Sub
   
    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "FComent", , , "[Id] = " & vTit
End Sub
---


Dim … es la línea que define la variable (sin comentarios)
vTit = Me.cboTitulo.Value
El valor de la variable será igual a: en el formulario en el que estoy (Me), del combo donde selecciono el título (cboTitulo), cojo el valor seleccionado (Value)
If IsNull(vTit) Then Exit Sub
Si (If) por casualidad vTit no contiene ningún valor (IsNull) entonces (Then) sal del proceso (Exit Sub). Esta línea la ponemos para evitar posibles errores de código al no tener valor la variable.
Cerramos el formulario FMenu (ya sabemos cómo hacerlo)
Abre el formulario FComent (DoCmd.OpenForm "FComent") pero esta vez aplica un filtro, que es que el campo [Id] tiene que coincidir con el valor seleccionado en el combo "[Id] = " & vTit
 
Ahora me preguntaréis: ¿si seleccionamos el título, por qué utilizamos el campo [Id]? Y yo os diré: lo he hecho totalmente adrede, para llamar vuestra atención sobre algo que ya hemos comentado antes: aunque en el combo podéis ver el título del libro el valor que almacena no es el título, sino la clave principal, que en nuestro caso es la identificación de la compra. Debéis andaros con mucho ojo con esto porque la gente se desespera viendo como su código no funciona porque piensa que “lo que ve en el combo es el valor que se coge”, cuando no es así. ¡Ojo!


Y, finalmente, vamos a ver superficialmente el funcionamiento del MsgBox. Entre otros, un MsgBox tiene tres argumentos interesantes. Su sintaxis sería:


MsgBox “Texto del mesaje”, vbBotones, “Título”


El texto del mensaje será la información que proporcionaremos al usuario, y siempre irá entre comillas.


vbBotones son los botones que ya trae consigo VBA. Como analizamos un MsgBox simple, sin esperar decisión por parte del usuario, comentaremos los más interesantes:
vbInformation: nos aparecerá una “i” junto al texto
vbExclamation: nos aparecerá un signo de exclamación junto al texto
vbQuestion: nos aparecerá un signo de interrogación junto al texto
vbCritical: nos aparecerá una “x” junto al texto


El “Título” será el título de la ventana que contiene el MsgBox.


Con lo anterior ya podemos programar el botón de salida del formulario. Lo llamados cmdSalir. Le asignamos el siguiente código:


---
Private Sub cmdSalir_Click()
    MsgBox "Gracias por usar la BD", vbExclamation, "ADIÓS"
    DoCmd.Quit
End Sub
---


No creo que haga falta comentar el código anterior: habla por sí mismo.


PROGRAMANDO EL RESTO DE FORMULARIOS
Vamos a empezar programando nuestro formulario FCompras. Lo abrimos en vista diseño. Al botón para cerrar el formulario (del encabezado) lo nombramos como cmdCerrar y le asignamos el siguiente código:


---
Private Sub cmdCerrar_Click()
    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "FMenu"
End Sub
---


Como podemos comprobar, el código es muy parecido al de los botones de nuestro FMenu, pero “al revés”.


DoCmd.Close acForm, Me.Name -> Cierra el formulario en el que estoy, que en este caso es FCompras
DoCmd:openForm “FMenu” -> abre el formulario FMenu. Como no necesitamos que, al abrirse, se realice ninguna acción especial, no ponemos ningún argumento.


Ahora nos vamos al botón que creamos con el signo “+”. Le ponemos de nombre cmdAltaAutor. Nos vamos a la pestaña Otras y le indicamos que NO es punto de tabulación (porque no nos interesa que el enfoque sea secuencial, sino sólo cuando el usuario necesita agregar un nuevo autor). Finalmente, al evento “Al hacer click”, le asignamos el siguiente código:


---
Private Sub cmdAltaAutor_Click()
    DoCmd.OpenForm "FAutores", , , , acFormAdd
End Sub
---


En este caso no nos interesa cerrar FCompras porque estamos en la mitad de introducción de un registro, con el “obstáculo” de que el autor que íbamos a introducir no estaba dado de alta. Con el código se nos abrirá Fautores a punto para añadir un nuevo autor.


Ahora abrimos en vista diseño el formulario FAutores y vamos a programar nuestro botón del encabezado, al que llamaremos también cmdCerrar. Sin embargo, debemos plantearnos un pequeño “problema”. ¿Y cuál es ese problema?


El formulario autores puede ser llamado desde dos formularios, FMenu y FCompras. Si lo llamamos desde FMenu el comportamiento es “normal”; es decir, lo abrimos, metemos los registros y cerramos.


Sin embargo, si lo llamamos desde FCompras querremos que, una vez hayamos introducido el registro, al cerrar podamos encontrar el valor introducido en nuestro combo cboAutores. Si cerráramos sin más FAutores ese valor no aparecería en nuestro combo porque la información nueva de las tablas aún no se ha refrescado.


Es decir, primero debemos saber qué formulario llama a FAutores y después, si el que lo llama es FCompras, debemos refrescar la información a fin de tenerla disponible sin tener que cerrar y volver a abrir FCompras.


Vamos a ver el código que nos permite hacer eso (en el botón cmdCerrar de FAutores):


---
Private Sub cmdCerrar_Click()
    If CurrentProject.AllForms("FCompras").IsLoaded Then
        DoCmd.Close acForm, Me.Name
        Forms!FCompras.cboAutor.Requery
    Else
        DoCmd.Close acForm, Me.Name
        DoCmd.OpenForm "FMenu"
    End If
End Sub
---


Lo que dice el código en palabras “llanas” es lo siguiente: si el formulario FCompras está cargado entonces cierra el formulario FAutores y, del formulario FCompras, refrescas la información del combo donde se selecciona el autor.


Si el formulario FCompras no está cargado entonces cierras FAutores y abres FMenu


Sigamos con el resto de formularios. Ahora abrimos en vista diseño el formulario FGenero. A nuestro botón del encabezado le llamamos cmdCerrar y le asignamos el ya conocido código:


---
Private Sub cmdCerrar_Click()
    If CurrentProject.AllForms("FCompras").IsLoaded Then
        DoCmd.Close acForm, Me.Name
        Forms!FCompras.Gen.Requery
    Else
        DoCmd.Close acForm, Me.Name
        DoCmd.OpenForm "FMenu"
    End If
End Sub
---


Creo que ya no hace falta explicar qué dice el código. Espero que ya le hayáis cogido “el truquillo” a este asunto.


Ahora sólo nos queda programar FComent. Al botón del encabezado, al que habremos llamado cmdCerrar, le asignamos simplemente el código


---
Private Sub cmdCerrar_Click()
    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "FMenu"
End Sub
---


DOS MANERAS DIFERENTES DE LLAMAR A UN FORMULARIO
Vamos a centrarnos en nuestro formulario FCompras. Ya hemos comentado anteriormente que íbamos a ver dos maneras diferentes de llamar a un formulario: una controlada totalmente por nosotros, y otra aprovechando una utilidad nueva de Access 2007. Empezaremos por esta última.


Situémonos sobre el combo que nos permite seleccionar el género. Sacamos sus propiedades y nos vamos a la pestaña Datos. ¿Estamos ahí?


Vemos una propiedad que se denomina “Limitar a la lista”. Esta propiedad nos permite escribir cualquier valor y Access no nos advertirá si ese elemento está en la lista. En nuestro caso nos interesa que el género exista y que se guarde en su tabla correspondiente, por lo que vamos a establecer esa propiedad como SÍ.


La siguiente propiedad es “Permitir ediciones de lista de valores”. Eso significa que podremos editar los valores de la lista. En principio dejamos el valor de la propiedad en SÍ porque nos interesa “modificar” los registros de la tabla TGenero, pero no tanto modificar sino poder añadir uno nuevo. Entonces es cuando nos vamos a la siguiente propiedad, “Formulario de edición de elementos de la lista”, y le decimos que el formulario que nos permitirá “toquetear” los valores de la tabla TGenero es FGenero; luego lo seleccionamos del desplegable que nos permite la propiedad.


¿Y cómo “utilizamos” todo esto que acabamos de configurar? Si situamos el formulario en vista formulario y desplegamos el combo género para ver los valores apreciaremos que nos aparece, ligeramente atenuado, un pequeño icono de un lápiz con una lista-esquema. Si hacemos click sobre este icono… ¡sorpresa! Y como ya tenemos configurado el botón cmdCerrar de FGenero podemos hacer click tranquilamente sobre él para cerrar este formulario.


Ahora volvemos a situar FCompras en vista diseño. Como el combo para seleccionar el autor nos interesa controlarlo nosotros totalmente sacamos las propiedades de cboAutor y nos vamos a la pestaña Datos. Ahora configuramos “Limitar a la lista”: SÍ; “Permitir ediciones de la lista de valores”: NO. En definitiva, que si alguien quiere dar de alta un autor no tendrá otro remedio que utilizar nuestro botoncito del “+”.


RECAPITULACIÓN FINAL
Hemos visto diferentes tipos de formularios, pero no todos. He preferido “sacrificar” la enumeración y explicación de los que faltan para explicar un poco de programación general en VBA aplicable a formularios. Ni que decir tiene que estos códigos que hemos aprendido son de perfecta aplicación a vuestros formularios: lo único que debe cambiarse son los nombres de los formularios y de los controles, si hay alguno implicado en el proceso.


Definitivamente creo que de esta manera se hace más interesante vuestro “trabajo” con formularios y se aprenden cosas útiles. Además, con un poco de imaginación, pueden hacerse “salvajadas” (y lo digo en plan de broma) con nuestros formularios. Os pongo un ejemplo, que me servirá para clarificar alguna cosa que, en el código, quizá pueda llamar a confusión:


Cuando estoy en un formulario, por ejemplo FNeckkito, y en el código quiero referirme a FNeckkito utilizo la palabra ME. Es decir, si quiero que se cierre el formulario escribiría:


DoCmd.Close acForm, Me.Name


Si estoy en FNeckkito pero quiero manipular otro formulario, por ejemplo, FOtro, NO puedo utilizar Me (porque evidentemente Me, en este caso, es para FNeckkito). Luego debo utilizar el nombre del formulario. Así, para abrirlo desde FNeckkito, diría:


DoCmd.OpenForm “FOtro”


Y, relacionándolo con lo de “salvajada” con que  bromeaba antes, si de FNeckkito quiero abrir tres formularios, simplemente el código sería


---
Private Sub…
DoCmd.OpenForm “F1”
DoCmd.OpenForm “F2”
DoCmd.OpenForm “F3”
End Sub
---


¿Y si quiero, desde Neckkito, cerrar sólo F2 y F3 (suponiendo que estén cargados, claro)? Recordad que no podemos utilizar ME, por lo que el código sería:


---
Private Sub…
DoCmd.Close acForm, “F2”
DoCmd.Close acForm, “F3”
End Sub
---


¿Fácil, no?


Y ahora os animo a meter algunos registros en nuestra aplicación que acabamos de crear, correteando por los diferentes formularios y comprobando que todo nos funciona correctamente.


En el próximo artículo acabaremos de ver algunas cositas más sobre formularios.


¡Suerte!

 

---FIN DEL ARTÍCULO SEGUNDO---

 

Monday the 22nd. Joomla 2.5 Templates. Neckkito's baby 2012 --- Hosted by: www.siliconproject.com.ar
Copyright 2012

©