SQL RETORNA VAZIO

IRENKO 25/09/2014 17:33:23
#441509
Msql = [Ô] SELECT Dados.[Locatario], Dados.[valor], TbData.[Id], TbData.[Vencimento],DateDiff([ô]d[ô], TbData.Vencimento, now())AS Dias,DateDiff([ô]m[ô], TbData.Vencimento, now())AS Meses,Sum(TbData.[Condominio] + TbData.[IPTU]+ TbData.[Luz]) AS ValorImposto [Ô] + _
[Ô] FROM (Dados INNER JOIN TbData ON val(TbData.[Id]) = val(Dados.[Id])) [Ô] + _
[Ô] WHERE (((TbData.[Vencimento]) < now()-1) and (TbData.[Status] is null)) [Ô] + _
[Ô] GROUP BY Dados.[Locatario], Dados.[valor], TbData.[Vencimento], TbData.[Id] ORDER BY Dados.[Locatario];[Ô]

A consulta acima esta me deixando maluco onde esta em negrito. Estou somando os campos da tabela, porem não me retorna nada, creio que possa ser que exista campos nulos só que não estou sabendo tratar isso na sql!

Se eu tiro o TbData.[Luz] da soma me traz resultado mas com ele some tudo. é a primeira vez que estou usando esse tipo de soma em campos e não sei se esta correta. Existe limite? VB6 e o banco é access.
FFCOUTO 25/09/2014 18:24:39
#441510
Resposta escolhida
Uma dica, deixe esse campo com a propriedade valor padrão em 0.
Dessa forma mesmo que você não tenha que informar o seu valor será e não causará o erro.

Para tratar isso na SQL você tem de usar a função IIF do próprio MSAccess.
IIF(IsNull(TbData.[Luz]), 0, TbData.[Luz])

IRENKO 26/09/2014 09:04:29
#441518
FFCOUTO, fiz como vc sugeriu, coloquei o valor padão 0 e mudei a linha abaixo:

Sum(TbData.[Condominio] + TbData.[IPTU]+ IIF(IsNull(TbData.[Luz]), 0, TbData.[Luz])) AS ValorImposto

Os valores dos campos TbData.[Condominio] e TbData.[IPTU] apareceu no grid com a soma correta mas não somou o TbData.[Luz]) e la na tabela tem um cara com valor nesse campo! Que coisa hem! Não sei oque esta ocorrendo.
IRENKO 26/09/2014 10:27:21
#441521
Msql = [Ô] SELECT Dados.[Locatario], Dados.[valor], TbData.[Id], TbData.[Vencimento],DateDiff([ô]d[ô], TbData.Vencimento, now())AS Dias,DateDiff([ô]m[ô], TbData.Vencimento, now())AS Meses,(IIF(IsNull(TbData.[Pagamento1]), 0, TbData.[Pagamento1])+ IIF(IsNull(TbData.[Pagamento2]), 0, TbData.[Pagamento2])+ IIF(IsNull(TbData.[IPTU]), 0, TbData.[IPTU])+ IIF(IsNull(TbData.[Condominio]), 0, TbData.[Condominio])) AS ValorImposto [Ô] + _
[Ô] FROM (Dados INNER JOIN TbData ON val(TbData.[Id]) = val(Dados.[Id])) [Ô] + _
[Ô] WHERE (((TbData.[Vencimento]) < now()-1) and (TbData.[Status] is null)) [Ô] + _
[Ô] GROUP BY Dados.[Locatario], Dados.[valor], TbData.[Vencimento], TbData.[Id],TbData.[Pagamento1], TbData.[Pagamento2],TbData.[IPTU],TbData.[Condominio] ORDER BY Dados.[Locatario];[Ô]


Acho que resolvi o problema. Conforme acima não precisa usar a função SUM, creio que com ela usa-se apenas para somar a coluna.
Agora, tem jeito de diminuir os IIF?
FFCOUTO 26/09/2014 10:52:57
#441523
Para diminuir os IIF só mesmo zerando os campos nulos da sua tabela. Talvez seja o motivo de quando você usa o Sum não está totalizado o campo Luz corretamente.

Faz um update na sua tabela zerando esse campo quando o mesmo for null. Porque mesmo você alterando o valor padrão para 0, somente os novos registros utilizarão esse valor.

O comando de update ficaria assim:
Update TbData Set Luz = 0 WHERE (Luz Is Null);


Faça backup antes de rodar o comando.

Na sua segunda Sql, você pode remover o Group By, uma vez que ele somente é usado com as funções agregadas como o Sum.
Tópico encerrado , respostas não são mais permitidas