Rafa 1850 0 Denunciar post Postado Outubro 28, 2009 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 Sube 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
quintelab 91 Denunciar post Postado Outubro 28, 2009 Em qual linha deu o erro? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Rafa 1850 0 Denunciar post Postado Outubro 28, 2009 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
Rafa 1850 0 Denunciar post Postado Outubro 29, 2009 [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