none
Erro com função NZ RRS feed

  • 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.IdContaMovimentada= 2)-  (select Nz(sum(Valor),0) as saida 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)

     

    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)
    quinta-feira, 8 de junho de 2006 13:05

Respostas

  • Olá Alex,

    Já passei pelo o mesmo problema.

    Troque a função Nz pela a função ISNULL.

    Exemplo:

    IIF(ISNULL(Valor1), 0, Valor1) + IIF(ISNULL(Valor2), 0, Valor2) AS Valor...

    Abs.

    quinta-feira, 8 de junho de 2006 13:29
  • é 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

     

    quinta-feira, 8 de junho de 2006 13:49

Todas as Respostas

  • Olá Alex,

    Já passei pelo o mesmo problema.

    Troque a função Nz pela a função ISNULL.

    Exemplo:

    IIF(ISNULL(Valor1), 0, Valor1) + IIF(ISNULL(Valor2), 0, Valor2) AS Valor...

    Abs.

    quinta-feira, 8 de junho de 2006 13:29
  • é 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

     

    quinta-feira, 8 de junho de 2006 13:49
  • Alex,

    Provavelmente não foi o IIF que resolveu o seu problema, mas sim a função ISNULL, pois, esta função é utilizado para se caso o valor de retorno for null, você pode especificar um valor para ser atribuído ao resultado.

    quinta-feira, 8 de junho de 2006 16:33
  • IIF no sql server ?

     

    quinta-feira, 8 de junho de 2006 19:25
  • Não.

    O exemplo está em access

    quinta-feira, 8 de junho de 2006 19:52
  • Desculpe nao li direito o primeiro post
    sexta-feira, 9 de junho de 2006 12:29
  • 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.

    sexta-feira, 20 de agosto de 2010 19:27
  • Muito obrigado pela dica!
    segunda-feira, 30 de maio de 2022 01:32