Cuadro Combinado Filtrado

Hace poco me has ayudado mucho con un cuadro combinado que guardaba el ultimo valor...
Ahora necesito otra cosa:
Tengo un form INICIAL donde elijo una ciudad, y con el código de abajo... Cuando abre el form PRINCIPAL se filtran todos los registros pertenecientes a esa ciudad...
Lo que necesito:
Dentro de ese form PRINCIPAL, hay un Cuadro Combinado, que también necesitaría que quede automáticamente Filtrado por la ciudad que se ha elegido en el Form INICIAL, es decir, dicho CC ahora me muestra la lista de ciudades completas, pero solo debería mostrar la ciudad que fue elegida en el form INICIAL...
¿Cómo logro que ese CC quede filtrado también?
Nota: El CC toma los datos de una tabla Ciudades (ID, DESCRIPCIÓN)
---------------------------------------
DoCmd.OpenForm "PRINCIPAL 2", , , "[idCiudad]= " & Me.Elegir.Column(0)
---------------------------------------

2 Respuestas

Respuesta
1
Lo que debe hacer es lo siguiente... cree un modulo, si no lo tiene y crea una variable publica donde va a guardar el código de la ciudad que elige en INICIAL...
...
Public VarIdCiudad as long
......
Coloque long..porque supongo que es numerica...
Ahora, en el evento afterupdate del Combo donde elige la ciudad en Inicial, colocaría este código, llamo al combo CmbIdCiudad...
...
Private sub CmbIdCiudad_AfterUpdate()
VarIdCiudad = CmbIdCiudad
End Sub
...
Lo que hago aquí.. es igualar la variable creada como publica al valor del combo(se supone que debe tomar el IdCiudad, ya que esta debe ser el valor dependiente)
Ahora al abrir el Form PRINCIPAL filtraría el combo que necesita tomar el código de la ciudad... ahora este combo que llamare CmbCiudad (que supuestamente mostraría municipios de determinada ciudad)
...
Private Sub Form_Open(Cancel as integer)
Sql = "Select IdMunicipio,NomMunicio From Municipios Where IdCiudad = " & VarIdCiudad & ";"
CmbCiudad.RowSource = sql
CmbCiudad.Requery
End Sub
...
Lo que hicimos aquí... fue "Filtrar" el combo... aunque en realidad estoy cambiando el origen de la fila (osea lo que el combo va a mnostrar en sus columnas), pero la idea es esa, que guarde en una variable publica el código, y luego lo mande a una consulta sql, ayudándose con el rowsource del combo y el Requery(Esto siginica que vuelva refresque el origen y muestre los nuevos datos)
Me avisa... como le va... si necesita más aclaración me avisa
Att:TELEMACO
...
Private Sub Form_Open(Cancel as integer)
Sql = "Select IdMunicipio,NomMunicio From Municipios Where IdCiudad = " & VarIdCiudad & ";"
CmbCiudad.RowSource = sql
CmbCiudad.Requery
End Sub
...........
Lo de Municipio, fue para hacer un ejemplo.. pero igual te debe servir con la consulta que hagas... entonces seria::
...........
Private Sub Form_Open(Cancel as integer)
Sql = "Select ID,DESCRIPCION From Dbo_Departamento Where ID = " & VarIdCiudad & ";"
Cuadro combinado17.RowSource = sql
Cuadro combinado17.Requery
End Sub
...........
Este evento es en el Form PRINCIPAL...
Aquí lo que se hace es una consulta SQL, no se si estas familiarizado con esto... me sirve para "traer" datos o mejor mostrar ciertos o los datos que se requieren, tiene esta sintaxis:
SELECT [NombreCampos separados por comas o * si se quieren todos] FROM [NombreDeTabla] WHERE [Condicion o Filtro]
Las palabras en mayúsculas son requeridas... las que están entre corchetes, no necesitan estar entre corchetes a menos que sean nombres separados por espacios...
La parte del combo donde dice RowSource.. le mando la consulta que necesite.. ya que quiere decir el origen de la fila... y la parte de Requery... es para que actualize el combo.. ya que sin esta linea.. puede que no muestre los nuevos datos...
Para que aparezca elegido según la opción de INICIAL... es utilizando la Variable antes mencionada...
Osea en el evento opne antes mencionado agregar:
...
Private Sub Form_Open(Cancel as integer)
Sql = "Select ID,DESCRIPCION From Dbo_Departamento Where ID = " & VarIdCiudad & ";"
Cuadro combinado17.RowSource = sql
Cuadro combinado17.Requery
Cuadro combinado17.value = VarIdCiudad
End Sub
...
Y listo... me avisa.. como le va...
Att:TELEMACO
Hola Telemaco! Gracias por tus respuestas!
He hecho algunos cambios de nombres para entendernos... y sobre todo para no liarme yo :)
Cidades = dbo_Departamento (tabla)
idciudad = ID
NombreCiudad= Descripcion
-------------------------------------
CmbIdCiudad = ELEGIR (del form INICIAL)
CmbCiudad = Cuadro combinado172 (del form PRINCIPAL)
-------------------------------------
Te comento que no he comprendido bien la parte que involucra los municipios, puesto que sólo necesito manejar ID, Descripción de la Tabla Departamento ... por ende he cambiado los nombres... pero necesito me aclares el código de
Private Sub Form_Open(Cancel as integer)
...
Algo más, hasta ahora, lo que he probado con las modificaciones de nombre y algunas cosas más, creo ha funcionado, ¿pero noto que en el Cuadro Combinado del Form Principal hay todavía que elegir de la lista por más que hay sólo una opción (pues ya esta filtrado) ... se podría hacer que ya aparezca elegida la única opción existente al crear un nuevo registro en el form en el cual esta?
Muchas gracias!
Un abrazo!
DreamerMX®
El combo no tiene que ver... ya que seguramente la columna dependiente es el ID, lo que pasa es que debe revisar que la variable VarIdDepartamento este devolviendo algún valor.. para eso realiza una inspección paso a paso...
En esta línea se para y hace un click en el borde IZquierdo (la parte que bordea al código).. al hacer esto se coloca un punto café y toda la linea se vuelve de este color...
Ahora ejecuta la aplicación... cuando pare allí, cerciórate que valor tiene la vasriable... simplemente parándose con el mouse encima de ella...
Debes mirar si el combo es dependiente o indepoendiente.. y de que dato depende.. porque también.. puede ser esto...
Creo que la variable se llama VarIdCiudad en el modulo y debe ser publica,.. cerciorate que se llame tal y como la invocas en la linea que te da error... y debe ser publica OJO...
Si todo esto esta bien... y no encusntra error... y si puedes enviar la BD para revisarla seria mejor...
Me avisa.
Att:TELEMACO
Hola Telemaco,
Te comento que funciona bien hasta que coloco la linea en la cual da error y me pide finalizar o depurar:
[Cuadro combinado172].Value = VarIdDepartamento
... que es para que aparezca visible el ultimo valor elegido...
Creo que el problema (según mi humilde opinión) es que como en ese CuadroCombinado manejo dos columnas una de ID y otra de Descripción, y las mismas son una numero y la otra texto, ¿y la que yo dejo visible en ese CC es la de texto ... puede ser ese el problema?
¿Cómo lo soluciono?
Gracias!
Drmx.-
Que ha pasado comentame...
Att:TELEMACO
Hola Telemaco!
Mil disculpas por no contestar antes, no he tenido tiempo de sentarme a verlo tranquilo, pero te comento que, en lineas generales, he logrado usar
[Cuadro combinado172]. Value = VarIdDepartamento para que me visualice el ultimo valor usado en el cc, colocandolo en el boton "agregar nuevo registro" .... pero tambien debo hacerlo funcionar en el cc INICIAL, y ahi no lo logro ... pero este domingo o lunes te vuelvo a escribir porque lo quiero estudiar bien.
Gracias!
DRMX®.-
Hola Telemaco! Disculpa mi cuelgue, estoy un poco liado y no he tenido mucho tiempo de estudiar el tema, pero te digo cual sigue siendo mi problema:
En el Form INICIAL, el CuadroCombinado donde elijo el Departamento (que dispara al Form Principal con ese dato a modo de filtro), muestra el ultimo Departamento elegido, pero necesito como te venia diciendo, que la próxima vez que abra el formulario INICIAL, ya me muestre sin tener que desplegar el CuadroCombinado, ese ultimo valor elegido, ¿me explico? Es decir, ya habiendo elegido en una primera instancia uno de los 20 valores que había, me muestra sólo el ultimo en la lista, pero me faltaría que me lo muestre sin tener que desplegar el CC.
Tengo el siguiente código en el CC:
Private Sub ELEGIR_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "Insert into uDepartamento (uDepartamento, uDescripcion ) values(" & Me.Elegir.Column(0) & ",'" & Me.Elegir.Column(1) & "')"
'codigo para que en el form causa 2 quede seleccionado el mismo dto que en el form inicial
VarIdDepartamento = Elegir
End Sub
Private Sub ELEGIR_GotFocus()
If DCount("uDepartamento", "uDepartamento") = 0 Then
Elegir.RowSource = "select ID,Descripcion from dbo_Departamento"
Else
Elegir.RowSource = "select uDepartamento, uDescripcion from A"
End If
End Sub
-La tabla Udepartamento es para guardar el ultimo valor elegido y tiene: Udepartamento(numero), Udescripcion(texto).
- "A" Es una consulta de Udepartamento, es decir, busca el ultimo valor guardado en la tabla.
-DBO_Departamento, es una tabla que consta de: ID, Descripción
Espero haber sido claro, cualquier cosa me escribís.
Un gran abrazo!
DRMX.-
Avisame bien cual es problema... o si ya lo resolviste...
Att:Telemaco(Oscar)
Primero que todo disculpa ya que yo fui ahora el que se perdió, pero es que andaba ocupado. A ver, vamos a modificar un poco el código que me dices... primero como utilizas una tabla donde guardas el ultimo valor elegido.
Entonces cuando abras el form INICIAL has lo siguiente:
*********************
Private Sub Form_Open(Cancel as Integer)
If DCount("uDepartamento", "uDepartamento") > 0 then
ElComboEnCuestion.RowSource = "select uDepartamento, uDescripcion from A"
ElComboEnCuestion.Requery
ElComboEnCuestion = dlookup("UDepartamento","UDepartamento")
else
ElComboEnCuestion.RowSource = "select ID,Descripcion from dbo_Departamento"
End Sub
*********************
Es casi lo mismo que colocaste, solo que te aconsejo que no lo hagas al tomar el enfoque "Private Sub ELEGIR_GotFocus()
", sino en el evento open del form, ya que para cuando abras el formulario tengas listo este dato. La función dlookup, sirve para buscar el valor de ese campo y devolverlo, en este caso al combo.
OJO:Me Parece que el combo en el form INICIAL lo llamste Elegir, yo aquí lo llame "ElComboEnCuestion", porque me confundí con esto.
Me avisas como te va.
Atte:Telemaco(OScar)
TELEMACO, realmente excelente lo tuyo! Interpretas muy bien el problema y das rápidas, claras y concretas soluciones! Te envío un gran abrazo desde Argentina y Obvio que ya se que cuento con un erudito en access. Gracias!
Respuesta

Retro Bowl is the perfect venue for armchair quarterbacks to present their arguments. Presented in an exquisitely vintage manner

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas