Mostrar valor máximo en formulario

Os comento tengo un formulario como el que muestro en la imagen,

Lo que pretendo es que me muestre el día de mayor siniestralidad, que en este caso es el Martes y no el Viernes como me lo muestra. Tengo insertada la siguiente instrucción en donde aparece el Viernes, en el origen del control:  =DMáx("Diasemana";"TAltas").

Un saludo.

2 respuestas

Respuesta
1

Tendrás que añadir como criterio que la semana sea la actual, o algún otro para filtrar los resultados.

Seguro que tienes por ahí guardado un viernes con más de 86 siniestros, y por eso el DMax te devuelve "viernes"

Hola y gracias por responder, las cantidades que figuran en el formulario que muestro son las correctas. Y lo viernes son lo que se muestran en pantalla.

Un saludo.

Como te dice Jesús, nos falta información: es como si voy al taller y le digo al mecánico, "el coche me hace un ruido raro" y le enseño una foto del motor. Malamente podrá averiguar lo que le pasa a mi coche...

Veamos, en TAltas, ¿cuántos registros tienes? Dices que lo que se ve en la imagen es correcto, pero yo lo dudo, pues si sumas los siniestros de los 7 días da un total de 563, mientras que en la parte superior dice "Total registros actual: 567"... Para mí que algo falla...

En TAltas, el campo "Diasemana" ¿qué valores contiene? ¿Los 79,86,80... de la imagen? ¿Ese dato de dónde sale, de una consulta de totales, lo metes a mano...?

Los 7564 registros históricos, ¿están en TAltas o en otra tabla?

La función DMáx() es muy simple de usar, devuelve el valor máximo de un campo (Diasemana) de una tabla (TAltas). Si no le especificas más, busca el valor máximo del campo de toda la tabla, y además, devuelve la primera ocurrencia de ese máximo. Esto quiere decir que si el martes tienes 90 siniestros y el sábado también 90, te devolverá martes (suponiendo que estén ordenados por de lunes a domingo)

En tu caso, y con vistas a que el informe te funcione a largo plazo, deberías especificar como criterios el año y el número de semana, o el año y una fecha inicial y otra final.

Hola y saludo, me pondré el mono de mecánico:

* La diferencia que observas de 563 a 567 son unos campos que corresponde al año pasado y que el campo día de la semana están vacíos, no afectan.

* En TAltas el campo Diasemana es de tipo texto, esta es la instrucción que tengo para calcular los días,

txtLunes = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Lunes'")

txtMartes = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Martes'")

txtMiercoles = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Miercoles'")

txtJueves = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Jueves'")

txtViernes = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Viernes'")

txtSabado = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Sabado'")

txtDomingo = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Domingo'")

* Lo de Históricos es de otra tabla que tengo y que no tiene nada que ver , es a titulo informativo.

Lo que me comentas que si hay dos valores iguales solo muestra uno según

si están ordenados, habría alguna otra posibilidad u otra instrucción de mostrar los dos.

 Un saludo.

En TAltas el campo Diasemana es de tipo texto

Ahí tienes el error, estás buscando el máximo de una cadena de texto, no del campo que tiene los números de siniestros (mira que no darnos cuenta...)

El orden de dicho campo, de menor a mayor es: domingo, jueves, lunes, martes, miércoles, sábado y viernes, por eso Dmax siempre devuelve "Viernes", jajajaja

Prueba con: =DMáx("NumSiniestros";"TAltas";"Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value")

Perdona, pero ahora estoy perdido.La respuesta que me has dado parece correcta, pero lo que no me cuadra es NumSiniestros, no se que debo hacer y donde colocarlo, ya que ese campo no lo tengo en la Tabla. Yo lo que hago es contar del campo Diasemana, los días, que son los datos que salen en el formulario.

Un saludo

OK, supuse que tenías en alguna tabla el dato "número de siniestros". Si no es así, has de hacer una consulta en la que los calcules, usar esa consulta como origen del formulario, y usar la función DMax() en esa consulta.

Como decía en mi explicación anterior, DMax busca el máximo de una campo en una tabla (o consulta), por lo que es necesario que el campo exista en la tabla/consulta, y aparentemente no es el caso.

Si me dices los campos de tu tabla TAltas, con algún ejemplo, miro de indicarte cómo deberías hacer la consulta.

Respuesta
1

Falta información, tendrías que poner cuál es el diseño de la tabla TAltas.

Supongo que los datos se filtran entre la fecha inicial y la fecha final ¿no?.

En la tabla tengo un campo llamado diasemana, y en el formulario tengo insertado en el botón la siguiente instrucción:

'Compruebas que haya una fecha inicial y final
If IsNull(Me.txtfi) Then
    MsgBox "Tienes que seleccionar una fecha inicial", vbOKOnly + vbInformation, "SIN FECHA"
    Me.txtfi.SetFocus
    Exit Sub
End If
If IsNull(Me.txtff) Then
    MsgBox "Tienes que seleccionar una fecha final", vbOKOnly + vbInformation, "SIN FECHA"
    Me.txtff.SetFocus
    Exit Sub
End If

txtLunes = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Lunes'")
txtMartes = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Martes'")
txtMiercoles = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Miercoles'")
txtJueves = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Jueves'")
txtViernes = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Viernes'")
txtSabado = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Sabado'")
txtDomingo = DCount("Diasemana", "TAltas", "Fecha Between Forms!FEstadistica9!txtfi.value and Forms!FEstadistica9!txtff.value and [Diasemana]= 'Domingo'")

End Sub

Un saludo.

Se me ocurren varios caminos, ya que tienes un cuadro de texto para cada día de la semana, te creas un campo de lista y como origen de la fila del mismo le pones lo siguiente:

SELECT TOP 1 DiaSemana
FROM TAltas WHERE Fecha Between [txtfi] And [txtff]
GROUP BY DiaSemana ORDER BY Count(DiaSemana) DESC;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas