Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Paulo#

Erro: a conversão do tipo dbnull no tipo string não é válida

Mensagens Recomendadas

Paulo#    0
Paulo#

Estou com uma dúvida referentes a emissão da última fatura em uma relação de faturas de um programa de controle de estoque no momento de sua inserção. A mensagem acima (título) aparece quando clico no botão finalizar. Deveria me mostrar a última fatura do relatório de faturas não todas, e sem a mensagem de erro.

Abaixo o código. Sou amador na area. estou começando, se puderem me ajudar agradeceria muito. Segue abaixo a linha de programação:

Private Sub BTN_finalizar_Click(sender As Object, e As EventArgs) Handles BTN_finalizar.Click

        Dim numero As Integer

        conectar.Open()
        sql = "Select * from faturas where nfatura = '" & TB_nfatura.Text & "'"
        Adaptar = New SqlDataAdapter(sql, conectar)
        tabela = New DataTable()
        Adaptar.Fill(tabela)
        numero = tabela.Rows.Count
        conectar.Close()

obterultimoregistro()
        F_relfaturas.Show()

Private Sub obterultimoregistro()
        Try
            conectar.Open()
            Dim comando As New SqlCommand
            comando.CommandText = "select MAX (nfatura) from faturas"
            comando.CommandType = CommandType.Text
            comando.Connection = conectar
            Adaptar.SelectCommand = comando
            conectar.Close()
            tabela.Clear()
            Adaptar.Fill(tabela)

            Dim nfatura As String = tabela.Rows.Item(0).Item(0)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    71
M6

Pelo que me parece, estás a tentar converter um null de base de dados para uma string.

Tens de verificar se o valor é null antes de fazer a conversão.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Paulo#    0
Paulo#

bem. foi o que fiz, mas acho que terei que refazer a tabela de banco de dados novamente.vou ver no que dá.

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nomadeback    0
Nomadeback

Não utilize "select MAX" ou "select Sum" sem antes verificar se há registro no banco de dados com o filtro que você especificou, quando a STRING não encontra nada ela retorna um "DBnull", portanto faça assim .

Public Sub Total_Entradas()
        Dim data As Date
        Dim mes As Integer
        data = Form1.dataIni.Value
        mes = Month(data)
        Using con As OleDbConnection = GetConnection()
            Try
                con.Open()
                Dim sql As String = "SELECT*FROM [Entradas]  WHERE MONTH (Data) = " & mes 'Seleciona registros no banco de dados
                Dim cmd As OleDbCommand = New OleDbCommand(sql, con)

                Dim Valor As Object

                Valor = cmd.ExecuteScalar 'Recebe registro

                If Valor <> 0 Then 'Verifica se existe dados no registro, se ouver ele soma se naõ...
                    Dim sqll As String = "SELECT SUM(Valor) FROM [Entradas]  WHERE MONTH (Data) = " & mes
                    Dim cmdd As OleDbCommand = New OleDbCommand(sqll, con)

                    Dim Total As Object
                    Total = cmdd.ExecuteScalar
                    Form1.tbTotal.Text = Total
                Else
                    Form1.tbTotal.Text = "R$ 0,00" '...Preenche textbox com um texto
                End If

            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()

            End Try
        End Using

    End Sub

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos
9 horas atrás, Nomadeback disse:

Não utilize "select MAX" ou "select Sum" sem antes verificar se há registro no banco de dados com o filtro que você especificou, quando a STRING não encontra nada ela retorna um "DBnull", portanto faça assim .

Não me parece que estar a fazer duas queries, quando uma é suficiente, seja a solução apropriada.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
FreiNando    22
FreiNando

Penso que o erro não é na base de dados nem na query, mas aqui:

Dim nfatura As String = tabela.Rows.Item(0).Item(0)

Verifica se é null:

If tabela.Rows.Item(0).Item(0) IsNot System.DBNull.Value Then

    'copiar a celula para a variável

End If

Já agora se o nfatura na base de dados é Integer, então no Vb convem ser também Integer.

Poderás ter problemas quando chegar a números maiores que 1000 e o teu sistema estiver configurado para separador de milhares com (.)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade