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.
No hay comentarios.:
Publicar un comentario