Hola espero que puedas ayudarme, necesito pasar el valor de una clave seleccionada de un cuadro combinado a otro cuadro combinado para filtrar los registros de ese cuadro, ambos cudros combinados tienen su origen desde una tabla y funcionan como catálogos en el formulario de captura
1 respuesta
Respuesta de soria4xse
1
1
soria4xse, Experto en Microsoft Access y SQL Server
Copio y pego de mi web de oferta de soporte y desarrollo: Tip 5 .- Limitar OrigenRegistro de un Cuadro Combinado con otro C. c. (y en SubForm.) Introducción: Tengamos un cuadro combinado con origen en tabla tipos de materias primas (tTipos) y otro cuadro con origen en tabla materias primas (Mp) Ambas tablas tienen en común el campo materia prima (en Mp es clave única y en tTipos es repetible) de un tipo a múltiples Mp's (uno a varios) Nota: tipos de materia prima es una clasificación de la misma, por ejemplo el tipo 'polietileno' comprende varias materias primas: Polietileno de alta densidad, ¿de la marca aaa proveedor xxx? ¿Polietileno baja densidad, marca bbb, proveedor yyy? Etc. Limitar o Filtrar un cuadro combinado según el valor de otro Formulario: fOfLin Trata de la composición de un envase a fabricar (de las distintas materias primas, Y/o tipos de materias primas) que lo componen En primer lugar seleccionamos un Tipo de materia prima,(cuadro combinado sTipo) En segundo lugar, si queremos especificar la materia prima en concreto podemos usar un segundo cuadro combinado, eCodMp, el cual debe reflejar solo las materias primas del tipo previamente especificado. Esto se consigue con algo como el siguiente código: Sub eCodMp_Enter () If Not IsNull(Me!stipo) Then Me!eCodMp.rowsource = "SELECT DISTINCTROW CodMp, desc1Mp, desc2Mp FROM Mp WHERE ((Mp.Tipo=forms!fOfLin!sTipo));" Me!eCodMp.Requery 'else (if isnull) 'Me!eCodMp.rowsource = "SELECT CodMp, desc1Mp, desc2Mp FROM Mp;" End If End Sub Ídem al caso anterior cuando fOfLin es un SubFromulario (de fOfCab) El código anterior no funciona en este caso, puesto que el form actual es fOfCab (de hecho access nos pide el parámetro forms! FOfLin! STipo). Tampoco sirve tener abierto el Subform fOfLin de fondo. En dicho caso no se nos pregunta nada, pero tampoco se filtran los Mp del tipo actualmente activado en 'este' subformulario, sino en el de 'el otro' (el que se abre como principal al fondo) La solución más cómoda que he encontrado para poder seguir usando la idea del código del primer caso consiste en crear un control extra en el formulario principal (digamos campo100, el cual se encarga de copiar el valor de sTipo a un punto donde access pueda identificarlo Sub eCodMp_Enter () If Not IsNull(Me!stipo) Then forms!fOfCab!campo100 = Me!stipo Me!eCodMp.rowsource = "SELECT DISTINCTROW MP.CodMp, MP.desc1Mp, MP.desc2Mp FROM MP WHERE ((MP.Tipo=forms!fOfCab!campo100));" Me!eCodMp.Requery End If End Sub