¿Cómo sacar los 5 libros más leídos entre dos fechas?

Pensaba que no iba a necesitar más ayuda pero "cuán equivocado andaba".

Salvo que ocurra una catástrofe espero no tener que volver a molestar, pero bueno, ahora no es el caso. De todos modos aprovecharé y haré 2 preguntas.

Conforme indico en el título de la pregunta estoy intentado que la BD me informe de los 5 libros más leídos cuando realizo la consulta desde un formulario con un subformulario. Lo que se me ha ocurrido es crear una consulta cuyo SQL es el siguiente:

SELECT TOP 5 Count(T_LibMLeídos.IdLibro) AS CuentaDeIdLibro, T_LibMLeídos.IdLibro, T_LibMLeídos.Título, T_LibMLeídos.Autor

FROM T_LibMLeídos

WHERE (((T_LibMLeídos.FechaPtmo) Between [Formularios]![F_libros más leídos]![txtFechaInicio] And [Formularios]![F_libros más leídos]![txtFechaFin]))

GROUP BY T_LibMLeídos.IdLibro, T_LibMLeídos.Título, T_LibMLeídos.Autor

ORDER BY Count(T_LibMLeídos.IdLibro) DESC , T_LibMLeídos.IdLibro DESC;

Funciona perfectamente.

Si ejecuto la consulta desde el subformulario, en donde tengo como origen del registro la consulta “ C_libros más leídos”. También funciona perfectamente.

Otra cuestión es cuando la solicito la información desde el formulario porque ejecuta el filtro de fechas correctamente pero aparecen todos los libros leídos en el periodo seleccionado. No restringe al nro 5 los libros leídos sino que los informa todos.

No sé por dónde seguir, porque si los ejecuto de manera separada funciona perfectamente pero si lo hago desde el formulario, ahí, falla.

La sentencia que tengo en el formulario para que se ejecute es la que sigue:

…...

 sFiltro = "SELECT T_LibMLeídos.IdLibro, Count(T_LibMLeídos.IdLibro) AS CuentaDeIdLibro, T_LibMLeídos.T?tulo, T_LibMLeídos.Autor " _
& "FROM T_LibMLídos " _
& "WHERE (((T_LibMLeídos.FechaPtmo) Between [Formularios]![F_libros más leídos]![txtFechaInicio] And [Formularios]![F_libros más leídos]![txtFechaFin])) " _
& "GROUP BY T_LibMLeídos.IdLibro, T_LibMLeídos.Título, T_LibMLeídos.Autor " _
& "ORDER BY Count(T_LibMLeídos.IdLibro) DESC;"

Me.Section(0).Visible = True

Me.[Subformulario libros más leídos].Form.RecordSource = sFiltro

Me.[Subformulario libros más leídos].Form.FilterOn = True

   Me.[Subformulario libros más leídos].Visible = True

    Else

    MsgBox "TIENES QUE PONER AMBAS FECHAS, LA INICIAL Y LA FINAL"

End If

1 respuesta

Respuesta
2

Obviamente no te restringe a 5 los resultados porque no se lo indicas... Tu tienes:

 sFiltro = "SELECT T_LibMLeídos.IdLibro, Count(T_LibMLeídos.IdLibro) AS CuentaDeIdLibro, ....

Y como poco te falta el TOP 5, además de cambiar el orden de los campos para que lo los limite por la cuenta, no por el id:

 sFiltro = "SELECT TOP 5 Count(T_LibMLeídos.IdLibro) AS CuentaDeIdLibro, T_LibMLeídos.IdLibro,  ....

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas