Tenho um banco de dados Access para um projeto de trabalho, infelizmente não posso compartilhar muitos detalhes devido à natureza do trabalho. Mas basicamente eu tenho uma tabela de ações que precisam ser realizadas, cada ação tem um prazo e tenho uma tabela que conta quantas ações estão vencidas e concluídas em cada mês, usando a lógica abaixo:
Group by Month([Due Date])
Count [Due Date]
Para uma consulta e o mesmo para as datas concluídas em outra consulta. Em seguida, tenho uma consulta final que usa a consulta de datas de vencimento, uma consulta de datas concluídas e uma tabela de meses do ano (caso contrário, os meses vazios não serão exibidos). Então eu tenho o seguinte:
Nz(Due Dates Totals.Count,0)
Nz(Completed Dates Totals.Count,0)
Calendar.Month Number
Calendar.Month Name
(O Nz
acima é para que eu não tenha espaços vazios no meu relatório)
Meu relatório então usa o número do mês para classificar e agrupar, o nome do mês para exibir o mês aos usuários e uma pequena tabela com as ações devidas e o total de ações. Em seguida, tenho uma formatação condicional na tabela para que, se as ações concluídas forem menores que as ações devidas, ela será destacada em vermelho, se forem iguais, será verde e mais ações concluídas do que as devidas significa que o campo 'concluído' será azul.
Isso funciona bem, a menos que um dos números tenha dois dígitos; nesse caso, ele compara apenas o primeiro dígito de cada valor, por exemplo19 < 2
Tentei comparar o valor do campo com a contagem de vencimentos da própria consulta e compará-lo com o valor do campo no relatório e ambos têm o mesmo problema. Meu palpite é que eles estão sendo comparados como strings e não como números, mas não sei como forçar a consulta a armazenar a contagem como um número.
Obrigado por qualquer ajuda. (E por falar nisso, tem mais tabelas e afins no banco de dados, o Excel não é a ferramenta certa para esse trabalho).
Responder1
Se o MS Access estiver interpretando um valor numérico como uma string, você poderá coagir/converter o valor da string para um tipo de dados numérico usando um dos seguintesfunções de conversão de tipo, cuja escolha dependerá obviamente da natureza dos seus dados:
CCur
(para moeda)CDbl
(dobrar)CDec
(para decimal)CInt
(para inteiro)CLng
(para longo)CSng
(para solteiro)
Como você parece estar trabalhando com números inteiros, sugiro usar ou CInt
, se seus valores provavelmente excederem 32767 (2 15 -1), CLng
.
Portanto, seu código pode se tornar:
CInt(Nz([Due Dates Totals].Count,0))
CInt(Nz([Completed Dates Totals].Count,0))
Calendar.[Month Number]
Calendar.[Month Name]
Responder2
Encontrei a solução, multipliquei as Nz()
funções pelas 1
quais os forcei a serem números e não strings.
por exemplo, em vez de
Nz(Due Dates Totals.Count,0)
eu usei
1 * Nz(Due Dates Totals.Count,0)