martes, 5 de agosto de 2014

Combos en cascada en un Formulario Continuo (Segunda parte)




En la primera parte hicimos los combos en cascada en un formulario continuo, el único problema, si se le puede llamar problema, es que Access es una base de datos relacional, por lo que hay que evitar la duplicidad de los datos que son innecesarios y en este caso estamos guardando en la tblAlmacen el campo Modelo.

Si observamos en la tblColores contamos con Modelo y este tiene un id irrepetible (Autonumerico), al hacer referencia a un color también lo hace del Modelo, por lo tanto no requerimos guardar ese dato, vamos a eliminarlo de la tblAlmacen y hacer que nuestro formulario continúe con la misma apariencia.

Mejor para tener dos diferentes hacemos una nueva tabla tblAlmacen1 con los mismos datos que tblAlmacen pero eliminando Modelo. Y con el asistente para formulario lo creamos, primero seleccionamos la tblAlmacen1 y agregamos todos los campos, buscamos la tblModelos y agregamos Nombre y de la tblColores agregamos solo Colores y nos queda algo así:


Le damos a siguiente, siguiente, tabular, siguiente, nombre del formulario le ponemos frmAlmacen1 y le damos finalizar, y nos abre algo como esto:

Observemos que solo tenemos el combo de color y abre todos los colores, nos falta el combo de los Modelos, es momento de jugar un poco, nos vamos a vista diseño y agregamos un combo con el asistente a la misma altura que el combo anterior y le decimos que deseo que el asistente busque los valores en una tabla o consulta y siguiente escogemos la tblModelos y seleccionamos los dos campos y siguiente hasta terminar, borramos la etiqueta, entramos a propiedades, nombre  le ponemos CboNombre y si lo abrimos tenemos esto:

Ahora vamos con el combo Color, en propiedades origen de la fila  y a los 3 puntos, entramos al generador de consultas y agregamos Modelo y en criterios [CboNombre]

Ahora seleccionamos lo de origen de la fila del combo Color

SELECT tblColores.Id, tblColores.Colores, tblColores.Modelo FROM tblColores WHERE (((tblColores.Modelo)=[CboNombre]));

Y le agregamos lo que está en Rojo:

Me.Color.RowSource = "SELECT tblColores.Id, tblColores.Colores, tblColores.Modelo FROM tblColores WHERE (((tblColores.Modelo)=[CboNombre]));”

Y en el evento al Entrar ponemos:

Private Sub Color_Enter()
Me.Color.RowSource = "SELECT tblColores.Id, tblColores.Colores, tblColores.Modelo FROM tblColores WHERE (((tblColores.Modelo)=[CboNombre]));"
End Sub

Y en el evento Después de actualizar del CboNombre ponemos:

Private Sub CboNombre_AfterUpdate()
  With Me.Color
  .RowSource = "SELECT tblColores.Id, tblColores.Colores, tblColores.Modelo FROM tblColores WHERE   (((tblColores.Modelo)=[CboNombre]));"
  .Value = .Column(0, 0)
   End With
  Me.Color.SetFocus
  Me.Color.Dropdown
End Sub


Esto con el fin de que al seleccionar un nombre me situé en el primer registro del combo color y me despliegue para seleccionar el que yo quiero. Ahora solo resta acomodar los controles algo como esto:

Fuente: Tomado de una explicación de Patxi Saenz.
Ahora podemos bajar el Archivo:
https://dl.dropboxusercontent.com/u/79048771/Combocontinuo2.zip

No hay comentarios.:

Publicar un comentario