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

Respuesta
2

¿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

Lo probé pero sigue sin funcionar.

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

se me paso el Cuadro_combinado397G es el combinado Año.

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.

Gracias por todo, te mande la Bd.

Enviado email

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

Perfecto, de nuevo muchas gracias.

de nuevo te molesto, estoy probando y ahora pide esto

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.

¿Te ha salido otra cosa?

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.

Primero te lo explico. Al ser texto los ordena alfabéticamente.

Segundo, te lo mando por correo.

Muchas gracias, veo que todo es posible si se sabe.

Saludos y de nuevo gracias.

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.

me doy cuenta que en la Bd de los meses en numero si funciona correctamente.

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas