Jump to content
Paulo#

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

Recommended Posts

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

 

Share this post


Link to post
Share on other sites
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.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Paulo#

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

 

Share this post


Link to post
Share on other sites
M6

Refazeres a tabela da base de dados não te vai resolver o problema do VB...


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
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

 

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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 (.)

  • Vote 1

O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.