Tengo una base de datos en Access para un proyecto de trabajo, lamentablemente no puedo compartir demasiados detalles debido a la naturaleza del trabajo. Pero básicamente tengo una tabla de acciones que deben llevarse a cabo, cada acción tiene una fecha de vencimiento y tengo una tabla que cuenta cuántas acciones vencen y se han completado en cada mes, usando la siguiente lógica:
Group by Month([Due Date])
Count [Due Date]
Para una consulta, y lo mismo para las fechas completadas en otra consulta. Luego tengo una consulta final que utiliza la consulta de fechas de vencimiento, una consulta de fechas completadas y una tabla de meses del año (de lo contrario, no se muestran los meses vacíos). Entonces tengo lo siguiente:
Nz(Due Dates Totals.Count,0)
Nz(Completed Dates Totals.Count,0)
Calendar.Month Number
Calendar.Month Name
(Lo Nz
de arriba es para que no tenga espacios vacíos en mi informe)
Luego, mi informe utiliza el número de mes para ordenar y agrupar, el nombre del mes para mostrar el mes a los usuarios y una pequeña tabla con las acciones pendientes y el total de acciones. Luego tengo formato condicional en la tabla de modo que si las acciones completadas son menores que las acciones debidas, se resalta en rojo, si son iguales, es verde, y más acciones completadas que las debidas significan que el campo "completado" es azul.
Esto funciona bien a menos que uno de los números sea de dos dígitos, en cuyo caso solo compara el primer dígito de cada valor, por ejemplo19 < 2
Intenté comparar el valor del campo con el recuento vencido de la consulta misma y compararlo con el valor del campo en el informe y ambos tienen el mismo problema. Supongo que los está comparando como cadenas y no como números, pero no sé cómo forzar la consulta para que almacene el recuento como un número.
Gracias por cualquier ayuda. (Y por cierto, hay más tablas y similares en la base de datos, Excel no es la herramienta adecuada para este trabajo).
Respuesta1
Si MS Access interpreta un valor numérico como una cadena, puede forzar/convertir el valor de la cadena a un tipo de datos numérico utilizando uno de los siguientesfunciones de conversión de tipos, cuya elección dependerá obviamente de la naturaleza de sus datos:
CCur
(a moneda)CDbl
(para duplicar)CDec
(a decimales)CInt
(a un número entero)CLng
(a largo)CSng
(al soltero)
Dado que parece estar trabajando con números enteros, sugeriría usar o CInt
, si es probable que sus valores excedan 32767 (2 15 -1), CLng
.
Entonces tu código podría convertirse en:
CInt(Nz([Due Dates Totals].Count,0))
CInt(Nz([Completed Dates Totals].Count,0))
Calendar.[Month Number]
Calendar.[Month Name]
Respuesta2
Encontré la solución, multipliqué las Nz()
funciones por 1
lo que las obligaba a ser números y no cadenas.
por ejemplo, en lugar de
Nz(Due Dates Totals.Count,0)
solía
1 * Nz(Due Dates Totals.Count,0)