Usuário com melhor resposta
Erro com função NZ

Pergunta
-
Olá pessoal,estou fazendo uma consulta em banco de dados ACCES e em minha consulta se eu rodar pela aplicação dá um erro mas se eu rodar de dentro do access ela retorna normalmente, alguém sabe o q é??Ai vai a consulta para mais detalhes:
SELECT DISTINCT ((select Nz(sum(Valor),0) as saida from tbmovimentacao where tipo ='C' and TbMovimentacao.IdContaMovimenta
da= 2)- (select Nz(sum(Valor),0) as saida from tbmovimentacao where tipo ='D' and TbMovimentacao.IdContaMovimenta da= 2)) +( select TbConta.SaldoInicial from tbconta WHERE tbconta.idconta =2 ) as saldo FROM TbConta INNER JOIN TbMovimentacao ON (TbConta.IdConta = TbMovimentacao.IdContaMovimenta da) o erro q retorna é:
"Função Nz indefinida na expressão"
Obs(O Nz é uma função para eu retornar 0 caso a consulta tenha resultado nulo, já que estou fazendo soma)
Respostas
-
-
é isso ai, deu certo com o iff, não sei o porquê desse mistério mas deu certo. Obrigado
Segue o código correto para ajudar quem precisar:
SELECT DISTINCT (select IIF(iSNULL(sum(Valor)),0,sum(Valor) ) as saida from tbmovimentacao where tipo ='C' and TbMovimentacao.IdContaMovimentada= 2) - (select IIF(iSNULL(sum(Valor)),0,sum(Valor)) as entrada from tbmovimentacao where tipo ='D' and TbMovimentacao.IdContaMovimentada= 2) +(select TbConta.SaldoInicial from tbconta WHERE tbconta.idconta =2 ) AS saldo FROM TbConta INNER JOIN TbMovimentacao ON TbConta.IdConta = TbMovimentacao.IdContaMovimentada
Todas as Respostas
-
-
é isso ai, deu certo com o iff, não sei o porquê desse mistério mas deu certo. Obrigado
Segue o código correto para ajudar quem precisar:
SELECT DISTINCT (select IIF(iSNULL(sum(Valor)),0,sum(Valor) ) as saida from tbmovimentacao where tipo ='C' and TbMovimentacao.IdContaMovimentada= 2) - (select IIF(iSNULL(sum(Valor)),0,sum(Valor)) as entrada from tbmovimentacao where tipo ='D' and TbMovimentacao.IdContaMovimentada= 2) +(select TbConta.SaldoInicial from tbconta WHERE tbconta.idconta =2 ) AS saldo FROM TbConta INNER JOIN TbMovimentacao ON TbConta.IdConta = TbMovimentacao.IdContaMovimentada
-
-
-
-
-
Olá pessoal,
Também passei por uma situação idêntica. Depois de explorar e pesquisar muito cheguei à seguinte conclusão:
A função Nz é muito útil mas um pouco instável (pelo menos no access 2003).
Ela por vezes não acusa qualquer erro, nem devolve os valores pretendidos, ficando os campos dos resultados NULOS.
Isto acontece nas seguintes situações:
- Quando mandas calcular com base em campos já seleccionados (e visíveis) na consulta (esta situação só dá erro às vezes);
- Quando ao campo do "cálculo personalizado" dás um nome de um campo já existente na base de dados (mesmo que não esteja visìvel na consulta).
(ex: Select Vencimentos.[NºFuncionário], Vencimentos.Valor, Nz(Vencimentos.Valor,0) * Nz(Vencimentos.NºDias,0) As Valor
Soluções: Dás um nome diferente ao cálculo que mandaste fazer (em vez de AS Valor, chamas-lhe por exemplo AS Total) e/ou oculta da consulta os campos que vais utilizar no cálculo (omite Vencimentos.Valor da consulta, passando só a ser Select Vencimentos.[NºFuncionário], Nz(Vencimentos.Valor,0) * Nz(Vencimentos.NºDias,0) As Total).
Como eu demorei algumas horas para ver que a função Nz por vezes apresenta erro nestas situações, deixo aqui o meu contributo, para todos os que daqui para a frente necessitem de usar esta função, tenham em atenção as situações que descrevi.
Bom trabalho.
-