none
IsDBNull - Campo integer vazio dá erro - Urgente ! RRS feed

  • Pergunta

  • Pessoal , estou com o seguinte erro. Faço uma conexão com o banco de dados Access conforme códio abaixo

     Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)

                oReader = oComando.ExecuteReader

                While oReader.Read

                    registro = New registroVO
                  O erro aparece aqui. O campo oReader("ID_RELATORIO_RECIBO") é inteiro e encontra-se vazio. Com o código abaixo, dá erro "A conversão do tipo 'DBNull' no tipo 'Integer' não é válida"

                    registro.RELATORIO_RECIBO = IIf(Not IsDBNull(oReader("ID_RELATORIO_RECIBO")), relatorio_recibo.getRelatorioRecibo(oReader("ID_RELATORIO_RECIBO")), New relatorio_reciboVO)

    Agora com a condição abaixo a aplicação funciona normalmente. A condição 1 e 2 não são equivalentes ? Náo entendi o que está de errado.

                                    If Not IsDBNull(oReader.Item("ID_RELATORIO_RECIBO")) Then

                        registro.RELATORIO_RECIBO = relatorio_recibo.getRelatorioRecibo(oReader("ID_RELATORIO_RECIBO"))

                    Else

                        registro.RELATORIO_RECIBO = New relatorio_reciboVO
                    End If

    terça-feira, 6 de novembro de 2012 13:53

Respostas

  • o teste tem de estar antes e nao depois.

    isto faz sentido:    If Not IsDBNull(oReader.Item("ID_RELATORIO_RECIBO")) Then

    registro.RELATORIO_RECIBO = relatorio_recibo.getRelatorioRecibo(oReader("ID_RELATORIO_RECIBO"))

    Isto chama-se logica de programacao.

    Se voce quer abrir uma porta a primeira coisa que tens de saber e se existe chave. depois voce veja se a chave e compativel com a porta, depois voce tenta abrir. e se nao abrir faz algo e se abrir tambem faz algo.

    tens de estudar algorithmic 


    A flower cannot blossom without sunshine, and man cannot live without love.

    terça-feira, 6 de novembro de 2012 14:25
    Moderador
  • Você tem razão. Foi um lapso ridículo meu. De qualquer forma, agradeço a ajuda.
    terça-feira, 6 de novembro de 2012 15:32

Todas as Respostas

  • o teste tem de estar antes e nao depois.

    isto faz sentido:    If Not IsDBNull(oReader.Item("ID_RELATORIO_RECIBO")) Then

    registro.RELATORIO_RECIBO = relatorio_recibo.getRelatorioRecibo(oReader("ID_RELATORIO_RECIBO"))

    Isto chama-se logica de programacao.

    Se voce quer abrir uma porta a primeira coisa que tens de saber e se existe chave. depois voce veja se a chave e compativel com a porta, depois voce tenta abrir. e se nao abrir faz algo e se abrir tambem faz algo.

    tens de estudar algorithmic 


    A flower cannot blossom without sunshine, and man cannot live without love.

    terça-feira, 6 de novembro de 2012 14:25
    Moderador
  • Você tem razão. Foi um lapso ridículo meu. De qualquer forma, agradeço a ajuda.
    terça-feira, 6 de novembro de 2012 15:32