No se actualiza el cuadro combinado en cascada
Tengo un formulario con dos cuadros combinados Año y Mes, cuando elijo el año no se actualiza el mes y no se el porque. Si algún experto me puede echar una mano.
1 respuesta
¿Has probado a poner en las propiedades del combinado Mes-Eventos-Al recibir el enfoque, crear un procedimiento de evento y entre Private Sub y End sub poner
Mes. Requery
Vamos a ver si me explico. Supongo que el primer combinado eliges un año, y que en el combinado Mes te muestra X meses en función del año que hayas elegido, y que si por lo que sea cambias el año, te cambie los meses que muestra el combinado mes. Pues si es eso, con Requery, le estás diciendo que reconsulte su origen de la fila Mira si tengo la tabla
Construyo un formulario independiente con dos combinados. El combinado Año con origen de la fila
SELECT Tabla1.Año FROM Tabla1 GROUP BY Tabla1.Año;
Y en el combinado Mes en su origen de la fila le pongo(bueno en realidad lo pone el generador de consultas)
SELECT Tabla1.Mes FROM Tabla1 GROUP BY Tabla1.Mes, Tabla1.Año HAVING (((Tabla1.Año)=forms!Tabla1!año));
de forma que si elijo un año
Cuando voy a "desplegar" el mes
Selecciono Febrero.
Vamos a suponer que me lo pienso mejor y quiero que el año sea 2020
Cuando pongo el cursor en Mes
Es decir, cuando he puesto el enfoque en el combinado Mes, ha "reconsultado" su origen de la fila.
Incluso no necesitas que el combinado Mes tenga origen de la fila, ni lo de requery. Lo puedes dejar en blanco y en las propiedades del combinado Año, en Eventos-Después de actualizar puedes crear un procedimiento de evento y entre Private Sub y End Sub poner simplemente
Mes.rowsource="Select mes from tabla1 where año=" & me.año & ""
De forma que una vez hayas elegido el año, éste te actuará como "filtro" para darle valor al origen de la fila del combinado Mes
Veamos:
Tengo una tabla de Facturas otra de Año y otra de Mes en la de Mes tengo de Enero a Diciembre ya introducido en la de Año esta en blanco, luego en la tabla Facturas entre otros cuadros esta el Año y Mes como asistentes para búsqueda, tengo otro formulario dependiente de Facturas donde aparecen los cuadros combinados de Año y Mes en el de año le puedo entrar los años que quiera el el de mes ya estan puestos de Enero a diciembre lo cual poniendo el año solo tengo que escoger el mes que quiera sin tener que escribirlo, por otra parte tengo otro formulario General donde aparecen todas las facturas emitidas y los cuadro combinados de Año y Mes donde quiero filtra por año y mes la cuestión es que elija el año que elija siempre me salen todos los meses tenga tengan o no factura, en el cuadro combinado Mes le pongo este criterio [Formularios]![General]![Cuadro_combinado397G] no me aparece nada.
Espero haberme explicado bien. Gracias
Daniel, ¿porque no haces una copia con dos o tres registros inventados y me la mandas a [email protected]
Si lo haces, en el asunto del mensaje pon tu alias Daniel Piqueras, ya que si no sé quien me escribe, ni los abro.
Muchas gracias te lo agradezco pero algo hago mal para que aparezca el mes en letra le puse esto.
Private Sub ElegirMes_AfterUpdate()
Me.RecordSource = "select * from factura where year([fecha_envio])=" & Me.ElegirAño & " and Monthname(month([fecha_envio])=" & Me.ElegirMes & ""
End Sub
y aparece el numero
y esto
Private Sub ElegirMes_GotFocus()
If IsNull([ElegirAño]) Then
MsgBox "Carlos,Carlos, como no elijas un año, no hago nada", vbOKOnly + vbInformation, "No digas que no te avisé"
DoCmd.CancelEvent
ElegirAño.SetFocus
ElseIf Not IsNull([ElegirAño]) Then
ElegirMes.RowSource = "select Monthname(month([fecha_envio]) from factura where year([fecha_envio])=" & Me.ElegirAño & " group by Monthname(month([fecha_envio])"
End If
End Sub
y da este error
que diantres hago mal.
Es
...................MonthName(month([fecha_envio]))"
Comprendo que a estas horas..., pero te has "comido" un paréntesis de cierre
Carlos, ahora Elegirmes ya no es número, es texto, por tanto la instrucción tienes que ponerla referida a texto
Deja el código como
Private Sub ElegirAño_GotFocus() ElegirAño.RowSource = "select year([fecha_envio]) from factura group by year([fecha_envio])" End Sub Private Sub ElegirMes_AfterUpdate() Me.RecordSource = "select * from factura where year([fecha_envio])=" & Me.ElegirAño & " and monthname(month([fecha_envio]))='" & Me.ElegirMes & "'" End Sub Private Sub ElegirMes_GotFocus() If IsNull([ElegirAño]) Then MsgBox "Carlos,Carlos, como no elijas un año, no hago nada", vbOKOnly + vbInformation, "No digas que no te avisé" DoCmd.CancelEvent ElegirAño.SetFocus ElseIf Not IsNull([ElegirAño]) Then ElegirMes.RowSource = "select monthname(month([fecha_envio])) from factura where year([fecha_envio])=" & Me.ElegirAño & " group by monthname(month([fecha_envio]))" End If End Sub
Cuando uno se refiere a una variable numérica es
TextoX=" & me.controlquesea & "
Cuando es texto
TextoX='" & me.controlquesea & "'
Cuando es fecha
TextoX=#" & me.controlquesea & "#
te agradezco la ayuda y siento el tiempo que as perdido pero me doy por vencido,cuando no sale un error sale otro.
De nuevo muchas gracias.
Gracias por tu interés, probando, probando lo consigue solucionar, lo ponía mal.
Ya que estamos hay manera de que los meses aparezcan de Enero a diciembre ahora aparece Abril, Enero, Marzo cuando aparecían los números eran correlativos de menor a mayor.
Saludos.
Al final me mandaras al carajo.
Tengo 5 registros del 2020 y uno del 2021 en año salen 2020 y 2021 en meses tanto del 2020 como del 2021 aparecen Enero, Febrero; Marzo; Abril, y Mayo ¿es correcto o debería de aparecer del 2021 solo Mayo que es la fecha de envío?
Perdón por ser tan pesado.
Y tienes toda la razón, me olvidé totalmente del año elegido( ya se sabe, el confinamiento, la inmortalidad del cangrejo, las corrientes de pensamiento protorománicas,... elige la disculpa que quieras)
Le añado un registro del año que viene
en el formulario
Tienes que cambiar la línea ElegirMes.Rowsource por la que va ahora
Private Sub ElegirMes_GotFocus() If IsNull([ElegirAño]) Then MsgBox "Carlos,Carlos, como no elijas un año, no hago nada", vbOKOnly + vbInformation, "No digas que no te avisé" DoCmd.CancelEvent ElegirAño.SetFocus ElseIf Not IsNull([ElegirAño]) Then ElegirMes.RowSource = "SELECT UCase(MonthName(Month([fecha_envio])))FROM Factura where year([fecha_envio])=" & Me.ElegirAño & " GROUP BY " _ & "UCase(MonthName(Month([fecha_envio]))), Month([fecha_envio]) ORDER BY Month([fecha_envio])" End If End Sub
- Compartir respuesta