Y una excelente explicacion de un Accesero llamado
xavi:
Imaginemos que desarrollamos una aplicacion para un taller de vehiculos. Los vehiculos pertenecen a una marca, que tiene diferentes modelos que, a su vez, tienen diferentes versiones.
En nuestro formulario continuo vemos, al principio, todos los vehiculos que han pasado por el taller, y en el encabezado del formulario hemos puesto 3 combos para poder filtrar los datos. El formulario esta basado en una consulta a la tabla Vehiculos: SELECT * FROM Vehiculos ORDER BY Matricula;
El primer combo se llama Marcas y esta basado en una consulta a la tabla del mismo nombre. SELECT IdMarca, NombreMarca FROM Marcas; 2 columnas, la primera dependiente y anchos 0cm;4cm
El segundo combo (Modelos) esta basado en una consulta a la tabla Modelos (esa tabla contiene un campo IdMarca que los relaciona con la tabla Marcas). SELECT IdModelo, IdMarca, NombreModelo FROM Modelos; 3 columnas, la primera dependiente y anchos 0cm;0cm;4cm
El tercer combo (Versiones) basado en una consulta a la tabla Versiones (que contiene un campo IdModelo que lo relaciona con la tabla Modelos). SELECT IdVersion, IdModelo, NombreVersion FROM Versiones; 3 columnas, la primera dependiente y anchos 0cm;0cm;4cm
Cuando abrimos el formulario, el primer combo nos muestra todas las marcas. Al seleccionar una de ellas se produce el evento AfterUpdate. Aqui es donde decidimos que el contenido del combo Modelos debe variar para mostrar solo los de esa marca.
Me!Modelos.RowSource = "SELECT IdModelo, IdMarca, NombreModelo FROM Modelos WHERE IdMarca=" & Me!Marcas & ";"
A continuacion cambiamos el RecordSource del formulario para mostrar los vehiculos que coinciden con esa Marca:
Me.RecordSource = "SELECT * FROM Vehiculos WHERE IdMarca = " & Me!Marcas & " ORDER BY Matricula;"
Ahora el combo Modelos solo muestra los de la marca escogida en el combo Marcas.
Al seleccionar un modelo, tambien en el AfterUpdate, debemos cambiar el contenido del combo Versiones:
Me!Versiones.RowSource = "SELECT IdVersion, IdModelo, NombreVersion FROM Versiones WHERE IdModelo=" & Me!Modelos & ";"
Y actualizar el RecordSource del formulario:
Me.RecordSource = "SELECT * FROM Vehiculos WHERE IdMarca = " & Me!Marcas & " And IdModelo = " & Me!Modelos & " ORDER BY Matricula;"
Al seleccionar una version, tambien en el AfterUpdate, actualizamos el RecordSource del formulario:
Me.RecordSource = "SELECT * FROM Vehiculos WHERE IdMarca = " & Me!Marcas & " And IdModelo = " & Me!Modelos & " And IdVersion = " & Me!Versiones & " ORDER BY Matricula;"
Ahora queremos restaurar esos combos para que nos muestren todos los registros. Ponemos un boton Restaurar que nos debe devolver los RowSources originales y dejar los combos en blanco. Tambien cambiamos el RecordSource para devolverlo a su estado original.
Private Sub restaurar_Click()
Me!Marcas = Null
Me!Modelos.RowSource = "SELECT IdModelo, IdMarca, NombreModelo FROM Modelos;"
Me!Modelos = Null
Me!Versiones.RowSource = "SELECT IdVersion, IdModelo, NombreVersion FROM Versiones;"
Me!Versiones = Null
Me.RecordSource = "SELECT * FROM Vehiculos ORDER BY Matricula;"
End Sub
Espero os sirva.