SQL RETORNA VAZIO
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.
[Ô] 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.
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.
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])
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.
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.
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?
[Ô] 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?
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:
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.
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