Filtro Cascada cuadro combinado access

Necesito de sus conocimientos para poder lograr un filtro cascada en varios cuadros combinados, debo mencionarles que me encontré un ejemplo y lo adapte a mi tabla.

La tabla cuenta con los siguientes campos:

Dsc_servicio (se registra nombre servicio)

Dsc_especialidad (se registra nombre de la especialidad)

Dsc_medico (se registra nombre medico)

Cod_medico (se registra nombre código medico)

El ejemplo me funciona bien y me va filtrando según la selección del cuadro combinado anterior, mi problema esta en que al momento que selecciono la especialidad este me muestra los médicos ligados a esta especialidad en el cuadro combinado txt_Dsc_Medico pero ademas requiero que en el cuadro combinado txt_Cod_Medico también se cargue el código del medico que seleccione.

Actualmente le indique al evento Al cambiar que cuando dígito el código del medico este automáticamente me muestre el nombre del medico en el cuadro combinado txt_Dsc_Medico con el siguiente código:

Private Sub txt_Cod_Medico_Change()

txt_Dsc_Medico.Value = txt_Cod_Medico.Column(2)
End Sub

Y en el evento Después de actualizar el cuadro combinado txt_Dsc_Medico contiene el siguiente código:

 Private Sub txt_Dsc_Medico_AfterUpdate()
txt_Cod_Medico.Value = txt_Dsc_Medico.Column(1)
End Sub

Ahora bien con el código para ir filtrando cada cuadro combinado no me funciona lo anterior expuesto, el código seria el siguiente:

Private Sub txt_Especialidad_AfterUpdate()
Dim strSQL As String
Dim strSQLSF As String
txt_Dsc_Medico = Null
'txt_Cod_Medico = Null
strSQL = "SELECT DISTINCT tblServiciosFiltro.DSC_MEDICO FROM tblServiciosFiltro "

strSQL = strSQL & " WHERE tblServiciosFiltro.DSC_SERVICIO = '" & txt_Servicio & "' And "
strSQL = strSQL & " tblServiciosFiltro.DSC_ESPECIALIDAD = '" & txt_Especialidad & "'"
strSQL = strSQL & " ORDER BY tblServiciosFiltro.DSC_MEDICO ;"
txt_Dsc_Medico.RowSource = strSQL
'txt_Cod_Medico.RowSource = strSQL
strSQLSF = " SELECT * FROM tblServiciosFiltro "
strSQLSF = strSQLSF & " WHERE tblServiciosFiltro.DSC_SERVICIO = '" & txt_Servicio & "' And "
strSQLSF = strSQLSF & " tblServiciosFiltro.DSC_ESPECIALIDAD = '" & txt_Especialidad & "'"

Me.Requery
End Sub

2 respuestas

Respuesta
2

Obviamente no te funciona lo de usar la propiedad column, porque al cuadro combinado txt_Dsc_Medico le pones solo una (SELECT DISTINCT tblServiciosFiltro.DSC_MEDICO FROM tblServiciosFiltro...)

Si cambias esa SQL para que te muestre el nombre del médico y su código, ya lo tienes listo, o casi, porque la primera columna tiene el índice 0, la segunda el 1, y así sucesivamente, y también lo tendrás que cambiar.

Un saludo.


Gracias por tu pronta respuesta pero algo debo estar poniendo en la SQL porque ve la que pongo

strSQL = "SELECT DISTINCT tblServiciosFiltro.DSC_MEDICO, tblServiciosFiltro.COD_MEDICO FROM tblServiciosFiltro "

Luego el ORDER BY no se como decirle que también me lo ordene por código de medico, lo puse así pero no pasa nada

strSQL = strSQL & " ORDER BY tblServiciosFiltro.DSC_MEDICO ;"

me puedes ayudar no se que es lo que estoy poniendo mal

Le hice estos cambios

strSQL = "SELECT tblServiciosFiltro.DSC_MEDICO,tblServiciosFiltro.COD_MEDICO FROM tblServiciosFiltro "

strSQL = strSQL & " ORDER BY tblServiciosFiltro.DSC_MEDICO AND tblServiciosFiltro.COD_MEDICO;"

y me filtra los códigos de los médicos que me aparecen en el combinado de nombres de médicos, pero lo que quiero es que una vez que selecciono el nombre del medico me aparezca el código del medico similar al que mencione anteriormente:

 Private Sub txt_Dsc_Medico_AfterUpdate()
txt_Cod_Medico.Value = txt_Dsc_Medico.Column(1)
End Sub

Primero, para ordenar por dos campos, solo tienes que separarlos por comas:

... ORDER BY DSC_MEDICO, COD_MEDICO

Segundo, el código del evento después de actualizar parece correcto, suponiendo, claro está, que los nombres sean esos, que a tu cuadro combinado txt_Dsc_Medico le tengas 2 columnas en sus propiedades, y que el cuadro combinado txt_Dsc_Medico el valor con que trabaja sea el Cod_Medico y no otro.

Con la información que das, poco más te puedo decir.

Ya le hice los cambios que me sugeriste, pero al momento que selecciono el medico no me aparece el código del medico automáticamente sino que debo seleccionarlo yo mismo del combo, osea lo que tengo en el evento Después de actualizar (txt_Cod_Medico.Value = txt_Dsc_Medico.Column(1))deja de funcionar a causa del siguiente evento que es al cual le hice los cambios:

Private Sub txt_Especialidad_AfterUpdate()

Dim strSQL As String
Dim strSQLSF As String
txt_Dsc_Medico = Null
strSQL = "SELECT DISTINCT DSC_MEDICO,COD_MEDICO FROM tblServiciosFiltro "
strSQL = strSQL & " WHERE tblServiciosFiltro.DSC_SERVICIO = '" & txt_Servicio & "' And "
strSQL = strSQL & " tblServiciosFiltro.DSC_ESPECIALIDAD = '" & txt_Especialidad & "'"
strSQL = strSQL & " ORDER BY DSC_MEDICO,COD_MEDICO;"
txt_Dsc_Medico.RowSource = strSQL
txt_Cod_Medico.RowSource = strSQL
strSQLSF = " SELECT * FROM tblServiciosFiltro "
strSQLSF = strSQLSF & " WHERE tblServiciosFiltro.DSC_SERVICIO = '" & txt_Servicio & "' And "
strSQLSF = strSQLSF & " tblServiciosFiltro.DSC_ESPECIALIDAD = '" & txt_Especialidad & "'"

Me.Requery

*Aclaro que si al cargar el formulario estando todos los cuadros combinados en vacíos y selecciono el nombre del medico sin antes haber realizado el filtro cascada, si funciona txt_Cod_Medico.Value = txt_Dsc_Medico.Column(1).

Es muy difícil entenderte, y más sin ver lo que tienes montado y cómo lo tienes. Además, parte del código que tienes carece de sentido.

Prueba esto:

1º/ Al combo del código ponle número de columnas: 2, y ancho de columnas: 0cm; 2 cm

2º/ Al combo del médico ponle número de columnas: 2, y ancho de columnas: POR cm; 0 cm

Donde POR sea un valor suficiente para ver su contenido.

3º/ Pon este código en el combo de la especialidad:

Private Sub txt_Especialidad_AfterUpdate()
Dim strSQL As String
Dim strSQLSF As String
txt_Dsc_Medico = Null
strSQL = "SELECT DISTINCT DSC_MEDICO,COD_MEDICO FROM tblServiciosFiltro "
strSQL = strSQL & " WHERE tblServiciosFiltro.DSC_SERVICIO = '" & txt_Servicio & "' And "
strSQL = strSQL & " tblServiciosFiltro.DSC_ESPECIALIDAD = '" & txt_Especialidad & "'"
strSQL = strSQL & " ORDER BY DSC_MEDICO,COD_MEDICO;"
txt_Dsc_Medico.RowSource = strSQL
txt_Cod_Medico.RowSource = strSQL
Me.txt_Dsc_Medico.Requery
Me.txt_Cod_Medico.Requery
End Sub

4º/ Y este otro en el del médico:

Private Sub txt_Dsc_Medico_AfterUpdate()
Me.txt_Cod_Medico= Me.txt_Dsc_Medico
End Sub
Respuesta
1

Supongamos que tienes una tabla Ciudades con Idciudad, continente, país, provincia, ciudad

Supongamos que en el formulario X tienes los combinados, Continente, País, Provincia, y Ciudad(mira en sus propiedades-Otras que se llamen así)

En Origen de la fila del cuadro combinado Continente, con el generador SQL lleva a la cuadrícula de diseño el campo Continente de la tabla Ciudades y pulsa el icono de Agrupar. Luego en sus propiedades-eventos-Después de actualizar crea un procedimiento de evento y escribe

país.rowsource="select país from ciudades where continente='" & me.continente & "' group by pais"

Así, cuando elijas un continente, el origen de la fila del cuadro combinado País, serán aquellos cuyo continente sea igual al que has elegido.

En el mismo evento del cuadro combinado País pones

provincia.rowsource="select provincia from Ciudades where país='" & me. país & "' group by provincia"

Y así sucesivamente.

En el caso de que quieras que te guarde un valor, pero que te muestre otro, en las propiedades del combinado-datos-columna dependiente le pones el valor de la columna donde están los datos que quieres guardar y en Formato-Número de columnas le pones las que quieras y en ancho de las columnas, le pones, por ejemplo 0;4;0

En el caso de que tuvieras las tablas Continente con IdContinente, continente. La tabla Paises con IdPais, Idcontinente(para relacionarlo con el idcontinente anterior), país. La tabla Provincias con Idprovincia, IdPais(para lo mismo), Provincia... entonces sería conveniente que en el combinado Continente pongas como columna dependiente la 1, en origen de la fila los campos Idcontinente y Continente, En formato-Numero de columnas 2 y en ancho de las columnas 0;5

Así, te muestro el nombre del continente pero el valor que "guarda" es el idcontinente. Por tanto el código cambiaría

país.rowsource="select país from País where idcontinente=" & me.continente & " group by país"

hola

Gracias por tu respuesta, intente hacerlo como me lo indicaste pero no me funciona, no tendrás un ejemplo que me puedas enviar para tratar de entenderlo ya que no soy experto como ustedes en este tema

Si me dices cual es tu correo te lo mando, o sino, mándame un mensaje a [email protected] y te lo mando, Si optas por esto último, en el asunto del mensaje pon tu alias Mendez Jara ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas