none
Transformar NULL em 0 RRS feed

  • Pergunta

  • Prezados Colegas,

    Estou com um probleminha que gostaria que me ajudassem a resolver.
    O valor de um determinado campo que estou lendo na tabela em um BD no SQl Server 2005, e NULL e quero que ele seja transformado em 0 (Zero).

    Eis o codigo que estou usando:

     str = "SELECT OrcCodigoControle, OrcValor, OrcHTD, OrcInicioPeriodo, OrcTerminoPeriodo FROM Orcamento WHERE OrcCodigo =" & Request.QueryString("Codigo")
     Set rsOrcamento = Server.CreateObject("Adodb.Recordset")
     rsOrcamento.open str, Conexao, 1, 3
     
     '---------------------------------------------------------------
     'Recebe as HORAS TRABALHADAS DIA
     if rsOrcamento.recordcount = 1 Then
      Htd = Cint(rsOrcamento("OrcHTD"))
    'Tentei aqui, transformar o NULL em 0, para ser testado na linha abaixo.
     
      if Htd = 0 Then
       'Testo aqui, se o valor de Htd e 0, entao na linha abaixo ele atribui 1 ao valor de HTD, pois HTD sera o divisor em uma outra linha do sistema
       Htd=1
      end if
     end if
     '-----------------------

    O sistema me apresentou a seguinte msg de erro:

    Microsoft VBScript runtime error '800a005e'  Invalid use of Null: 'Cint'

    Entendi que o Cint nao deve ser utilizado para a conversao do valor NULL em um numero.

    Como e que faco entao para transformar o valor NULL em 0 ?

    Aguardo sua ajuda.

     


    Inciaindo em C#
    quarta-feira, 22 de abril de 2009 12:11

Respostas

  • Januário,

         Você deve utilizar a função ISNULL do SQL Server.

    str = "SELECT OrcCodigoControle, OrcValor, ISNULL(OrcHTD, 0) as OrcHTD, OrcInicioPeriodo, OrcTerminoPeriodo FROM Orcamento WHERE OrcCodigo =" & Request.QueryString("Codigo")
     Set rsOrcamento = Server.CreateObject("Adodb.Recordset")
     rsOrcamento.open str, Conexao, 1, 3

        Também notei pelo seu post que você utiliza o valor de OrcHTD para a divisão, testando se ele é zero e substituindo por 1. Talvez seja até melhor voce utilizar o ISNULL(OrcHTD, 1) onde o SQL irá substituir os valores nulos por 1 e não precisar fazer o teste se OrcHTD é 0...


    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    quarta-feira, 22 de abril de 2009 12:19
    Moderador

Todas as Respostas

  • Januário,

         Você deve utilizar a função ISNULL do SQL Server.

    str = "SELECT OrcCodigoControle, OrcValor, ISNULL(OrcHTD, 0) as OrcHTD, OrcInicioPeriodo, OrcTerminoPeriodo FROM Orcamento WHERE OrcCodigo =" & Request.QueryString("Codigo")
     Set rsOrcamento = Server.CreateObject("Adodb.Recordset")
     rsOrcamento.open str, Conexao, 1, 3

        Também notei pelo seu post que você utiliza o valor de OrcHTD para a divisão, testando se ele é zero e substituindo por 1. Talvez seja até melhor voce utilizar o ISNULL(OrcHTD, 1) onde o SQL irá substituir os valores nulos por 1 e não precisar fazer o teste se OrcHTD é 0...


    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    quarta-feira, 22 de abril de 2009 12:19
    Moderador
  • Roberto,

    Obrigado pela ajuda. Funcionou direitinho e fiz a mudanca q vc sugeriu.
    Obrigado.
    Inciaindo em C#
    quarta-feira, 22 de abril de 2009 12:35