Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafa 1850

[Resolvido] Função Excluir em um grid

Recommended Posts

Função Excluir em uma Tabela

 

olá galera.

bem estou com um problema na hora de excluir os dados de uma linha da tabela.

 

situação:

tenho uma tabela de classes de almoxarifado. fiz o excluir. mas quando aperto o botao excluir ele pergunta se deseja excluir realmente se aperta sim ele exclui. ateh ae perfeito! mas depois de excluir ele gera uma mensagem de erro e em seguida o sistema continua normnal e o efeito desejado obtem sucesso.

mas não queria esta msg de erro aparecendo. e nao consigo soluciona-la

eis a msg:

 

system.nullReferenceException: object reference not set to an instance of an object.

 

eis o codigo:

Na classe da tabela:

Public Sub Excluir()
        Dim strQuery As New StringBuilder

        strQuery.Append(" DELETE FROM " & _Tabela & " ")
        strQuery.Append(" WHERE Id = " & _Id & " ")

        Try
            cldBancoDados.ExecuteNonQuery(My.Settings("Conexãobd"), CommandType.Text, strQuery.ToString, Nothing)
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Sub

no form da tabela

Public Sub tsbExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbExcluir.Click
        Dim j As Integer
        Dim IdLocal As Integer
        If dgv.Rows.Count <= 0 Then
            MessageBox.Show("Grade não tem registro para ser excluído", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        Else
            If dgv.SelectedRows.Count = 0 Then
                MessageBox.Show("Grade não tem registro selecionado para ser excluído", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            Else
                If (MessageBox.Show("Registros selecionados serão excluídos" & Chr(13) & "Confirma?", Me.Text, MessageBoxButtons.YesNo, _
                         MessageBoxIcon.Question) = Windows.Forms.DialogResult.No) Then
                    Exit Sub
                Else
                    For j = 0 To dgv.SelectedRows.Count - 1
                        IdLocal = dgv.SelectedRows(j).Cells("id").Value
                        Dim cldTabela1 As New cldTabela1
                        cldTabela1.Tabela = _Tabela
                        cldTabela1.Id = IdLocal
                        If cldTabela1.EmUso Then
                            MessageBox.Show("Essa descrição está sendo usada na tabela de produtos" & Chr(13) & _
                            "E não pode ser excluída" & Chr(13) & Chr(13) & _
                            "Voce pode marcar esse item", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                            Exit Sub
                        End If
                        cldTabela1.Excluir()

                    Next
                    CarregaGrid()
                    PosicionaGrid()
                End If
            End If
        End If
    End Sub
e o EMUSO que serve para checar se estah em uso ou nao o item antes de excluir

Public Function EmUso() As Boolean
        Dim strQuery As New StringBuilder
        strQuery.Append("SELECT Id FROM Produtos ")

        If _Tabela = "Classes" Then
            strQuery.Append("WHERE idClasses = " & _Id & " ")
        Else
            strQuery.Append("WHERE idUnidades = " & _Id & " ")
        End If

        EmUso = False

        Try
            Dim Identificacao As String = ""
            Identificacao = cldBancoDados.ExecuteScalar(My.Settings("Conexãobd"), CommandType.Text, strQuery.ToString, Nothing)
            If Not IsNothing(Identificacao) And Identificacao.Length > 0 Then EmUso = True

        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Function

grande abraço

rafa[]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em qual linha deu o erro?

 

Abraços...

 

aaa esqueci de falar.

eh q no sub tsbexcluir_click

a operação estah ignorando esta parte

If cldTabela1.EmUso Then
                            MessageBox.Show("Essa descrição está sendo usada na tabela de produtos" & Chr(13) & _
                            "E não pode ser excluída" & Chr(13) & Chr(13) & _
                            "Voce pode marcar esse item", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                            Exit Sub
                        End If
                        cldTabela1.Excluir()

o erro estah ai. se eu comento isso, nao da erro... mas eh preciso esse IF, pois se EmUso for = true ele deve sair da Public Sub tsbExcluir_Click e nao excluir nada. como mostra no codigo

só que ele estah 'ignorando' este if. e mostrando uma msg de erro. ele exclui e logo após mostra msg de erro...

 

eh isso

gostaria de saber como q a operação dentro do FOR nao ignore o EmUso e veja se eh true ou false, se for true ele entra no IF e depsois sai da sub

false ele continua o for e delete .

 

grande abraço

 

rafa[]=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

[RESOLVIDO]

Olá galera. mais uma vez dei recomeçei do zero q consegui rodar.

eu havia esquecido de um 'detalhe' HAHAHAHA

vou por o codigo ae pra que os iniciantes, como eu, entendam a duvida q existia e a simples solução.

 

grande abraço.

 

a unica coisa que mudou<> farei um antes e depois.

ANTES

Public Function EmUso() As Boolean
        Dim strQuery As New StringBuilder
        strQuery.Append("SELECT Id FROM Produtos ")

        If _Tabela = "Classes" Then
            strQuery.Append("WHERE idClasses = " & _Id & " ")
        Else
            strQuery.Append("WHERE idUnidades = " & _Id & " ")
        End If

        EmUso = False

        Try
            Dim Identificacao As String = ""
            Identificacao = cldBancoDados.ExecuteScalar(My.Settings("Conexãobd"), CommandType.Text, strQuery.ToString, Nothing)
            If Not IsNothing(Identificacao) And Identificacao.Length > 0 Then EmUso = True

        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Function

 

Depois

Public Function EmUso() As Boolean

        EmUso = False
        Dim strQuery As New StringBuilder
        strQuery.Append(" SELECT Id FROM Produtos ")
        'Query------
        If _Tabela = "Classes" Then
            strQuery.Append("WHERE idClasses = " & _Id & " ")
        Else
            strQuery.Append("WHERE idUnidades = " & _Id & " ")
        End If

        Dim Identificacao As String = ""


        Try
            Identificacao = cldBancoDados.ExecuteScalar(My.Settings("Conexãobd"), CommandType.Text, strQuery.ToString, Nothing)
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try


        If Not IsNothing(Identificacao) Then
            EmUso = True
        End If

    End Function

agora ele reconhece o valor True ou False na chamada do botao excluir e faz tudo com sucesso!

grande abraço e até mais ve :*,

 

Rafa[]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.